diff --git a/DEPENDENCIES b/DEPENDENCIES index 0bf5f1b26c..8cbbe86c0b 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -6,7 +6,7 @@ cmark-gfm https://github.com/github/cmark-gfm 587a12bb54d95ac37241377e6ddc93ea0e uritemplate-test https://github.com/uri-templates/uritemplate-test 1eb27ab4462b9e5819dc47db99044f5fd1fa9bc7 pyca-cryptography https://github.com/pyca/cryptography 9747d06e83764e7f1ea4c04daf134cb8f861700b wycheproof https://github.com/C2SP/wycheproof 6d7cccd0fcb1917368579adeeac10fe802f1b521 -pcre2 https://github.com/PCRE2Project/pcre2 pcre2-10.47 +pcre2 https://github.com/PCRE2Project/pcre2 pcre2-10.48-RC1 googlebenchmark https://github.com/google/benchmark 378fe693a1ef51500db21b11ff05a8018c5f0e55 libdeflate https://github.com/ebiggers/libdeflate v1.26 unicodetools https://github.com/unicode-org/unicodetools final-17.0-20250910 diff --git a/vendor/pcre2.mask b/vendor/pcre2.mask index 8ed4b40ad6..68b4c4f369 100644 --- a/vendor/pcre2.mask +++ b/vendor/pcre2.mask @@ -5,6 +5,7 @@ AUTHORS.md autogen.sh BUILD.bazel build.zig +build.zig.zon ChangeLog CMakeLists.txt compile @@ -37,6 +38,7 @@ RunGrepTest.bat RunTest RunTest.bat SECURITY.md +SUPPORT-LIFECYCLE.md test-driver vms testdata @@ -44,6 +46,7 @@ m4 doc cmake maint +patches deps/sljit/.github deps/sljit/docs/ deps/sljit/test_src/ @@ -54,11 +57,22 @@ deps/sljit/CMakeLists.txt deps/sljit/GNUmakefile deps/sljit/INTERNAL_CHANGES deps/sljit/README.md +src/config.h.generic +src/config.h.in +src/libpcre2-16.sym.in +src/libpcre2-32.sym.in +src/libpcre2-8.sym.in +src/libpcre2-posix.sym.in +src/pcre2.h.generic +src/pcre2_chartables.c.ebcdic-1047-nl15 +src/pcre2_chartables.c.ebcdic-1047-nl25 src/pcre2_dftables.c src/pcre2_fuzzsupport.c src/pcre2_jit_test.c src/pcre2demo.c src/pcre2grep.c src/pcre2posix.c +src/pcre2posix.h src/pcre2posix_test.c src/pcre2test.c +src/pcre2test_inc.h diff --git a/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c b/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c index 36d301434a..62f7371125 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c +++ b/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c @@ -90,6 +90,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) #ifdef PROT_MAX prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC); #endif +#ifdef PROT_MPROTECT + prot |= PROT_MPROTECT(PROT_EXEC); +#endif size += sizeof(sljit_uw); ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h b/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h index 993f4fe2fa..d43e8ae2aa 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h @@ -133,7 +133,7 @@ extern "C" { nonzero value - FPU is present. */ -/* For further configurations, see the beginning of sljitConfigInternal.h */ +/* For further configurations, see sljitConfigCPU.h and sljitConfigInternal.h */ #ifdef __cplusplus } /* extern "C" */ diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h b/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h index dcf88efbd4..a0d8d44c93 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h @@ -46,6 +46,7 @@ /* #define SLJIT_CONFIG_RISCV_64 1 */ /* #define SLJIT_CONFIG_S390X 1 */ /* #define SLJIT_CONFIG_LOONGARCH_64 */ +/* #define SLJIT_CONFIG_ALPHA_64 1 */ /* #define SLJIT_CONFIG_AUTO 1 */ /* #define SLJIT_CONFIG_UNSUPPORTED 1 */ @@ -68,6 +69,7 @@ + (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ + (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ + (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + + (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ + (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) \ + (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) >= 2 #error "Multiple architectures are selected" @@ -87,6 +89,7 @@ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ && !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) \ && !(defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) #if defined SLJIT_CONFIG_AUTO && !SLJIT_CONFIG_AUTO @@ -134,6 +137,8 @@ #define SLJIT_CONFIG_LOONGARCH_64 1 #elif defined(__s390x__) #define SLJIT_CONFIG_S390X 1 +#elif defined(__alpha__) +#define SLJIT_CONFIG_ALPHA_64 1 #else /* Unsupported architecture */ #define SLJIT_CONFIG_UNSUPPORTED 1 @@ -183,6 +188,78 @@ #define SLJIT_CONFIG_RISCV 1 #elif (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) #define SLJIT_CONFIG_LOONGARCH 1 +#elif (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) +#define SLJIT_CONFIG_ALPHA 1 +#endif + +/*************************/ +/* Endianness detection. */ +/*************************/ + +#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) + +#if defined(SLJIT_CONFIG_ARM) && SLJIT_CONFIG_ARM + +#ifdef __ARM_BIG_ENDIAN +#define SLJIT_BIG_ENDIAN 1 +#else +#define SLJIT_LITTLE_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) + +#ifdef __LITTLE_ENDIAN__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + +#ifdef __MIPSEL__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#ifndef SLJIT_MIPS_REV + +/* Auto detecting mips revision. */ +#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) +#define SLJIT_MIPS_REV 6 +#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 +#define SLJIT_MIPS_REV __mips_isa_rev +#elif defined(__clang__) \ + && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) +/* clang either forgets to define (clang-7) __mips_isa_rev at all + * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) + * and -march=p5600 (MIPS32 R5). + * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 + * (should be set to N exactly) so we cannot rely on this too. + */ +#define SLJIT_MIPS_REV 1 +#endif + +#endif /* !SLJIT_MIPS_REV */ + +#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) + +#define SLJIT_BIG_ENDIAN 1 + +#else + +#define SLJIT_LITTLE_ENDIAN 1 + +#endif + +#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ + +#if (defined(SLJIT_CONFIG_ARM_64) && SLJIT_CONFIG_ARM_64) \ + && (defined(SLJIT_BIG_ENDIAN) && SLJIT_BIG_ENDIAN) + +#undef SLJIT_CONFIG_ARM_64 +#define SLJIT_CONFIG_UNSUPPORTED 1 + #endif #endif /* SLJIT_CONFIG_CPU_H_ */ diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h b/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h index c052434d2f..9c222349c5 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h @@ -54,6 +54,14 @@ SLJIT_UPPER_BITS_ZERO_EXTENDED : 32 bit operations clears the upper bits of destination registers SLJIT_UPPER_BITS_SIGN_EXTENDED : 32 bit operations replicates the sign bit in the upper bits of destination registers SLJIT_UPPER_BITS_PRESERVED : 32 bit operations preserves the upper bits of destination registers + SLJIT_SUBC_SETS_SIGNED : SLJIT_SUBC[32] operation always sets the signed result, so setting + the following status flags after a subtract with carry operation is valid: + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_LESS) + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_GREATER) + SLJIT_SHARED_COMPARISON_FLAGS: the cpu has different instructions for signed and unsigned + comparisons, which sets the same status flags, so passing SLJIT_LESS + or SLJIT_SIG_LESS as an argument has the same effect, and this is true + for all other signed/unsigned comparison type pairs Constants: SLJIT_NUMBER_OF_REGISTERS : number of available registers @@ -100,18 +108,21 @@ SLJIT_TMP_DEST_REG : a temporary register for results, see the rules below SLJIT_TMP_DEST_FREG : a temporary register for float results, see the rules below SLJIT_TMP_DEST_VREG : a temporary register for vector results, see the rules below - SLJIT_TMP_OPT_REG : a temporary register which might not be defined, see the rules below + SLJIT_TMP_OPT_REG : an optional temporary register, see the rules below + SLJIT_TMP_FLAG_REG : an optional temporary register for storing the value of a flag SLJIT_FUNC : calling convention attribute for both calling JIT from C and C calling back from JIT SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (platform independent helper) SLJIT_F64_SECOND(reg) : provides the register index of the second 32 bit part of a 64 bit floating point register when SLJIT_HAS_F64_AS_F32_PAIR returns non-zero Temporary register rules (e.g. SLJIT_TMP_DEST_REG / SLJIT_TMP_OPT_REG): - Sljit tries to emit instructions without using any temporary registers whenever it is possible. - When a single temporary register is needed, it is always the "OPT" register. When two temporary - registers are needed, both the "DEST" and "OPT" are used. The x86-32 does not define an "OPT" - register, and handles all cases without an "OPT" register which requires an "OPT" register - on other architectures. + The sljit compiler avoids using temporary registers, but certain instruction + forms cannot be generated without them. The number of temporary registers + reserved by the compiler depends on the target architecture. An SLJIT_TMP_* + name is assigned to some of these registers, which represents their + SLJIT_TMP_R(i) index. When such register is optional, it might not be + defined on all architectures. For example, the x86-32 code generator does + not use any optional temporary registers. */ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -124,6 +135,13 @@ #include #endif +#ifdef __APPLE__ +#include +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 +#include +#endif +#endif + #ifdef __cplusplus extern "C" { #endif @@ -242,10 +260,6 @@ extern "C" { /* Instruction cache flush. */ /****************************/ -#ifdef __APPLE__ -#include -#endif - /* * TODO: * @@ -291,7 +305,6 @@ extern "C" { /* Supported by all macs since Mac OS 10.5. However, it does not work on non-jailbroken iOS devices, although the compilation is successful. */ -#include #define SLJIT_CACHE_FLUSH(from, to) \ sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from))) @@ -359,7 +372,8 @@ typedef int sljit_sw; && !(defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) + && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) #define SLJIT_32BIT_ARCHITECTURE 1 #define SLJIT_WORD_SHIFT 2 typedef unsigned int sljit_uw; @@ -428,6 +442,12 @@ typedef double sljit_f64; #define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT #define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT #define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +/* CVTTQ/SVC uses software completion; sljit_emit_fop1_conv_sw_from_f64 + emits FCMPLT/CMPTEQ + CMOVNE/CMOVEQ fixups to enforce saturation. */ +#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT +#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT +#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO #else #error "Result for float to integer conversion is not defined" #endif @@ -451,55 +471,6 @@ typedef double sljit_f64; /* Endianness detection. */ /*************************/ -#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) - -/* These macros are mostly useful for the applications. */ -#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) - -#ifdef __LITTLE_ENDIAN__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) - -#ifdef __MIPSEL__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#ifndef SLJIT_MIPS_REV - -/* Auto detecting mips revision. */ -#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) -#define SLJIT_MIPS_REV 6 -#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 -#define SLJIT_MIPS_REV __mips_isa_rev -#elif defined(__clang__) \ - && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) -/* clang either forgets to define (clang-7) __mips_isa_rev at all - * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) - * and -march=p5600 (MIPS32 R5). - * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 - * (should be set to N exactly) so we cannot rely on this too. - */ -#define SLJIT_MIPS_REV 1 -#endif - -#endif /* !SLJIT_MIPS_REV */ - -#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) - -#define SLJIT_BIG_ENDIAN 1 - -#else -#define SLJIT_LITTLE_ENDIAN 1 -#endif - -#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ - /* Sanity check. */ #if (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN) && (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN) #error "Exactly one endianness must be selected" @@ -616,6 +587,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) @@ -640,6 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) @@ -653,6 +626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) @@ -670,6 +644,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) @@ -691,6 +666,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw)) #endif /* SLJIT_CONFIG_PPC_64 || _AIX */ #define SLJIT_UPPER_BITS_IGNORED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -709,10 +685,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 3 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) @@ -728,6 +706,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_VECTOR_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_TMP_DEST_VREG SLJIT_TMP_VR0 #define SLJIT_LOCALS_OFFSET_BASE 0 @@ -735,6 +714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -772,6 +752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_PRESERVED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) @@ -783,11 +764,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 + +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) + +/* Alpha has 32 general registers (r31 hardwired zero) and 32 float registers + (f31 hardwired zero). Reserved: r31 (zero), r30 (sp), r29 (gp, unused by the + JIT). Backend temporaries: r24, r25, r26 (ra), r27 (pv), r28 (at). Exposed: + 17 scratch (r0-r8, r16-r23) + 7 callee-saved (r9-r15). */ +#define SLJIT_NUMBER_OF_REGISTERS 24 +#define SLJIT_NUMBER_OF_SAVED_REGISTERS 7 +#define SLJIT_NUMBER_OF_TEMPORARY_REGISTERS 5 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 28 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 +#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 +#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 +#define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 +#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 +/* One word is reserved at the bottom of the frame: CPUs without the FIX + extension have no register to register move between the integer and float + register files, so values are bounced through this slot instead. */ +#define SLJIT_LOCALS_OFFSET_BASE ((sljit_s32)sizeof(sljit_sw)) +#define SLJIT_MASKED_SHIFT 1 +#define SLJIT_MASKED_SHIFT32 1 +#define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) @@ -894,7 +902,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ || (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) \ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) + || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) \ + || (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) #define SLJIT_HAS_STATUS_FLAGS_STATE 1 #endif diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c b/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c index 633e794b3b..e8c77f8564 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c @@ -2484,7 +2484,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((type & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(type, compiler->last_flags)); @@ -2746,7 +2746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_select(struct sljit_compi CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((cond & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(cond, compiler->last_flags)); @@ -3495,6 +3495,8 @@ static void sljit_reset_read_only_buffers(struct sljit_read_only_buffer *buffers # include "sljitNativeS390X.c" #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) # include "sljitNativeLOONGARCH_64.c" +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +# include "sljitNativeALPHA_64.c" #endif /* SLJIT_CONFIG_X86 */ #include "sljitSerialize.c" @@ -3737,7 +3739,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem_update(struct sljit_compiler * #endif /* !SLJIT_CONFIG_ARM && !SLJIT_CONFIG_PPC */ #if !(defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ - && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ + && !(defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, @@ -3749,7 +3752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); } -#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS */ +#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS && !SLJIT_CONFIG_ALPHA */ #if !(defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ && !(defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h b/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h index c5bf1287c3..019ad60ea4 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h @@ -1167,7 +1167,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c #define SLJIT_OP0_BASE 0 /* Flags: - (does not modify flags) - Note: breakpoint instruction is not supported by all architectures (e.g. ppc) + Triggers a trap that could be intercepted by a debugger + Note: might not be supported by all architectures, It falls back to SLJIT_NOP in those cases. */ #define SLJIT_BREAKPOINT (SLJIT_OP0_BASE + 0) /* Flags: - (does not modify flags) @@ -1761,7 +1762,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -/* Unlike other flags, sljit_emit_jump may destroy the carry flag. */ +/* Unlike other comparison types, sljit_emit_jump may destroy zero flag + when carry flag is specified (powerpc limitation). Furthermore, + SLJIT_CARRY represents that the first operand is unsigned less than + the second operand after an SLJIT_SUB / SLJIT_SUBC operation. */ #define SLJIT_CARRY 12 #define SLJIT_SET_CARRY SLJIT_SET(SLJIT_CARRY) #define SLJIT_NOT_CARRY 13 @@ -2023,11 +2027,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com /* The following flags are used by sljit_emit_mem() and sljit_emit_fmem(). */ -/* Load or stora data from an unaligned (byte aligned) address. */ +/* Load or store data from an unaligned (byte aligned) address. */ #define SLJIT_MEM_UNALIGNED 0x000400 -/* Load or stora data from a 16 bit aligned address. */ +/* Load or store data from a 16 bit aligned address. */ #define SLJIT_MEM_ALIGNED_16 0x000800 -/* Load or stora data from a 32 bit aligned address. */ +/* Load or store data from a 32 bit aligned address. */ #define SLJIT_MEM_ALIGNED_32 0x001000 /* The following flags are used by sljit_emit_mem_update(), @@ -2732,8 +2736,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st /* All JIT related code should be placed in the same context (library, binary, etc.). */ /* Get the entry address of a given function (signed, unsigned result). */ -#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(void*)func_name) -#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(void*)func_name) +#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(sljit_uw)func_name) +#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(sljit_uw)func_name) /* For powerpc64, the function pointers point to a context descriptor. */ struct sljit_function_context { @@ -2745,7 +2749,7 @@ struct sljit_function_context { /* Fill the context arguments using the addr and the function. If func_ptr is NULL, it will not be set to the address of context If addr is NULL, the function address also comes from the func pointer. */ -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func); +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)); #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c new file mode 100644 index 0000000000..ffc29ddd8b --- /dev/null +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c @@ -0,0 +1,3655 @@ +/* + * Stack-less Just-In-Time compiler + * + * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Alpha ISA extension bits: a bit set means the extension is present. + Same layout as Linux AT_HWCAP and as ~amask(-1). */ +#define ALPHA_HWCAP_BWX 0x1 +#define ALPHA_HWCAP_FIX 0x2 +#define ALPHA_HWCAP_CIX 0x4 + +SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) +{ + return "Alpha" SLJIT_CPUINFO; +} + +/* Alpha instructions are fixed 32 bit and processed as instruction units. */ +typedef sljit_u32 sljit_ins; + +#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) +#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) +#define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4) +/* r29 (gp) is unused in JIT-compiled code; used as 4th scratch when reg + aliases TMP_REG2 or TMP_REG3 in the unaligned store synthesizers. */ +#define TMP_REG4 (SLJIT_NUMBER_OF_REGISTERS + 7) +#define TMP_ZERO 0 + +/* Flags are kept in volatile registers. */ +#define EQUAL_FLAG (SLJIT_NUMBER_OF_REGISTERS + 5) +#define RETURN_ADDR_REG TMP_REG2 +#define OTHER_FLAG (SLJIT_NUMBER_OF_REGISTERS + 6) + +#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1) +#define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) + +/* Maps sljit register indices onto Alpha physical registers. */ +static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 8] = { + 31, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, + 9, 10, 11, 12, 13, 14, 15, + 30, 28, 26, 27, 25, 24, 29 +}; + +static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { + 31, + 0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 9, 8, 7, 6, 5, 4, 3, 2, + 30, 28 +}; + +/* --------------------------------------------------------------------- */ +/* Instruction forms */ +/* --------------------------------------------------------------------- */ + +#define OP(op) ((sljit_ins)(op) << 26) +#define FUNC(f) ((sljit_ins)(f) << 5) + +#define RA(r) ((sljit_ins)reg_map[r] << 21) +#define RB(r) ((sljit_ins)reg_map[r] << 16) +#define RC(r) ((sljit_ins)reg_map[r]) +#define FA(r) ((sljit_ins)freg_map[r] << 21) +#define FB(r) ((sljit_ins)freg_map[r] << 16) +#define FC(r) ((sljit_ins)freg_map[r]) +#define ABS_RA(n) ((sljit_ins)(n) << 21) +/* Literal (8 bit, zero extended) operand for operate instructions. */ +#define ALPHA_LIT(imm) ((((sljit_ins)(imm) & 0xff) << 13) | ((sljit_ins)1 << 12)) +#define DISP16(imm) ((sljit_ins)(imm) & 0xffff) + +/* Memory format opcodes. */ +#define LDA OP(0x08) +#define LDAH OP(0x09) +#define LDBU OP(0x0a) +#define LDQ_U OP(0x0b) +#define LDWU OP(0x0c) +#define STW OP(0x0d) +#define STB OP(0x0e) +#define STQ_U OP(0x0f) +#define LDF OP(0x20) +#define LDG OP(0x21) +#define LDS OP(0x22) +#define LDT OP(0x23) +#define STF OP(0x24) +#define STG OP(0x25) +#define STS OP(0x26) +#define STT OP(0x27) +#define LDL OP(0x28) +#define LDQ OP(0x29) +#define LDL_L OP(0x2a) +#define LDQ_L OP(0x2b) +#define STL OP(0x2c) +#define STQ OP(0x2d) +#define STL_C OP(0x2e) +#define STQ_C OP(0x2f) + +/* Integer arithmetic (op 0x10). */ +#define ADDL (OP(0x10) | FUNC(0x00)) +#define SUBL (OP(0x10) | FUNC(0x09)) +#define ADDQ (OP(0x10) | FUNC(0x20)) +#define SUBQ (OP(0x10) | FUNC(0x29)) +#define S4ADDQ (OP(0x10) | FUNC(0x22)) +#define S8ADDQ (OP(0x10) | FUNC(0x32)) +#define CMPEQ (OP(0x10) | FUNC(0x2d)) +#define CMPLT (OP(0x10) | FUNC(0x4d)) +#define CMPLE (OP(0x10) | FUNC(0x6d)) +#define CMPULT (OP(0x10) | FUNC(0x1d)) +#define CMPULE (OP(0x10) | FUNC(0x3d)) +#define CMPBGE (OP(0x10) | FUNC(0x0f)) + +/* Logical / conditional move (op 0x11). */ +#define AND (OP(0x11) | FUNC(0x00)) +#define BIC (OP(0x11) | FUNC(0x08)) +#define CMOVLBS (OP(0x11) | FUNC(0x14)) +#define CMOVLBC (OP(0x11) | FUNC(0x16)) +#define BIS (OP(0x11) | FUNC(0x20)) +#define CMOVEQ (OP(0x11) | FUNC(0x24)) +#define CMOVNE (OP(0x11) | FUNC(0x26)) +#define ORNOT (OP(0x11) | FUNC(0x28)) +#define XOR (OP(0x11) | FUNC(0x40)) +#define CMOVLT (OP(0x11) | FUNC(0x44)) +#define CMOVGE (OP(0x11) | FUNC(0x46)) +#define EQV (OP(0x11) | FUNC(0x48)) +#define CMOVLE (OP(0x11) | FUNC(0x64)) +#define CMOVGT (OP(0x11) | FUNC(0x66)) + +/* Shift / byte manipulation (op 0x12). */ +#define EXTBL (OP(0x12) | FUNC(0x06)) +#define EXTWL (OP(0x12) | FUNC(0x16)) +#define EXTLL (OP(0x12) | FUNC(0x26)) +#define EXTQL (OP(0x12) | FUNC(0x36)) +#define INSBL (OP(0x12) | FUNC(0x0b)) +#define MSKBL (OP(0x12) | FUNC(0x02)) +#define INSWL (OP(0x12) | FUNC(0x1b)) +#define INSLL (OP(0x12) | FUNC(0x2b)) +#define INSQL (OP(0x12) | FUNC(0x3b)) +#define MSKWL (OP(0x12) | FUNC(0x12)) +#define MSKLL (OP(0x12) | FUNC(0x22)) +#define MSKQL (OP(0x12) | FUNC(0x32)) +#define ZAPNOT (OP(0x12) | FUNC(0x31)) +#define EXTWH (OP(0x12) | FUNC(0x5a)) +#define EXTLH (OP(0x12) | FUNC(0x6a)) +#define EXTQH (OP(0x12) | FUNC(0x7a)) +#define MSKWH (OP(0x12) | FUNC(0x52)) +#define MSKLH (OP(0x12) | FUNC(0x62)) +#define MSKQH (OP(0x12) | FUNC(0x72)) +#define INSWH (OP(0x12) | FUNC(0x57)) +#define INSLH (OP(0x12) | FUNC(0x67)) +#define INSQH (OP(0x12) | FUNC(0x77)) +#define SRL (OP(0x12) | FUNC(0x34)) +#define SLL (OP(0x12) | FUNC(0x39)) +#define SRA (OP(0x12) | FUNC(0x3c)) + +/* Multiply (op 0x13). */ +#define MULL (OP(0x13) | FUNC(0x00)) +#define MULQ (OP(0x13) | FUNC(0x20)) +#define UMULH (OP(0x13) | FUNC(0x30)) + +/* Sign extension / count (op 0x1c, BWX/CIX). */ +#define SEXTB (OP(0x1c) | FUNC(0x00)) +#define SEXTW (OP(0x1c) | FUNC(0x01)) +#define CTPOP (OP(0x1c) | FUNC(0x30)) +#define CTLZ (OP(0x1c) | FUNC(0x32)) +#define CTTZ (OP(0x1c) | FUNC(0x33)) +/* FTOIx / ITOFx leave the unused Rb field as r31. */ +#define FTOIT (OP(0x1c) | FUNC(0x070) | ((sljit_ins)31 << 16)) +#define FTOIS (OP(0x1c) | FUNC(0x078) | ((sljit_ins)31 << 16)) + +/* Integer to float register move (op 0x14, FIX). */ +#define ITOFS (OP(0x14) | FUNC(0x004) | ((sljit_ins)31 << 16)) +#define ITOFT (OP(0x14) | FUNC(0x024) | ((sljit_ins)31 << 16)) + +/* Branches. */ +#define BR OP(0x30) +#define FBEQ OP(0x31) +#define FBLT OP(0x32) +#define FBLE OP(0x33) +#define BSR OP(0x34) +#define FBNE OP(0x35) +#define FBGE OP(0x36) +#define FBGT OP(0x37) +#define BLBC OP(0x38) +#define BEQ OP(0x39) +#define BLT OP(0x3a) +#define BLE OP(0x3b) +#define BLBS OP(0x3c) +#define BNE OP(0x3d) +#define BGE OP(0x3e) +#define BGT OP(0x3f) + +/* Memory branch (jumps, op 0x1a). */ +#define JMP (OP(0x1a) | ((sljit_ins)0 << 14)) +#define JSR (OP(0x1a) | ((sljit_ins)1 << 14)) +#define RETI (OP(0x1a) | ((sljit_ins)2 << 14)) + +/* Floating point IEEE T/S (op 0x16). The /SUI (arithmetic, +0x700) and /SU + (compare, +0x500) software-completion qualifiers keep IEEE exceptions from + raising SIGFPE: the kernel completes them with the (trap-disabled) FPCR. */ +#define ADDS (OP(0x16) | FUNC(0x780)) +#define SUBS (OP(0x16) | FUNC(0x781)) +#define MULS (OP(0x16) | FUNC(0x782)) +#define DIVS (OP(0x16) | FUNC(0x783)) +#define ADDT (OP(0x16) | FUNC(0x7a0)) +#define SUBT (OP(0x16) | FUNC(0x7a1)) +#define MULT (OP(0x16) | FUNC(0x7a2)) +#define DIVT (OP(0x16) | FUNC(0x7a3)) +#define CMPTUN (OP(0x16) | FUNC(0x5a4)) +#define CMPTEQ (OP(0x16) | FUNC(0x5a5)) +#define CMPTLT (OP(0x16) | FUNC(0x5a6)) +#define CMPTLE (OP(0x16) | FUNC(0x5a7)) +/* Unary converts leave the unused Fa field as f31. CVTTQ uses /SVC (software + completion + integer overflow + chopped/truncating rounding). */ +#define CVTTS (OP(0x16) | FUNC(0x7ac) | ((sljit_ins)31 << 21)) +#define CVTTQ (OP(0x16) | FUNC(0x52f) | ((sljit_ins)31 << 21)) +#define CVTQS (OP(0x16) | FUNC(0x7bc) | ((sljit_ins)31 << 21)) +#define CVTQT (OP(0x16) | FUNC(0x7be) | ((sljit_ins)31 << 21)) + +/* Floating point copy/convert (op 0x17). */ +#define CVTLQ (OP(0x17) | FUNC(0x010) | ((sljit_ins)31 << 21)) +#define CPYS (OP(0x17) | FUNC(0x020)) +#define CPYSN (OP(0x17) | FUNC(0x021)) +#define CPYSE (OP(0x17) | FUNC(0x022)) +#define CVTQL (OP(0x17) | FUNC(0x030) | ((sljit_ins)31 << 21)) + +/* Miscellaneous (op 0x18). */ +#define MB (OP(0x18) | 0x4000) + +/* NOP: BIS r31, r31, r31. */ +#define NOP (BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(TMP_ZERO)) +/* Canonical return: ret r31, (r26). */ +#define ALPHA_RET (RETI | RA(TMP_ZERO) | RB(RETURN_ADDR_REG) | 1) + +#define SIMM_MAX (0x7fff) +#define SIMM_MIN (-0x8000) +#define S32_MAX (0x7fffffffl) +#define S32_MIN (-0x80000000l) + +/* Branch displacement is a signed 21 bit count of instructions. */ +#define BRANCH_MAX (0xfffff) +#define BRANCH_MIN (-0x100000) + +/* Local jump flags (bits must not clash with JUMP_ADDR/JUMP_MOV_ADDR/ + SLJIT_REWRITABLE_JUMP defined in sljitLir.c). */ +#define IS_COND 0x004 +#define IS_CALL 0x008 +#define PATCH_B 0x020 +#define PATCH_ABS 0x040 + +/* Reserved instruction slots for a materialized far jump: + LDAH, LDA, SLL, LDAH, LDA (5) + JMP/JSR (1). */ +#define JUMP_MAX_SIZE ((sljit_uw)6) + +static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins) +{ + sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins)); + FAIL_IF(!ptr); + *ptr = ins; + compiler->size++; + return SLJIT_SUCCESS; +} + +/* --------------------------------------------------------------------- */ +/* CPU feature detection */ +/* --------------------------------------------------------------------- */ + +static sljit_u32 cpu_feature_list = 0; + +static void get_cpu_features(void) +{ + /* Bit 31 is a sentinel: ensures cpu_feature_list != 0 after + initialization even on pre-EV56 CPUs with no extensions. */ + sljit_u32 features = 0x80000000u; + /* __builtin_alpha_amask clears a bit for each supported extension. + On pre-EV56, AMASK copies Rb to Rc unchanged (hardware behavior), + so ~amask(~0UL)=0 correctly indicates no extensions. */ + unsigned long hwcap = ~__builtin_alpha_amask(~0UL); + + if (hwcap & ALPHA_HWCAP_BWX) + features |= ALPHA_HWCAP_BWX; + if (hwcap & ALPHA_HWCAP_FIX) + features |= ALPHA_HWCAP_FIX; + if (hwcap & ALPHA_HWCAP_CIX) + features |= ALPHA_HWCAP_CIX; + + cpu_feature_list = features; +} + +/* Move a raw bit pattern between the integer and floating point register + files. ITOFS/ITOFT/FTOIS/FTOIT require the FIX extension (EV6+); older + CPUs have no such instruction, so the value is bounced through the word + reserved at the bottom of the frame by SLJIT_LOCALS_OFFSET_BASE. The + store/load pair is chosen to perform the same format conversion as the + instruction it replaces: LDS/STS convert S format, LDT/STT do not. */ +static sljit_s32 emit_int_to_float(struct sljit_compiler *compiler, sljit_s32 is_32, sljit_s32 freg, sljit_s32 reg) +{ + if (!cpu_feature_list) + get_cpu_features(); + + if (cpu_feature_list & ALPHA_HWCAP_FIX) + return push_inst(compiler, (is_32 ? ITOFS : ITOFT) | RA(reg) | FC(freg)); + + FAIL_IF(push_inst(compiler, (is_32 ? STL : STQ) | RA(reg) | RB(SLJIT_SP) | DISP16(0))); + return push_inst(compiler, (is_32 ? LDS : LDT) | FA(freg) | RB(SLJIT_SP) | DISP16(0)); +} + +/* Number of instructions emitted by the two helpers above, needed by callers + which branch over a block containing a transfer. */ +static sljit_s32 int_float_move_size(void) +{ + if (!cpu_feature_list) + get_cpu_features(); + + return (cpu_feature_list & ALPHA_HWCAP_FIX) ? 1 : 2; +} + +static sljit_s32 emit_float_to_int(struct sljit_compiler *compiler, sljit_s32 is_32, sljit_s32 reg, sljit_s32 freg) +{ + if (!cpu_feature_list) + get_cpu_features(); + + if (cpu_feature_list & ALPHA_HWCAP_FIX) + return push_inst(compiler, (is_32 ? FTOIS : FTOIT) | FA(freg) | RC(reg)); + + FAIL_IF(push_inst(compiler, (is_32 ? STS : STT) | FA(freg) | RB(SLJIT_SP) | DISP16(0))); + return push_inst(compiler, (is_32 ? LDL : LDQ) | RA(reg) | RB(SLJIT_SP) | DISP16(0)); +} + +/* --------------------------------------------------------------------- */ +/* Jumps */ +/* --------------------------------------------------------------------- */ + +static sljit_ins get_jump_instruction(sljit_s32 type); + +/* Fill the reserved region [inst .. inst + JUMP_MAX_SIZE) of a jump. + Returns the last written instruction slot. */ +static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset) +{ + sljit_sw diff; + sljit_uw target_addr; + sljit_ins *inst = code_ptr; + sljit_s32 i; + + SLJIT_UNUSED_ARG(executable_offset); + + if (jump->flags & JUMP_ADDR) + target_addr = jump->u.target; + else { + SLJIT_ASSERT(jump->u.label != NULL); + target_addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset); + } + + if (jump->flags & IS_COND) { + if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) { + /* The conditional branch is at inst[-1]. */ + diff = (sljit_sw)target_addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(inst - 1, executable_offset); + diff = (diff - 4) >> 2; + + if (diff >= BRANCH_MIN && diff <= BRANCH_MAX) { + /* Branch straight to the target, pad the rest with NOP. */ + jump->flags |= PATCH_B; + jump->addr = (sljit_uw)(inst - 1); + for (i = 0; i < (sljit_s32)JUMP_MAX_SIZE; i++) + inst[i] = NOP; + return inst + (JUMP_MAX_SIZE - 1); + } + } + + /* Far / rewritable conditional: invert the branch so it skips the + materialized jump. */ + inst[-1] = (inst[-1] ^ ((sljit_ins)0x04 << 26)) | (JUMP_MAX_SIZE & 0x1fffff); + } else if (!(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & IS_CALL)) { + /* Calls always take the materialized path so pv (r27) holds the + callee entry point for its ldgp. */ + diff = (sljit_sw)target_addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); + diff = (diff - 4) >> 2; + + if (diff >= BRANCH_MIN && diff <= BRANCH_MAX) { + jump->flags |= PATCH_B; + jump->addr = (sljit_uw)inst; + inst[0] = BR | RA(TMP_ZERO); + for (i = 1; i < (sljit_s32)JUMP_MAX_SIZE; i++) + inst[i] = NOP; + return inst + (JUMP_MAX_SIZE - 1); + } + } + + /* Far / rewritable: materialize the target into TMP_REG3 and jump. */ + jump->flags |= PATCH_ABS; + jump->addr = (sljit_uw)inst; + inst[5] = (jump->flags & IS_CALL) + ? (JSR | RA(RETURN_ADDR_REG) | RB(TMP_REG3)) + : (JMP | RA(TMP_ZERO) | RB(TMP_REG3)); + return inst + (JUMP_MAX_SIZE - 1); +} + +/* Write a fixed five instruction LDAH/LDA/SLL/LDAH/LDA sequence that loads + a 64 bit address into reg at inst[0..4]. */ +static SLJIT_INLINE void load_addr_to_reg(sljit_ins *inst, sljit_s32 reg, sljit_uw addr) +{ + sljit_sw high; + sljit_s32 low; + + low = (sljit_s32)addr; + high = (sljit_sw)addr >> 32; + if (low < 0) + high++; + + inst[0] = LDAH | RA(reg) | RB(TMP_ZERO) | ((((sljit_ins)((sljit_uw)high >> 16)) + (((high) & 0x8000) ? 1 : 0)) & 0xffff); + inst[1] = LDA | RA(reg) | RB(reg) | ((sljit_ins)high & 0xffff); + inst[2] = SLL | RA(reg) | ALPHA_LIT(32) | RC(reg); + inst[3] = LDAH | RA(reg) | RB(reg) | ((((sljit_ins)((sljit_u32)low >> 16)) + (((low) & 0x8000) ? 1 : 0)) & 0xffff); + inst[4] = LDA | RA(reg) | RB(reg) | ((sljit_ins)low & 0xffff); +} + +static SLJIT_INLINE sljit_ins *process_extended_label(sljit_ins *code_ptr, struct sljit_extended_label *ext_label) +{ + SLJIT_ASSERT(ext_label->label.u.index == SLJIT_LABEL_ALIGNED); + return (sljit_ins*)((sljit_uw)code_ptr & ~(ext_label->data)); +} + +SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data) +{ + struct sljit_memory_fragment *buf; + sljit_ins *code; + sljit_ins *code_ptr; + sljit_ins *buf_ptr; + sljit_ins *buf_end; + sljit_uw word_count; + SLJIT_NEXT_DEFINE_TYPES; + sljit_sw executable_offset; + sljit_uw addr; + + struct sljit_label *label; + struct sljit_jump *jump; + struct sljit_const *const_; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_generate_code(compiler, options)); + + code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset); + PTR_FAIL_WITH_EXEC_IF(code); + + reverse_buf(compiler); + buf = compiler->buf; + + code_ptr = code; + word_count = 0; + label = compiler->labels; + jump = compiler->jumps; + const_ = compiler->consts; + SLJIT_NEXT_INIT_TYPES(); + SLJIT_GET_NEXT_MIN(); + + do { + buf_ptr = (sljit_ins*)buf->memory; + buf_end = buf_ptr + (buf->used_size >> 2); + do { + *code_ptr = *buf_ptr++; + if (next_min_addr == word_count) { + SLJIT_ASSERT(!label || label->size >= word_count); + SLJIT_ASSERT(!jump || jump->addr >= word_count); + SLJIT_ASSERT(!const_ || const_->addr >= word_count); + + if (next_min_addr == next_label_size) { + if (label->u.index >= SLJIT_LABEL_ALIGNED) { + code_ptr = process_extended_label(code_ptr, (struct sljit_extended_label*)label); + *code_ptr = buf_ptr[-1]; + } + + label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + label->size = (sljit_uw)(code_ptr - code); + label = label->next; + next_label_size = SLJIT_GET_NEXT_SIZE(label); + } + + if (next_min_addr == next_jump_addr) { + if (!(jump->flags & JUMP_MOV_ADDR)) { + word_count += JUMP_MAX_SIZE - 1; + code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset); + } else { + word_count += JUMP_MAX_SIZE - 1; + jump->addr = (sljit_uw)code_ptr; + /* load_addr_to_reg fills slots [0..4]; NOP the rest. */ + code_ptr[JUMP_MAX_SIZE - 1] = NOP; + code_ptr += JUMP_MAX_SIZE - 1; + } + jump = jump->next; + next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump); + } else if (next_min_addr == next_const_addr) { + const_->addr = (sljit_uw)code_ptr; + const_ = const_->next; + next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_); + } + + SLJIT_GET_NEXT_MIN(); + } + code_ptr++; + word_count++; + } while (buf_ptr < buf_end); + + buf = buf->next; + } while (buf); + + if (label && label->size == word_count) { + if (label->u.index >= SLJIT_LABEL_ALIGNED) + code_ptr = process_extended_label(code_ptr, (struct sljit_extended_label*)label); + + label->u.addr = (sljit_uw)code_ptr; + label->size = (sljit_uw)(code_ptr - code); + label = label->next; + } + + SLJIT_ASSERT(!label); + SLJIT_ASSERT(!jump); + SLJIT_ASSERT(!const_); + SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size); + + jump = compiler->jumps; + while (jump) { + do { + addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr; + buf_ptr = (sljit_ins *)jump->addr; + + if (jump->flags & JUMP_MOV_ADDR) { + load_addr_to_reg(buf_ptr, (sljit_s32)buf_ptr[0], addr); + break; + } + + if (jump->flags & PATCH_B) { + addr = (sljit_uw)((sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) - sizeof(sljit_ins)) >> 2); + SLJIT_ASSERT((sljit_sw)addr <= BRANCH_MAX && (sljit_sw)addr >= BRANCH_MIN); + buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0x1fffff) | ((sljit_ins)addr & 0x1fffff); + break; + } + + SLJIT_ASSERT(jump->flags & PATCH_ABS); + load_addr_to_reg(buf_ptr, TMP_REG3, addr); + } while (0); + + jump = jump->next; + } + + compiler->error = SLJIT_ERR_COMPILED; + compiler->executable_offset = executable_offset; + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); + + code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); + code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + + SLJIT_CACHE_FLUSH(code, code_ptr); + SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1); + return code; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) +{ + switch (feature_type) { + case SLJIT_HAS_FPU: +#ifdef SLJIT_IS_FPU_AVAILABLE + return (SLJIT_IS_FPU_AVAILABLE) != 0; +#else + return 1; +#endif + case SLJIT_HAS_ZERO_REGISTER: + case SLJIT_HAS_CMOV: + case SLJIT_HAS_REV: + case SLJIT_HAS_MEMORY_BARRIER: + return 1; + case SLJIT_HAS_COPY_F32: + case SLJIT_HAS_COPY_F64: + /* Uses ITOFS/ITOFT/FTOIS/FTOIT when the FIX extension (EV6+) is + available, and a stack round trip otherwise. */ + return 1; + case SLJIT_HAS_CLZ: + case SLJIT_HAS_CTZ: + if (!cpu_feature_list) + get_cpu_features(); + return (cpu_feature_list & ALPHA_HWCAP_CIX) ? 1 : 0; + case SLJIT_HAS_PREFETCH: + return 1; + case SLJIT_HAS_ROT: + case SLJIT_HAS_ATOMIC: + case SLJIT_HAS_SIMD: + default: + return 0; + } +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type) +{ + SLJIT_UNUSED_ARG(type); + return 0; +} + +/* --------------------------------------------------------------------- */ +/* Entry, exit */ +/* --------------------------------------------------------------------- */ + +/* Creates an index in data_transfer_insts array. */ +#define LOAD_DATA 0x01 +#define WORD_DATA 0x00 +#define BYTE_DATA 0x02 +#define HALF_DATA 0x04 +#define INT_DATA 0x06 +#define SIGNED_DATA 0x08 +/* Separates integer and floating point registers */ +#define GPR_REG 0x0f +#define DOUBLE_DATA 0x10 +#define SINGLE_DATA 0x12 + +#define MEM_MASK 0x1f + +#define ARG_TEST 0x00020 +#define ALT_KEEP_CACHE 0x00040 +#define CUMULATIVE_OP 0x00080 +#define IMM_OP 0x00100 +#define MOVE_OP 0x00200 +#define SRC2_IMM 0x00400 + +#define UNUSED_DEST 0x00800 +#define REG_DEST 0x01000 +#define REG1_SOURCE 0x02000 +#define REG2_SOURCE 0x04000 +#define SLOW_SRC1 0x08000 +#define SLOW_SRC2 0x10000 +#define SLOW_DEST 0x20000 +#define MEM_USE_TMP2 0x40000 + +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw); + +/* Split a signed 32 bit value into an LDAH/LDA displacement pair, correcting + the high part for the sign extension performed by the LDA. */ +#define ALPHA_HI16(v) ((sljit_ins)((((sljit_u32)(v) >> 16) + (((v) & 0x8000) ? 1 : 0)) & 0xffff)) +#define ALPHA_LO16(v) ((sljit_ins)((v) & 0xffff)) + +/* Emit "reg = base + (sljit_s32)v32". Normally an LDAH/LDA pair, but values in + (0x7fff7fff, 0x7fffffff] need the high displacement 0x8000 which sign-extends + negative, so split off 0x40000000 and use a three instruction sequence. */ +static sljit_s32 emit_hi_lo(struct sljit_compiler *compiler, sljit_s32 reg, sljit_s32 base, sljit_s32 v32) +{ + sljit_s32 lo = (sljit_s32)(sljit_s16)(v32 & 0xffff); + sljit_sw hi = ((sljit_sw)v32 - lo) >> 16; + + if (hi >= -0x8000 && hi <= 0x7fff) { + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(base) | ((sljit_ins)hi & 0xffff))); + return push_inst(compiler, LDA | RA(reg) | RB(reg) | ((sljit_ins)lo & 0xffff)); + } + + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(base) | 0x4000)); + v32 -= 0x40000000; + lo = (sljit_s32)(sljit_s16)(v32 & 0xffff); + hi = ((sljit_sw)v32 - lo) >> 16; + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(reg) | ((sljit_ins)hi & 0xffff))); + return push_inst(compiler, LDA | RA(reg) | RB(reg) | ((sljit_ins)lo & 0xffff)); +} + +static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r, sljit_sw imm, sljit_s32 tmp_r) +{ + sljit_sw high; + sljit_s32 low; + + SLJIT_UNUSED_ARG(tmp_r); + + if (imm >= -0x8000 && imm <= 0x7fff) + return push_inst(compiler, LDA | RA(dst_r) | RB(TMP_ZERO) | ALPHA_LO16(imm)); + + if (imm >= S32_MIN && imm <= S32_MAX) + return emit_hi_lo(compiler, dst_r, TMP_ZERO, (sljit_s32)imm); + + /* Full 64 bit constant: build the high half, shift and add the low half. + The low half is added back sign extended, so the high half is biased by + one when it is negative. That bias can push high up to 0x80000000, which + no longer fits in a signed 32 bit value, but only the low 32 bits of the + high half survive the shift, so computing it modulo 2^32 is equivalent. */ + low = (sljit_s32)imm; + high = (sljit_sw)((sljit_uw)imm >> 32); + if (low < 0) + high++; + + FAIL_IF(emit_hi_lo(compiler, dst_r, TMP_ZERO, (sljit_s32)(sljit_u32)(sljit_uw)high)); + FAIL_IF(push_inst(compiler, SLL | RA(dst_r) | ALPHA_LIT(32) | RC(dst_r))); + + if (low == 0) + return SLJIT_SUCCESS; + + return emit_hi_lo(compiler, dst_r, dst_r, low); +} + +static SLJIT_INLINE sljit_s32 emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw init_value) +{ + sljit_sw high; + sljit_s32 low; + + low = (sljit_s32)init_value; + high = init_value >> 32; + if (low < 0) + high++; + + /* Fixed five instruction sequence so sljit_set_jump_addr can rewrite it. */ + FAIL_IF(push_inst(compiler, LDAH | RA(dst) | RB(TMP_ZERO) | ALPHA_HI16((sljit_s32)high))); + FAIL_IF(push_inst(compiler, LDA | RA(dst) | RB(dst) | ALPHA_LO16((sljit_s32)high))); + FAIL_IF(push_inst(compiler, SLL | RA(dst) | ALPHA_LIT(32) | RC(dst))); + FAIL_IF(push_inst(compiler, LDAH | RA(dst) | RB(dst) | ALPHA_HI16(low))); + return push_inst(compiler, LDA | RA(dst) | RB(dst) | ALPHA_LO16(low)); +} + +/* Emit a register move (BIS r31, src, dst). */ +static SLJIT_INLINE sljit_s32 emit_mov(struct sljit_compiler *compiler, sljit_s32 dst, sljit_s32 src) +{ + if (dst == src) + return SLJIT_SUCCESS; + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(src) | RC(dst)); +} + +#define STACK_MAX_DISTANCE (-SIMM_MIN) + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, + sljit_s32 scratches, sljit_s32 saveds, sljit_s32 local_size) +{ + sljit_s32 fscratches = ENTER_GET_FLOAT_REGS(scratches); + sljit_s32 fsaveds = ENTER_GET_FLOAT_REGS(saveds); + sljit_s32 i, tmp, offset; + sljit_s32 saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options); + sljit_s32 arg_count; + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, local_size); + + scratches = ENTER_GET_REGS(scratches); + saveds = ENTER_GET_REGS(saveds); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 1); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + compiler->local_size = local_size; + + if (local_size <= STACK_MAX_DISTANCE) { + offset = local_size - SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-local_size))); + local_size = 0; + } else { + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-STACK_MAX_DISTANCE))); + local_size -= STACK_MAX_DISTANCE; + + if (local_size > STACK_MAX_DISTANCE) + FAIL_IF(load_immediate(compiler, TMP_REG1, local_size, TMP_REG3)); + offset = STACK_MAX_DISTANCE - SSIZE_OF(sw); + } + + FAIL_IF(push_inst(compiler, STQ | RA(RETURN_ADDR_REG) | RB(SLJIT_SP) | DISP16(offset))); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0 - saved_arg_count; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + if (local_size > STACK_MAX_DISTANCE) + FAIL_IF(push_inst(compiler, SUBQ | RA(SLJIT_SP) | RB(TMP_REG1) | RC(SLJIT_SP))); + else if (local_size > 0) + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-local_size))); + + if (options & SLJIT_ENTER_REG_ARG) + return SLJIT_SUCCESS; + + /* The Nth argument arrives in r(16 + N) (integer) or f(16 + N) (float). + Saved arguments are copied to SLJIT_S0.. / SLJIT_FS0..; scratch (_R) + arguments are copied to SLJIT_R0.. / SLJIT_FR0.. by type index. */ + arg_types >>= SLJIT_ARG_SHIFT; + saved_arg_count = 0; + arg_count = 0; + offset = 0; /* word arg index */ + i = 0; /* float arg index */ + + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, BIS | ABS_RA(16 + arg_count) | RB(TMP_ZERO) | RC(SLJIT_S0 - saved_arg_count))); + saved_arg_count++; + } else if (reg_map[SLJIT_R0 + offset] != 16 + arg_count) + FAIL_IF(push_inst(compiler, BIS | ABS_RA(16 + arg_count) | RB(TMP_ZERO) | RC(SLJIT_R0 + offset))); + offset++; + } else { + /* Floating point arguments land in SLJIT_FR0.. by float index. */ + if (freg_map[SLJIT_FR0 + i] != 16 + arg_count) + FAIL_IF(push_inst(compiler, CPYS | ((sljit_ins)(16 + arg_count) << 21) | ((sljit_ins)(16 + arg_count) << 16) | FC(SLJIT_FR0 + i))); + i++; + } + + arg_count++; + arg_types >>= SLJIT_ARG_SHIFT; + } + + return SLJIT_SUCCESS; +} + +#undef STACK_MAX_DISTANCE + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, + sljit_s32 scratches, sljit_s32 saveds, sljit_s32 local_size) +{ + sljit_s32 fscratches = ENTER_GET_FLOAT_REGS(scratches); + sljit_s32 fsaveds = ENTER_GET_FLOAT_REGS(saveds); + + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, local_size); + + scratches = ENTER_GET_REGS(scratches); + saveds = ENTER_GET_REGS(saveds); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 1); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + + return SLJIT_SUCCESS; +} + +#define STACK_MAX_DISTANCE (-SIMM_MIN - 16) + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 is_return_to) +{ + sljit_s32 i, tmp, offset; + sljit_s32 local_size = compiler->local_size; + + if (local_size > STACK_MAX_DISTANCE) { + local_size -= STACK_MAX_DISTANCE; + + if (local_size > STACK_MAX_DISTANCE) { + FAIL_IF(load_immediate(compiler, TMP_REG2, local_size, TMP_REG3)); + FAIL_IF(push_inst(compiler, ADDQ | RA(SLJIT_SP) | RB(TMP_REG2) | RC(SLJIT_SP))); + } else + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(local_size))); + + local_size = STACK_MAX_DISTANCE; + } + + offset = local_size - SSIZE_OF(sw); + if (!is_return_to) + FAIL_IF(push_inst(compiler, LDQ | RA(RETURN_ADDR_REG) | RB(SLJIT_SP) | DISP16(offset))); + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options); i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + return push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(local_size)); +} + +#undef STACK_MAX_DISTANCE + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler, 0)); + return push_inst(compiler, ALPHA_RET); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *compiler, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_to(compiler, src, srcw)); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + srcw = 0; + } else if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) { + FAIL_IF(emit_mov(compiler, TMP_REG1, src)); + src = TMP_REG1; + srcw = 0; + } + + FAIL_IF(emit_stack_frame_release(compiler, 1)); + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_ijump(compiler, SLJIT_JUMP, src, srcw); +} + +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + +static const sljit_ins data_transfer_insts[16 + 4] = { +/* u w s */ STQ, +/* u w l */ LDQ, +/* u b s */ STB, +/* u b l */ LDBU, +/* u h s */ STW, +/* u h l */ LDWU, +/* u i s */ STL, +/* u i l */ LDL, + +/* s w s */ STQ, +/* s w l */ LDQ, +/* s b s */ STB, +/* s b l */ LDBU, +/* s h s */ STW, +/* s h l */ LDWU, +/* s i s */ STL, +/* s i l */ LDL, + +/* d s */ STT, +/* d l */ LDT, +/* s s */ STS, +/* s l */ LDS, +}; + +/* Synthesize byte or halfword load/store on pre-EV56 Alpha (no BWX extension). + * Uses LDQ_U + EXTBL/EXTWL[H] / INSBL/INSWL[H] / MSKBL/MSKWL[H] + STQ_U. + * base must be a register; offset is a signed 16-bit displacement. */ +static sljit_s32 emit_no_bwx_mem(struct sljit_compiler *compiler, sljit_s32 flags, + sljit_s32 reg, sljit_s32 base, sljit_sw offset) +{ + sljit_s32 is_byte = ((flags & 0x6) == BYTE_DATA); + sljit_s32 is_signed = (flags & SIGNED_DATA) != 0; + + /* TMP_REG1 = actual byte address; LDQ_U will mask the low 3 bits to align. */ + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(base) | DISP16(offset))); + + if (flags & LOAD_DATA) { + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + + if (is_byte) { + FAIL_IF(push_inst(compiler, EXTBL | RA(TMP_REG2) | RB(TMP_REG1) | RC(reg))); + if (is_signed) { + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(56) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(56) | RC(reg)); + } + return SLJIT_SUCCESS; + } + + /* Halfword may span two aligned quadwords; load both. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(1))); + FAIL_IF(push_inst(compiler, EXTWL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, EXTWH | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(reg))); + if (is_signed) { + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(48) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(48) | RC(reg)); + } + return SLJIT_SUCCESS; + } + + /* Store: INSBL/INSWL read reg before LDQ_U clobbers TMP_REG2, but for + halfword stores the data must survive two LDQ_U/INSWx pairs. Save to + TMP_REG4 (r29/gp, never used in JIT code) when reg aliases a scratch. */ + + if (is_byte) { + /* Emit INSBL first so reg may safely alias TMP_REG2 or TMP_REG3. */ + FAIL_IF(push_inst(compiler, INSBL | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, MSKBL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Halfword store: data must survive two LDQ_U loads; save if aliased. */ + if (reg == TMP_REG2 || reg == TMP_REG3) { + FAIL_IF(push_inst(compiler, BIS | RA(reg) | RB(TMP_ZERO) | RC(TMP_REG4))); + reg = TMP_REG4; + } + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, MSKWL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, INSWL | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(1))); + FAIL_IF(push_inst(compiler, MSKWH | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, INSWH | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(1)); +} + +static sljit_s32 push_mem_inst(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 base, sljit_sw offset) +{ + sljit_ins ins; + + SLJIT_ASSERT(FAST_IS_REG(base) && offset <= SIMM_MAX && offset >= SIMM_MIN); + + /* LDBU/LDWU/STB/STW require the BWX extension (EV56+). Synthesize + * using LDQ_U + EXT/INS/MSK + STQ_U on pre-EV56 hardware. Only integer + * accesses qualify: SINGLE_DATA also has the BYTE_DATA bits set, but it + * transfers a floating point register with LDS/STS, which always exist. */ + if ((flags & MEM_MASK) <= GPR_REG + && ((flags & 0x6) == BYTE_DATA || (flags & 0x6) == HALF_DATA)) { + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_BWX)) + return emit_no_bwx_mem(compiler, flags, reg, base, offset); + } + + ins = data_transfer_insts[flags & MEM_MASK] | RB(base) | DISP16(offset); + if ((flags & MEM_MASK) <= GPR_REG) + ins |= RA(reg); + else + ins |= FA(reg); + + return push_inst(compiler, ins); +} + +/* Can perform an operation using at most 1 instruction. */ +static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + SLJIT_ASSERT(arg & SLJIT_MEM); + + if (!(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >= SIMM_MIN) { + if (SLJIT_UNLIKELY(flags & ARG_TEST)) + return 1; + + FAIL_IF(push_mem_inst(compiler, flags, reg, arg & REG_MASK, argw)); + return -1; + } + return 0; +} + +#define TO_ARGW_HI(argw) (((argw) & ~0xffff) + (((argw) & 0x8000) ? 0x10000 : 0)) + +static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) +{ + SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM)); + + if (arg & OFFS_REG_MASK) { + argw &= 0x3; + next_argw &= 0x3; + if (argw && argw == next_argw && (arg == next_arg || (arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK))) + return 1; + return 0; + } + + if (arg == next_arg) { + if (((next_argw - argw) <= SIMM_MAX && (next_argw - argw) >= SIMM_MIN) + || TO_ARGW_HI(argw) == TO_ARGW_HI(next_argw)) + return 1; + return 0; + } + + return 0; +} + +static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + sljit_s32 base = arg & REG_MASK; + sljit_s32 tmp_r = (flags & MEM_USE_TMP2) ? TMP_REG2 : TMP_REG1; + sljit_sw offset; + + SLJIT_ASSERT(arg & SLJIT_MEM); + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + + if (SLJIT_UNLIKELY(argw)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(arg)) | RC(tmp_r))); + + return push_mem_inst(compiler, flags, reg, tmp_r, 0); + } + + /* No address cache: materialize the high part and keep the low 16 bits + as the memory displacement. */ + offset = argw - TO_ARGW_HI(argw); + FAIL_IF(load_immediate(compiler, tmp_r, TO_ARGW_HI(argw), TMP_REG3)); + + if (base) + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + + return push_mem_inst(compiler, flags, reg, tmp_r, offset); +} + +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + sljit_s32 base = arg & REG_MASK; + sljit_s32 tmp_r = TMP_REG1; + + if (getput_arg_fast(compiler, flags, reg, arg, argw)) + return compiler->error; + + if ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) + tmp_r = reg; + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + + if (SLJIT_UNLIKELY(argw)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(arg)) | RC(tmp_r))); + + argw = 0; + } else { + FAIL_IF(load_immediate(compiler, tmp_r, TO_ARGW_HI(argw), TMP_REG3)); + + if (base != 0) + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + + argw -= TO_ARGW_HI(argw); + } + + return push_mem_inst(compiler, flags, reg, tmp_r, argw); +} + +static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w) +{ + if (getput_arg_fast(compiler, flags, reg, arg1, arg1w)) + return compiler->error; + return getput_arg(compiler, flags, reg, arg1, arg1w); +} + +/* Select ADDQ/ADDL etc. based on the SLJIT_32 flag. */ +#define SELECT_OP(op, q, l) (((op) & SLJIT_32) ? (l) : (q)) + +/* Sign extend the low 32 bits when the result must stay canonical, and deposit + the zero flag when requested (only shift opcodes route SLJIT_SET_Z here). */ +static SLJIT_INLINE sljit_s32 emit_sext32(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst) +{ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(dst) | RB(TMP_ZERO) | RC(dst))); + if (op & SLJIT_SET_Z) + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(dst) | RC(EQUAL_FLAG)); + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_rev(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_s32 src) +{ + sljit_s32 n, i; + sljit_s32 res = EQUAL_FLAG; + + switch (GET_OPCODE(op)) { + case SLJIT_REV_U16: + case SLJIT_REV_S16: + n = 2; + break; + case SLJIT_REV_U32: + case SLJIT_REV_S32: + n = 4; + break; + default: + n = (op & SLJIT_32) ? 4 : 8; + break; + } + + FAIL_IF(push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(res))); + for (i = 0; i < n; i++) { + FAIL_IF(push_inst(compiler, EXTBL | RA(src) | ALPHA_LIT(i) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, INSBL | RA(TMP_REG1) | ALPHA_LIT(n - 1 - i) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, BIS | RA(res) | RB(TMP_REG1) | RC(res))); + } + + switch (GET_OPCODE(op)) { + case SLJIT_REV_U16: + return push_inst(compiler, ZAPNOT | RA(res) | ALPHA_LIT(0x03) | RC(dst)); + case SLJIT_REV_S16: + return push_inst(compiler, SEXTW | RA(TMP_ZERO) | RB(res) | RC(dst)); + case SLJIT_REV_U32: + return push_inst(compiler, ZAPNOT | RA(res) | ALPHA_LIT(0x0f) | RC(dst)); + case SLJIT_REV_S32: + return push_inst(compiler, ADDL | RA(res) | RB(TMP_ZERO) | RC(dst)); + default: + return emit_mov(compiler, dst, res); + } +} + +static sljit_s32 emit_cmp_flag(struct sljit_compiler *compiler, sljit_s32 flag_type, sljit_s32 src1, sljit_s32 src2) +{ + /* Deposit the strict comparison result into OTHER_FLAG. */ + switch (flag_type) { + case SLJIT_LESS: + case SLJIT_GREATER_EQUAL: + case SLJIT_CARRY: + case SLJIT_NOT_CARRY: + return push_inst(compiler, CMPULT | RA(src1) | RB(src2) | RC(OTHER_FLAG)); + case SLJIT_GREATER: + case SLJIT_LESS_EQUAL: + return push_inst(compiler, CMPULT | RA(src2) | RB(src1) | RC(OTHER_FLAG)); + case SLJIT_SIG_LESS: + case SLJIT_SIG_GREATER_EQUAL: + return push_inst(compiler, CMPLT | RA(src1) | RB(src2) | RC(OTHER_FLAG)); + case SLJIT_SIG_GREATER: + case SLJIT_SIG_LESS_EQUAL: + return push_inst(compiler, CMPLT | RA(src2) | RB(src1) | RC(OTHER_FLAG)); + } + return SLJIT_SUCCESS; +} + +/* Count leading zeroes of a 64 bit value without the CIX extension (pre-EV67). + Branchless binary search: at each step the top half of the remaining window + is tested, and is either skipped (adding its width to the count) or becomes + the new window. A zero input yields 64. + + src_r is read by the first instruction only, so it may be any of the scratch + registers this clobbers (OTHER_FLAG, EQUAL_FLAG, TMP_REG3). */ +static sljit_s32 emit_clz64_no_cix(struct sljit_compiler *compiler, sljit_s32 dst_r, sljit_s32 src_r) +{ + sljit_s32 shift; + + /* The window under consideration, and the count of zeroes above it. */ + FAIL_IF(push_inst(compiler, BIS | RA(src_r) | RB(TMP_ZERO) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, LDA | RA(dst_r) | RB(TMP_ZERO) | DISP16(0))); + + for (shift = 32; shift > 0; shift >>= 1) { + FAIL_IF(push_inst(compiler, SRL | RA(OTHER_FLAG) | ALPHA_LIT(shift) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | ALPHA_LIT(shift) | RC(TMP_REG3))); + /* Top half empty: skip it and count its width. */ + FAIL_IF(push_inst(compiler, CMOVEQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(dst_r))); + /* Otherwise the top half becomes the new window. */ + FAIL_IF(push_inst(compiler, CMOVNE | RA(EQUAL_FLAG) | RB(EQUAL_FLAG) | RC(OTHER_FLAG))); + } + + /* The window is now a single bit; if it is clear the input was zero. */ + FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | ALPHA_LIT(1) | RC(TMP_REG3))); + return push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(TMP_REG3) | RC(dst_r)); +} + +/* SLJIT_CLZ / SLJIT_CTZ on CPUs without CIX. */ +static sljit_s32 emit_clz_ctz_no_cix(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 opcode, sljit_s32 dst_r, sljit_s32 src_r) +{ + sljit_s32 src = src_r; + + if (op & SLJIT_32) { + /* Operate on the zero extended low word. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src_r) | ALPHA_LIT(0x0f) | RC(TMP_REG3))); + src = TMP_REG3; + } + + if (opcode == SLJIT_CLZ) { + FAIL_IF(emit_clz64_no_cix(compiler, dst_r, src)); + + /* A zero extended word has 32 extra leading zeroes, and a zero input + correctly ends up as 64 - 32. */ + if (op & SLJIT_32) + return push_inst(compiler, SUBQ | RA(dst_r) | ALPHA_LIT(32) | RC(dst_r)); + return SLJIT_SUCCESS; + } + + /* ctz(x) == 64 - clz(~x & (x - 1)), which needs no special case for zero: + the mask is then all ones, so clz is 0 and the result is 64. */ + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(src) | DISP16(-1))); + FAIL_IF(push_inst(compiler, BIC | RA(EQUAL_FLAG) | RB(src) | RC(EQUAL_FLAG))); + FAIL_IF(emit_clz64_no_cix(compiler, dst_r, EQUAL_FLAG)); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(64))); + FAIL_IF(push_inst(compiler, SUBQ | RA(OTHER_FLAG) | RB(dst_r) | RC(dst_r))); + + if (!(op & SLJIT_32)) + return SLJIT_SUCCESS; + + /* A zero low word gives 64 here, but the 32 bit result must be 32. No + other input can reach 64, so the value alone identifies the case. */ + FAIL_IF(push_inst(compiler, CMPEQ | RA(dst_r) | ALPHA_LIT(64) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(32))); + return push_inst(compiler, CMOVNE | RA(EQUAL_FLAG) | RB(OTHER_FLAG) | RC(dst_r)); +} + +static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, + sljit_s32 dst, sljit_s32 src1, sljit_sw src2) +{ + sljit_s32 opcode = GET_OPCODE(op); + sljit_s32 flag_type = GET_FLAG_TYPE(op); + sljit_ins op_imm, op_reg; + sljit_s32 src2r = (sljit_s32)src2; + + switch (opcode) { + case SLJIT_MOV: + case SLJIT_MOV_P: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return emit_mov(compiler, dst, src2r); + + case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x01) | RC(dst)); + + case SLJIT_MOV_S8: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, SEXTB | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x03) | RC(dst)); + + case SLJIT_MOV_S16: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, SEXTW | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_MOV_U32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(dst)); + + case SLJIT_MOV_S32: + case SLJIT_MOV32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ADDL | RA(src2r) | RB(TMP_ZERO) | RC(dst)); + + case SLJIT_CLZ: + case SLJIT_CTZ: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + /* CTLZ/CTTZ require the CIX extension (EV67+). */ + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_CIX)) + return emit_clz_ctz_no_cix(compiler, op, opcode, dst, src2r); + + if (op & SLJIT_32) { + if (opcode == SLJIT_CLZ) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, CTLZ | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(dst))); + return push_inst(compiler, SUBQ | RA(dst) | ALPHA_LIT(32) | RC(dst)); + } + /* Trailing zeroes of a 32 bit value; the all-zero case is 32. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, CTTZ | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(dst))); + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(TMP_ZERO) | DISP16(32))); + return push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(EQUAL_FLAG) | RC(dst)); + } + return push_inst(compiler, ((opcode == SLJIT_CLZ) ? CTLZ : CTTZ) | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_REV: + case SLJIT_REV_U16: + case SLJIT_REV_S16: + case SLJIT_REV_U32: + case SLJIT_REV_S32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return emit_rev(compiler, op, dst, src2r); + + case SLJIT_ADD: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 is_ovf = (flag_type == SLJIT_OVERFLOW); + sljit_s32 carry_r = 0; + + if (is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, XOR | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, XOR | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (is_carry || is_ovf) { + if (dst != src1) + carry_r = src1; + else if (!(flags & SRC2_IMM) && dst != src2r) + carry_r = src2r; + else { + FAIL_IF(emit_mov(compiler, OTHER_FLAG, src1)); + carry_r = OTHER_FLAG; + } + } + + { + /* Flags-only + zero flag: add straight into EQUAL_FLAG so a caller + value held in the (unused) destination TMP_REG2 is preserved. */ + sljit_s32 add_dst = ((op & SLJIT_SET_Z) && (flags & UNUSED_DEST) && !is_carry && !is_ovf) ? EQUAL_FLAG : dst; + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | ALPHA_LIT(src2) | RC(add_dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | RB(src2r) | RC(add_dst))); + + if (is_carry || is_ovf) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(carry_r) | RC(OTHER_FLAG))); + + if (is_ovf) { + FAIL_IF(push_inst(compiler, XOR | RA(dst) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + if (op & SLJIT_SET_Z) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, dst)); + /* Test the sign at the operation width: bit 31 for 32 bit ops + (sign extend the low word first), bit 63 otherwise. */ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPLT | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + return push_inst(compiler, XOR | RA(TMP_REG1) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + } + + if ((op & SLJIT_SET_Z) && add_dst != EQUAL_FLAG) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, add_dst)); + } + return SLJIT_SUCCESS; + } + + case SLJIT_ADDC: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 carry_r = 0; + + if (is_carry) { + if (dst != src1) + carry_r = src1; + else if (!(flags & SRC2_IMM) && dst != src2r) + carry_r = src2r; + else { + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, src1)); + carry_r = EQUAL_FLAG; + } + } + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | RB(src2r) | RC(dst))); + + if (is_carry) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(carry_r) | RC(EQUAL_FLAG))); + + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + + if (!is_carry) + return SLJIT_SUCCESS; + + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(OTHER_FLAG) | RC(OTHER_FLAG))); + return push_inst(compiler, BIS | RA(OTHER_FLAG) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + } + + case SLJIT_SUB: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 is_ovf = (flag_type == SLJIT_OVERFLOW); + + if (flag_type >= SLJIT_LESS && flag_type <= SLJIT_SIG_LESS_EQUAL) { + if (flags & SRC2_IMM) { + /* Use a scratch that is not SLJIT_TMP_DEST_REG (TMP_REG2) so a + caller value held there is not clobbered by the comparison. */ + sljit_s32 imm_reg = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; + FAIL_IF(load_immediate(compiler, imm_reg, src2, TMP_REG3)); + src2r = imm_reg; + flags &= ~SRC2_IMM; + } + FAIL_IF(emit_cmp_flag(compiler, flag_type, src1, src2r)); + + /* Only the comparison flag (and optionally Z) is needed; skip the + subtraction when the destination is unused. */ + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(dst))); + return SLJIT_SUCCESS; + } + + if (is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, XOR | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, XOR | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (is_carry || is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | ALPHA_LIT(src2) | RC(OTHER_FLAG))); + else + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | RB(src2r) | RC(OTHER_FLAG))); + } + + /* When only the zero flag is needed and the destination is unused, + subtract straight into EQUAL_FLAG so a caller value held in dst + (SLJIT_TMP_DEST_REG maps to TMP_REG2) is preserved. */ + { + sljit_s32 sub_dst = ((op & SLJIT_SET_Z) && (flags & UNUSED_DEST) && !is_ovf) ? EQUAL_FLAG : dst; + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | ALPHA_LIT(src2) | RC(sub_dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(sub_dst))); + + if (is_ovf) { + FAIL_IF(push_inst(compiler, XOR | RA(dst) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + if (op & SLJIT_SET_Z) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, dst)); + /* Test the sign at the operation width: bit 31 for 32 bit ops + (sign extend the low word first), bit 63 otherwise. */ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPLT | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + return push_inst(compiler, XOR | RA(TMP_REG1) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + } + + if ((op & SLJIT_SET_Z) && sub_dst != EQUAL_FLAG) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, sub_dst)); + } + return SLJIT_SUCCESS; + } + + case SLJIT_SUBC: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + + if (is_carry) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(dst))); + + if (is_carry) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(OTHER_FLAG) | RC(TMP_REG1))); + + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + + if (!is_carry) + return SLJIT_SUCCESS; + + return push_inst(compiler, BIS | RA(EQUAL_FLAG) | RB(TMP_REG1) | RC(OTHER_FLAG)); + } + + case SLJIT_MUL: + SLJIT_ASSERT(!(flags & SRC2_IMM)); + + if (flag_type != SLJIT_OVERFLOW) + return push_inst(compiler, SELECT_OP(op, MULQ, MULL) | RA(src1) | RB(src2r) | RC(dst)); + + if (op & SLJIT_32) { + /* Overflow if the full product differs from its low 32 bits. */ + FAIL_IF(push_inst(compiler, MULQ | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULL | RA(src1) | RB(src2r) | RC(dst))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(dst) | RC(EQUAL_FLAG))); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + } + + /* Signed 64x64: overflow if the signed high half differs from the sign + extension of the low half. Signed high = UMULH - (a<0?b) - (b<0?a). */ + FAIL_IF(push_inst(compiler, UMULH | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(src1) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(src2r) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(src2r) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(src1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULQ | RA(src1) | RB(src2r) | RC(dst))); + FAIL_IF(push_inst(compiler, SRA | RA(dst) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + + case SLJIT_AND: + op_imm = AND; + op_reg = AND; + break; + case SLJIT_OR: + op_imm = BIS; + op_reg = BIS; + break; + case SLJIT_XOR: + op_imm = XOR; + op_reg = XOR; + break; + + case SLJIT_SHL: + case SLJIT_MSHL: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SLL | RA(src1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + else { + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SLL | RA(src1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SLL; + op_reg = SLL; + break; + + case SLJIT_LSHR: + case SLJIT_MLSHR: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + } else { + /* Mask the count before src1 gets zero-extended (they may share a temp). */ + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SRL; + op_reg = SRL; + break; + + case SLJIT_ASHR: + case SLJIT_MASHR: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) { + FAIL_IF(push_inst(compiler, ADDL | RA(src1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + } else { + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ADDL | RA(src1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SRA; + op_reg = SRA; + break; + + case SLJIT_ROTL: + case SLJIT_ROTR: { + sljit_s32 bits = (op & SLJIT_32) ? 32 : 64; + sljit_s32 is_left = (opcode == SLJIT_ROTL); + sljit_s32 in = src1; + sljit_ins first = is_left ? SLL : SRL; + sljit_ins second = is_left ? SRL : SLL; + + if (flags & SRC2_IMM) { + sljit_sw sh = src2 & (bits - 1); + if (op & SLJIT_32) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + in = TMP_REG1; + } + if (sh == 0) { + FAIL_IF(emit_mov(compiler, dst, src1)); + return emit_sext32(compiler, op, dst); + } + FAIL_IF(push_inst(compiler, first | RA(in) | ALPHA_LIT(sh) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(in) | ALPHA_LIT(bits - sh) | RC(dst))); + FAIL_IF(push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + return emit_sext32(compiler, op, dst); + } + + if (op & SLJIT_32) { + /* Mask the count before src1 gets zero-extended (shared temp). */ + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(TMP_ZERO) | DISP16(32))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG2) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, first | RA(TMP_REG1) | RB(TMP_REG2) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(dst))); + FAIL_IF(push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + return emit_sext32(compiler, op, dst); + } + + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, first | RA(in) | RB(src2r) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(in) | RB(EQUAL_FLAG) | RC(dst))); + return push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst)); + } + + default: + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; + } + + /* Logical operations. Route SLJIT_SET_Z through EQUAL_FLAG and only write + the destination when it is actually used, so a live value the caller + keeps in dst (e.g. SLJIT_TMP_DEST_REG, which maps to TMP_REG2) survives + a flags-only (UNUSED_DEST) operation. */ + if (flags & SRC2_IMM) { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, op_imm | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, op_imm | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + } else { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, op_reg | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, op_reg | RA(src1) | RB(src2r) | RC(dst))); + } + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 dst_r = TMP_REG2; + sljit_s32 src1_r; + sljit_sw src2_r = 0; + sljit_s32 src2_tmp_reg = (GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2; + + if (dst == 0) { + SLJIT_ASSERT(HAS_FLAGS(op)); + flags |= UNUSED_DEST; + dst = TMP_REG2; + } else if (FAST_IS_REG(dst)) { + dst_r = dst; + flags |= REG_DEST; + if (flags & MOVE_OP) + src2_tmp_reg = dst_r; + } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw)) + flags |= SLOW_DEST; + + if (flags & IMM_OP) { + if (src2 == SLJIT_IMM && src2w >= 0 && src2w <= 0xff) { + flags |= SRC2_IMM; + src2_r = src2w; + } else if ((flags & CUMULATIVE_OP) && src1 == SLJIT_IMM && src1w >= 0 && src1w <= 0xff) { + flags |= SRC2_IMM; + src2_r = src1w; + + src1 = src2; + src1w = src2w; + src2 = SLJIT_IMM; + } + } + + if (FAST_IS_REG(src1)) { + src1_r = src1; + flags |= REG1_SOURCE; + } else if (src1 == SLJIT_IMM) { + if (src1w) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1_r = TMP_REG1; + } else + src1_r = TMP_ZERO; + } else { + if (getput_arg_fast(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)) + FAIL_IF(compiler->error); + else + flags |= SLOW_SRC1; + src1_r = TMP_REG1; + } + + if (FAST_IS_REG(src2)) { + src2_r = src2; + flags |= REG2_SOURCE; + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) + dst_r = (sljit_s32)src2_r; + } else if (src2 == SLJIT_IMM) { + if (!(flags & SRC2_IMM)) { + if (src2w) { + FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w, TMP_REG3)); + src2_r = src2_tmp_reg; + } else { + src2_r = TMP_ZERO; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } + } + } + } else { + if (getput_arg_fast(compiler, flags | LOAD_DATA, src2_tmp_reg, src2, src2w)) + FAIL_IF(compiler->error); + else + flags |= SLOW_SRC2; + src2_r = src2_tmp_reg; + } + + if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) { + SLJIT_ASSERT(src2_r == TMP_REG2); + if ((flags & SLOW_DEST) && !can_cache(src2, src2w, src1, src1w) && can_cache(src2, src2w, dst, dstw)) { + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | MEM_USE_TMP2, TMP_REG2, src2, src2w)); + } else { + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w)); + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + } + } else if (flags & SLOW_SRC1) + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + else if (flags & SLOW_SRC2) + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | ((src1_r == TMP_REG1) ? MEM_USE_TMP2 : 0), src2_tmp_reg, src2, src2w)); + + FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r)); + + if (dst & SLJIT_MEM) { + if (!(flags & SLOW_DEST)) { + getput_arg_fast(compiler, flags, dst_r, dst, dstw); + return compiler->error; + } + return getput_arg(compiler, flags, dst_r, dst, dstw); + } + + return SLJIT_SUCCESS; +} + +/* Alpha has no integer divide instruction. Synthesize DIV/DIVMOD with a + restoring binary long division. Only the backend temporaries are touched so + the caller's scratch/saved registers (other than R0/R1) are preserved. + Quotient goes to R0; DIVMOD also writes the remainder to R1, DIV leaves R1 + holding the divisor. */ +static sljit_s32 emit_div_mod(struct sljit_compiler *compiler, sljit_s32 op) +{ + sljit_s32 opcode = GET_OPCODE(op); + sljit_s32 is_32 = op & SLJIT_32; + sljit_s32 is_signed = (opcode == SLJIT_DIVMOD_SW || opcode == SLJIT_DIV_SW); + sljit_s32 is_mod = (opcode == SLJIT_DIVMOD_UW || opcode == SLJIT_DIVMOD_SW); + sljit_s32 a = SLJIT_R0, b = SLJIT_R1; + + /* Canonicalize 32 bit inputs to a full-width value. */ + if (is_32) { + if (is_signed) { + FAIL_IF(push_inst(compiler, ADDL | RA(a) | RB(TMP_ZERO) | RC(a))); + FAIL_IF(push_inst(compiler, ADDL | RA(b) | RB(TMP_ZERO) | RC(b))); + } else { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(a) | ALPHA_LIT(0x0f) | RC(a))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(b) | ALPHA_LIT(0x0f) | RC(b))); + } + } + + if (is_signed) { + /* TMP_REG1 = |a|, TMP_REG2 = |b|; keep a_sign in R0, q_sign in R1. */ + FAIL_IF(push_inst(compiler, SRA | RA(a) | ALPHA_LIT(63) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(a) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(b) | ALPHA_LIT(63) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(b) | RB(OTHER_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG2) | RB(OTHER_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(OTHER_FLAG) | RC(b))); + FAIL_IF(emit_mov(compiler, a, EQUAL_FLAG)); + } else { + FAIL_IF(emit_mov(compiler, TMP_REG1, a)); + FAIL_IF(emit_mov(compiler, TMP_REG2, b)); + } + + /* Unsigned long division of TMP_REG1 by TMP_REG2. TMP_REG1 accumulates the + quotient as its bits shift out, TMP_REG3 holds the running remainder. */ + FAIL_IF(push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(64))); + /* 11 instruction loop body; the trailing BNE branches back by -11. */ + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | ALPHA_LIT(63) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG3) | ALPHA_LIT(1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG3) | RB(EQUAL_FLAG) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG1) | ALPHA_LIT(1) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPULE | RA(TMP_REG2) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG3) | RB(EQUAL_FLAG) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(OTHER_FLAG) | ALPHA_LIT(1) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, BNE | RA(OTHER_FLAG) | ((sljit_ins)(-11) & 0x1fffff))); + + if (is_signed) { + /* Apply the result signs: quotient uses a_sign^b_sign, remainder a_sign. */ + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG1) | RB(b) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG1) | RB(b) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG3) | RB(a) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG3) | RB(a) | RC(TMP_REG3))); + + if (is_mod) { + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG3); + } + /* DIV: rebuild the signed divisor (b_sign = q_sign ^ a_sign). */ + FAIL_IF(push_inst(compiler, XOR | RA(b) | RB(a) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(TMP_REG2))); + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG2); + } + + if (is_mod) { + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG3); + } + /* Unsigned DIV: R1 still holds the (possibly zero-extended) divisor. */ + return emit_mov(compiler, a, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op0(compiler, op)); + + switch (GET_OPCODE(op)) { + case SLJIT_BREAKPOINT: + return push_inst(compiler, OP(0x00) | 0x80); + case SLJIT_NOP: + return push_inst(compiler, NOP); + case SLJIT_LMUL_UW: + FAIL_IF(emit_mov(compiler, TMP_REG1, SLJIT_R1)); + FAIL_IF(push_inst(compiler, UMULH | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R1))); + return push_inst(compiler, MULQ | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R0)); + case SLJIT_LMUL_SW: + /* Signed high = UMULH(a,b) - (a<0?b:0) - (b<0?a:0). */ + FAIL_IF(emit_mov(compiler, TMP_REG1, SLJIT_R1)); + FAIL_IF(push_inst(compiler, UMULH | RA(SLJIT_R0) | RB(TMP_REG1) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(SLJIT_R0) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(SLJIT_R0) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULQ | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R0))); + return emit_mov(compiler, SLJIT_R1, EQUAL_FLAG); + case SLJIT_DIVMOD_UW: + case SLJIT_DIVMOD_SW: + case SLJIT_DIV_UW: + case SLJIT_DIV_SW: + return emit_div_mod(compiler, op); + case SLJIT_MEMORY_BARRIER: + return push_inst(compiler, MB); + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src, srcw); + + if (op & SLJIT_32) + flags = INT_DATA | SIGNED_DATA; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_MOV_U32: + return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u32)srcw : srcw); + + case SLJIT_MOV_S32: + case SLJIT_MOV32: + return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s32)srcw : srcw); + + case SLJIT_MOV_U8: + return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u8)srcw : srcw); + + case SLJIT_MOV_S8: + return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s8)srcw : srcw); + + case SLJIT_MOV_U16: + return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u16)srcw : srcw); + + case SLJIT_MOV_S16: + return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s16)srcw : srcw); + + case SLJIT_CLZ: + case SLJIT_CTZ: + case SLJIT_REV: + return emit_op(compiler, op, flags, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_REV_U16: + case SLJIT_REV_S16: + return emit_op(compiler, op, HALF_DATA, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_REV_U32: + case SLJIT_REV_S32: + return emit_op(compiler, op | SLJIT_32, INT_DATA, dst, dstw, TMP_ZERO, 0, src, srcw); + } + + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + if (op & SLJIT_32) { + flags |= INT_DATA | SIGNED_DATA; + if (src1 == SLJIT_IMM) + src1w = (sljit_s32)src1w; + if (src2 == SLJIT_IMM) + src2w = (sljit_s32)src2w; + } + + switch (GET_OPCODE(op)) { + case SLJIT_ADD: + case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_SUB: + case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_MUL: + compiler->status_flags_state = 0; + return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_AND: + case SLJIT_OR: + case SLJIT_XOR: + return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_SHL: + case SLJIT_MSHL: + case SLJIT_LSHR: + case SLJIT_MLSHR: + case SLJIT_ASHR: + case SLJIT_MASHR: + case SLJIT_ROTL: + case SLJIT_ROTR: + if (src2 == SLJIT_IMM) { + if (op & SLJIT_32) + src2w &= 0x1f; + else + src2w &= 0x3f; + } + return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + } + + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, op, 0, 0, src1, src1w, src2, src2w); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w)); + + switch (GET_OPCODE(op)) { + case SLJIT_MULADD: + SLJIT_SKIP_CHECKS(compiler); + FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w)); + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(dst_reg) | RB(TMP_REG2) | RC(dst_reg))); + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 src1_reg, + sljit_s32 src2_reg, + sljit_s32 src3, sljit_sw src3w) +{ + sljit_s32 is_left; + sljit_s32 inp_flags = ((op & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; + sljit_sw bit_length = (op & SLJIT_32) ? 32 : 64; + + CHECK_ERROR(); + CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w)); + + is_left = (GET_OPCODE(op) == SLJIT_SHL || GET_OPCODE(op) == SLJIT_MSHL); + + if (src1_reg == src2_reg) { + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, (is_left ? SLJIT_ROTL : SLJIT_ROTR) | (op & SLJIT_32), dst_reg, 0, src1_reg, 0, src3, src3w); + } + + ADJUST_LOCAL_OFFSET(src3, src3w); + + if (op & SLJIT_32) { + /* Zero-extend src2 so the shifted-in bits come from the low 32. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2_reg) | ALPHA_LIT(0x0f) | RC(EQUAL_FLAG))); + src2_reg = EQUAL_FLAG; + if (!is_left) { + /* A right shift needs a zero-extended low word so SRL brings in + zeros instead of the sign-extended upper bits of src1. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1_reg) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + src1_reg = OTHER_FLAG; + } + } + + if (src3 == SLJIT_IMM) { + src3w &= bit_length - 1; + + if (src3w == 0) { + FAIL_IF(emit_mov(compiler, dst_reg, src1_reg)); + return emit_sext32(compiler, op, dst_reg); + } + + if (is_left) { + FAIL_IF(push_inst(compiler, SLL | RA(src1_reg) | ALPHA_LIT(src3w) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | ALPHA_LIT(bit_length - src3w) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SRL | RA(src1_reg) | ALPHA_LIT(src3w) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | ALPHA_LIT(bit_length - src3w) | RC(TMP_REG1))); + } + FAIL_IF(push_inst(compiler, BIS | RA(dst_reg) | RB(TMP_REG1) | RC(dst_reg))); + return emit_sext32(compiler, op, dst_reg); + } + + if (src3 & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, inp_flags, TMP_REG2, src3, src3w)); + src3 = TMP_REG2; + } else if (dst_reg == src3) { + FAIL_IF(emit_mov(compiler, TMP_REG2, src3)); + src3 = TMP_REG2; + } + + if (op & SLJIT_32) { + FAIL_IF(push_inst(compiler, AND | RA(src3) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + src3 = TMP_REG2; + } + + if (is_left) { + FAIL_IF(push_inst(compiler, SLL | RA(src1_reg) | RB(src3) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | ALPHA_LIT(1) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SRL | RA(src1_reg) | RB(src3) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | ALPHA_LIT(1) | RC(TMP_REG1))); + } + + if (!(op & SLJIT_SHIFT_INTO_NON_ZERO) || (op & SLJIT_32)) { + /* The 32 bit path always uses the (src2 >> 1) form so the complement + count is derived with the 5 bit mask. */ + FAIL_IF(push_inst(compiler, XOR | RA(src3) | ALPHA_LIT(bit_length - 1) | RC(TMP_REG2))); + if (is_left) + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | RB(TMP_REG2) | RC(TMP_REG1))); + else + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG1) | RB(TMP_REG2) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(src3) | RC(TMP_REG2))); + if (is_left) + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | RB(TMP_REG2) | RC(TMP_REG1))); + else + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | RB(TMP_REG2) | RC(TMP_REG1))); + } + + FAIL_IF(push_inst(compiler, BIS | RA(dst_reg) | RB(TMP_REG1) | RC(dst_reg))); + return emit_sext32(compiler, op, dst_reg); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w, + sljit_sw shift_arg) +{ + sljit_s32 dst_r, tmp_r; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w, shift_arg)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); + + if (src2 == SLJIT_IMM) { + src2w = src2w << shift_arg; + shift_arg = 0; + } + + if (shift_arg == 0) { + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, GET_OPCODE(op), dst, dstw, src1, src1w, src2, src2w); + } + + if (src2 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG2, src2, src2w)); + src2 = TMP_REG2; + } + + if (src1 == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1 = TMP_REG1; + } else if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src1, src1w)); + src1 = TMP_REG1; + } + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + tmp_r = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; + + FAIL_IF(push_inst(compiler, SLL | RA(src2) | ALPHA_LIT(shift_arg) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(src1) | RB(tmp_r) | RC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, WORD_DATA, dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 base; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(emit_mov(compiler, RETURN_ADDR_REG, src)); + else + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw)); + + return push_inst(compiler, JMP | RA(TMP_ZERO) | RB(RETURN_ADDR_REG)); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + /* PREFETCH = LDL R31, disp(Rb). This is a hint which is discarded when + the address is invalid, so the address is only computed, never + dereferenced by an actual load. */ + base = src & REG_MASK; + + if (src & OFFS_REG_MASK) { + srcw &= 0x3; + + if (srcw) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(src)) | ALPHA_LIT(srcw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(base) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(src)) | RC(TMP_REG1))); + + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(TMP_REG1) | DISP16(0)); + } + + if (srcw >= SIMM_MIN && srcw <= SIMM_MAX) + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(base) | DISP16(srcw)); + + FAIL_IF(load_immediate(compiler, TMP_REG1, TO_ARGW_HI(srcw), TMP_REG3)); + + if (base != 0) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(base) | RC(TMP_REG1))); + + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(TMP_REG1) | DISP16(srcw - TO_ARGW_HI(srcw))); + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_dst(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw) +{ + sljit_s32 dst_r; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + switch (op) { + case SLJIT_FAST_ENTER: + if (FAST_IS_REG(dst)) + return emit_mov(compiler, dst, RETURN_ADDR_REG); + + SLJIT_ASSERT(RETURN_ADDR_REG == TMP_REG2); + break; + case SLJIT_GET_RETURN_ADDRESS: + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, dst_r, SLJIT_MEM1(SLJIT_SP), compiler->local_size - SSIZE_OF(sw))); + break; + } + + if (dst & SLJIT_MEM) + return emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 type, sljit_s32 reg) +{ + CHECK_REG_INDEX(check_sljit_get_register_index(type, reg)); + + if (type == SLJIT_GP_REGISTER) + return reg_map[reg]; + + return freg_map[reg]; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, + void *instruction, sljit_u32 size) +{ + SLJIT_UNUSED_ARG(size); + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); + + return push_inst(compiler, *(sljit_ins*)instruction); +} + +/* --------------------------------------------------------------------- */ +/* Floating point operators */ +/* --------------------------------------------------------------------- */ + +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7)) + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + sljit_s32 is_i32 = (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64); + /* Double bit patterns for the saturation thresholds 2^(w-1). */ + sljit_sw hi_bits = is_i32 ? (sljit_sw)0x41e0000000000000 : (sljit_sw)0x43e0000000000000; + sljit_sw lo_bits = is_i32 ? (sljit_sw)0xc1e0000000000000 : (sljit_sw)0xc3e0000000000000; + sljit_sw sat_max = is_i32 ? (sljit_sw)0x7fffffff : (sljit_sw)0x7fffffffffffffff; + sljit_sw sat_min = is_i32 ? (sljit_sw)(sljit_s32)0x80000000 : (sljit_sw)((sljit_uw)1 << 63); + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src, srcw)); + src = TMP_FREG1; + } + + /* In-range truncation toward zero (valid while the value fits). */ + FAIL_IF(push_inst(compiler, CVTTQ | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, dst_r, TMP_FREG2)); + + /* Saturate high: src >= 2^(w-1) -> max. CMPTLE leaves 2.0/0.0. */ + FAIL_IF(load_immediate(compiler, TMP_REG1, hi_bits, TMP_REG3)); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG2, TMP_REG1)); + FAIL_IF(push_inst(compiler, CMPTLE | FA(TMP_FREG2) | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(load_immediate(compiler, TMP_REG1, sat_max, TMP_REG3)); + FAIL_IF(push_inst(compiler, CMOVNE | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(dst_r))); + + /* Saturate low: src < -2^(w-1) -> min. */ + FAIL_IF(load_immediate(compiler, TMP_REG1, lo_bits, TMP_REG3)); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG2, TMP_REG1)); + FAIL_IF(push_inst(compiler, CMPTLT | FA(src) | FB(TMP_FREG2) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(load_immediate(compiler, TMP_REG1, sat_min, TMP_REG3)); + FAIL_IF(push_inst(compiler, CMOVNE | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(dst_r))); + + /* NaN -> 0 (an ordered self-compare is false only for NaN). */ + FAIL_IF(push_inst(compiler, CMPTEQ | FA(src) | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(TMP_ZERO) | RC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, (is_i32 ? INT_DATA : WORD_DATA), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, ((GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) ? INT_DATA : WORD_DATA) | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) + srcw = (sljit_s32)srcw; + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw, TMP_REG3)); + src = TMP_REG1; + } + + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, src)); + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? CVTQS : CVTQT) | FB(TMP_FREG1) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_uw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + sljit_ins cvt = (op & SLJIT_32) ? CVTQS : CVTQT; + sljit_ins add = (op & SLJIT_32) ? ADDS : ADDT; + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_U32) { + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, INT_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_sw)(sljit_uw)(sljit_u32)srcw, TMP_REG3)); + src = TMP_REG1; + } + + /* An unsigned 32 bit value is a small positive 64 bit integer, so the + signed conversion is exact once the low word is zero-extended. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, TMP_REG1)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; + } + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw, TMP_REG3)); + src = TMP_REG1; + } + + /* While bit 63 is clear the signed conversion is exact. */ + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, src)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + + /* Otherwise convert (src >> 1) | (src & 1) (round-to-odd keeps the dropped + bit sticky) and double the result. The branch skips the fixup, which is + five instructions plus the integer to float transfer. */ + FAIL_IF(push_inst(compiler, BGE | RA(src) | ((sljit_ins)(5 + int_float_move_size()) & 0x1fffff))); + FAIL_IF(push_inst(compiler, SRL | RA(src) | ALPHA_LIT(1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, AND | RA(src) | ALPHA_LIT(1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, TMP_REG2)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + FAIL_IF(push_inst(compiler, add | FA(dst_r) | FB(dst_r) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_ins inst; + + if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + src1 = TMP_FREG1; + } + + if (src2 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + src2 = TMP_FREG2; + } + + /* Compute a canonical comparison per negation pair into TMP_FREG1 + (2.0 = true, 0.0 = false). get_jump_instruction picks the branch + polarity (BNE for the positive member, BEQ for its negation). */ + switch (GET_FLAG_TYPE(op)) { + case SLJIT_F_EQUAL: + case SLJIT_F_NOT_EQUAL: + case SLJIT_ORDERED_EQUAL: + case SLJIT_UNORDERED_OR_NOT_EQUAL: + inst = CMPTEQ | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_F_LESS: + case SLJIT_F_GREATER_EQUAL: + case SLJIT_ORDERED_LESS: + case SLJIT_UNORDERED_OR_GREATER_EQUAL: + inst = CMPTLT | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_F_GREATER: + case SLJIT_F_LESS_EQUAL: + case SLJIT_ORDERED_GREATER: + case SLJIT_UNORDERED_OR_LESS_EQUAL: + inst = CMPTLT | FA(src2) | FB(src1) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_LESS_EQUAL: + case SLJIT_UNORDERED_OR_GREATER: + inst = CMPTLE | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_GREATER_EQUAL: + case SLJIT_UNORDERED_OR_LESS: + inst = CMPTLE | FA(src2) | FB(src1) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_NOT_EQUAL: + case SLJIT_UNORDERED_OR_EQUAL: + /* ordered && a != b <=> (a < b) || (a > b). */ + FAIL_IF(push_inst(compiler, CMPTLT | FA(src1) | FB(src2) | FC(TMP_FREG1))); + FAIL_IF(push_inst(compiler, CMPTLT | FA(src2) | FB(src1) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG1)); + FAIL_IF(emit_float_to_int(compiler, 0, TMP_REG1, TMP_FREG2)); + FAIL_IF(push_inst(compiler, BIS | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(OTHER_FLAG))); + /* Normalize the 2.0 bit pattern to a clean 0/1. */ + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + default: /* SLJIT_ORDERED, SLJIT_UNORDERED */ + inst = CMPTUN | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + } + + FAIL_IF(push_inst(compiler, inst)); + /* Move the boolean (2.0 or 0.0) result into OTHER_FLAG and normalize to 0/1. */ + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG1)); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r; + + CHECK_ERROR(); + SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) + op ^= SLJIT_32; + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_r, src, srcw)); + src = dst_r; + } + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_F64: + if (src != dst_r) { + if (!(dst & SLJIT_MEM)) + FAIL_IF(push_inst(compiler, CPYS | FA(src) | FB(src) | FC(dst_r))); + else + dst_r = src; + } + break; + case SLJIT_NEG_F64: + FAIL_IF(push_inst(compiler, CPYSN | FA(src) | FB(src) | FC(dst_r))); + break; + case SLJIT_ABS_F64: + FAIL_IF(push_inst(compiler, CPYS | FA(TMP_ZERO) | FB(src) | FC(dst_r))); + break; + case SLJIT_CONV_F64_FROM_F32: + /* Value already held in double format after the LDS load. */ + if (src != dst_r) + FAIL_IF(push_inst(compiler, CPYS | FA(src) | FB(src) | FC(dst_r))); + op ^= SLJIT_32; + break; + } + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 dst_r, flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG2; + + if (src1 & SLJIT_MEM) { + if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) { + FAIL_IF(compiler->error); + src1 = TMP_FREG1; + } else + flags |= SLOW_SRC1; + } + + if (src2 & SLJIT_MEM) { + if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) { + FAIL_IF(compiler->error); + src2 = TMP_FREG2; + } else + flags |= SLOW_SRC2; + } + + if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) { + if ((dst & SLJIT_MEM) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) { + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + } else { + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + } + } else if (flags & SLOW_SRC1) + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + else if (flags & SLOW_SRC2) + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + + if (flags & SLOW_SRC1) + src1 = TMP_FREG1; + if (flags & SLOW_SRC2) + src2 = TMP_FREG2; + + switch (GET_OPCODE(op)) { + case SLJIT_ADD_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? ADDS : ADDT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_SUB_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? SUBS : SUBT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_MUL_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? MULS : MULT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_DIV_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? DIVS : DIVT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_COPYSIGN_F64: + return push_inst(compiler, CPYS | FA(src2) | FB(src1) | FC(dst_r)); + } + + if (dst_r != dst) + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw)); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset32(struct sljit_compiler *compiler, + sljit_s32 freg, sljit_f32 value) +{ + union { + sljit_s32 imm; + sljit_f32 value; + } u; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fset32(compiler, freg, value)); + + u.value = value; + + if (u.imm == 0) + return emit_int_to_float(compiler, 1, freg, TMP_ZERO); + + FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm, TMP_REG3)); + return emit_int_to_float(compiler, 1, freg, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *compiler, + sljit_s32 freg, sljit_f64 value) +{ + union { + sljit_sw imm; + sljit_f64 value; + } u; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fset64(compiler, freg, value)); + + u.value = value; + + if (u.imm == 0) + return emit_int_to_float(compiler, 0, freg, TMP_ZERO); + + FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm, TMP_REG3)); + return emit_int_to_float(compiler, 0, freg, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 freg, sljit_s32 reg) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_fcopy(compiler, op, freg, reg)); + + if (GET_OPCODE(op) == SLJIT_COPY_TO_F64) + return emit_int_to_float(compiler, op & SLJIT_32, freg, reg); + + return emit_float_to_int(compiler, op & SLJIT_32, reg, freg); +} + +/* --------------------------------------------------------------------- */ +/* Conditional instructions */ +/* --------------------------------------------------------------------- */ + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler) +{ + struct sljit_label *label; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_label(compiler)); + + if (compiler->last_label && compiler->last_label->size == compiler->size) + return compiler->last_label; + + label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label)); + PTR_FAIL_IF(!label); + set_label(label, compiler); + return label; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct sljit_compiler *compiler, + sljit_s32 alignment, struct sljit_read_only_buffer *buffers) +{ + sljit_uw mask = 0, i; + struct sljit_label *label = NULL; + struct sljit_label *next_label; + struct sljit_extended_label *ext_label; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_aligned_label(compiler, alignment, buffers)); + + sljit_reset_read_only_buffers(buffers); + + if (alignment <= SLJIT_LABEL_ALIGN_4) { + SLJIT_SKIP_CHECKS(compiler); + label = sljit_emit_label(compiler); + PTR_FAIL_IF(!label); + } else { + mask = ((sljit_uw)1 << alignment) - sizeof(sljit_ins); + + for (i = (mask >> 2); i != 0; i--) + PTR_FAIL_IF(push_inst(compiler, NOP)); + } + + if (label == NULL) { + ext_label = (struct sljit_extended_label*)ensure_abuf(compiler, sizeof(struct sljit_extended_label)); + PTR_FAIL_IF(!ext_label); + set_extended_label(ext_label, compiler, SLJIT_LABEL_ALIGNED, mask); + label = &ext_label->label; + } + + if (buffers == NULL) + return label; + + next_label = label; + + while (1) { + buffers->u.label = next_label; + + for (i = (buffers->size + 3) >> 2; i > 0; i--) + PTR_FAIL_IF(push_inst(compiler, NOP)); + + buffers = buffers->next; + + if (buffers == NULL) + break; + + SLJIT_SKIP_CHECKS(compiler); + next_label = sljit_emit_label(compiler); + PTR_FAIL_IF(!next_label); + } + + return label; +} + +/* Returns the branch instruction that jumps to the target when the + condition is TRUE, testing the appropriate flag register. */ +static sljit_ins get_jump_instruction(sljit_s32 type) +{ + switch (type) { + case SLJIT_EQUAL: + return BEQ | RA(EQUAL_FLAG); + case SLJIT_NOT_EQUAL: + return BNE | RA(EQUAL_FLAG); + case SLJIT_LESS: + case SLJIT_GREATER: + case SLJIT_SIG_LESS: + case SLJIT_SIG_GREATER: + case SLJIT_OVERFLOW: + case SLJIT_CARRY: + case SLJIT_ATOMIC_STORED: + case SLJIT_F_EQUAL: + case SLJIT_ORDERED_EQUAL: + case SLJIT_F_LESS: + case SLJIT_ORDERED_LESS: + case SLJIT_F_GREATER: + case SLJIT_ORDERED_GREATER: + case SLJIT_ORDERED_LESS_EQUAL: + case SLJIT_ORDERED_GREATER_EQUAL: + case SLJIT_ORDERED_NOT_EQUAL: + case SLJIT_UNORDERED: + return BNE | RA(OTHER_FLAG); + case SLJIT_GREATER_EQUAL: + case SLJIT_LESS_EQUAL: + case SLJIT_SIG_GREATER_EQUAL: + case SLJIT_SIG_LESS_EQUAL: + case SLJIT_NOT_OVERFLOW: + case SLJIT_NOT_CARRY: + case SLJIT_ATOMIC_NOT_STORED: + case SLJIT_F_NOT_EQUAL: + case SLJIT_UNORDERED_OR_NOT_EQUAL: + case SLJIT_F_GREATER_EQUAL: + case SLJIT_UNORDERED_OR_GREATER_EQUAL: + case SLJIT_F_LESS_EQUAL: + case SLJIT_UNORDERED_OR_LESS_EQUAL: + case SLJIT_UNORDERED_OR_GREATER: + case SLJIT_UNORDERED_OR_LESS: + case SLJIT_UNORDERED_OR_EQUAL: + case SLJIT_ORDERED: + return BEQ | RA(OTHER_FLAG); + default: + return 0; + } +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type) +{ + struct sljit_jump *jump; + sljit_ins inst; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_jump(compiler, type)); + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + PTR_FAIL_IF(!jump); + set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); + type &= 0xff; + + inst = get_jump_instruction(type); + + if (inst != 0) { + PTR_FAIL_IF(push_inst(compiler, inst)); + jump->flags |= IS_COND; + } + + if (type >= SLJIT_FAST_CALL) + jump->flags |= IS_CALL; + + jump->addr = compiler->size; + PTR_FAIL_IF(push_inst(compiler, 0)); + compiler->size += JUMP_MAX_SIZE - 1; + return jump; +} + +/* Move call arguments from the sljit scratch registers into the Alpha + argument registers r16-r21 / f16-f21 (positional). */ +static sljit_s32 emit_call_args(struct sljit_compiler *compiler, sljit_s32 arg_types) +{ + sljit_s32 word_arg = 0, float_arg = 0, pos = 0; + + arg_types >>= SLJIT_ARG_SHIFT; + + while (arg_types) { + if (pos < 6) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: + FAIL_IF(push_inst(compiler, CPYS | FA(SLJIT_FR0 + float_arg) | FB(SLJIT_FR0 + float_arg) | (sljit_ins)(16 + pos))); + float_arg++; + break; + default: + FAIL_IF(push_inst(compiler, BIS | RA(SLJIT_R0 + word_arg) | RB(TMP_ZERO) | (sljit_ins)(16 + pos))); + word_arg++; + break; + } + } else + return SLJIT_ERR_UNSUPPORTED; + + pos++; + arg_types >>= SLJIT_ARG_SHIFT; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 arg_types) +{ + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + + if ((type & 0xff) != SLJIT_CALL_REG_ARG) + PTR_FAIL_IF(emit_call_args(compiler, arg_types)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler, 0)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_jump(compiler, type); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw) +{ + struct sljit_jump *jump; + + CHECK_ERROR(); + CHECK(check_sljit_emit_ijump(compiler, type, src, srcw)); + + if (src != SLJIT_IMM) { + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG3, src, srcw)); + src = TMP_REG3; + } else if (src != TMP_REG3) + FAIL_IF(emit_mov(compiler, TMP_REG3, src)); + + if (type >= SLJIT_FAST_CALL) + return push_inst(compiler, JSR | RA(RETURN_ADDR_REG) | RB(TMP_REG3)); + return push_inst(compiler, JMP | RA(TMP_ZERO) | RB(TMP_REG3)); + } + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + FAIL_IF(!jump); + set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_CALL : 0)); + jump->u.target = (sljit_uw)srcw; + + jump->addr = compiler->size; + FAIL_IF(push_inst(compiler, 0)); + compiler->size += JUMP_MAX_SIZE - 1; + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 arg_types, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG3, src, srcw)); + src = TMP_REG3; + } + + if ((type & 0xff) != SLJIT_CALL_REG_ARG) + FAIL_IF(emit_call_args(compiler, arg_types)); + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) { + FAIL_IF(emit_mov(compiler, TMP_REG3, src)); + src = TMP_REG3; + } + + FAIL_IF(emit_stack_frame_release(compiler, 0)); + type = SLJIT_JUMP; + } + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_ijump(compiler, type, src, srcw); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 type) +{ + sljit_s32 src_r, dst_r, invert; + sljit_s32 saved_op = op; + sljit_s32 mem_type = ((op & SLJIT_32) || op == SLJIT_MOV32) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + op = GET_OPCODE(op); + dst_r = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2; + + if (op >= SLJIT_ADD && (dst & SLJIT_MEM)) + FAIL_IF(emit_op_mem2(compiler, mem_type | LOAD_DATA, TMP_REG1, dst, dstw)); + + /* The boolean condition ends up (0 or non-zero) in src_r. */ + invert = 0; + if (type == SLJIT_EQUAL) { + FAIL_IF(push_inst(compiler, CMPEQ | RA(EQUAL_FLAG) | RB(TMP_ZERO) | RC(dst_r))); + src_r = dst_r; + } else if (type == SLJIT_NOT_EQUAL) { + FAIL_IF(push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(dst_r))); + src_r = dst_r; + } else { + src_r = OTHER_FLAG; + /* get_jump_instruction returns BEQ OTHER_FLAG for the inverted set. */ + if ((get_jump_instruction(type) & OP(0x3f)) == BEQ) + invert = 1; + } + + if (invert) { + FAIL_IF(push_inst(compiler, CMPEQ | RA(src_r) | RB(TMP_ZERO) | RC(dst_r))); + src_r = dst_r; + } + + if (op < SLJIT_ADD) { + if (dst & SLJIT_MEM) + return emit_op_mem(compiler, mem_type, src_r, dst, dstw); + + return emit_mov(compiler, dst_r, src_r); + } + + mem_type |= CUMULATIVE_OP | IMM_OP | ALT_KEEP_CACHE; + + if (dst & SLJIT_MEM) + return emit_op(compiler, saved_op, mem_type, dst, dstw, TMP_REG1, 0, src_r, 0); + return emit_op(compiler, saved_op, mem_type, dst, dstw, dst, dstw, src_r, 0); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst_reg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2_reg) +{ + sljit_s32 flag_reg; + sljit_ins cmov_true, cmov_false; + sljit_s32 inp_flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; + + CHECK_ERROR(); + CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg)); + + ADJUST_LOCAL_OFFSET(src1, src1w); + + if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, inp_flags, TMP_REG1, src1, src1w)); + src1 = TMP_REG1; + } else if (src1 == SLJIT_IMM) { + if (type & SLJIT_32) + src1w = (sljit_s32)src1w; + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1 = TMP_REG1; + } + + /* pick_cmov sets dst = src1 when the condition is true. When dst == src1 + invert it and conditionally load src2_reg instead (src1 must survive). */ + if (type & SLJIT_COMPARE_SELECT) { + /* dst = (src1 src2_reg) ? src1 : src2_reg. */ + sljit_ins cmp; + flag_reg = OTHER_FLAG; + cmov_true = CMOVNE; + + switch (type & ~(SLJIT_32 | SLJIT_COMPARE_SELECT)) { + case SLJIT_EQUAL: + cmp = CMPEQ | RA(src1) | RB(src2_reg); + break; + case SLJIT_NOT_EQUAL: + cmp = CMPEQ | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_LESS: + cmp = CMPULT | RA(src1) | RB(src2_reg); + break; + case SLJIT_GREATER_EQUAL: + cmp = CMPULT | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_GREATER: + cmp = CMPULT | RA(src2_reg) | RB(src1); + break; + case SLJIT_LESS_EQUAL: + cmp = CMPULT | RA(src2_reg) | RB(src1); + cmov_true = CMOVEQ; + break; + case SLJIT_SIG_LESS: + cmp = CMPLT | RA(src1) | RB(src2_reg); + break; + case SLJIT_SIG_GREATER_EQUAL: + cmp = CMPLT | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_SIG_GREATER: + cmp = CMPLT | RA(src2_reg) | RB(src1); + break; + default: /* SLJIT_SIG_LESS_EQUAL */ + cmp = CMPLT | RA(src2_reg) | RB(src1); + cmov_true = CMOVEQ; + break; + } + + FAIL_IF(push_inst(compiler, cmp | RC(OTHER_FLAG))); + + if (dst_reg == src1) { + cmov_false = (cmov_true == CMOVNE) ? CMOVEQ : CMOVNE; + return push_inst(compiler, cmov_false | RA(flag_reg) | RB(src2_reg) | RC(dst_reg)); + } + + if (dst_reg != src2_reg) + FAIL_IF(emit_mov(compiler, dst_reg, src2_reg)); + return push_inst(compiler, cmov_true | RA(flag_reg) | RB(src1) | RC(dst_reg)); + } + + /* dst = cond ? src1 : src2_reg (condition from the current flags). */ + type &= ~SLJIT_32; + + if (type == SLJIT_EQUAL) { + flag_reg = EQUAL_FLAG; + cmov_true = CMOVEQ; + } else if (type == SLJIT_NOT_EQUAL) { + flag_reg = EQUAL_FLAG; + cmov_true = CMOVNE; + } else { + flag_reg = OTHER_FLAG; + cmov_true = ((get_jump_instruction(type) & OP(0x3f)) == BEQ) ? CMOVEQ : CMOVNE; + } + + if (dst_reg == src1) { + cmov_false = (cmov_true == CMOVNE) ? CMOVEQ : CMOVNE; + return push_inst(compiler, cmov_false | RA(flag_reg) | RB(src2_reg) | RC(dst_reg)); + } + + if (dst_reg != src2_reg) + FAIL_IF(emit_mov(compiler, dst_reg, src2_reg)); + return push_inst(compiler, cmov_true | RA(flag_reg) | RB(src1) | RC(dst_reg)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst_freg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2_freg) +{ + sljit_ins branch; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fselect(compiler, type, dst_freg, src1, src1w, src2_freg)); + + ADJUST_LOCAL_OFFSET(src1, src1w); + + if (!(src1 & SLJIT_MEM) && dst_freg == src1) { + /* dst holds src1: keep it when the condition is true, else copy src2. + Branch (non-inverted) over the src2 copy when the condition holds. */ + branch = get_jump_instruction(type & ~SLJIT_32); + FAIL_IF(push_inst(compiler, branch | (1 & 0x1fffff))); + return push_inst(compiler, CPYS | FA(src2_freg) | FB(src2_freg) | FC(dst_freg)); + } + + if (dst_freg != src2_freg) + FAIL_IF(push_inst(compiler, CPYS | FA(src2_freg) | FB(src2_freg) | FC(dst_freg))); + + if (src1 & SLJIT_MEM) { + /* Load into TMP_FREG2, avoiding TMP_FREG1: the latter is exposed to the + caller as SLJIT_TMP_DEST_FREG and may hold a value that must survive + when the condition is false (both dst_freg and src2_freg live). */ + sljit_s32 tmp_freg = (dst_freg == TMP_FREG2) ? TMP_FREG1 : TMP_FREG2; + FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(type) | LOAD_DATA, tmp_freg, src1, src1w)); + src1 = tmp_freg; + } + + /* Branch over the copy when the condition is false (invert). */ + branch = get_jump_instruction(type & ~SLJIT_32) ^ ((sljit_ins)0x04 << 26); + FAIL_IF(push_inst(compiler, branch | (1 & 0x1fffff))); + return push_inst(compiler, CPYS | FA(src1) | FB(src1) | FC(dst_freg)); +} + +#undef FLOAT_DATA + +/* Materialize the effective address of (mem, memw) into *mem (a register), *memw=0. + * Uses TMP_REG1 for any computation; TMP_REG3 as scratch for load_immediate. */ +static sljit_s32 update_mem_addr(struct sljit_compiler *compiler, + sljit_s32 *mem, sljit_sw *memw) +{ + sljit_s32 arg = *mem; + sljit_sw argw = *memw; + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + if (SLJIT_UNLIKELY(argw != 0)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(arg & REG_MASK) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(arg & REG_MASK) | RB(OFFS_REG(arg)) | RC(TMP_REG1))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; + } + + *mem = arg & REG_MASK; + if (argw == 0) + return SLJIT_SUCCESS; + + if (argw >= SIMM_MIN && argw <= SIMM_MAX) { + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(*mem) | DISP16(argw))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; + } + + FAIL_IF(load_immediate(compiler, TMP_REG1, argw, TMP_REG3)); + if (arg & REG_MASK) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(arg & REG_MASK) | RC(TMP_REG1))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; +} + +/* Synthesize an unaligned multi-byte memory access using LDQ_U + EXT/INS/MSK + STQ_U. + * Called only when SLJIT_MEM_UNALIGNED is set and the operand is wider than 8 bits. + * Clobbers TMP_REG1, TMP_REG2, TMP_REG3. */ +static sljit_s32 emit_unaligned_mem(struct sljit_compiler *compiler, + sljit_s32 type, sljit_s32 reg, sljit_s32 mem, sljit_sw memw) +{ + sljit_s32 op = GET_OPCODE(type); + sljit_ins extl, exth, mskl, mskh, insl, insh; + sljit_sw hi_off; + + ADJUST_LOCAL_OFFSET(mem, memw); + FAIL_IF(update_mem_addr(compiler, &mem, &memw)); + + /* Ensure the effective address is in TMP_REG1: used as the LDQ_U/STQ_U + * base and as the byte-position argument (low 3 bits) to EXT/INS/MSK. */ + if (mem != TMP_REG1) + FAIL_IF(push_inst(compiler, BIS | RA(mem) | RB(TMP_ZERO) | RC(TMP_REG1))); + + switch (op) { + case SLJIT_MOV_U16: + case SLJIT_MOV_S16: + extl = EXTWL; exth = EXTWH; + mskl = MSKWL; mskh = MSKWH; + insl = INSWL; insh = INSWH; + hi_off = 1; + break; + case SLJIT_MOV_U32: + case SLJIT_MOV_S32: + case SLJIT_MOV32: + extl = EXTLL; exth = EXTLH; + mskl = MSKLL; mskh = MSKLH; + insl = INSLL; insh = INSLH; + hi_off = 3; + break; + default: /* SLJIT_MOV, SLJIT_MOV_P */ + extl = EXTQL; exth = EXTQH; + mskl = MSKQL; mskh = MSKQH; + insl = INSQL; insh = INSQH; + hi_off = 7; + break; + } + + if (type & SLJIT_MEM_STORE) { + /* Read-modify-write both aligned quadwords that overlap the value. + * Save reg to TMP_REG4 (r29/gp) if it aliases TMP_REG2 or TMP_REG3 + * so the data survives the two LDQ_U/INS sequences. */ + if (reg == TMP_REG2 || reg == TMP_REG3) { + FAIL_IF(push_inst(compiler, BIS | RA(reg) | RB(TMP_ZERO) | RC(TMP_REG4))); + reg = TMP_REG4; + } + + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, mskh | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, insh | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, mskl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, insl | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Load: extract pieces from two aligned quadwords and combine. + * Extract hi portion first, then lo, so the final BIS can write to any reg. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, exth | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, extl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(reg))); + + switch (op) { + case SLJIT_MOV_S16: + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(48) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(48) | RC(reg)); + case SLJIT_MOV_S32: + case SLJIT_MOV32: + /* ADDL sign-extends bits 31:0 to 64 bits. */ + return push_inst(compiler, ADDL | RA(reg) | RB(TMP_ZERO) | RC(reg)); + default: + return SLJIT_SUCCESS; + } +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 reg, + sljit_s32 mem, sljit_sw memw) +{ + sljit_s32 flags; + sljit_s32 op; + + CHECK_ERROR(); + CHECK(check_sljit_emit_mem(compiler, type, reg, mem, memw)); + + if (!(reg & REG_PAIR_MASK)) { + op = GET_OPCODE(type); + /* When any alignment hint is set, check whether the guaranteed alignment + * meets Alpha's natural-alignment requirement for this operand size: + * 16-bit: 2B (ALIGNED_16 or ALIGNED_32 suffices) + * 32-bit: 4B (only ALIGNED_32 suffices) + * 64-bit: 8B (no hint flag provides this guarantee) + * If the guarantee falls short, synthesize with LDQ_U + EXT/INS/MSK. */ + if (type & (SLJIT_MEM_UNALIGNED | SLJIT_MEM_ALIGNED_16 | SLJIT_MEM_ALIGNED_32)) { + if (op == SLJIT_MOV_U8 || op == SLJIT_MOV_S8) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + if ((op == SLJIT_MOV_U16 || op == SLJIT_MOV_S16) + && !(type & SLJIT_MEM_UNALIGNED)) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + if ((op == SLJIT_MOV_U32 || op == SLJIT_MOV_S32 || op == SLJIT_MOV32) + && (type & SLJIT_MEM_ALIGNED_32)) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + return emit_unaligned_mem(compiler, type, reg, mem, memw); + } + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + } + + /* Pair register path. LDQ/STQ require 8B alignment; no hint flag + * provides that guarantee, so synthesize both QW accesses when any + * alignment/unaligned flag is present. After emit_unaligned_mem + * returns, TMP_REG1 always holds the effective address. */ + if (type & (SLJIT_MEM_UNALIGNED | SLJIT_MEM_ALIGNED_16 | SLJIT_MEM_ALIGNED_32)) { + FAIL_IF(emit_unaligned_mem(compiler, type, REG_PAIR_FIRST(reg), mem, memw)); + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(TMP_REG1) | DISP16(SSIZE_OF(sw)))); + return emit_unaligned_mem(compiler, type, REG_PAIR_SECOND(reg), SLJIT_MEM1(TMP_REG1), 0); + } + + ADJUST_LOCAL_OFFSET(mem, memw); + + if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) { + memw &= 0x3; + + if (SLJIT_UNLIKELY(memw != 0)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(mem)) | ALPHA_LIT(memw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(mem & REG_MASK) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(mem & REG_MASK) | RB(OFFS_REG(mem)) | RC(TMP_REG1))); + + mem = TMP_REG1; + memw = 0; + } else if (memw > SIMM_MAX - SSIZE_OF(sw) || memw < SIMM_MIN) { + FAIL_IF(load_immediate(compiler, TMP_REG1, memw, TMP_REG3)); + + if (mem & REG_MASK) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(mem & REG_MASK) | RC(TMP_REG1))); + + mem = TMP_REG1; + memw = 0; + } else + mem &= REG_MASK; + + if (!(type & SLJIT_MEM_STORE) && mem == REG_PAIR_FIRST(reg)) { + FAIL_IF(push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_SECOND(reg), mem, memw + SSIZE_OF(sw))); + return push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_FIRST(reg), mem, memw); + } + + flags = WORD_DATA | (!(type & SLJIT_MEM_STORE) ? LOAD_DATA : 0); + + FAIL_IF(push_mem_inst(compiler, flags, REG_PAIR_FIRST(reg), mem, memw)); + return push_mem_inst(compiler, flags, REG_PAIR_SECOND(reg), mem, memw + SSIZE_OF(sw)); +} + +#undef TO_ARGW_HI + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 freg, + sljit_s32 mem, sljit_sw memw) +{ + sljit_ins extl, exth, mskl, mskh, insl, insh, ftox, itofx; + sljit_sw hi_off; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fmem(compiler, type, freg, mem, memw)); + + /* Alpha FP load/store (LDS/LDT/STS/STT) require natural alignment. + * Synthesize unaligned FP access using integer LDQ_U+EXT/INS/MSK+STQ_U + * combined with ITOFS/ITOFT (FIX extension) for the integer<->FP transfer. + * Without FIX, fall back to the generic path and accept the kernel fixup. */ + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_FIX)) + return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); + + /* F32 = SLJIT_MOV_F64 | SLJIT_32; distinguish by the SLJIT_32 flag, not + * the low opcode byte (which is always SLJIT_MOV_F64 for both widths). */ + if (type & SLJIT_32) { + /* LDS requires 4-byte alignment; ALIGNED_32 guarantees 4B. */ + if ((type & SLJIT_MEM_ALIGNED_32) && !(type & SLJIT_MEM_UNALIGNED)) + return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); + ftox = FTOIS; itofx = ITOFS; + extl = EXTLL; exth = EXTLH; + mskl = MSKLL; mskh = MSKLH; + insl = INSLL; insh = INSLH; + hi_off = 3; + } else { + /* LDT requires 8-byte alignment; no hint flag guarantees that. */ + ftox = FTOIT; itofx = ITOFT; + extl = EXTQL; exth = EXTQH; + mskl = MSKQL; mskh = MSKQH; + insl = INSQL; insh = INSQH; + hi_off = 7; + } + + ADJUST_LOCAL_OFFSET(mem, memw); + FAIL_IF(update_mem_addr(compiler, &mem, &memw)); + if (mem != TMP_REG1) + FAIL_IF(push_inst(compiler, BIS | RA(mem) | RB(TMP_ZERO) | RC(TMP_REG1))); + + if (type & SLJIT_MEM_STORE) { + /* Copy FP source to TMP_FREG1 so we can read its integer bits twice + * (once per aligned quadword) using FTOIS/FTOIT without needing a + * spare GPR to hold the value across the two RMW sequences. */ + FAIL_IF(push_inst(compiler, CPYS | FA(freg) | FB(freg) | FC(TMP_FREG1))); + + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, mskh | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ftox | FA(TMP_FREG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, insh | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, mskl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ftox | FA(TMP_FREG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, insl | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Load: extract pieces from two aligned quadwords, combine, then + * move to the FP register via ITOFS/ITOFT. Write the combined integer + * result to TMP_REG1 (addr is no longer needed after the EXT steps). */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, exth | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, extl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG1))); + return push_inst(compiler, itofx | RA(TMP_REG1) | FC(freg)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_load(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 mem_reg) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_atomic_load(compiler, op, dst_reg, mem_reg)); + + if (op & SLJIT_ATOMIC_USE_CAS) + return SLJIT_ERR_UNSUPPORTED; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + ins = LDQ_L; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + ins = LDL_L; + break; + default: + return SLJIT_ERR_UNSUPPORTED; + } + + if (op & SLJIT_ATOMIC_TEST) + return SLJIT_SUCCESS; + + return push_inst(compiler, ins | RA(dst_reg) | RB(mem_reg) | DISP16(0)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_store(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src_reg, + sljit_s32 mem_reg, + sljit_s32 temp_reg) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_atomic_store(compiler, op, src_reg, mem_reg, temp_reg)); + + if (op & SLJIT_ATOMIC_USE_CAS) + return SLJIT_ERR_UNSUPPORTED; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + ins = STQ_C; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + ins = STL_C; + break; + default: + return SLJIT_ERR_UNSUPPORTED; + } + + if (op & SLJIT_ATOMIC_TEST) + return SLJIT_SUCCESS; + + /* STx_C overwrites src_reg with the success flag (1 = stored). */ + FAIL_IF(emit_mov(compiler, TMP_REG1, src_reg)); + FAIL_IF(push_inst(compiler, ins | RA(TMP_REG1) | RB(mem_reg) | DISP16(0))); + /* OTHER_FLAG is set (stored) when TMP_REG1 == 1. */ + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_REG1) | RC(OTHER_FLAG)); +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_sw init_value) +{ + struct sljit_const *const_; + sljit_s32 dst_r; + sljit_s32 mem_flags = WORD_DATA; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_const(compiler, op, dst, dstw, init_value)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const)); + PTR_FAIL_IF(!const_); + set_const(const_, compiler); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_U8: + /* Match the shared patchable-const encoding: bit 8 sign-extends the + byte so a subsequent wider store observes the sign bits. */ + if (init_value & 0x100) + init_value = (init_value & 0xff) | ~(sljit_sw)0xff; + else + init_value &= 0xff; + mem_flags = BYTE_DATA; + break; + case SLJIT_MOV32: + /* Plain 32 bit: store only the low word (keep the upper memory bits). */ + mem_flags = INT_DATA; + /* fallthrough */ + case SLJIT_MOV_S32: + /* Signed 32 bit: sign extend and store the full word. */ + init_value = (sljit_s32)init_value; + break; + } + + PTR_FAIL_IF(emit_const(compiler, dst_r, init_value)); + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, mem_flags, TMP_REG2, dst, dstw)); + + return const_; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_op_addr(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw) +{ + struct sljit_jump *jump; + sljit_s32 dst_r, target_r; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_op_addr(compiler, op, dst, dstw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + + if (op != SLJIT_ADD_ABS_ADDR) + target_r = dst_r; + else { + target_r = TMP_REG1; + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG2, dst, dstw)); + } + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + PTR_FAIL_IF(!jump); + set_mov_addr(jump, compiler, 0); + + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)target_r)); + compiler->size += JUMP_MAX_SIZE - 1; + + if (op == SLJIT_ADD_ABS_ADDR) + PTR_FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | RB(TMP_REG1) | RC(dst_r))); + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw)); + + return jump; +} + +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset) +{ + sljit_ins *inst = (sljit_ins *)addr; + sljit_sw high; + sljit_s32 low; + + SLJIT_UNUSED_ARG(executable_offset); + + low = (sljit_s32)new_target; + high = (sljit_sw)new_target >> 32; + if (low < 0) + high++; + + SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 0); + inst[0] = (inst[0] & ~(sljit_ins)0xffff) | ALPHA_HI16((sljit_s32)high); + inst[1] = (inst[1] & ~(sljit_ins)0xffff) | ALPHA_LO16((sljit_s32)high); + /* inst[2] is the SLL, unchanged. */ + inst[3] = (inst[3] & ~(sljit_ins)0xffff) | ALPHA_HI16(low); + inst[4] = (inst[4] & ~(sljit_ins)0xffff) | ALPHA_LO16(low); + SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 1); + + inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); + SLJIT_CACHE_FLUSH(inst, inst + 5); +} + +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_s32 op, sljit_sw new_constant, sljit_sw executable_offset) +{ + switch (GET_OPCODE(op)) { + case SLJIT_MOV_U8: + if (new_constant & 0x100) + new_constant = (new_constant & 0xff) | ~(sljit_sw)0xff; + else + new_constant &= 0xff; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + new_constant = (sljit_s32)new_constant; + break; + } + + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); +} diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c index 16ef39940c..ef2762f398 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c @@ -2650,7 +2650,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c index dabbd3b079..06d94a96aa 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c @@ -70,7 +70,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VM(vm) ((sljit_ins)freg_map[vm] << 16) /* --------------------------------------------------------------------- */ -/* Instruction forms */ +/* Instruction forms */ /* --------------------------------------------------------------------- */ #define ADC 0x9a000000 @@ -157,7 +157,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SDIV 0x9ac00c00 #define SMADDL 0x9b200000 #define SMOV 0x0e002c00 -#define SMULH 0x9b403c00 +#define SMULH 0x9b407c00 #define SSHLL 0x0f00a400 #define ST1 0x0c007000 #define ST1_s 0x0d000000 @@ -173,7 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define STUR_FI 0x3c000000 #define STURBI 0x38000000 #define STXR 0xc8007c00 -#define STXRB 0x8007c00 +#define STXRB 0x08007c00 #define STXRH 0x48007c00 #define SUB 0xcb000000 #define SUBI 0xd1000000 @@ -184,7 +184,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define UCVTF 0x9e630000 #define UDIV 0x9ac00800 #define UMOV 0x0e003c00 -#define UMULH 0x9bc03c00 +#define UMULH 0x9bc07c00 #define USHLL 0x2f00a400 #define USHR 0x2f000400 #define USRA 0x2f001400 @@ -1893,7 +1893,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c index eab9ec1ff0..66084571c6 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c @@ -2217,7 +2217,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c index 13319669a5..83e6e297c2 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c @@ -70,9 +70,9 @@ LoongArch instructions are 32 bits wide, belonging to 9 basic instruction format | 1RI21 | Opcode + I21L + Rj + I21H | | I26 | Opcode + I26L + I26H | -Rd is the destination register operand, while Rj, Rk and Ra (“a” stands for “additional”) are the source register operands. +Rd is the destination register operand, while Rj, Rk and Ra ("a" stands for "additional") are the source register operands. I8/I12/I14/I16/I21/I26 are immediate operands of respective width. The longer I21 and I26 are stored in separate higher and -lower parts in the instruction word, denoted by the “L” and “H” suffixes. */ +lower parts in the instruction word, denoted by the "L" and "H" suffixes. */ #define RD(rd) ((sljit_ins)reg_map[rd]) #define RJ(rj) ((sljit_ins)reg_map[rj] << 5) @@ -2191,7 +2191,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c index 771abfec24..96fa342f94 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c @@ -2811,7 +2811,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c index 07df86f315..ea0597b719 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c @@ -292,14 +292,14 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #endif /* SLJIT_LITTLE_ENDIAN */ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func) +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)) { sljit_uw* ptrs; if (func_ptr) *func_ptr = (void*)context; - ptrs = (sljit_uw*)func; + ptrs = (sljit_uw*)(sljit_uw)func; context->addr = addr ? addr : ptrs[0]; context->r2 = ptrs[1]; context->r11 = ptrs[2]; @@ -749,7 +749,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (((sljit_sw)code_ptr) & 0x4) code_ptr++; #endif /* SLJIT_CONFIG_PPC_64 */ - sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code); + sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void (*)(void))sljit_generate_code); } #endif /* SLJIT_INDIRECT_CALL */ @@ -1422,6 +1422,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile op = GET_OPCODE(op); switch (op) { case SLJIT_BREAKPOINT: + return push_inst(compiler, 0x7fe00008); case SLJIT_NOP: return push_inst(compiler, NOP); case SLJIT_LMUL_UW: @@ -1733,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #define TEST_ADD_IMM(src, srcw) \ ((src) == SLJIT_IMM && (srcw) <= 0x7fff7fffl && (srcw) >= -0x80000000l) #define TEST_UI_IMM(src, srcw) \ - ((src) == SLJIT_IMM && !((srcw) & ~0xffffffff)) + ((src) == SLJIT_IMM && !((srcw) & ~(sljit_sw)0xffffffff)) #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ @@ -2141,7 +2142,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } @@ -2575,7 +2576,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { - case SLJIT_NOT_CARRY: + case SLJIT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (4 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2584,7 +2585,7 @@ static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type case SLJIT_ATOMIC_STORED: return (12 << 21) | (2 << 16); - case SLJIT_CARRY: + case SLJIT_NOT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (12 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2675,7 +2676,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile type &= 0xff; if ((type | 0x1) == SLJIT_NOT_CARRY) - PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO) | B(TMP_ZERO))); + PTR_FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO))); /* In PPC, we don't need to touch the arguments. */ if (type < SLJIT_JUMP) @@ -3033,7 +3034,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp } if ((type | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; @@ -3075,7 +3076,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com } if (((type & ~SLJIT_32) | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c index 113d1f8870..0b8ccab3eb 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c @@ -76,6 +76,11 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r if (imm <= 0x7fffffffl && imm >= S32_MIN) return load_immediate32(compiler, dst_r, imm); + if (RISCV_HAS_BITMANIP_A(93) && (sljit_uw)imm <= 0xffffffff) { + FAIL_IF(load_immediate(compiler, dst_r, (sljit_s32)imm, tmp_r)); + return push_inst(compiler, ADD_UW | RD(dst_r) | RS1(dst_r) | RS2(TMP_ZERO)); + } + /* Shifted small immediates. */ high = imm; diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c index dec12c9a67..1089bddb87 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c @@ -158,9 +158,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) { /* The arch string is not entirely correct since 'g' contains 'a'. */ #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) - return "RISC-V-32 (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #else /* !SLJIT_CONFIG_RISCV_32 */ - return "RISC-V-64 (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #endif /* SLJIT_CONFIG_RISCV_32 */ } @@ -248,6 +248,7 @@ static const sljit_u8 vreg_map[SLJIT_NUMBER_OF_VECTOR_REGISTERS + 3] = { #define ADD (F7(0x0) | F3(0x0) | OPC(0x33)) #define ADDI (F3(0x0) | OPC(0x13)) +#define ADD_UW (F7(0x4) | F3(0x0) | OPC(0x3b)) #define AND (F7(0x0) | F3(0x7) | OPC(0x33)) #define ANDI (F3(0x7) | OPC(0x13)) #define AUIPC (OPC(0x17)) @@ -1983,6 +1984,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MOV_U32: SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { + if (RISCV_HAS_BITMANIP_A(93)) + return push_inst(compiler, ADD_UW | RD(dst) | RS1(src2) | RS2(TMP_ZERO)); FAIL_IF(push_inst(compiler, SLLI | RD(dst) | RS1(src2) | IMM_I(32))); return push_inst(compiler, SRLI | RD(dst) | RS1(dst) | IMM_I(32)); } @@ -2046,15 +2049,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } - else if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else if (op & SLJIT_SET_Z) FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(src2))); /* Only the zero flag is needed. */ @@ -2088,7 +2089,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl } /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */ - if (is_overflow || carry_src_r != 0) { + if (carry_src_r != 0 || (is_overflow && !(flags & SRC2_IMM))) { if (flags & SRC2_IMM) FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(dst) | IMM_I(src2))); else @@ -2098,6 +2099,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2234,18 +2241,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } else if (op & SLJIT_SET_Z) - FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); - - if (is_overflow || is_carry) - FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); + if (is_carry) + FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + } /* Only the zero flag is needed. */ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK)) { @@ -2276,6 +2283,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2901,7 +2914,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c index 98f671e102..1032ec0ba9 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c @@ -3163,7 +3163,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c index 25085a8f9f..840443fd8e 100644 --- a/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c +++ b/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c @@ -681,6 +681,9 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p sljit_s32 short_jump; sljit_uw label_addr; sljit_uw jump_addr; +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + sljit_uw rel_size; +#endif /* SLJIT_CONFIG_X86_64 */ jump_addr = (sljit_uw)code_ptr; if (!(jump->flags & JUMP_ADDR)) { @@ -692,7 +695,8 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p label_addr = jump->u.target - (sljit_uw)executable_offset; #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - if ((sljit_sw)(label_addr - (jump_addr + 6)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + 5)) < HALFWORD_MIN) + rel_size = (type < SLJIT_JUMP) ? 6 : 5; + if ((sljit_sw)(label_addr - (jump_addr + rel_size)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + rel_size)) < HALFWORD_MIN) return detect_far_jump_type(jump, code_ptr); #endif /* SLJIT_CONFIG_X86_64 */ @@ -1067,7 +1071,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_COPY_F32: case SLJIT_HAS_COPY_F64: case SLJIT_HAS_ATOMIC: + return 1; + case SLJIT_HAS_MEMORY_BARRIER: +#if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2) + if (cpu_feature_list == 0) + get_cpu_features(); + return (cpu_feature_list & CPU_FEATURE_SSE2) != 0; +#endif return 1; #if !(defined SLJIT_IS_FPU_AVAILABLE) || SLJIT_IS_FPU_AVAILABLE @@ -3036,7 +3047,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/pcre2/src/config-cmake.h.in b/vendor/pcre2/src/config-cmake.h.in index bcc62c0464..fb994d8284 100644 --- a/vendor/pcre2/src/config-cmake.h.in +++ b/vendor/pcre2/src/config-cmake.h.in @@ -13,6 +13,7 @@ #cmakedefine HAVE_MEMFD_CREATE 1 #cmakedefine HAVE_SECURE_GETENV 1 +#cmakedefine HAVE_SETRLIMIT 1 #cmakedefine SUPPORT_PCRE2_8 1 #cmakedefine SUPPORT_PCRE2_16 1 diff --git a/vendor/pcre2/src/config.h.generic b/vendor/pcre2/src/config.h.generic deleted file mode 100644 index 48da31e1b2..0000000000 --- a/vendor/pcre2/src/config.h.generic +++ /dev/null @@ -1,494 +0,0 @@ -/* src/config.h. Generated from config.h.in by configure. */ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* PCRE2 is written in Standard C, but there are a few non-standard things it -can cope with, allowing it to run on SunOS4 and other "close to standard" -systems. - -In environments that support the GNU autotools, config.h.in is converted into -config.h by the "configure" script. In environments that use CMake, -config-cmake.in is converted into config.h. If you are going to build PCRE2 "by -hand" without using "configure" or CMake, you should copy the distributed -config.h.generic to config.h, and edit the macro definitions to be the way you -need them. You must then add -DHAVE_CONFIG_H to all of your compile commands, -so that config.h is included at the start of every source. - -Alternatively, you can avoid editing by using -D on the compiler command line -to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H, -but if you do, default values will be taken from config.h for non-boolean -macros that are not defined on the command line. - -Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be -defined (conventionally to 1) for TRUE, and not defined at all for FALSE. All -such macros are listed as a commented #undef in config.h.generic. Macros such -as MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are -surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ - -/* By default, the \R escape sequence matches any Unicode line ending - character or sequence of characters. If BSR_ANYCRLF is defined (to any - value), this is changed so that backslash-R matches only CR, LF, or CRLF. - The build-time default can be overridden by the user of PCRE2 at runtime. - */ -/* #undef BSR_ANYCRLF */ - -/* Define to any value to disable the use of the z and t modifiers in - formatting settings such as %zu or %td (this is rarely needed). */ -/* #undef DISABLE_PERCENT_ZT */ - -/* If you are compiling for a system that uses EBCDIC instead of ASCII - character codes, define this macro to any value. When EBCDIC is set, PCRE2 - assumes that all input strings are in EBCDIC. If you do not define this - macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It - is not possible to build a version of PCRE2 that supports both EBCDIC and - ASCII or UTF-8/16/32. */ -/* #undef EBCDIC */ - -/* To force an EBCDIC environment, define this macro to make the core PCRE2 - library functions use EBCDIC codepage 1047, regardless of whether the - compiler supports it using C character literals. */ -/* #undef EBCDIC_IGNORING_COMPILER */ - -/* In an EBCDIC environment, define this macro to any value to arrange for the - NL character to be 0x25 instead of the default 0x15. NL plays the role that - LF does in an ASCII/Unicode environment. */ -/* #undef EBCDIC_NL25 */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ASSERT_H */ - -/* Define this if your compiler supports __attribute__((uninitialized)) */ -/* #undef HAVE_ATTRIBUTE_UNINITIALIZED */ - -/* Define this if your compiler provides __assume() */ -/* #undef HAVE_BUILTIN_ASSUME */ - -/* Define this if your compiler provides __builtin_mul_overflow() */ -/* #undef HAVE_BUILTIN_MUL_OVERFLOW */ - -/* Define this if your compiler provides __builtin_unreachable() */ -/* #undef HAVE_BUILTIN_UNREACHABLE */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_BZLIB_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DIRENT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_EDITLINE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_EDIT_READLINE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_INTTYPES_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_LIMITS_H */ - -/* Define to 1 if you have the `memfd_create' function. */ -/* #undef HAVE_MEMFD_CREATE */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_MINIX_CONFIG_H */ - -/* Define to 1 if you have the `mkostemp' function. */ -/* #undef HAVE_MKOSTEMP */ - -/* Define if you have POSIX threads libraries and header files. */ -/* #undef HAVE_PTHREAD */ - -/* Have PTHREAD_PRIO_INHERIT. */ -/* #undef HAVE_PTHREAD_PRIO_INHERIT */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_HISTORY_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_READLINE_H */ - -/* Define to 1 if you have the `realpath' function. */ -/* #undef HAVE_REALPATH */ - -/* Define to 1 if you have the `secure_getenv' function. */ -/* #undef HAVE_SECURE_GETENV */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDINT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDIO_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDLIB_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRINGS_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRING_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_STAT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_TYPES_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_WAIT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_UNISTD_H */ - -/* Define to 1 if the compiler supports GCC compatible visibility - declarations. */ -/* #undef HAVE_VISIBILITY */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WCHAR_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WINDOWS_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ZLIB_H */ - -/* This limits the amount of memory that may be used while matching a pattern. - It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply - to JIT matching. The value is in kibibytes (units of 1024 bytes). */ -#ifndef HEAP_LIMIT -#define HEAP_LIMIT 20000000 -#endif - -/* The value of LINK_SIZE determines the number of bytes used to store links - as offsets within the compiled regex. The default is 2, which allows for - compiled patterns up to 65535 code units long. This covers the vast - majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes - instead. This allows for longer patterns in extreme cases. */ -#ifndef LINK_SIZE -#define LINK_SIZE 2 -#endif - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -/* This is ignored unless you are using libtool. */ -#ifndef LT_OBJDIR -#define LT_OBJDIR ".libs/" -#endif - -/* The value of MATCH_LIMIT determines the default number of times the - pcre2_match() function can record a backtrack position during a single - matching attempt. The value is also used to limit a loop counter in - pcre2_dfa_match(). There is a runtime interface for setting a different - limit. The limit exists in order to catch runaway regular expressions that - take forever to determine that they do not match. The default is set very - large so that it does not accidentally catch legitimate cases. */ -#ifndef MATCH_LIMIT -#define MATCH_LIMIT 10000000 -#endif - -/* The above limit applies to all backtracks, whether or not they are nested. - In some environments it is desirable to limit the nesting of backtracking - (that is, the depth of tree that is searched) more strictly, in order to - restrict the maximum amount of heap memory that is used. The value of - MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it - must be less than the value of MATCH_LIMIT. The default is to use the same - value as MATCH_LIMIT. There is a runtime method for setting a different - limit. In the case of pcre2_dfa_match(), this limit controls the depth of - the internal nested function calls that are used for pattern recursions, - lookarounds, and atomic groups. */ -#ifndef MATCH_LIMIT_DEPTH -#define MATCH_LIMIT_DEPTH MATCH_LIMIT -#endif - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#ifndef MAX_NAME_COUNT -#define MAX_NAME_COUNT 10000 -#endif - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#ifndef MAX_NAME_SIZE -#define MAX_NAME_SIZE 128 -#endif - -/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in - characters, for a variable-length lookbehind assertion. */ -#ifndef MAX_VARLOOKBEHIND -#define MAX_VARLOOKBEHIND 255 -#endif - -/* Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns. */ -/* #undef NEVER_BACKSLASH_C */ - -/* The value of NEWLINE_DEFAULT determines the default newline character - sequence. PCRE2 client programs can override this by selecting other values - at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5 - (ANYCRLF), and 6 (NUL). */ -#ifndef NEWLINE_DEFAULT -#define NEWLINE_DEFAULT 2 -#endif - -/* Name of package */ -#define PACKAGE "pcre2" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "PCRE2" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PCRE2 10.47" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "pcre2" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "10.47" - -/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested - parentheses (of any kind) in a pattern. This limits the amount of system - stack that is used while compiling a pattern. */ -#ifndef PARENS_NEST_LIMIT -#define PARENS_NEST_LIMIT 250 -#endif - -/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by - pcre2grep to hold parts of the file it is searching. The buffer will be - expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing - very long lines. The actual amount of memory used by pcre2grep is three - times this number, because it allows for the buffering of "before" and - "after" lines. */ -#ifndef PCRE2GREP_BUFSIZE -#define PCRE2GREP_BUFSIZE 20480 -#endif - -/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer - used by pcre2grep to hold parts of the file it is searching. The actual - amount of memory used by pcre2grep is three times this number, because it - allows for the buffering of "before" and "after" lines. */ -#ifndef PCRE2GREP_MAX_BUFSIZE -#define PCRE2GREP_MAX_BUFSIZE 1048576 -#endif - -/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix - library. */ -/* #undef PCRE2POSIX_EXP_DEFN */ - -/* Define to any value if linking libpcre2-posix dynamically. Ideally, if both - static and shared libraries are being built, then PCRE2POSIX_SHARED would - be defined only for the shared build. Indeed, this is a requirement on - Windows. However, when building with Autoconf and libtool, we compile the - sources once only to create both the static and shared library, so in this - case, PCRE2POSIX_SHARED should only be defined if the shared library is - being built, regardless of whether or not the static library is also being - built. */ -/* #undef PCRE2POSIX_SHARED */ - -/* Define to any value to include debugging code. */ -/* #undef PCRE2_DEBUG */ - -/* Define to the annotation for making a symbol visible. */ -#define PCRE2_EXPORT - -/* If you are compiling for a system other than a Unix-like system or - Win32, and it needs some magic to be inserted before the definition - of a function that is exported by the library, define this macro to - contain the relevant magic. If you do not define this macro, a suitable - __declspec value is used for Windows systems; in other environments - a compiler relevant "extern" is used with any "visibility" related - attributes from PCRE2_EXPORT included. - This macro apears at the start of every exported function that is part - of the external API. It does not appear on functions that are "external" - in the C sense, but which are internal to the library. */ -/* #undef PCRE2_EXP_DEFN */ - -/* Define to any value if linking statically. Ideally, if both static and - shared libraries are being built, then PCRE2_STATIC would be defined only - for the static build. Indeed, this is a requirement on Windows. With - Autoconf and libtool however, it is idiomatic to compile the sources once - to create both the static and shared library, so in this case, PCRE2_STATIC - should only be defined if no shared library is being built. */ -/* #undef PCRE2_STATIC */ - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* Define to any non-zero number to enable support for SELinux compatible - executable memory allocator in JIT. Note that this will have no effect - unless SUPPORT_JIT is also defined. */ -/* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */ - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -/* #undef STDC_HEADERS */ - -/* Define to any value to enable differential fuzzing support. */ -/* #undef SUPPORT_DIFF_FUZZ */ - -/* Define to any value to enable support for Just-In-Time compiling. */ -/* #undef SUPPORT_JIT */ - -/* Define to any value to allow pcre2grep to be linked with libbz2, so that it - is able to handle .bz2 files. */ -/* #undef SUPPORT_LIBBZ2 */ - -/* Define to any value to allow pcre2test to be linked with libedit. */ -/* #undef SUPPORT_LIBEDIT */ - -/* Define to any value to allow pcre2test to be linked with libreadline. */ -/* #undef SUPPORT_LIBREADLINE */ - -/* Define to any value to allow pcre2grep to be linked with libz, so that it - is able to handle .gz files. */ -/* #undef SUPPORT_LIBZ */ - -/* Define to any value to enable callout script support in pcre2grep. */ -/* #undef SUPPORT_PCRE2GREP_CALLOUT */ - -/* Define to any value to enable fork support in pcre2grep callout scripts. - This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined. - */ -/* #undef SUPPORT_PCRE2GREP_CALLOUT_FORK */ - -/* Define to any value to enable JIT support in pcre2grep. Note that this will - have no effect unless SUPPORT_JIT is also defined. */ -/* #undef SUPPORT_PCRE2GREP_JIT */ - -/* Define to any value to enable the 16 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_16 */ - -/* Define to any value to enable the 32 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_32 */ - -/* Define to any value to enable the 8 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_8 */ - -/* Define to any value to enable support for Unicode and UTF encoding. This - will work even in an EBCDIC environment, but it is incompatible with the - EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or* - ASCII/Unicode, but not both at once. */ -/* #undef SUPPORT_UNICODE */ - -/* Define to any value for valgrind support to find invalid memory reads. */ -/* #undef SUPPORT_VALGRIND */ - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# define _ALL_SOURCE 1 -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# define _DARWIN_C_SOURCE 1 -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif -/* Enable X/Open compliant socket functions that do not require linking - with -lxnet on HP-UX 11.11. */ -#ifndef _HPUX_ALT_XOPEN_SOCKET_API -# define _HPUX_ALT_XOPEN_SOCKET_API 1 -#endif -/* Identify the host operating system as Minix. - This macro does not affect the system headers' behavior. - A future release of Autoconf may stop defining this macro. */ -#ifndef _MINIX -/* # undef _MINIX */ -#endif -/* Enable general extensions on NetBSD. - Enable NetBSD compatibility extensions on Minix. */ -#ifndef _NETBSD_SOURCE -# define _NETBSD_SOURCE 1 -#endif -/* Enable OpenBSD compatibility extensions on NetBSD. - Oddly enough, this does nothing on OpenBSD. */ -#ifndef _OPENBSD_SOURCE -# define _OPENBSD_SOURCE 1 -#endif -/* Define to 1 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_SOURCE -/* # undef _POSIX_SOURCE */ -#endif -/* Define to 2 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_1_SOURCE -/* # undef _POSIX_1_SOURCE */ -#endif -/* Enable POSIX-compatible threading on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# define __STDC_WANT_LIB_EXT2__ 1 -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# define _TANDEM_SOURCE 1 -#endif -/* Enable X/Open extensions. Define to 500 only if necessary - to make mbstate_t available. */ -#ifndef _XOPEN_SOURCE -/* # undef _XOPEN_SOURCE */ -#endif - -/* Version number of package */ -#define VERSION "10.47" - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to the type of a signed integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -/* #undef int64_t */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/vendor/pcre2/src/config.h.in b/vendor/pcre2/src/config.h.in deleted file mode 100644 index 0f2ef38342..0000000000 --- a/vendor/pcre2/src/config.h.in +++ /dev/null @@ -1,472 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - - -/* PCRE2 is written in Standard C, but there are a few non-standard things it -can cope with, allowing it to run on SunOS4 and other "close to standard" -systems. - -In environments that support the GNU autotools, config.h.in is converted into -config.h by the "configure" script. In environments that use CMake, -config-cmake.in is converted into config.h. If you are going to build PCRE2 "by -hand" without using "configure" or CMake, you should copy the distributed -config.h.generic to config.h, and edit the macro definitions to be the way you -need them. You must then add -DHAVE_CONFIG_H to all of your compile commands, -so that config.h is included at the start of every source. - -Alternatively, you can avoid editing by using -D on the compiler command line -to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H, -but if you do, default values will be taken from config.h for non-boolean -macros that are not defined on the command line. - -Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be -defined (conventionally to 1) for TRUE, and not defined at all for FALSE. All -such macros are listed as a commented #undef in config.h.generic. Macros such -as MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are -surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ - -/* By default, the \R escape sequence matches any Unicode line ending - character or sequence of characters. If BSR_ANYCRLF is defined (to any - value), this is changed so that backslash-R matches only CR, LF, or CRLF. - The build-time default can be overridden by the user of PCRE2 at runtime. - */ -#undef BSR_ANYCRLF - -/* Define to any value to disable the use of the z and t modifiers in - formatting settings such as %zu or %td (this is rarely needed). */ -#undef DISABLE_PERCENT_ZT - -/* If you are compiling for a system that uses EBCDIC instead of ASCII - character codes, define this macro to any value. When EBCDIC is set, PCRE2 - assumes that all input strings are in EBCDIC. If you do not define this - macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It - is not possible to build a version of PCRE2 that supports both EBCDIC and - ASCII or UTF-8/16/32. */ -#undef EBCDIC - -/* To force an EBCDIC environment, define this macro to make the core PCRE2 - library functions use EBCDIC codepage 1047, regardless of whether the - compiler supports it using C character literals. */ -#undef EBCDIC_IGNORING_COMPILER - -/* In an EBCDIC environment, define this macro to any value to arrange for the - NL character to be 0x25 instead of the default 0x15. NL plays the role that - LF does in an ASCII/Unicode environment. */ -#undef EBCDIC_NL25 - -/* Define to 1 if you have the header file. */ -#undef HAVE_ASSERT_H - -/* Define this if your compiler supports __attribute__((uninitialized)) */ -#undef HAVE_ATTRIBUTE_UNINITIALIZED - -/* Define this if your compiler provides __assume() */ -#undef HAVE_BUILTIN_ASSUME - -/* Define this if your compiler provides __builtin_mul_overflow() */ -#undef HAVE_BUILTIN_MUL_OVERFLOW - -/* Define this if your compiler provides __builtin_unreachable() */ -#undef HAVE_BUILTIN_UNREACHABLE - -/* Define to 1 if you have the header file. */ -#undef HAVE_BZLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EDITLINE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EDIT_READLINE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the `memfd_create' function. */ -#undef HAVE_MEMFD_CREATE - -/* Define to 1 if you have the header file. */ -#undef HAVE_MINIX_CONFIG_H - -/* Define to 1 if you have the `mkostemp' function. */ -#undef HAVE_MKOSTEMP - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Have PTHREAD_PRIO_INHERIT. */ -#undef HAVE_PTHREAD_PRIO_INHERIT - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_HISTORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_READLINE_H - -/* Define to 1 if you have the `realpath' function. */ -#undef HAVE_REALPATH - -/* Define to 1 if you have the `secure_getenv' function. */ -#undef HAVE_SECURE_GETENV - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if the compiler supports GCC compatible visibility - declarations. */ -#undef HAVE_VISIBILITY - -/* Define to 1 if you have the header file. */ -#undef HAVE_WCHAR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_WINDOWS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ZLIB_H - -/* This limits the amount of memory that may be used while matching a pattern. - It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply - to JIT matching. The value is in kibibytes (units of 1024 bytes). */ -#undef HEAP_LIMIT - -/* The value of LINK_SIZE determines the number of bytes used to store links - as offsets within the compiled regex. The default is 2, which allows for - compiled patterns up to 65535 code units long. This covers the vast - majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes - instead. This allows for longer patterns in extreme cases. */ -#undef LINK_SIZE - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* The value of MATCH_LIMIT determines the default number of times the - pcre2_match() function can record a backtrack position during a single - matching attempt. The value is also used to limit a loop counter in - pcre2_dfa_match(). There is a runtime interface for setting a different - limit. The limit exists in order to catch runaway regular expressions that - take forever to determine that they do not match. The default is set very - large so that it does not accidentally catch legitimate cases. */ -#undef MATCH_LIMIT - -/* The above limit applies to all backtracks, whether or not they are nested. - In some environments it is desirable to limit the nesting of backtracking - (that is, the depth of tree that is searched) more strictly, in order to - restrict the maximum amount of heap memory that is used. The value of - MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it - must be less than the value of MATCH_LIMIT. The default is to use the same - value as MATCH_LIMIT. There is a runtime method for setting a different - limit. In the case of pcre2_dfa_match(), this limit controls the depth of - the internal nested function calls that are used for pattern recursions, - lookarounds, and atomic groups. */ -#undef MATCH_LIMIT_DEPTH - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#undef MAX_NAME_COUNT - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#undef MAX_NAME_SIZE - -/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in - characters, for a variable-length lookbehind assertion. */ -#undef MAX_VARLOOKBEHIND - -/* Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns. */ -#undef NEVER_BACKSLASH_C - -/* The value of NEWLINE_DEFAULT determines the default newline character - sequence. PCRE2 client programs can override this by selecting other values - at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5 - (ANYCRLF), and 6 (NUL). */ -#undef NEWLINE_DEFAULT - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested - parentheses (of any kind) in a pattern. This limits the amount of system - stack that is used while compiling a pattern. */ -#undef PARENS_NEST_LIMIT - -/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by - pcre2grep to hold parts of the file it is searching. The buffer will be - expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing - very long lines. The actual amount of memory used by pcre2grep is three - times this number, because it allows for the buffering of "before" and - "after" lines. */ -#undef PCRE2GREP_BUFSIZE - -/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer - used by pcre2grep to hold parts of the file it is searching. The actual - amount of memory used by pcre2grep is three times this number, because it - allows for the buffering of "before" and "after" lines. */ -#undef PCRE2GREP_MAX_BUFSIZE - - -/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix - library. */ -#undef PCRE2POSIX_EXP_DEFN - -/* Define to any value if linking libpcre2-posix dynamically. Ideally, if both - static and shared libraries are being built, then PCRE2POSIX_SHARED would - be defined only for the shared build. Indeed, this is a requirement on - Windows. However, when building with Autoconf and libtool, we compile the - sources once only to create both the static and shared library, so in this - case, PCRE2POSIX_SHARED should only be defined if the shared library is - being built, regardless of whether or not the static library is also being - built. */ -#undef PCRE2POSIX_SHARED - -/* Define to any value to include debugging code. */ -#undef PCRE2_DEBUG - -/* Define to the annotation for making a symbol visible. */ -#undef PCRE2_EXPORT - - -/* If you are compiling for a system other than a Unix-like system or - Win32, and it needs some magic to be inserted before the definition - of a function that is exported by the library, define this macro to - contain the relevant magic. If you do not define this macro, a suitable - __declspec value is used for Windows systems; in other environments - a compiler relevant "extern" is used with any "visibility" related - attributes from PCRE2_EXPORT included. - This macro apears at the start of every exported function that is part - of the external API. It does not appear on functions that are "external" - in the C sense, but which are internal to the library. */ -#undef PCRE2_EXP_DEFN - -/* Define to any value if linking statically. Ideally, if both static and - shared libraries are being built, then PCRE2_STATIC would be defined only - for the static build. Indeed, this is a requirement on Windows. With - Autoconf and libtool however, it is idiomatic to compile the sources once - to create both the static and shared library, so in this case, PCRE2_STATIC - should only be defined if no shared library is being built. */ -#undef PCRE2_STATIC - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to any non-zero number to enable support for SELinux compatible - executable memory allocator in JIT. Note that this will have no effect - unless SUPPORT_JIT is also defined. */ -#undef SLJIT_PROT_EXECUTABLE_ALLOCATOR - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#undef STDC_HEADERS - -/* Define to any value to enable differential fuzzing support. */ -#undef SUPPORT_DIFF_FUZZ - -/* Define to any value to enable support for Just-In-Time compiling. */ -#undef SUPPORT_JIT - -/* Define to any value to allow pcre2grep to be linked with libbz2, so that it - is able to handle .bz2 files. */ -#undef SUPPORT_LIBBZ2 - -/* Define to any value to allow pcre2test to be linked with libedit. */ -#undef SUPPORT_LIBEDIT - -/* Define to any value to allow pcre2test to be linked with libreadline. */ -#undef SUPPORT_LIBREADLINE - -/* Define to any value to allow pcre2grep to be linked with libz, so that it - is able to handle .gz files. */ -#undef SUPPORT_LIBZ - -/* Define to any value to enable callout script support in pcre2grep. */ -#undef SUPPORT_PCRE2GREP_CALLOUT - -/* Define to any value to enable fork support in pcre2grep callout scripts. - This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined. - */ -#undef SUPPORT_PCRE2GREP_CALLOUT_FORK - -/* Define to any value to enable JIT support in pcre2grep. Note that this will - have no effect unless SUPPORT_JIT is also defined. */ -#undef SUPPORT_PCRE2GREP_JIT - -/* Define to any value to enable the 16 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_16 - -/* Define to any value to enable the 32 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_32 - -/* Define to any value to enable the 8 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_8 - -/* Define to any value to enable support for Unicode and UTF encoding. This - will work even in an EBCDIC environment, but it is incompatible with the - EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or* - ASCII/Unicode, but not both at once. */ -#undef SUPPORT_UNICODE - -/* Define to any value for valgrind support to find invalid memory reads. */ -#undef SUPPORT_VALGRIND - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# undef _DARWIN_C_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable X/Open compliant socket functions that do not require linking - with -lxnet on HP-UX 11.11. */ -#ifndef _HPUX_ALT_XOPEN_SOCKET_API -# undef _HPUX_ALT_XOPEN_SOCKET_API -#endif -/* Identify the host operating system as Minix. - This macro does not affect the system headers' behavior. - A future release of Autoconf may stop defining this macro. */ -#ifndef _MINIX -# undef _MINIX -#endif -/* Enable general extensions on NetBSD. - Enable NetBSD compatibility extensions on Minix. */ -#ifndef _NETBSD_SOURCE -# undef _NETBSD_SOURCE -#endif -/* Enable OpenBSD compatibility extensions on NetBSD. - Oddly enough, this does nothing on OpenBSD. */ -#ifndef _OPENBSD_SOURCE -# undef _OPENBSD_SOURCE -#endif -/* Define to 1 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_SOURCE -# undef _POSIX_SOURCE -#endif -/* Define to 2 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_1_SOURCE -# undef _POSIX_1_SOURCE -#endif -/* Enable POSIX-compatible threading on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# undef __STDC_WANT_IEC_60559_BFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# undef __STDC_WANT_IEC_60559_DFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# undef __STDC_WANT_IEC_60559_TYPES_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# undef __STDC_WANT_LIB_EXT2__ -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# undef __STDC_WANT_MATH_SPEC_FUNCS__ -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable X/Open extensions. Define to 500 only if necessary - to make mbstate_t available. */ -#ifndef _XOPEN_SOURCE -# undef _XOPEN_SOURCE -#endif - - -/* Version number of package */ -#undef VERSION - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to the type of a signed integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -#undef int64_t - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/vendor/pcre2/src/libpcre2-16.sym b/vendor/pcre2/src/libpcre2-16.sym deleted file mode 100644 index fd5257db69..0000000000 --- a/vendor/pcre2/src/libpcre2-16.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_16; - pcre2_code_copy_16; - pcre2_code_copy_with_tables_16; - pcre2_code_free_16; - pcre2_compile_16; - pcre2_compile_context_copy_16; - pcre2_compile_context_create_16; - pcre2_compile_context_free_16; - pcre2_config_16; - pcre2_convert_context_copy_16; - pcre2_convert_context_create_16; - pcre2_convert_context_free_16; - pcre2_converted_pattern_free_16; - pcre2_dfa_match_16; - pcre2_general_context_copy_16; - pcre2_general_context_create_16; - pcre2_general_context_free_16; - pcre2_get_error_message_16; - pcre2_get_mark_16; - pcre2_get_match_data_heapframes_size_16; - pcre2_get_match_data_size_16; - pcre2_get_ovector_count_16; - pcre2_get_ovector_pointer_16; - pcre2_get_startchar_16; - pcre2_jit_compile_16; - pcre2_jit_free_unused_memory_16; - pcre2_jit_match_16; - pcre2_jit_stack_assign_16; - pcre2_jit_stack_create_16; - pcre2_jit_stack_free_16; - pcre2_maketables_16; - pcre2_maketables_free_16; - pcre2_match_16; - pcre2_match_context_copy_16; - pcre2_match_context_create_16; - pcre2_match_context_free_16; - pcre2_match_data_create_16; - pcre2_match_data_create_from_pattern_16; - pcre2_match_data_free_16; - pcre2_next_match_16; - pcre2_pattern_convert_16; - pcre2_pattern_info_16; - pcre2_serialize_decode_16; - pcre2_serialize_encode_16; - pcre2_serialize_free_16; - pcre2_serialize_get_number_of_codes_16; - pcre2_set_bsr_16; - pcre2_set_callout_16; - pcre2_set_character_tables_16; - pcre2_set_compile_extra_options_16; - pcre2_set_compile_recursion_guard_16; - pcre2_set_depth_limit_16; - pcre2_set_glob_escape_16; - pcre2_set_glob_separator_16; - pcre2_set_heap_limit_16; - pcre2_set_match_limit_16; - pcre2_set_max_pattern_compiled_length_16; - pcre2_set_max_pattern_length_16; - pcre2_set_max_varlookbehind_16; - pcre2_set_newline_16; - pcre2_set_offset_limit_16; - pcre2_set_optimize_16; - pcre2_set_parens_nest_limit_16; - pcre2_set_recursion_limit_16; - pcre2_set_recursion_memory_management_16; - pcre2_set_substitute_callout_16; - pcre2_set_substitute_case_callout_16; - pcre2_substitute_16; - pcre2_substring_copy_byname_16; - pcre2_substring_copy_bynumber_16; - pcre2_substring_free_16; - pcre2_substring_get_byname_16; - pcre2_substring_get_bynumber_16; - pcre2_substring_length_byname_16; - pcre2_substring_length_bynumber_16; - pcre2_substring_list_free_16; - pcre2_substring_list_get_16; - pcre2_substring_nametable_scan_16; - pcre2_substring_number_from_name_16; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/pcre2/src/libpcre2-32.sym b/vendor/pcre2/src/libpcre2-32.sym deleted file mode 100644 index d4606c2b56..0000000000 --- a/vendor/pcre2/src/libpcre2-32.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_32; - pcre2_code_copy_32; - pcre2_code_copy_with_tables_32; - pcre2_code_free_32; - pcre2_compile_32; - pcre2_compile_context_copy_32; - pcre2_compile_context_create_32; - pcre2_compile_context_free_32; - pcre2_config_32; - pcre2_convert_context_copy_32; - pcre2_convert_context_create_32; - pcre2_convert_context_free_32; - pcre2_converted_pattern_free_32; - pcre2_dfa_match_32; - pcre2_general_context_copy_32; - pcre2_general_context_create_32; - pcre2_general_context_free_32; - pcre2_get_error_message_32; - pcre2_get_mark_32; - pcre2_get_match_data_heapframes_size_32; - pcre2_get_match_data_size_32; - pcre2_get_ovector_count_32; - pcre2_get_ovector_pointer_32; - pcre2_get_startchar_32; - pcre2_jit_compile_32; - pcre2_jit_free_unused_memory_32; - pcre2_jit_match_32; - pcre2_jit_stack_assign_32; - pcre2_jit_stack_create_32; - pcre2_jit_stack_free_32; - pcre2_maketables_32; - pcre2_maketables_free_32; - pcre2_match_32; - pcre2_match_context_copy_32; - pcre2_match_context_create_32; - pcre2_match_context_free_32; - pcre2_match_data_create_32; - pcre2_match_data_create_from_pattern_32; - pcre2_match_data_free_32; - pcre2_next_match_32; - pcre2_pattern_convert_32; - pcre2_pattern_info_32; - pcre2_serialize_decode_32; - pcre2_serialize_encode_32; - pcre2_serialize_free_32; - pcre2_serialize_get_number_of_codes_32; - pcre2_set_bsr_32; - pcre2_set_callout_32; - pcre2_set_character_tables_32; - pcre2_set_compile_extra_options_32; - pcre2_set_compile_recursion_guard_32; - pcre2_set_depth_limit_32; - pcre2_set_glob_escape_32; - pcre2_set_glob_separator_32; - pcre2_set_heap_limit_32; - pcre2_set_match_limit_32; - pcre2_set_max_pattern_compiled_length_32; - pcre2_set_max_pattern_length_32; - pcre2_set_max_varlookbehind_32; - pcre2_set_newline_32; - pcre2_set_offset_limit_32; - pcre2_set_optimize_32; - pcre2_set_parens_nest_limit_32; - pcre2_set_recursion_limit_32; - pcre2_set_recursion_memory_management_32; - pcre2_set_substitute_callout_32; - pcre2_set_substitute_case_callout_32; - pcre2_substitute_32; - pcre2_substring_copy_byname_32; - pcre2_substring_copy_bynumber_32; - pcre2_substring_free_32; - pcre2_substring_get_byname_32; - pcre2_substring_get_bynumber_32; - pcre2_substring_length_byname_32; - pcre2_substring_length_bynumber_32; - pcre2_substring_list_free_32; - pcre2_substring_list_get_32; - pcre2_substring_nametable_scan_32; - pcre2_substring_number_from_name_32; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/pcre2/src/libpcre2-8.sym b/vendor/pcre2/src/libpcre2-8.sym deleted file mode 100644 index 368b4e4415..0000000000 --- a/vendor/pcre2/src/libpcre2-8.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_8; - pcre2_code_copy_8; - pcre2_code_copy_with_tables_8; - pcre2_code_free_8; - pcre2_compile_8; - pcre2_compile_context_copy_8; - pcre2_compile_context_create_8; - pcre2_compile_context_free_8; - pcre2_config_8; - pcre2_convert_context_copy_8; - pcre2_convert_context_create_8; - pcre2_convert_context_free_8; - pcre2_converted_pattern_free_8; - pcre2_dfa_match_8; - pcre2_general_context_copy_8; - pcre2_general_context_create_8; - pcre2_general_context_free_8; - pcre2_get_error_message_8; - pcre2_get_mark_8; - pcre2_get_match_data_heapframes_size_8; - pcre2_get_match_data_size_8; - pcre2_get_ovector_count_8; - pcre2_get_ovector_pointer_8; - pcre2_get_startchar_8; - pcre2_jit_compile_8; - pcre2_jit_free_unused_memory_8; - pcre2_jit_match_8; - pcre2_jit_stack_assign_8; - pcre2_jit_stack_create_8; - pcre2_jit_stack_free_8; - pcre2_maketables_8; - pcre2_maketables_free_8; - pcre2_match_8; - pcre2_match_context_copy_8; - pcre2_match_context_create_8; - pcre2_match_context_free_8; - pcre2_match_data_create_8; - pcre2_match_data_create_from_pattern_8; - pcre2_match_data_free_8; - pcre2_next_match_8; - pcre2_pattern_convert_8; - pcre2_pattern_info_8; - pcre2_serialize_decode_8; - pcre2_serialize_encode_8; - pcre2_serialize_free_8; - pcre2_serialize_get_number_of_codes_8; - pcre2_set_bsr_8; - pcre2_set_callout_8; - pcre2_set_character_tables_8; - pcre2_set_compile_extra_options_8; - pcre2_set_compile_recursion_guard_8; - pcre2_set_depth_limit_8; - pcre2_set_glob_escape_8; - pcre2_set_glob_separator_8; - pcre2_set_heap_limit_8; - pcre2_set_match_limit_8; - pcre2_set_max_pattern_compiled_length_8; - pcre2_set_max_pattern_length_8; - pcre2_set_max_varlookbehind_8; - pcre2_set_newline_8; - pcre2_set_offset_limit_8; - pcre2_set_optimize_8; - pcre2_set_parens_nest_limit_8; - pcre2_set_recursion_limit_8; - pcre2_set_recursion_memory_management_8; - pcre2_set_substitute_callout_8; - pcre2_set_substitute_case_callout_8; - pcre2_substitute_8; - pcre2_substring_copy_byname_8; - pcre2_substring_copy_bynumber_8; - pcre2_substring_free_8; - pcre2_substring_get_byname_8; - pcre2_substring_get_bynumber_8; - pcre2_substring_length_byname_8; - pcre2_substring_length_bynumber_8; - pcre2_substring_list_free_8; - pcre2_substring_list_get_8; - pcre2_substring_nametable_scan_8; - pcre2_substring_number_from_name_8; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/pcre2/src/libpcre2-posix.sym b/vendor/pcre2/src/libpcre2-posix.sym deleted file mode 100644 index 04a56cf61c..0000000000 --- a/vendor/pcre2/src/libpcre2-posix.sym +++ /dev/null @@ -1,13 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_regcomp; - pcre2_regerror; - pcre2_regexec; - pcre2_regfree; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/pcre2/src/pcre2.h.generic b/vendor/pcre2/src/pcre2.h.generic deleted file mode 100644 index 4034e5a91d..0000000000 --- a/vendor/pcre2/src/pcre2.h.generic +++ /dev/null @@ -1,1079 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This is the public header file for the PCRE library, second API, to be -#included by applications that call PCRE2 functions. - - Copyright (c) 2016-2024 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - -#ifndef PCRE2_H_IDEMPOTENT_GUARD -#define PCRE2_H_IDEMPOTENT_GUARD - -/* The current PCRE version information. */ - -#define PCRE2_MAJOR 10 -#define PCRE2_MINOR 47 -#define PCRE2_PRERELEASE -#define PCRE2_DATE 2025-10-21 - -/* When an application links to a PCRE2 DLL in Windows, the symbols that are -imported have to be identified as such. When building PCRE2, the appropriate -export setting is defined in pcre2_internal.h, which includes this file. So, we -don't change existing definitions of PCRE2_EXP_DECL. - -By default, we use the standard "extern" declarations. */ - -#ifndef PCRE2_EXP_DECL -# if defined(_WIN32) && !defined(PCRE2_STATIC) -# define PCRE2_EXP_DECL extern __declspec(dllimport) -# elif defined __cplusplus -# define PCRE2_EXP_DECL extern "C" -# else -# define PCRE2_EXP_DECL extern -# endif -#endif - -/* When compiling with the MSVC compiler, it is sometimes necessary to include -a "calling convention" before exported function names. For example: - - void __cdecl function(....) - -might be needed. In order to make this easy, all the exported functions have -PCRE2_CALL_CONVENTION just before their names. - -PCRE2 normally uses the platform's standard calling convention, so this should -not be set unless you know you need it. */ - -#ifndef PCRE2_CALL_CONVENTION -#define PCRE2_CALL_CONVENTION -#endif - -/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and -uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do -not have stdint.h, which is why we use inttypes.h, which according to the C -standard is a superset of stdint.h. If inttypes.h is not available the build -will break and the relevant values must be provided by some other means. */ - -#include -#include -#include - -/* Allow for C++ users compiling this directly. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following option bits can be passed to pcre2_compile(), pcre2_match(), -or pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it -is passed. Put these bits at the most significant end of the options word so -others can be added next to them */ - -#define PCRE2_ANCHORED 0x80000000u -#define PCRE2_NO_UTF_CHECK 0x40000000u -#define PCRE2_ENDANCHORED 0x20000000u - -/* The following option bits can be passed only to pcre2_compile(). However, -they may affect compilation, JIT compilation, and/or interpretive execution. -The following tags indicate which: - -C alters what is compiled by pcre2_compile() -J alters what is compiled by pcre2_jit_compile() -M is inspected during pcre2_match() execution -D is inspected during pcre2_dfa_match() execution -*/ - -#define PCRE2_ALLOW_EMPTY_CLASS 0x00000001u /* C */ -#define PCRE2_ALT_BSUX 0x00000002u /* C */ -#define PCRE2_AUTO_CALLOUT 0x00000004u /* C */ -#define PCRE2_CASELESS 0x00000008u /* C */ -#define PCRE2_DOLLAR_ENDONLY 0x00000010u /* J M D */ -#define PCRE2_DOTALL 0x00000020u /* C */ -#define PCRE2_DUPNAMES 0x00000040u /* C */ -#define PCRE2_EXTENDED 0x00000080u /* C */ -#define PCRE2_FIRSTLINE 0x00000100u /* J M D */ -#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u /* C J M */ -#define PCRE2_MULTILINE 0x00000400u /* C */ -#define PCRE2_NEVER_UCP 0x00000800u /* C */ -#define PCRE2_NEVER_UTF 0x00001000u /* C */ -#define PCRE2_NO_AUTO_CAPTURE 0x00002000u /* C */ -#define PCRE2_NO_AUTO_POSSESS 0x00004000u /* C */ -#define PCRE2_NO_DOTSTAR_ANCHOR 0x00008000u /* C */ -#define PCRE2_NO_START_OPTIMIZE 0x00010000u /* J M D */ -#define PCRE2_UCP 0x00020000u /* C J M D */ -#define PCRE2_UNGREEDY 0x00040000u /* C */ -#define PCRE2_UTF 0x00080000u /* C J M D */ -#define PCRE2_NEVER_BACKSLASH_C 0x00100000u /* C */ -#define PCRE2_ALT_CIRCUMFLEX 0x00200000u /* J M D */ -#define PCRE2_ALT_VERBNAMES 0x00400000u /* C */ -#define PCRE2_USE_OFFSET_LIMIT 0x00800000u /* J M D */ -#define PCRE2_EXTENDED_MORE 0x01000000u /* C */ -#define PCRE2_LITERAL 0x02000000u /* C */ -#define PCRE2_MATCH_INVALID_UTF 0x04000000u /* J M D */ -#define PCRE2_ALT_EXTENDED_CLASS 0x08000000u /* C */ - -/* An additional compile options word is available in the compile context. */ - -#define PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES 0x00000001u /* C */ -#define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL 0x00000002u /* C */ -#define PCRE2_EXTRA_MATCH_WORD 0x00000004u /* C */ -#define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */ -#define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */ -#define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */ -#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 0x00000040u /* C */ -#define PCRE2_EXTRA_CASELESS_RESTRICT 0x00000080u /* C */ -#define PCRE2_EXTRA_ASCII_BSD 0x00000100u /* C */ -#define PCRE2_EXTRA_ASCII_BSS 0x00000200u /* C */ -#define PCRE2_EXTRA_ASCII_BSW 0x00000400u /* C */ -#define PCRE2_EXTRA_ASCII_POSIX 0x00000800u /* C */ -#define PCRE2_EXTRA_ASCII_DIGIT 0x00001000u /* C */ -#define PCRE2_EXTRA_PYTHON_OCTAL 0x00002000u /* C */ -#define PCRE2_EXTRA_NO_BS0 0x00004000u /* C */ -#define PCRE2_EXTRA_NEVER_CALLOUT 0x00008000u /* C */ -#define PCRE2_EXTRA_TURKISH_CASING 0x00010000u /* C */ - -/* These are for pcre2_jit_compile(). */ - -#define PCRE2_JIT_COMPLETE 0x00000001u /* For full matching */ -#define PCRE2_JIT_PARTIAL_SOFT 0x00000002u -#define PCRE2_JIT_PARTIAL_HARD 0x00000004u -#define PCRE2_JIT_INVALID_UTF 0x00000100u -#define PCRE2_JIT_TEST_ALLOC 0x00000200u - -/* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and -pcre2_substitute(). Some are allowed only for one of the functions, and in -these cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and -PCRE2_NO_UTF_CHECK can also be passed to these functions (though -pcre2_jit_match() ignores the latter since it bypasses all sanity checks). */ - -#define PCRE2_NOTBOL 0x00000001u -#define PCRE2_NOTEOL 0x00000002u -#define PCRE2_NOTEMPTY 0x00000004u /* ) These two must be kept */ -#define PCRE2_NOTEMPTY_ATSTART 0x00000008u /* ) adjacent to each other. */ -#define PCRE2_PARTIAL_SOFT 0x00000010u -#define PCRE2_PARTIAL_HARD 0x00000020u -#define PCRE2_DFA_RESTART 0x00000040u /* pcre2_dfa_match() only */ -#define PCRE2_DFA_SHORTEST 0x00000080u /* pcre2_dfa_match() only */ -#define PCRE2_SUBSTITUTE_GLOBAL 0x00000100u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_EXTENDED 0x00000200u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_UNSET_EMPTY 0x00000400u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_UNKNOWN_UNSET 0x00000800u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH 0x00001000u /* pcre2_substitute() only */ -#define PCRE2_NO_JIT 0x00002000u /* not for pcre2_dfa_match() */ -#define PCRE2_COPY_MATCHED_SUBJECT 0x00004000u -#define PCRE2_SUBSTITUTE_LITERAL 0x00008000u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_MATCHED 0x00010000u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u /* pcre2_substitute() only */ -#define PCRE2_DISABLE_RECURSELOOP_CHECK 0x00040000u /* not for pcre2_dfa_match() or pcre2_jit_match() */ - -/* Options for pcre2_pattern_convert(). */ - -#define PCRE2_CONVERT_UTF 0x00000001u -#define PCRE2_CONVERT_NO_UTF_CHECK 0x00000002u -#define PCRE2_CONVERT_POSIX_BASIC 0x00000004u -#define PCRE2_CONVERT_POSIX_EXTENDED 0x00000008u -#define PCRE2_CONVERT_GLOB 0x00000010u -#define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u -#define PCRE2_CONVERT_GLOB_NO_STARSTAR 0x00000050u - -/* Newline and \R settings, for use in compile contexts. The newline values -must be kept in step with values set in config.h and both sets must all be -greater than zero. */ - -#define PCRE2_NEWLINE_CR 1 -#define PCRE2_NEWLINE_LF 2 -#define PCRE2_NEWLINE_CRLF 3 -#define PCRE2_NEWLINE_ANY 4 -#define PCRE2_NEWLINE_ANYCRLF 5 -#define PCRE2_NEWLINE_NUL 6 - -#define PCRE2_BSR_UNICODE 1 -#define PCRE2_BSR_ANYCRLF 2 - -/* Error codes for pcre2_compile(). Some of these are also used by -pcre2_pattern_convert(). */ - -#define PCRE2_ERROR_END_BACKSLASH 101 -#define PCRE2_ERROR_END_BACKSLASH_C 102 -#define PCRE2_ERROR_UNKNOWN_ESCAPE 103 -#define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER 104 -#define PCRE2_ERROR_QUANTIFIER_TOO_BIG 105 -#define PCRE2_ERROR_MISSING_SQUARE_BRACKET 106 -#define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS 107 -#define PCRE2_ERROR_CLASS_RANGE_ORDER 108 -#define PCRE2_ERROR_QUANTIFIER_INVALID 109 -#define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT 110 -#define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY 111 -#define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS 112 -#define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING 113 -#define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS 114 -#define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE 115 -#define PCRE2_ERROR_NULL_PATTERN 116 -#define PCRE2_ERROR_BAD_OPTIONS 117 -#define PCRE2_ERROR_MISSING_COMMENT_CLOSING 118 -#define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP 119 -#define PCRE2_ERROR_PATTERN_TOO_LARGE 120 -#define PCRE2_ERROR_HEAP_FAILED 121 -#define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS 122 -#define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW 123 -#define PCRE2_ERROR_MISSING_CONDITION_CLOSING 124 -#define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH 125 -#define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE 126 -#define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES 127 -#define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED 128 -#define PCRE2_ERROR_BAD_RELATIVE_REFERENCE 129 -#define PCRE2_ERROR_UNKNOWN_POSIX_CLASS 130 -#define PCRE2_ERROR_INTERNAL_STUDY_ERROR 131 -#define PCRE2_ERROR_UNICODE_NOT_SUPPORTED 132 -#define PCRE2_ERROR_PARENTHESES_STACK_CHECK 133 -#define PCRE2_ERROR_CODE_POINT_TOO_BIG 134 -#define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED 135 -#define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136 -#define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE 137 -#define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG 138 -#define PCRE2_ERROR_MISSING_CALLOUT_CLOSING 139 -#define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB 140 -#define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P 141 -#define PCRE2_ERROR_MISSING_NAME_TERMINATOR 142 -#define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME 143 -#define PCRE2_ERROR_INVALID_SUBPATTERN_NAME 144 -#define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145 -#define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY 146 -#define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY 147 -#define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG 148 -#define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS 149 -#define PCRE2_ERROR_CLASS_INVALID_RANGE 150 -#define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG 151 -#define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE 152 -#define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN 153 -#define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES 154 -#define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE 155 -#define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE 156 -#define PCRE2_ERROR_BACKSLASH_G_SYNTAX 157 -#define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158 -/* Error 159 is obsolete and should now never occur */ -#define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED 159 -#define PCRE2_ERROR_VERB_UNKNOWN 160 -#define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG 161 -#define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED 162 -#define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW 163 -#define PCRE2_ERROR_INVALID_OCTAL 164 -#define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH 165 -#define PCRE2_ERROR_MARK_MISSING_ARGUMENT 166 -#define PCRE2_ERROR_INVALID_HEXADECIMAL 167 -#define PCRE2_ERROR_BACKSLASH_C_SYNTAX 168 -#define PCRE2_ERROR_BACKSLASH_K_SYNTAX 169 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS 170 -#define PCRE2_ERROR_BACKSLASH_N_IN_CLASS 171 -#define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG 172 -#define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT 173 -#define PCRE2_ERROR_UTF_IS_DISABLED 174 -#define PCRE2_ERROR_UCP_IS_DISABLED 175 -#define PCRE2_ERROR_VERB_NAME_TOO_LONG 176 -#define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177 -#define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS 178 -#define PCRE2_ERROR_VERSION_CONDITION_SYNTAX 179 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180 -#define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER 181 -#define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER 182 -#define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED 183 -#define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP 184 -#define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED 185 -#define PCRE2_ERROR_PATTERN_TOO_COMPLICATED 186 -#define PCRE2_ERROR_LOOKBEHIND_TOO_LONG 187 -#define PCRE2_ERROR_PATTERN_STRING_TOO_LONG 188 -#define PCRE2_ERROR_INTERNAL_BAD_CODE 189 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP 190 -#define PCRE2_ERROR_NO_SURROGATES_IN_UTF16 191 -#define PCRE2_ERROR_BAD_LITERAL_OPTIONS 192 -#define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE 193 -#define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS 194 -#define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN 195 -#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196 -#define PCRE2_ERROR_TOO_MANY_CAPTURES 197 -#define PCRE2_ERROR_MISSING_OCTAL_DIGIT 198 -#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199 -#define PCRE2_ERROR_MAX_VAR_LOOKBEHIND_EXCEEDED 200 -#define PCRE2_ERROR_PATTERN_COMPILED_SIZE_TOO_BIG 201 -#define PCRE2_ERROR_OVERSIZE_PYTHON_OCTAL 202 -#define PCRE2_ERROR_CALLOUT_CALLER_DISABLED 203 -#define PCRE2_ERROR_EXTRA_CASING_REQUIRES_UNICODE 204 -#define PCRE2_ERROR_TURKISH_CASING_REQUIRES_UTF 205 -#define PCRE2_ERROR_EXTRA_CASING_INCOMPATIBLE 206 -#define PCRE2_ERROR_ECLASS_NEST_TOO_DEEP 207 -#define PCRE2_ERROR_ECLASS_INVALID_OPERATOR 208 -#define PCRE2_ERROR_ECLASS_UNEXPECTED_OPERATOR 209 -#define PCRE2_ERROR_ECLASS_EXPECTED_OPERAND 210 -#define PCRE2_ERROR_ECLASS_MIXED_OPERATORS 211 -#define PCRE2_ERROR_ECLASS_HINT_SQUARE_BRACKET 212 -#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_EXPR 213 -#define PCRE2_ERROR_PERL_ECLASS_EMPTY_EXPR 214 -#define PCRE2_ERROR_PERL_ECLASS_MISSING_CLOSE 215 -#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_CHAR 216 -#define PCRE2_ERROR_EXPECTED_CAPTURE_GROUP 217 -#define PCRE2_ERROR_MISSING_OPENING_PARENTHESIS 218 -#define PCRE2_ERROR_MISSING_NUMBER_TERMINATOR 219 -#define PCRE2_ERROR_NULL_ERROROFFSET 220 - -/* "Expected" matching error codes: no match and partial match. */ - -#define PCRE2_ERROR_NOMATCH (-1) -#define PCRE2_ERROR_PARTIAL (-2) - -/* Error codes for UTF-8 validity checks */ - -#define PCRE2_ERROR_UTF8_ERR1 (-3) -#define PCRE2_ERROR_UTF8_ERR2 (-4) -#define PCRE2_ERROR_UTF8_ERR3 (-5) -#define PCRE2_ERROR_UTF8_ERR4 (-6) -#define PCRE2_ERROR_UTF8_ERR5 (-7) -#define PCRE2_ERROR_UTF8_ERR6 (-8) -#define PCRE2_ERROR_UTF8_ERR7 (-9) -#define PCRE2_ERROR_UTF8_ERR8 (-10) -#define PCRE2_ERROR_UTF8_ERR9 (-11) -#define PCRE2_ERROR_UTF8_ERR10 (-12) -#define PCRE2_ERROR_UTF8_ERR11 (-13) -#define PCRE2_ERROR_UTF8_ERR12 (-14) -#define PCRE2_ERROR_UTF8_ERR13 (-15) -#define PCRE2_ERROR_UTF8_ERR14 (-16) -#define PCRE2_ERROR_UTF8_ERR15 (-17) -#define PCRE2_ERROR_UTF8_ERR16 (-18) -#define PCRE2_ERROR_UTF8_ERR17 (-19) -#define PCRE2_ERROR_UTF8_ERR18 (-20) -#define PCRE2_ERROR_UTF8_ERR19 (-21) -#define PCRE2_ERROR_UTF8_ERR20 (-22) -#define PCRE2_ERROR_UTF8_ERR21 (-23) - -/* Error codes for UTF-16 validity checks */ - -#define PCRE2_ERROR_UTF16_ERR1 (-24) -#define PCRE2_ERROR_UTF16_ERR2 (-25) -#define PCRE2_ERROR_UTF16_ERR3 (-26) - -/* Error codes for UTF-32 validity checks */ - -#define PCRE2_ERROR_UTF32_ERR1 (-27) -#define PCRE2_ERROR_UTF32_ERR2 (-28) - -/* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction -functions, context functions, and serializing functions. They are in numerical -order. Originally they were in alphabetical order too, but now that PCRE2 is -released, the numbers must not be changed. */ - -#define PCRE2_ERROR_BADDATA (-29) -#define PCRE2_ERROR_MIXEDTABLES (-30) /* Name was changed */ -#define PCRE2_ERROR_BADMAGIC (-31) -#define PCRE2_ERROR_BADMODE (-32) -#define PCRE2_ERROR_BADOFFSET (-33) -#define PCRE2_ERROR_BADOPTION (-34) -#define PCRE2_ERROR_BADREPLACEMENT (-35) -#define PCRE2_ERROR_BADUTFOFFSET (-36) -#define PCRE2_ERROR_CALLOUT (-37) /* Never used by PCRE2 itself */ -#define PCRE2_ERROR_DFA_BADRESTART (-38) -#define PCRE2_ERROR_DFA_RECURSE (-39) -#define PCRE2_ERROR_DFA_UCOND (-40) -#define PCRE2_ERROR_DFA_UFUNC (-41) -#define PCRE2_ERROR_DFA_UITEM (-42) -#define PCRE2_ERROR_DFA_WSSIZE (-43) -#define PCRE2_ERROR_INTERNAL (-44) -#define PCRE2_ERROR_JIT_BADOPTION (-45) -#define PCRE2_ERROR_JIT_STACKLIMIT (-46) -#define PCRE2_ERROR_MATCHLIMIT (-47) -#define PCRE2_ERROR_NOMEMORY (-48) -#define PCRE2_ERROR_NOSUBSTRING (-49) -#define PCRE2_ERROR_NOUNIQUESUBSTRING (-50) -#define PCRE2_ERROR_NULL (-51) -#define PCRE2_ERROR_RECURSELOOP (-52) -#define PCRE2_ERROR_DEPTHLIMIT (-53) -#define PCRE2_ERROR_RECURSIONLIMIT (-53) /* Obsolete synonym */ -#define PCRE2_ERROR_UNAVAILABLE (-54) -#define PCRE2_ERROR_UNSET (-55) -#define PCRE2_ERROR_BADOFFSETLIMIT (-56) -#define PCRE2_ERROR_BADREPESCAPE (-57) -#define PCRE2_ERROR_REPMISSINGBRACE (-58) -#define PCRE2_ERROR_BADSUBSTITUTION (-59) -#define PCRE2_ERROR_BADSUBSPATTERN (-60) -#define PCRE2_ERROR_TOOMANYREPLACE (-61) -#define PCRE2_ERROR_BADSERIALIZEDDATA (-62) -#define PCRE2_ERROR_HEAPLIMIT (-63) -#define PCRE2_ERROR_CONVERT_SYNTAX (-64) -#define PCRE2_ERROR_INTERNAL_DUPMATCH (-65) -#define PCRE2_ERROR_DFA_UINVALID_UTF (-66) -#define PCRE2_ERROR_INVALIDOFFSET (-67) -#define PCRE2_ERROR_JIT_UNSUPPORTED (-68) -#define PCRE2_ERROR_REPLACECASE (-69) -#define PCRE2_ERROR_TOOLARGEREPLACE (-70) -#define PCRE2_ERROR_DIFFSUBSPATTERN (-71) -#define PCRE2_ERROR_DIFFSUBSSUBJECT (-72) -#define PCRE2_ERROR_DIFFSUBSOFFSET (-73) -#define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) -#define PCRE2_ERROR_BAD_BACKSLASH_K (-75) - - -/* Request types for pcre2_pattern_info() */ - -#define PCRE2_INFO_ALLOPTIONS 0 -#define PCRE2_INFO_ARGOPTIONS 1 -#define PCRE2_INFO_BACKREFMAX 2 -#define PCRE2_INFO_BSR 3 -#define PCRE2_INFO_CAPTURECOUNT 4 -#define PCRE2_INFO_FIRSTCODEUNIT 5 -#define PCRE2_INFO_FIRSTCODETYPE 6 -#define PCRE2_INFO_FIRSTBITMAP 7 -#define PCRE2_INFO_HASCRORLF 8 -#define PCRE2_INFO_JCHANGED 9 -#define PCRE2_INFO_JITSIZE 10 -#define PCRE2_INFO_LASTCODEUNIT 11 -#define PCRE2_INFO_LASTCODETYPE 12 -#define PCRE2_INFO_MATCHEMPTY 13 -#define PCRE2_INFO_MATCHLIMIT 14 -#define PCRE2_INFO_MAXLOOKBEHIND 15 -#define PCRE2_INFO_MINLENGTH 16 -#define PCRE2_INFO_NAMECOUNT 17 -#define PCRE2_INFO_NAMEENTRYSIZE 18 -#define PCRE2_INFO_NAMETABLE 19 -#define PCRE2_INFO_NEWLINE 20 -#define PCRE2_INFO_DEPTHLIMIT 21 -#define PCRE2_INFO_RECURSIONLIMIT 21 /* Obsolete synonym */ -#define PCRE2_INFO_SIZE 22 -#define PCRE2_INFO_HASBACKSLASHC 23 -#define PCRE2_INFO_FRAMESIZE 24 -#define PCRE2_INFO_HEAPLIMIT 25 -#define PCRE2_INFO_EXTRAOPTIONS 26 - -/* Request types for pcre2_config(). */ - -#define PCRE2_CONFIG_BSR 0 -#define PCRE2_CONFIG_JIT 1 -#define PCRE2_CONFIG_JITTARGET 2 -#define PCRE2_CONFIG_LINKSIZE 3 -#define PCRE2_CONFIG_MATCHLIMIT 4 -#define PCRE2_CONFIG_NEWLINE 5 -#define PCRE2_CONFIG_PARENSLIMIT 6 -#define PCRE2_CONFIG_DEPTHLIMIT 7 -#define PCRE2_CONFIG_RECURSIONLIMIT 7 /* Obsolete synonym */ -#define PCRE2_CONFIG_STACKRECURSE 8 /* Obsolete */ -#define PCRE2_CONFIG_UNICODE 9 -#define PCRE2_CONFIG_UNICODE_VERSION 10 -#define PCRE2_CONFIG_VERSION 11 -#define PCRE2_CONFIG_HEAPLIMIT 12 -#define PCRE2_CONFIG_NEVER_BACKSLASH_C 13 -#define PCRE2_CONFIG_COMPILED_WIDTHS 14 -#define PCRE2_CONFIG_TABLES_LENGTH 15 -#define PCRE2_CONFIG_EFFECTIVE_LINKSIZE 16 - -/* Optimization directives for pcre2_set_optimize(). -For binary compatibility, only add to this list; do not renumber. */ - -#define PCRE2_OPTIMIZATION_NONE 0 -#define PCRE2_OPTIMIZATION_FULL 1 - -#define PCRE2_AUTO_POSSESS 64 -#define PCRE2_AUTO_POSSESS_OFF 65 -#define PCRE2_DOTSTAR_ANCHOR 66 -#define PCRE2_DOTSTAR_ANCHOR_OFF 67 -#define PCRE2_START_OPTIMIZE 68 -#define PCRE2_START_OPTIMIZE_OFF 69 - -/* Types used in pcre2_set_substitute_case_callout(). - -PCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the -callout to indicate that the case of the entire callout input should be -case-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that -only the first character or glyph should be transformed to Unicode titlecase, -and the rest to lowercase. */ - -#define PCRE2_SUBSTITUTE_CASE_LOWER 1 -#define PCRE2_SUBSTITUTE_CASE_UPPER 2 -#define PCRE2_SUBSTITUTE_CASE_TITLE_FIRST 3 - -/* Types for code units in patterns and subject strings. */ - -typedef uint8_t PCRE2_UCHAR8; -typedef uint16_t PCRE2_UCHAR16; -typedef uint32_t PCRE2_UCHAR32; - -typedef const PCRE2_UCHAR8 *PCRE2_SPTR8; -typedef const PCRE2_UCHAR16 *PCRE2_SPTR16; -typedef const PCRE2_UCHAR32 *PCRE2_SPTR32; - -/* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2, -including pattern offsets for errors and subject offsets after a match. We -define special values to indicate zero-terminated strings and unset offsets in -the offset vector (ovector). */ - -#define PCRE2_SIZE size_t -#define PCRE2_SIZE_MAX SIZE_MAX -#define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0) -#define PCRE2_UNSET (~(PCRE2_SIZE)0) - -/* Generic types for opaque structures and JIT callback functions. These -declarations are defined in a macro that is expanded for each width later. */ - -#define PCRE2_TYPES_LIST \ -struct pcre2_real_general_context; \ -typedef struct pcre2_real_general_context pcre2_general_context; \ -\ -struct pcre2_real_compile_context; \ -typedef struct pcre2_real_compile_context pcre2_compile_context; \ -\ -struct pcre2_real_match_context; \ -typedef struct pcre2_real_match_context pcre2_match_context; \ -\ -struct pcre2_real_convert_context; \ -typedef struct pcre2_real_convert_context pcre2_convert_context; \ -\ -struct pcre2_real_code; \ -typedef struct pcre2_real_code pcre2_code; \ -\ -struct pcre2_real_match_data; \ -typedef struct pcre2_real_match_data pcre2_match_data; \ -\ -struct pcre2_real_jit_stack; \ -typedef struct pcre2_real_jit_stack pcre2_jit_stack; \ -\ -typedef pcre2_jit_stack *(*pcre2_jit_callback)(void *); - - -/* The structures for passing out data via callout functions. We use structures -so that new fields can be added on the end in future versions, without changing -the API of the function, thereby allowing old clients to work without -modification. Define the generic versions in a macro; the width-specific -versions are generated from this macro below. */ - -/* Flags for the callout_flags field. These are cleared after a callout. */ - -#define PCRE2_CALLOUT_STARTMATCH 0x00000001u /* Set for each bumpalong */ -#define PCRE2_CALLOUT_BACKTRACK 0x00000002u /* Set after a backtrack */ - -#define PCRE2_STRUCTURE_LIST \ -typedef struct pcre2_callout_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - uint32_t callout_number; /* Number compiled into pattern */ \ - uint32_t capture_top; /* Max current capture */ \ - uint32_t capture_last; /* Most recently closed capture */ \ - PCRE2_SIZE *offset_vector; /* The offset vector */ \ - PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \ - PCRE2_SPTR subject; /* The subject being matched */ \ - PCRE2_SIZE subject_length; /* The length of the subject */ \ - PCRE2_SIZE start_match; /* Offset to start of this match attempt */ \ - PCRE2_SIZE current_position; /* Where we currently are in the subject */ \ - PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ - PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ - /* ------------------- Added for Version 1 -------------------------- */ \ - PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ - PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ - PCRE2_SPTR callout_string; /* String compiled into pattern */ \ - /* ------------------- Added for Version 2 -------------------------- */ \ - uint32_t callout_flags; /* See above for list */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_callout_block; \ -\ -typedef struct pcre2_callout_enumerate_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ - PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ - uint32_t callout_number; /* Number compiled into pattern */ \ - PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ - PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ - PCRE2_SPTR callout_string; /* String compiled into pattern */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_callout_enumerate_block; \ -\ -typedef struct pcre2_substitute_callout_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - PCRE2_SPTR input; /* Pointer to input subject string */ \ - PCRE2_SPTR output; /* Pointer to output buffer */ \ - PCRE2_SIZE output_offsets[2]; /* Changed portion of the output */ \ - PCRE2_SIZE *ovector; /* Pointer to current ovector */ \ - uint32_t oveccount; /* Count of pairs set in ovector */ \ - uint32_t subscount; /* Substitution number */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_substitute_callout_block; - - -/* List the generic forms of all other functions in macros, which will be -expanded for each width below. Start with functions that give general -information. */ - -#define PCRE2_GENERAL_INFO_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *); - - -/* Functions for manipulating contexts. */ - -#define PCRE2_GENERAL_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ - pcre2_general_context_copy(pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ - pcre2_general_context_create(void *(*)(size_t, void *), \ - void (*)(void *, void *), void *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_general_context_free(pcre2_general_context *); - -#define PCRE2_COMPILE_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ - pcre2_compile_context_copy(pcre2_compile_context *); \ -PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ - pcre2_compile_context_create(pcre2_general_context *);\ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_compile_context_free(pcre2_compile_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_bsr(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_newline(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_compile_recursion_guard(pcre2_compile_context *, \ - int (*)(uint32_t, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_optimize(pcre2_compile_context *, uint32_t); - -#define PCRE2_MATCH_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ - pcre2_match_context_copy(pcre2_match_context *); \ -PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ - pcre2_match_context_create(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_match_context_free(pcre2_match_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_callout(pcre2_match_context *, \ - int (*)(pcre2_callout_block *, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_substitute_callout(pcre2_match_context *, \ - int (*)(pcre2_substitute_callout_block *, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_substitute_case_callout(pcre2_match_context *, \ - PCRE2_SIZE (*)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE, int, \ - void *), \ - void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_match_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_recursion_memory_management(pcre2_match_context *, \ - void *(*)(size_t, void *), void (*)(void *, void *), void *); - -#define PCRE2_CONVERT_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ - pcre2_convert_context_copy(pcre2_convert_context *); \ -PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ - pcre2_convert_context_create(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_convert_context_free(pcre2_convert_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_glob_separator(pcre2_convert_context *, uint32_t); - - -/* Functions concerned with compiling a pattern to PCRE internal code. */ - -#define PCRE2_COMPILE_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \ - pcre2_compile_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_code_free(pcre2_code *); \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_code_copy(const pcre2_code *); \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_code_copy_with_tables(const pcre2_code *); - - -/* Functions that give information about a compiled pattern. */ - -#define PCRE2_PATTERN_INFO_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_callout_enumerate(const pcre2_code *, \ - int (*)(pcre2_callout_enumerate_block *, void *), void *); - - -/* Functions for running a match and inspecting the result. */ - -#define PCRE2_MATCH_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ - pcre2_match_data_create(uint32_t, pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ - pcre2_match_data_create_from_pattern(const pcre2_code *, \ - pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_match_data_free(pcre2_match_data *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *); \ -PCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \ - pcre2_get_mark(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_match_data_size(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_match_data_heapframes_size(pcre2_match_data *); \ -PCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \ - pcre2_get_ovector_count(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \ - pcre2_get_ovector_pointer(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_startchar(pcre2_match_data *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_next_match(pcre2_match_data *, PCRE2_SIZE *, uint32_t *); - - -/* Convenience functions for handling matched substrings. */ - -#define PCRE2_SUBSTRING_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_substring_free(PCRE2_UCHAR *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \ - PCRE2_SPTR *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_substring_list_free(PCRE2_UCHAR **); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **); - - -/* Functions for serializing / deserializing compiled patterns. */ - -#define PCRE2_SERIALIZE_FUNCTIONS \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \ - PCRE2_SIZE *, pcre2_general_context *); \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \ - pcre2_general_context *); \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_get_number_of_codes(const uint8_t *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_serialize_free(uint8_t *); - - -/* Convenience function for match + substitute. */ - -#define PCRE2_SUBSTITUTE_FUNCTION \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \ - PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *); - - -/* Functions for converting pattern source strings. */ - -#define PCRE2_CONVERT_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \ - PCRE2_SIZE *, pcre2_convert_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_converted_pattern_free(PCRE2_UCHAR *); - - -/* Functions for JIT processing */ - -#define PCRE2_JIT_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_jit_compile(pcre2_code *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_free_unused_memory(pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_create(size_t, size_t, pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_free(pcre2_jit_stack *); - - -/* Other miscellaneous functions. */ - -#define PCRE2_OTHER_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \ -PCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \ - pcre2_maketables(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_maketables_free(pcre2_general_context *, const uint8_t *); - -/* Define macros that generate width-specific names from generic versions. The -three-level macro scheme is necessary to get the macros expanded when we want -them to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for -generating three versions of everything below. After that, PCRE2_SUFFIX will be -re-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as -pcre2_compile are called by application code. */ - -#define PCRE2_JOIN(a,b) a ## b -#define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b) -#define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH) - - -/* Data types */ - -#define PCRE2_UCHAR PCRE2_SUFFIX(PCRE2_UCHAR) -#define PCRE2_SPTR PCRE2_SUFFIX(PCRE2_SPTR) - -#define pcre2_code PCRE2_SUFFIX(pcre2_code_) -#define pcre2_jit_callback PCRE2_SUFFIX(pcre2_jit_callback_) -#define pcre2_jit_stack PCRE2_SUFFIX(pcre2_jit_stack_) - -#define pcre2_real_code PCRE2_SUFFIX(pcre2_real_code_) -#define pcre2_real_general_context PCRE2_SUFFIX(pcre2_real_general_context_) -#define pcre2_real_compile_context PCRE2_SUFFIX(pcre2_real_compile_context_) -#define pcre2_real_convert_context PCRE2_SUFFIX(pcre2_real_convert_context_) -#define pcre2_real_match_context PCRE2_SUFFIX(pcre2_real_match_context_) -#define pcre2_real_jit_stack PCRE2_SUFFIX(pcre2_real_jit_stack_) -#define pcre2_real_match_data PCRE2_SUFFIX(pcre2_real_match_data_) - - -/* Data blocks */ - -#define pcre2_callout_block PCRE2_SUFFIX(pcre2_callout_block_) -#define pcre2_callout_enumerate_block PCRE2_SUFFIX(pcre2_callout_enumerate_block_) -#define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_) -#define pcre2_general_context PCRE2_SUFFIX(pcre2_general_context_) -#define pcre2_compile_context PCRE2_SUFFIX(pcre2_compile_context_) -#define pcre2_convert_context PCRE2_SUFFIX(pcre2_convert_context_) -#define pcre2_match_context PCRE2_SUFFIX(pcre2_match_context_) -#define pcre2_match_data PCRE2_SUFFIX(pcre2_match_data_) - - -/* Functions: the complete list in alphabetical order */ - -#define pcre2_callout_enumerate PCRE2_SUFFIX(pcre2_callout_enumerate_) -#define pcre2_code_copy PCRE2_SUFFIX(pcre2_code_copy_) -#define pcre2_code_copy_with_tables PCRE2_SUFFIX(pcre2_code_copy_with_tables_) -#define pcre2_code_free PCRE2_SUFFIX(pcre2_code_free_) -#define pcre2_compile PCRE2_SUFFIX(pcre2_compile_) -#define pcre2_compile_context_copy PCRE2_SUFFIX(pcre2_compile_context_copy_) -#define pcre2_compile_context_create PCRE2_SUFFIX(pcre2_compile_context_create_) -#define pcre2_compile_context_free PCRE2_SUFFIX(pcre2_compile_context_free_) -#define pcre2_config PCRE2_SUFFIX(pcre2_config_) -#define pcre2_convert_context_copy PCRE2_SUFFIX(pcre2_convert_context_copy_) -#define pcre2_convert_context_create PCRE2_SUFFIX(pcre2_convert_context_create_) -#define pcre2_convert_context_free PCRE2_SUFFIX(pcre2_convert_context_free_) -#define pcre2_converted_pattern_free PCRE2_SUFFIX(pcre2_converted_pattern_free_) -#define pcre2_dfa_match PCRE2_SUFFIX(pcre2_dfa_match_) -#define pcre2_general_context_copy PCRE2_SUFFIX(pcre2_general_context_copy_) -#define pcre2_general_context_create PCRE2_SUFFIX(pcre2_general_context_create_) -#define pcre2_general_context_free PCRE2_SUFFIX(pcre2_general_context_free_) -#define pcre2_get_error_message PCRE2_SUFFIX(pcre2_get_error_message_) -#define pcre2_get_mark PCRE2_SUFFIX(pcre2_get_mark_) -#define pcre2_get_match_data_heapframes_size PCRE2_SUFFIX(pcre2_get_match_data_heapframes_size_) -#define pcre2_get_match_data_size PCRE2_SUFFIX(pcre2_get_match_data_size_) -#define pcre2_get_ovector_pointer PCRE2_SUFFIX(pcre2_get_ovector_pointer_) -#define pcre2_get_ovector_count PCRE2_SUFFIX(pcre2_get_ovector_count_) -#define pcre2_get_startchar PCRE2_SUFFIX(pcre2_get_startchar_) -#define pcre2_jit_compile PCRE2_SUFFIX(pcre2_jit_compile_) -#define pcre2_jit_match PCRE2_SUFFIX(pcre2_jit_match_) -#define pcre2_jit_free_unused_memory PCRE2_SUFFIX(pcre2_jit_free_unused_memory_) -#define pcre2_jit_stack_assign PCRE2_SUFFIX(pcre2_jit_stack_assign_) -#define pcre2_jit_stack_create PCRE2_SUFFIX(pcre2_jit_stack_create_) -#define pcre2_jit_stack_free PCRE2_SUFFIX(pcre2_jit_stack_free_) -#define pcre2_maketables PCRE2_SUFFIX(pcre2_maketables_) -#define pcre2_maketables_free PCRE2_SUFFIX(pcre2_maketables_free_) -#define pcre2_match PCRE2_SUFFIX(pcre2_match_) -#define pcre2_match_context_copy PCRE2_SUFFIX(pcre2_match_context_copy_) -#define pcre2_match_context_create PCRE2_SUFFIX(pcre2_match_context_create_) -#define pcre2_match_context_free PCRE2_SUFFIX(pcre2_match_context_free_) -#define pcre2_match_data_create PCRE2_SUFFIX(pcre2_match_data_create_) -#define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) -#define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) -#define pcre2_next_match PCRE2_SUFFIX(pcre2_next_match_) -#define pcre2_pattern_convert PCRE2_SUFFIX(pcre2_pattern_convert_) -#define pcre2_pattern_info PCRE2_SUFFIX(pcre2_pattern_info_) -#define pcre2_serialize_decode PCRE2_SUFFIX(pcre2_serialize_decode_) -#define pcre2_serialize_encode PCRE2_SUFFIX(pcre2_serialize_encode_) -#define pcre2_serialize_free PCRE2_SUFFIX(pcre2_serialize_free_) -#define pcre2_serialize_get_number_of_codes PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_) -#define pcre2_set_bsr PCRE2_SUFFIX(pcre2_set_bsr_) -#define pcre2_set_callout PCRE2_SUFFIX(pcre2_set_callout_) -#define pcre2_set_character_tables PCRE2_SUFFIX(pcre2_set_character_tables_) -#define pcre2_set_compile_extra_options PCRE2_SUFFIX(pcre2_set_compile_extra_options_) -#define pcre2_set_compile_recursion_guard PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_) -#define pcre2_set_depth_limit PCRE2_SUFFIX(pcre2_set_depth_limit_) -#define pcre2_set_glob_escape PCRE2_SUFFIX(pcre2_set_glob_escape_) -#define pcre2_set_glob_separator PCRE2_SUFFIX(pcre2_set_glob_separator_) -#define pcre2_set_heap_limit PCRE2_SUFFIX(pcre2_set_heap_limit_) -#define pcre2_set_match_limit PCRE2_SUFFIX(pcre2_set_match_limit_) -#define pcre2_set_max_varlookbehind PCRE2_SUFFIX(pcre2_set_max_varlookbehind_) -#define pcre2_set_max_pattern_length PCRE2_SUFFIX(pcre2_set_max_pattern_length_) -#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_) -#define pcre2_set_newline PCRE2_SUFFIX(pcre2_set_newline_) -#define pcre2_set_parens_nest_limit PCRE2_SUFFIX(pcre2_set_parens_nest_limit_) -#define pcre2_set_offset_limit PCRE2_SUFFIX(pcre2_set_offset_limit_) -#define pcre2_set_optimize PCRE2_SUFFIX(pcre2_set_optimize_) -#define pcre2_set_substitute_callout PCRE2_SUFFIX(pcre2_set_substitute_callout_) -#define pcre2_set_substitute_case_callout PCRE2_SUFFIX(pcre2_set_substitute_case_callout_) -#define pcre2_substitute PCRE2_SUFFIX(pcre2_substitute_) -#define pcre2_substring_copy_byname PCRE2_SUFFIX(pcre2_substring_copy_byname_) -#define pcre2_substring_copy_bynumber PCRE2_SUFFIX(pcre2_substring_copy_bynumber_) -#define pcre2_substring_free PCRE2_SUFFIX(pcre2_substring_free_) -#define pcre2_substring_get_byname PCRE2_SUFFIX(pcre2_substring_get_byname_) -#define pcre2_substring_get_bynumber PCRE2_SUFFIX(pcre2_substring_get_bynumber_) -#define pcre2_substring_length_byname PCRE2_SUFFIX(pcre2_substring_length_byname_) -#define pcre2_substring_length_bynumber PCRE2_SUFFIX(pcre2_substring_length_bynumber_) -#define pcre2_substring_list_get PCRE2_SUFFIX(pcre2_substring_list_get_) -#define pcre2_substring_list_free PCRE2_SUFFIX(pcre2_substring_list_free_) -#define pcre2_substring_nametable_scan PCRE2_SUFFIX(pcre2_substring_nametable_scan_) -#define pcre2_substring_number_from_name PCRE2_SUFFIX(pcre2_substring_number_from_name_) - -/* Keep this old function name for backwards compatibility */ -#define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_) - -/* Keep this obsolete function for backwards compatibility: it is now a noop. */ -#define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_) - -/* Now generate all three sets of width-specific structures and function -prototypes. */ - -#define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \ -PCRE2_TYPES_LIST \ -PCRE2_STRUCTURE_LIST \ -PCRE2_GENERAL_INFO_FUNCTIONS \ -PCRE2_GENERAL_CONTEXT_FUNCTIONS \ -PCRE2_COMPILE_CONTEXT_FUNCTIONS \ -PCRE2_CONVERT_CONTEXT_FUNCTIONS \ -PCRE2_CONVERT_FUNCTIONS \ -PCRE2_MATCH_CONTEXT_FUNCTIONS \ -PCRE2_COMPILE_FUNCTIONS \ -PCRE2_PATTERN_INFO_FUNCTIONS \ -PCRE2_MATCH_FUNCTIONS \ -PCRE2_SUBSTRING_FUNCTIONS \ -PCRE2_SERIALIZE_FUNCTIONS \ -PCRE2_SUBSTITUTE_FUNCTION \ -PCRE2_JIT_FUNCTIONS \ -PCRE2_OTHER_FUNCTIONS - -#define PCRE2_LOCAL_WIDTH 8 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -#define PCRE2_LOCAL_WIDTH 16 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -#define PCRE2_LOCAL_WIDTH 32 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -/* Undefine the list macros; they are no longer needed. */ - -#undef PCRE2_TYPES_LIST -#undef PCRE2_STRUCTURE_LIST -#undef PCRE2_GENERAL_INFO_FUNCTIONS -#undef PCRE2_GENERAL_CONTEXT_FUNCTIONS -#undef PCRE2_COMPILE_CONTEXT_FUNCTIONS -#undef PCRE2_CONVERT_CONTEXT_FUNCTIONS -#undef PCRE2_MATCH_CONTEXT_FUNCTIONS -#undef PCRE2_COMPILE_FUNCTIONS -#undef PCRE2_PATTERN_INFO_FUNCTIONS -#undef PCRE2_MATCH_FUNCTIONS -#undef PCRE2_SUBSTRING_FUNCTIONS -#undef PCRE2_SERIALIZE_FUNCTIONS -#undef PCRE2_SUBSTITUTE_FUNCTION -#undef PCRE2_JIT_FUNCTIONS -#undef PCRE2_OTHER_FUNCTIONS -#undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS - -/* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine -PCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make -PCRE2_SUFFIX a no-op. Otherwise, generate an error. */ - -#undef PCRE2_SUFFIX -#ifndef PCRE2_CODE_UNIT_WIDTH -#error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h. -#error Use 8, 16, or 32; or 0 for a multi-width application. -#else /* PCRE2_CODE_UNIT_WIDTH is defined */ -#if PCRE2_CODE_UNIT_WIDTH == 8 || \ - PCRE2_CODE_UNIT_WIDTH == 16 || \ - PCRE2_CODE_UNIT_WIDTH == 32 -#define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH) -#elif PCRE2_CODE_UNIT_WIDTH == 0 -#undef PCRE2_JOIN -#undef PCRE2_GLUE -#define PCRE2_SUFFIX(a) a -#else -#error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32. -#endif -#endif /* PCRE2_CODE_UNIT_WIDTH is defined */ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PCRE2_H_IDEMPOTENT_GUARD */ - -/* End of pcre2.h */ diff --git a/vendor/pcre2/src/pcre2.h.in b/vendor/pcre2/src/pcre2.h.in index 0dffe65fba..06bcfad7d6 100644 --- a/vendor/pcre2/src/pcre2.h.in +++ b/vendor/pcre2/src/pcre2.h.in @@ -438,6 +438,7 @@ released, the numbers must not be changed. */ #define PCRE2_ERROR_DIFFSUBSOFFSET (-73) #define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) #define PCRE2_ERROR_BAD_BACKSLASH_K (-75) +#define PCRE2_ERROR_PARTIALSUBS (-76) /* Request types for pcre2_pattern_info() */ diff --git a/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 b/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 deleted file mode 100644 index 071a8f4257..0000000000 --- a/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 +++ /dev/null @@ -1,196 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This file was automatically written by the pcre2_dftables auxiliary -program. It contains character tables that are used when no external -tables are passed to PCRE2 by the application that calls it. The tables -are used only for characters whose code values are less than 256, and -only relevant if not in UCP mode. */ - -/* This set of tables was written in the EBCDIC 1047 (NL 0x15) locale. */ - -/* The pcre2_ftables program (which is distributed with PCRE2) can be used -to build alternative versions of this file. This is necessary if you are -running in an EBCDIC environment, or if you want to default to a different -encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates -these tables in the "C" locale by default. This happens automatically if -PCRE2 is configured with --enable-rebuild-chartables. However, you can run -pcre2_dftables manually with the -L option to build tables using the LC_ALL -locale. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pcre2_internal.h" - -const uint8_t PRIV(default_tables)[] = { - -/* This table is a lower casing table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167, - 168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table is a case flipping table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,193,194,195,196,197,198,199, - 200,201,138,139,140,141,142,143, - 144,209,210,211,212,213,214,215, - 216,217,154,155,156,157,158,159, - 160,161,226,227,228,229,230,231, - 232,233,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table contains bit maps for various character classes. Each map is 32 -bytes long and the bits run from the least significant end of each byte. The -classes that have their own maps are: space, xdigit, digit, upper, lower, word, -graph, print, punct, and cntrl. Other classes are built from combinations. */ - - 0x20,0x38,0x20,0x00,0x00,0x00,0x00,0x00, /* space */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* xdigit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* digit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* upper */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* lower */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* word */ - 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* graph */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* print */ - 0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* punct */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20, - 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - - 0xaf,0xf8,0x6f,0xf3,0xc0,0xe0,0x84,0xb0, /* cntrl */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - -/* This table identifies various classes of character by individual bits: - 0x01 white space character - 0x02 letter - 0x04 lower case letter - 0x08 decimal digit - 0x10 word (alphanumeric or '_') -*/ - - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - ' */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0 - 7 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* @ - G */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ` - g */ - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* h - o */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ - 0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */ - 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ - -/* End of pcre2_chartables.c */ diff --git a/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 b/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 deleted file mode 100644 index 99ba81b207..0000000000 --- a/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 +++ /dev/null @@ -1,196 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This file was automatically written by the pcre2_dftables auxiliary -program. It contains character tables that are used when no external -tables are passed to PCRE2 by the application that calls it. The tables -are used only for characters whose code values are less than 256, and -only relevant if not in UCP mode. */ - -/* This set of tables was written in the EBCDIC 1047 (NL 0x25) locale. */ - -/* The pcre2_ftables program (which is distributed with PCRE2) can be used -to build alternative versions of this file. This is necessary if you are -running in an EBCDIC environment, or if you want to default to a different -encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates -these tables in the "C" locale by default. This happens automatically if -PCRE2 is configured with --enable-rebuild-chartables. However, you can run -pcre2_dftables manually with the -L option to build tables using the LC_ALL -locale. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pcre2_internal.h" - -const uint8_t PRIV(default_tables)[] = { - -/* This table is a lower casing table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167, - 168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table is a case flipping table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,193,194,195,196,197,198,199, - 200,201,138,139,140,141,142,143, - 144,209,210,211,212,213,214,215, - 216,217,154,155,156,157,158,159, - 160,161,226,227,228,229,230,231, - 232,233,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table contains bit maps for various character classes. Each map is 32 -bytes long and the bits run from the least significant end of each byte. The -classes that have their own maps are: space, xdigit, digit, upper, lower, word, -graph, print, punct, and cntrl. Other classes are built from combinations. */ - - 0x20,0x38,0x00,0x00,0x20,0x00,0x00,0x00, /* space */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* xdigit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* digit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* upper */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* lower */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* word */ - 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* graph */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* print */ - 0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* punct */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20, - 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - - 0xaf,0xf8,0x4f,0xf3,0xe0,0xe0,0x84,0xb0, /* cntrl */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - -/* This table identifies various classes of character by individual bits: - 0x01 white space character - 0x02 letter - 0x04 lower case letter - 0x08 decimal digit - 0x10 word (alphanumeric or '_') -*/ - - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* - ' */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0 - 7 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* @ - G */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ` - g */ - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* h - o */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ - 0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */ - 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ - -/* End of pcre2_chartables.c */ diff --git a/vendor/pcre2/src/pcre2_compile.c b/vendor/pcre2/src/pcre2_compile.c index f126e41b7b..1081cf647e 100644 --- a/vendor/pcre2/src/pcre2_compile.c +++ b/vendor/pcre2/src/pcre2_compile.c @@ -2020,7 +2020,7 @@ else else { *errorcodeptr = ERR64; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } break; @@ -2107,7 +2107,7 @@ else else { *errorcodeptr = ERR67; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } } /* End of \x{} processing */ @@ -8066,6 +8066,13 @@ for (;; pptr++) tempcode += GET(tempcode, 1); break; #endif + + case OP_REF: + case OP_REFI: + case OP_DNREF: + case OP_DNREFI: + tempcode += PRIV(OP_lengths)[*tempcode]; + break; } /* If tempcode is equal to code (which points to the end of the repeated @@ -9363,10 +9370,10 @@ return c; /* This function is called to skip parts of the parsed pattern when finding the length of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find -the end of the branch, it is called to skip over an internal lookaround or -(DEFINE) group, and it is also called to skip to the end of a class, during -which it will never encounter nested groups (but there's no need to have -special code for that). +the end of the branch; it is called to skip over an internal lookaround or +(DEFINE) group; and it is also called to skip to the end of a class, during +which it will never encounter nested groups (however extended classes can +themselves be nested, with their own class-nesting level). When called to find the end of a branch or group, pptr must point to the first meta code inside the branch, not the branch-starting code. In other cases it @@ -9387,6 +9394,7 @@ static uint32_t * parsed_skip(uint32_t *pptr, uint32_t skiptype) { uint32_t nestlevel = 0; +uint32_t class_nestlevel = 0; for (;; pptr++) { @@ -9426,12 +9434,19 @@ for (;; pptr++) pptr += pptr[1]; break; - /* These are the "active" items in this loop. */ + /* These are the active items for tracking class nesting. */ + + case META_CLASS: + case META_CLASS_NOT: + if (skiptype == PSKIP_CLASS) class_nestlevel++; + break; case META_CLASS_END: - if (skiptype == PSKIP_CLASS) return pptr; + if (skiptype == PSKIP_CLASS && --class_nestlevel == 0) return pptr; break; + /* These are the "active" items for tracking ALT/KET nesting. */ + case META_ATOMIC: case META_CAPTURE: case META_COND_ASSERT: @@ -10160,6 +10175,11 @@ for (; *pptr != META_END; pptr++) case META_COMMIT: case META_DOLLAR: case META_DOT: + case META_ECLASS_AND: + case META_ECLASS_NOT: + case META_ECLASS_OR: + case META_ECLASS_SUB: + case META_ECLASS_XOR: case META_FAIL: case META_PLUS: case META_PLUS_PLUS: diff --git a/vendor/pcre2/src/pcre2_compile_class.c b/vendor/pcre2/src/pcre2_compile_class.c index 9a1fc022ff..c6f30d6fcf 100644 --- a/vendor/pcre2/src/pcre2_compile_class.c +++ b/vendor/pcre2/src/pcre2_compile_class.c @@ -721,9 +721,13 @@ while (TRUE) else cranges->char_lists_types |= tmp1 << tmp2; - if (range_start < XCL_CHAR_LIST_LOW_16_START) break; + if (range_end < XCL_CHAR_LIST_LOW_16_START || tmp2 == 0) + { + PCRE2_ASSERT(range_start < XCL_CHAR_LIST_LOW_16_START); + break; + } - PCRE2_ASSERT(tmp2 >= XCL_TYPE_BIT_LEN); + PCRE2_ASSERT((tmp2 % XCL_TYPE_BIT_LEN) == 0); char_list_end = char_list_start - 1; char_list_start = *char_list_next++; tmp1 = 0; @@ -1802,17 +1806,14 @@ if ((xclass_props & XCLASS_REQUIRED) != 0) PUT(code, 0, (uint32_t)(char_lists_size >> 1)); code += LINK_SIZE; -#if defined PCRE2_DEBUG || defined SUPPORT_VALGRIND + /* If we added padding to align the list, initialize the bytes to + defined values, so the library is valgrind-clean. It could also + be a security concern for clients calling into PCRE2 via bindings + from a memory-safe language, if pcre2_serialize_encode() exposes + uninitialized memory that may contain sensitive information. */ + if ((char_lists_size & 0x2) != 0) - { - /* In debug the unused 16 bit value is set - to a fixed value and marked unused. */ - ((uint16_t*)data)[-1] = 0x5555; -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_NOACCESS(data - 2, 2); -#endif - } -#endif + ((uint16_t*)data)[-1] = 0xdead; cb->char_lists_size = CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t)); diff --git a/vendor/pcre2/src/pcre2_convert.c b/vendor/pcre2/src/pcre2_convert.c index ad7312ab7b..8a2b293d5f 100644 --- a/vendor/pcre2/src/pcre2_convert.c +++ b/vendor/pcre2/src/pcre2_convert.c @@ -1215,9 +1215,11 @@ for (int i = 0; i < 2; i++) /* Allocate memory for the buffer, with hidden space for an allocator at the start. The next time round the loop runs the conversion for real. */ - allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (*bufflenptr + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)ccontext); - if (allocated == NULL) + if (*bufflenptr > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / + CU2BYTES(1)) - 1 || + (allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(*bufflenptr + 1), + (pcre2_memctl *)ccontext)) == NULL) { *bufflenptr = 0; /* Error offset */ return PCRE2_ERROR_NOMEMORY; diff --git a/vendor/pcre2/src/pcre2_dfa_match.c b/vendor/pcre2/src/pcre2_dfa_match.c index f507acf8d5..314e97754e 100644 --- a/vendor/pcre2/src/pcre2_dfa_match.c +++ b/vendor/pcre2/src/pcre2_dfa_match.c @@ -1601,7 +1601,7 @@ for (;;) goto ANYNL01; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL01: @@ -1879,7 +1879,7 @@ for (;;) goto ANYNL02; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL02: @@ -2160,7 +2160,7 @@ for (;;) goto ANYNL03; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL03: @@ -2341,7 +2341,7 @@ for (;;) if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0) reset_could_continue = TRUE; } - else if (UCHAR21TEST(ptr + 1) == CHAR_LF) + else if (ptr[1] == CHAR_LF) { ADD_NEW_DATA(-(state_offset + 1), 0, 1); } @@ -3745,7 +3745,7 @@ for (;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -3773,7 +3773,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -3833,7 +3833,7 @@ for (;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else /* 8-bit code units */ @@ -3885,7 +3885,7 @@ for (;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -3899,7 +3899,7 @@ for (;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -3967,7 +3967,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -3988,7 +3988,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ @@ -4096,9 +4096,9 @@ for (;;) not contain any explicit matches for \r or \n, and the newline option is CRLF or ANY or ANYCRLF, advance the match position by one more character. */ - if (UCHAR21TEST(start_match - 1) == CHAR_CR && + if (start_match[-1] == CHAR_CR && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL && + *start_match == CHAR_NL && (re->flags & PCRE2_HASCRORLF) == 0 && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF || diff --git a/vendor/pcre2/src/pcre2_error.c b/vendor/pcre2/src/pcre2_error.c index df26add2be..46753f079b 100644 --- a/vendor/pcre2/src/pcre2_error.c +++ b/vendor/pcre2/src/pcre2_error.c @@ -305,7 +305,9 @@ static const unsigned char match_error_texts[] = "substitute subject differs from prior match call\0" "substitute start offset differs from prior match call\0" "substitute options differ from prior match call\0" + /* 75 */ "disallowed use of \\K in lookaround\0" + "replacement $' or $_ not supported with partial match\0" ; diff --git a/vendor/pcre2/src/pcre2_internal.h b/vendor/pcre2/src/pcre2_internal.h index aa79409572..930c745b40 100644 --- a/vendor/pcre2/src/pcre2_internal.h +++ b/vendor/pcre2/src/pcre2_internal.h @@ -477,8 +477,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ - UCHAR21TEST(p) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1]) \ + *p == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || p[1] == NLBLOCK->nl[1]) \ ) \ ) @@ -491,8 +491,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ - UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ + *(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || *(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ ) \ ) @@ -1518,7 +1518,7 @@ High16 and High32: the highest bit is always one The items are ordered in increasing order, so binary search can be used to find the lower bound of an input character. The lower bound is the highest item, which value is less or equal than the input -character. If the lower bit of the item is cleard, or the character +character. If the lower bit of the item is cleared, or the character stored in the item equals to the input character, the input character is in the character list. */ @@ -1539,14 +1539,19 @@ character is in the character list. */ #define XCL_CHAR_LIST_HIGH_32_END 0xffffffff #define XCL_CHAR_LIST_HIGH_32_ADD 0x80000000 -/* Mask for getting the descriptors of character list ranges. -Each descriptor has XCL_TYPE_BIT_LEN bits, and can be processed -by XCL_BEGIN_WITH_RANGE and XCL_ITEM_COUNT_MASK macros. */ +/* Mask and length values for getting the descriptors of +all character list ranges. The bit length of each descriptor +is XCL_TYPE_BIT_LEN so the total size is 4*XCL_TYPE_BIT_LEN +(currently 12 bit). This data is stored for all four character +lists, even if no characters are present in a list. */ #define XCL_TYPE_MASK 0xfff #define XCL_TYPE_BIT_LEN 3 -/* If this bit is set, the first item of the character list is the -end of a range, which started before the starting character of the -character list. */ +/* If this bit is set for a character class, the first item of the +character list is the end of a range, which started before the +starting character of the character list. If this bit is set, and +no characters are present in the list, the whole character class +is part of a range. E.g: [\x{500}-\x{12000}] covers the entire +0x8000-0xffff range. */ #define XCL_BEGIN_WITH_RANGE 0x4 /* Number of items in the character list: 0, 1, or 2. The value 3 represents that the item count is stored at the begining of the @@ -2296,6 +2301,7 @@ is available. */ #define _pcre2_is_newline PCRE2_SUFFIX(_pcre2_is_newline_) #define _pcre2_jit_free_rodata PCRE2_SUFFIX(_pcre2_jit_free_rodata_) #define _pcre2_jit_free PCRE2_SUFFIX(_pcre2_jit_free_) +#define _pcre2_jit_check_exec PCRE2_SUFFIX(_pcre2_jit_check_exec_) #define _pcre2_jit_get_size PCRE2_SUFFIX(_pcre2_jit_get_size_) #define _pcre2_jit_get_target PCRE2_SUFFIX(_pcre2_jit_get_target_) #define _pcre2_memctl_malloc PCRE2_SUFFIX(_pcre2_memctl_malloc_) @@ -2325,6 +2331,7 @@ extern BOOL _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR, uint32_t *, BOOL); extern void _pcre2_jit_free_rodata(void *, void *); extern void _pcre2_jit_free(void *, pcre2_memctl *); +extern BOOL _pcre2_jit_check_exec(void *, uint32_t); extern size_t _pcre2_jit_get_size(void *); const char * _pcre2_jit_get_target(void); extern void * _pcre2_memctl_malloc(size_t, pcre2_memctl *); diff --git a/vendor/pcre2/src/pcre2_intmodedep.h b/vendor/pcre2/src/pcre2_intmodedep.h index 6cefb61d37..269c418fe0 100644 --- a/vendor/pcre2/src/pcre2_intmodedep.h +++ b/vendor/pcre2/src/pcre2_intmodedep.h @@ -250,21 +250,6 @@ check is needed before accessing these tables. */ /* ----------------- Character-handling macros ----------------- */ -/* There is a proposed future special "UTF-21" mode, in which only the lowest -21 bits of a 32-bit character are interpreted as UTF, with the remaining 11 -high-order bits available to the application for other uses. In preparation for -the future implementation of this mode, there are macros that load a data item -and, if in this special mode, mask it to 21 bits. These macros all have names -starting with UCHAR21. In all other modes, including the normal 32-bit -library, the macros all have the same simple definitions. When the new mode is -implemented, it is expected that these definitions will be varied appropriately -using #ifdef when compiling the library that supports the special mode. */ - -#define UCHAR21(eptr) (*(eptr)) -#define UCHAR21TEST(eptr) (*(eptr)) -#define UCHAR21INC(eptr) (*(eptr)++) -#define UCHAR21INCTEST(eptr) (*(eptr)++) - /* When UTF encoding is being used, a character is no longer just a single byte in 8-bit mode or a single short in 16-bit mode. The macros for character handling generate simple sequences when used in the basic mode, and more @@ -891,38 +876,125 @@ we don't generate any code when all is well. */ typedef struct heapframe { /* The first set of fields are variables that have to be preserved over calls - to RRMATCH(), but which do not need to be copied to new frames. */ + to RMATCH(), but which do not need to be copied to new frames. */ PCRE2_SPTR ecode; /* The current position in the pattern */ - PCRE2_SPTR temp_sptr[2]; /* Used for short-term PCRE2_SPTR values */ - PCRE2_SIZE length; /* Used for character, string, or code lengths */ PCRE2_SIZE back_frame; /* Amount to subtract on RRETURN */ - PCRE2_SIZE temp_size; /* Used for short-term PCRE2_SIZE values */ uint32_t rdepth; /* Function "recursion" depth within pcre2_match() */ uint32_t group_frame_type; /* Type information for group frames */ - uint32_t temp_32[4]; /* Used for short-term 32-bit or BOOL values */ uint8_t return_id; /* Where to go on in internal "return" */ uint8_t op; /* Processing opcode */ + uint8_t byte1; /* A temporary byte to store anything */ + uint8_t byte2; /* A temporary byte to store anything */ - /* At this point, the structure is 16-bit aligned. On most architectures + /* At this point, the structure is 32-bit aligned. On most architectures the alignment requirement for a pointer will ensure that the eptr field below is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer - that is 16-bit aligned. We must therefore ensure that what comes between here - and eptr is an odd multiple of 16 bits so as to get back into 32-bit - alignment. This happens naturally when PCRE2_UCHAR is 8 bits wide, but needs - fudges in the other cases. In the 32-bit case the padding comes first so that - the occu field itself is 32-bit aligned. Without the padding, this structure - is no longer a multiple of PCRE2_SIZE on m68k, and the check below fails. */ - + that is 16-bit aligned, so all uint8_t members above are required for a 32 + bit alignment. */ + + union { + /* Fields for storing localized data, which + is preserved by RMATCH() calls. */ + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR charptr; + uint32_t min; + uint32_t max; + uint32_t c; + union { + uint32_t oc; + /* Buffer for other case code units. The size of + the buffer is enough to store the longest character. */ #if PCRE2_CODE_UNIT_WIDTH == 8 - PCRE2_UCHAR occu[6]; /* Used for other case code units */ + PCRE2_UCHAR occu[4]; #elif PCRE2_CODE_UNIT_WIDTH == 16 - PCRE2_UCHAR occu[2]; /* Used for other case code units */ - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ + PCRE2_UCHAR occu[2]; #else - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ - PCRE2_UCHAR occu[1]; /* Used for other case code units */ + PCRE2_UCHAR occu[1]; #endif + } oc; + } char_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t c; + uint32_t oc; + } charnot_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR byte_map_address; + uint32_t min; + uint32_t max; + } class_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR xclass_data; + uint32_t min; + uint32_t max; + } xclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR eclass_data; + PCRE2_SIZE eclass_len; + uint32_t min; + uint32_t max; + } eclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t ctype; + uint32_t propvalue; + } type_repeat; + + struct { + PCRE2_SPTR start; + PCRE2_SIZE offset; + PCRE2_SIZE length; + uint32_t min; + uint32_t max; + } ref_repeat; + + struct { + uint32_t frame_type; /* Set for all that use GROUPLOOP */ + } op_bra; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR start_group; + uint32_t frame_type; + } op_brapos; + + struct { + PCRE2_SPTR start_branch; + uint32_t frame_type; + } op_recurse; + + struct { + PCRE2_SPTR saved_end_subject; + PCRE2_SPTR saved_eptr; + PCRE2_SIZE true_end_extra; + uint32_t saved_moptions; + } op_assert_scs; + + struct { + PCRE2_SPTR start_branch; + PCRE2_SIZE length; + } op_cond; + + struct { + uint32_t min; + uint32_t max; + } op_vreverse; + } fields; /* The rest have to be copied from the previous frame whenever a new frame becomes current. The final field is specified as a large vector so that diff --git a/vendor/pcre2/src/pcre2_jit_compile.c b/vendor/pcre2/src/pcre2_jit_compile.c index 3ab4592c3a..105a1dd358 100644 --- a/vendor/pcre2/src/pcre2_jit_compile.c +++ b/vendor/pcre2/src/pcre2_jit_compile.c @@ -321,6 +321,7 @@ typedef struct ref_iterator_backtrack { backtrack_common common; /* Next iteration. */ struct sljit_label *matchingpath; + BOOL possessive_or_exact; } ref_iterator_backtrack; typedef struct recurse_entry { @@ -1142,7 +1143,11 @@ cc += PRIV(OP_lengths)[*cc]; /* Although do_casefulcmp() uses only one local, the allocate_stack() calls during the repeat destroys LOCAL1 variables. */ if (*cc >= OP_CRSTAR && *cc <= OP_CRPOSRANGE) + { locals_size += 2 * SSIZE_OF(sw); + if (*cc >= OP_CRPOSRANGE && GET2(cc, 1 + IMM2_SIZE + 1) != GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE)) + locals_size += SSIZE_OF(sw); + } return (current_locals_size >= locals_size) ? current_locals_size : locals_size; } @@ -5413,15 +5418,15 @@ OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); static void do_utfreadchar_invalid(compiler_common *common) { /* Slow decoding a UTF-16 character. TMP1 contains the first half -of the character (>= 0xd800). Return char value in TMP1. STR_PTR is -undefined for invalid characters. */ +of the character (>= 0xd800). TMP2 contains TMP1 - 0xd800. Return +char value in TMP1. STR_PTR is unchanged for invalid characters. */ DEFINE_COMPILER; struct sljit_jump *exit_invalid[3]; sljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0); /* TMP2 contains the high surrogate. */ -exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00); +exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -5435,9 +5440,10 @@ exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); +JUMPHERE(exit_invalid[2]); +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); -JUMPHERE(exit_invalid[2]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } @@ -5635,7 +5641,6 @@ struct sljit_jump *start; struct sljit_jump *end = NULL; struct sljit_jump *end2 = NULL; #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -struct sljit_label *loop; struct sljit_jump *jump; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ jump_list *newline = NULL; @@ -5741,7 +5746,7 @@ mainloop = LABEL(); /* Increasing the STR_PTR here requires one less jump in the most common case. */ #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -if (common->utf && !common->invalid_utf) readuchar = TRUE; +if (common->utf) readuchar = TRUE; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ if (newlinecheck) readuchar = TRUE; @@ -5757,13 +5762,11 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x40, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0); + OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); + SELECT(SLJIT_EQUAL, STR_PTR, TMP3, 0, STR_PTR); JUMPHERE(jump); } else if (common->utf) @@ -5777,13 +5780,9 @@ else if (common->utf) if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); + jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); JUMPHERE(jump); } else if (common->utf) @@ -6244,6 +6243,7 @@ while (TRUE) repeat = GET2(cc, 1); if (repeat <= 0) { + repeat = 1; chars_end = chars; continue; } @@ -8390,9 +8390,10 @@ int offset = 0; struct sljit_label *label; struct sljit_jump *zerolength; struct sljit_jump *jump = NULL; +jump_list *match_failed = NULL; PCRE2_SPTR ccbegin = cc; int min = 0, max = 0; -BOOL minimize; +BOOL minimize, exact; PUSH_BACKTRACK(sizeof(ref_iterator_backtrack), cc, NULL); @@ -8415,31 +8416,50 @@ type = cc[1 + IMM2_SIZE]; SLJIT_COMPILE_ASSERT((OP_CRSTAR & 0x1) == 0, crstar_opcode_must_be_even); /* Update ref_update_local_size() when this changes. */ SLJIT_ASSERT(local_start + 2 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); -minimize = (type & 0x1) != 0; +minimize = FALSE; +exact = FALSE; switch(type) { - case OP_CRSTAR: case OP_CRMINSTAR: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRSTAR: + case OP_CRPOSSTAR: min = 0; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRPLUS: + case OP_CRMINPLUS: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRPLUS: + case OP_CRPOSPLUS: min = 1; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRQUERY: + case OP_CRMINQUERY: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRQUERY: + case OP_CRPOSQUERY: min = 0; max = 1; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRRANGE: + case OP_CRPOSRANGE: min = GET2(cc, 1 + IMM2_SIZE + 1); max = GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE); + SLJIT_ASSERT(min > 1 || max > 1); + if (min == max) + exact = TRUE; cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE; break; default: @@ -8447,6 +8467,86 @@ switch(type) break; } +if (type >= OP_CRPOSSTAR || exact) + { + BACKTRACK_AS(ref_iterator_backtrack)->possessive_or_exact = TRUE; + if (ref) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + if (min > 0 && !common->unset_backref) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1))); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1)); + } + else + { + compile_dnref_search(common, ccbegin, min > 0 ? &backtrack->own_backtracks : NULL); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); + } + + if (exact) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, min); + else if (type != OP_CRPOSSTAR) + { + /* STR_PTR is NULL before reaching min. */ + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, min > 0 ? SLJIT_IMM : STR_PTR, 0); + if (type == OP_CRPOSRANGE) + { + SLJIT_ASSERT(local_start + 3 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 0); + } + } + + label = LABEL(); + if (!ref) + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw)); + + if (type == OP_CRPOSSTAR) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + + compile_ref_matchingpath(common, ccbegin, exact ? &backtrack->own_backtracks : &match_failed, FALSE, FALSE); + + if (type == OP_CRPOSSTAR) + JUMPTO(SLJIT_JUMP, label); + else if (type == OP_CRPOSPLUS || type == OP_CRPOSQUERY) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (type == OP_CRPOSPLUS) + JUMPTO(SLJIT_JUMP, label); + } + else if (exact) + { + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); + JUMPTO(SLJIT_NOT_ZERO, label); + } + else + { + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 1); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), TMP1, 0); + if (min > 0) + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (max == 0) + JUMPTO(SLJIT_JUMP, label); + else + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, max, label); + } + + if (!exact) + { + set_jumps(match_failed, LABEL()); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), local_start); + + if (type != OP_CRPOSSTAR) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0)); + } + + JUMPHERE(zerolength); + count_match(common); + return cc; + } + if (!minimize) { if (min == 0) @@ -8458,6 +8558,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0); /* Temporary release of STR_PTR. */ OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + /* Handles both invalid and empty cases. Since the minimum repeat, is zero the invalid case is basically the same as an empty case. */ if (ref) @@ -8469,6 +8570,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); } + /* Restore if not zero length. */ OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); } @@ -8477,6 +8579,7 @@ if (!minimize) allocate_stack(common, 1); if (ref) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); if (ref) @@ -8504,11 +8607,11 @@ if (!minimize) if (min > 1 || max > 1) { - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, TMP1, 0); if (min > 1) CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + if (max > 1) { jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max); @@ -12139,6 +12242,12 @@ PCRE2_UCHAR type; type = cc[PRIV(OP_lengths)[*cc]]; +if (CURRENT_AS(ref_iterator_backtrack)->possessive_or_exact) + { + set_jumps(current->own_backtracks, LABEL()); + return; + } + if ((type & 0x1) == 0) { /* Maximize case. */ @@ -12405,6 +12514,8 @@ else if (SLJIT_UNLIKELY(opcode == OP_ASSERT_SCS)) if (common->restore_end_ptr == 0) common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw); } +else if (SLJIT_UNLIKELY(opcode == OP_ASSERTBACK_NA) && PRIVATE_DATA(ccbegin + 1)) + OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); if (SLJIT_UNLIKELY(opcode == OP_ONCE)) { diff --git a/vendor/pcre2/src/pcre2_jit_match_inc.h b/vendor/pcre2/src/pcre2_jit_match_inc.h index 32d4c8a5e1..ba210007e3 100644 --- a/vendor/pcre2/src/pcre2_jit_match_inc.h +++ b/vendor/pcre2/src/pcre2_jit_match_inc.h @@ -117,6 +117,7 @@ jit_arguments arguments; int rc; int index = 0; +/* The same check is performed by jit_check_exec(). */ if ((options & PCRE2_PARTIAL_HARD) != 0) index = 2; else if ((options & PCRE2_PARTIAL_SOFT) != 0) @@ -125,6 +126,16 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0) if (functions == NULL || functions->executable_funcs[index] == NULL) return match_data->rc = PCRE2_ERROR_JIT_BADOPTION; +/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT, +free the memory that was obtained. */ + +if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0) + { + match_data->memctl.free((void *)match_data->subject, + match_data->memctl.memory_data); + match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT; + } + /* Sanity checks should be handled by pcre2_match. */ arguments.str = subject + start_offset; arguments.begin = subject; diff --git a/vendor/pcre2/src/pcre2_jit_misc_inc.h b/vendor/pcre2/src/pcre2_jit_misc_inc.h index 0225fc6baf..16c230e9b0 100644 --- a/vendor/pcre2/src/pcre2_jit_misc_inc.h +++ b/vendor/pcre2/src/pcre2_jit_misc_inc.h @@ -200,17 +200,28 @@ if (jit_stack != NULL) /************************************************* -* Get target CPU type * +* Checks function compilation * *************************************************/ -const char* -PRIV(jit_get_target)(void) +BOOL +PRIV(jit_check_exec)(void *executable_jit, uint32_t options) { #ifndef SUPPORT_JIT -return "JIT is not supported"; +(void)executable_jit; +(void)options; +return FALSE; #else /* SUPPORT_JIT */ -return sljit_get_platform_name(); -#endif /* SUPPORT_JIT */ +/* The same check is performed at the beginning of pcre2_jit_match(). */ +executable_functions *functions = (executable_functions *)executable_jit; +int index = 0; + +if ((options & PCRE2_PARTIAL_HARD) != 0) + index = 2; +else if ((options & PCRE2_PARTIAL_SOFT) != 0) + index = 1; + +return functions->executable_funcs[index] != NULL; +#endif } @@ -231,4 +242,19 @@ return executable_sizes[0] + executable_sizes[1] + executable_sizes[2]; #endif } +/************************************************* +* Get target CPU type * +*************************************************/ + +const char* +PRIV(jit_get_target)(void) +{ +#ifndef SUPPORT_JIT +return "JIT is not supported"; +#else /* SUPPORT_JIT */ +return sljit_get_platform_name(); +#endif /* SUPPORT_JIT */ +} + + /* End of pcre2_jit_misc_inc.h */ diff --git a/vendor/pcre2/src/pcre2_match.c b/vendor/pcre2/src/pcre2_match.c index d5574d721a..a5a8421f7c 100644 --- a/vendor/pcre2/src/pcre2_match.c +++ b/vendor/pcre2/src/pcre2_match.c @@ -169,9 +169,9 @@ enum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207, /* Define short names for general fields in the current backtrack frame, which is always pointed to by the F variable. Occasional references to fields in other frames are written out explicitly. There are also some fields in the -current frame whose names start with "temp" that are used for short-term, -localised backtracking memory. These are #defined with Lxxx names at the point -of use and undefined afterwards. */ +current frame that are used for short-term, localised backtracking memory. +These are members of the fields union and #defined with Lxxx names at the +point of use and undefined afterwards. */ #define Fback_frame F->back_frame #define Fcapture_last F->capture_last @@ -180,12 +180,10 @@ of use and undefined afterwards. */ #define Feptr F->eptr #define Fgroup_frame_type F->group_frame_type #define Flast_group_offset F->last_group_offset -#define Flength F->length #define Fmark F->mark #define Frdepth F->rdepth #define Fstart_match F->start_match #define Foffset_top F->offset_top -#define Foccu F->occu #define Fop F->op #define Fovector F->ovector #define Freturn_id F->return_id @@ -457,8 +455,8 @@ if (caseless) { uint32_t cc, cp; if (eptr >= mb->end_subject) return 1; /* Partial match */ - cc = UCHAR21TEST(eptr); - cp = UCHAR21TEST(p); + cc = *eptr; + cp = *p; if (TABLE_GET(cp, mb->lcc, cp) != TABLE_GET(cc, mb->lcc, cc)) return -1; /* No match */ p++; @@ -478,7 +476,7 @@ else for (; length > 0; length--) { if (eptr >= mb->end_subject) return 1; /* Partial match */ - if (UCHAR21INCTEST(p) != UCHAR21INCTEST(eptr)) return -1; /* No match */ + if (*p++ != *eptr++) return -1; /* No match */ } } @@ -697,7 +695,7 @@ heapframe *frames_top; /* End of frames vector */ heapframe *assert_accept_frame = NULL; /* For passing back a frame with captures */ PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ -/* Local variables that do not need to be preserved over calls to RRMATCH(). */ +/* Local variables that do not need to be preserved over calls to RMATCH(). */ PCRE2_SPTR branch_end = NULL; PCRE2_SPTR branch_start; @@ -816,11 +814,11 @@ if (group_frame_type != 0) break; case GF_NOCAPTURE: - fprintf(stderr, "nocapture op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "nocapture op=%d", Fop); break; case GF_CONDASSERT: - fprintf(stderr, "condassert op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "condassert op=%d", Fop); break; case GF_RECURSE: @@ -1066,7 +1064,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr == mb->end_subject - 1 && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -1112,17 +1110,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); - if (Flength > (PCRE2_SIZE)(mb->end_subject - Feptr)) + GETCHARLEN(fc, Fecode, length); + if (length > (PCRE2_SIZE)(mb->end_subject - Feptr)) { CHECK_PARTIAL(); /* Not SCHECK_PARTIAL() */ RRETURN(MATCH_NOMATCH); } - for (; Flength > 0; Flength--) + for (; length > 0; length--) { - if (*Fecode++ != UCHAR21INC(Feptr)) RRETURN(MATCH_NOMATCH); + if (*Fecode++ != *Feptr++) RRETURN(MATCH_NOMATCH); } } else @@ -1157,9 +1155,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); + GETCHARLEN(fc, Fecode, length); /* If the pattern character's value is < 128, we know that its other case (if any) is also < 128 (and therefore only one code unit long in all @@ -1168,7 +1166,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc < 128) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH); Fecode++; Feptr++; @@ -1176,14 +1174,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* Otherwise we must pick up the subject character and use Unicode property support to test its other case. Note that we cannot use the - value of "Flength" to check for sufficient bytes left, because the other + value of "length" to check for sufficient bytes left, because the other case of the character may have more or fewer code units. */ else { uint32_t dc; GETCHARINC(dc, Feptr); - Fecode += Flength; + Fecode += length; if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH); } } @@ -1193,7 +1191,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; fc = Fecode[1]; if (fc < 128) { @@ -1257,7 +1255,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { uint32_t ch; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; ch = Fecode[1]; Fecode += 2; @@ -1282,7 +1280,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { uint32_t ch = Fecode[1]; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc)) RRETURN(MATCH_NOMATCH); Fecode += 2; @@ -1293,13 +1291,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* ===================================================================== */ /* Match a single character repeatedly. */ -#define Loclength F->temp_size -#define Lstart_eptr F->temp_sptr[0] -#define Lcharptr F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Llength F->byte1 +#define Loclength F->byte2 +#define Lstart_eptr F->fields.char_repeat.start_eptr +#define Lcharptr F->fields.char_repeat.charptr +#define Lmin F->fields.char_repeat.min +#define Lmax F->fields.char_repeat.max +#define Lc F->fields.char_repeat.c +#define Loc F->fields.char_repeat.oc.oc +#define Loccu F->fields.char_repeat.oc.occu case OP_EXACT: case OP_EXACTI: @@ -1393,29 +1393,30 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Lcharptr = Fecode; - GETCHARLEN(fc, Fecode, Flength); - Fecode += Flength; + GETCHARLEN(fc, Fecode, length); + Fecode += length; + Llength = (uint8_t)length; /* Handle multi-code-unit character matching, caseful and caseless. */ - if (Flength > 1) + if (length > 1) { uint32_t othercase; if (Fop >= OP_STARI && /* Caseless */ (othercase = UCD_OTHERCASE(fc)) != fc) - Loclength = PRIV(ord2utf)(othercase, Foccu); + Loclength = (uint8_t)PRIV(ord2utf)(othercase, Loccu); else Loclength = 0; for (i = 1; i <= Lmin; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - length && + memcmp(Feptr, Lcharptr, CU2BYTES(length)) == 0) Feptr += length; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1433,11 +1434,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RMATCH(Fecode, RM202); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1447,18 +1448,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ } - else /* Maximize */ { Lstart_eptr = Feptr; for (i = Lmin; i < Lmax; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) - Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) + Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1523,7 +1523,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1542,7 +1542,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1560,7 +1560,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); break; } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) break; Feptr++; } @@ -1585,7 +1585,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } if (Lmin == Lmax) continue; @@ -1602,7 +1602,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } PCRE2_UNREACHABLE(); /* Control never reaches here */ } @@ -1617,7 +1617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (Lc != UCHAR21TEST(Feptr)) break; + if (Lc != *Feptr) break; Feptr++; } @@ -1632,6 +1632,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } break; +#undef Llength #undef Loclength #undef Lstart_eptr #undef Lcharptr @@ -1639,6 +1640,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmax #undef Lc #undef Loc +#undef Loccu /* ===================================================================== */ @@ -1649,11 +1651,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, very much to the time taken, but character matching *is* what this is all about... */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Lstart_eptr F->fields.charnot_repeat.start_eptr +#define Lmin F->fields.charnot_repeat.min +#define Lmax F->fields.charnot_repeat.max +#define Lc F->fields.charnot_repeat.c +#define Loc F->fields.charnot_repeat.oc case OP_NOTEXACT: case OP_NOTEXACTI: @@ -2040,11 +2042,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_CLASS and OP_NCLASS occurs when a data character outside the range is encountered. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lstart_eptr F->temp_sptr[0] -#define Lbyte_map_address F->temp_sptr[1] +#define Lbyte_map_address F->fields.class_repeat.byte_map_address #define Lbyte_map ((const unsigned char *)Lbyte_map_address) +#define Lstart_eptr F->fields.class_repeat.start_eptr +#define Lmin F->fields.class_repeat.min +#define Lmax F->fields.class_repeat.max case OP_NCLASS: case OP_CLASS: @@ -2283,10 +2285,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, 32-bit libraries, codepoints greater than 255 may be encountered even when UTF is not supported. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lxclass_data F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.xclass_repeat.start_eptr +#define Lxclass_data F->fields.xclass_repeat.xclass_data +#define Lmin F->fields.xclass_repeat.min +#define Lmax F->fields.xclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_XCLASS: @@ -2424,11 +2426,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, there is complex nesting or logical operations within the character class. */ -#define Lstart_eptr F->temp_sptr[0] -#define Leclass_data F->temp_sptr[1] -#define Leclass_len F->temp_size -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.eclass_repeat.start_eptr +#define Leclass_data F->fields.eclass_repeat.eclass_data +#define Leclass_len F->fields.eclass_repeat.eclass_len +#define Lmin F->fields.eclass_repeat.min +#define Lmax F->fields.eclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_ECLASS: @@ -2657,7 +2659,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { SCHECK_PARTIAL(); } - else if (UCHAR21TEST(Feptr) == CHAR_LF) Feptr++; + else if (*Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -2908,11 +2910,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, does not need to be in a stack frame as it is not used within an RMATCH() loop. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lctype F->temp_32[2] -#define Lpropvalue F->temp_32[3] +#define Lstart_eptr F->fields.type_repeat.start_eptr +#define Lmin F->fields.type_repeat.min +#define Lmax F->fields.type_repeat.max +#define Lctype F->fields.type_repeat.ctype +#define Lpropvalue F->fields.type_repeat.propvalue case OP_TYPEEXACT: Lmin = Lmax = GET2(Fecode, 1); @@ -3271,7 +3273,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -3313,7 +3315,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -3423,7 +3425,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3440,7 +3442,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3457,7 +3459,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3474,7 +3476,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3491,7 +3493,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -4119,7 +4121,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -4732,7 +4734,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -4788,7 +4790,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc == CHAR_CR) { if (++Feptr >= mb->end_subject) break; - if (UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (*Feptr == CHAR_LF) Feptr++; } else { @@ -4960,7 +4962,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr--; BACKCHAR(Feptr); if (Lctype == OP_ANYNL && Feptr > Lstart_eptr && - UCHAR21(Feptr) == CHAR_NL && UCHAR21(Feptr - 1) == CHAR_CR) + *Feptr == CHAR_NL && Feptr[-1] == CHAR_CR) Feptr--; } } @@ -5236,17 +5238,18 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_DNREFI are used. In this case we must scan the list of groups to which the name refers, and use the first one that is set. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lcaseless F->temp_32[2] -#define Lcaseopts F->temp_32[3] -#define Lstart F->temp_sptr[0] -#define Loffset F->temp_size +#define Lstart F->fields.ref_repeat.start +#define Loffset F->fields.ref_repeat.offset +#define Llength F->fields.ref_repeat.length +#define Lmin F->fields.ref_repeat.min +#define Lmax F->fields.ref_repeat.max +#define Lcaseless F->byte1 +#define Lcaseopts F->byte2 case OP_DNREF: case OP_DNREFI: - Lcaseless = (Fop == OP_DNREFI); - Lcaseopts = (Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0; + Lcaseless = (uint8_t)(Fop == OP_DNREFI); + Lcaseopts = (uint8_t)((Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0); { int count = GET2(Fecode, 1+IMM2_SIZE); PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size; @@ -5281,6 +5284,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: + case OP_CRPOSSTAR: + case OP_CRPOSPLUS: + case OP_CRPOSQUERY: fc = *Fecode++ - OP_CRSTAR; Lmin = rep_min[fc]; Lmax = rep_max[fc]; @@ -5289,6 +5295,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRRANGE: case OP_CRMINRANGE: + case OP_CRPOSRANGE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); reptype = rep_typ[*Fecode - OP_CRSTAR]; @@ -5376,7 +5383,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { BOOL samelengths = TRUE; Lstart = Feptr; /* Starting position */ - Flength = Fovector[Loffset+1] - Fovector[Loffset]; + Llength = Fovector[Loffset+1] - Fovector[Loffset]; for (i = Lmin; i < Lmax; i++) { @@ -5396,10 +5403,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (slength != Flength) samelengths = FALSE; + if (slength != Llength) samelengths = FALSE; Feptr += slength; } + /* No recursion if the repeat type is possessive. */ + if (reptype == REPTYPE_POS) break; + /* If the length matched for each repetition is the same as the length of the captured group, we can easily work backwards. This is the normal case. However, in caseless UTF-8 mode there are pairs of case-equivalent @@ -5412,7 +5422,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { RMATCH(Fecode, RM21); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Feptr -= Flength; + Feptr -= Llength; } } @@ -5443,12 +5453,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */ -#undef Lcaseless -#undef Lmin -#undef Lmax #undef Lstart #undef Loffset - +#undef Llength +#undef Lmin +#undef Lmax +#undef Lcaseless +#undef Lcaseopts /* ========================================================================= */ @@ -5475,30 +5486,37 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO. Possessive groups with possible zero repeats are preceded by BRAPOSZERO. */ -#define Lnext_ecode F->temp_sptr[0] - case OP_BRAZERO: - Lnext_ecode = Fecode + 1; - RMATCH(Lnext_ecode, RM9); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - Fecode = Lnext_ecode + 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode; + + Fecode++; + RMATCH(Fecode, RM9); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; case OP_BRAMINZERO: - Lnext_ecode = Fecode + 1; - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - RMATCH(Lnext_ecode + 1 + LINK_SIZE, RM10); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode++; - break; + { + PCRE2_SPTR next_ecode; -#undef Lnext_ecode + Fecode++; + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + RMATCH(next_ecode + 1 + LINK_SIZE, RM10); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + } + break; case OP_SKIPZERO: - Fecode++; - do Fecode += GET(Fecode,1); while (*Fecode == OP_ALT); - Fecode += 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode = Fecode + 1; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; @@ -5507,11 +5525,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, brackets will always be OP_KETRPOS, which returns MATCH_KETRPOS without going further in the pattern. */ -#define Lframe_type F->temp_32[0] -#define Lmatched_once F->temp_32[1] -#define Lzero_allowed F->temp_32[2] -#define Lstart_eptr F->temp_sptr[0] -#define Lstart_group F->temp_sptr[1] +#define Lstart_eptr F->fields.op_brapos.start_eptr +#define Lstart_group F->fields.op_brapos.start_group +#define Lframe_type F->fields.op_brapos.frame_type +#define Lmatched_once F->byte1 +#define Lzero_allowed F->byte2 case OP_BRAPOSZERO: Lzero_allowed = TRUE; /* Zero repeat is allowed */ @@ -5583,11 +5601,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RRETURN(MATCH_NOMATCH); -#undef Lmatched_once -#undef Lzero_allowed -#undef Lframe_type #undef Lstart_eptr #undef Lstart_group +#undef Lframe_type +#undef Lmatched_once +#undef Lzero_allowed /* ===================================================================== */ @@ -5599,8 +5617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, however, because that would make handling assertions and once-only brackets messier when there is nothing to go back to. */ -#define Lframe_type F->temp_32[0] /* Set for all that use GROUPLOOP */ -#define Lnext_branch F->temp_sptr[0] /* Used only in OP_BRA handling */ +#define Lframe_type F->fields.op_bra.frame_type case OP_BRA: if (mb->hasthen || Frdepth == 0) @@ -5611,24 +5628,31 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, for (;;) { - Lnext_branch = Fecode + GET(Fecode, 1); - if (*Lnext_branch != OP_ALT) break; + PCRE2_SPTR current_branch = Fecode; + PCRE2_SPTR next_branch = current_branch + GET(current_branch, 1); + + if (*next_branch != OP_ALT) break; /* This is never the final branch. We do not need to test for MATCH_THEN here because this code is not used when there is a THEN in the pattern. */ - RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM1); + Fecode = next_branch; + PCRE2_ASSERT((*current_branch == OP_BRA || *current_branch == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + + RMATCH(current_branch + 1 + LINK_SIZE, RM1); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode = Lnext_branch; } /* Hit the start of the final branch. Continue at this level. */ - Fecode += PRIV(OP_lengths)[*Fecode]; + PCRE2_ASSERT((*Fecode == OP_BRA || *Fecode == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + Fecode += 1 + LINK_SIZE; break; -#undef Lnext_branch - /* ===================================================================== */ /* Handle a capturing bracket, other than those that are possessive with an @@ -5647,7 +5671,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_ONCE: case OP_SCRIPT_RUN: case OP_SBRA: - Lframe_type = GF_NOCAPTURE | Fop; + Lframe_type = GF_NOCAPTURE; GROUPLOOP: for (;;) @@ -5677,8 +5701,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, subpatterns. For a whole-pattern recursion, we have to infer the number zero. */ -#define Lframe_type F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] +#define Lstart_branch F->fields.op_recurse.start_branch +#define Lframe_type F->fields.op_recurse.frame_type case OP_RECURSE: bracode = mb->start_code + GET(Fecode, 1); @@ -5752,8 +5776,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ -#undef Lframe_type #undef Lstart_branch +#undef Lframe_type /* ===================================================================== */ @@ -5762,16 +5786,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, treated as NOMATCH. (*ACCEPT) is treated as successful assertion, with its captures and mark retained. Any other return is an error. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT: case OP_ASSERTBACK: case OP_ASSERT_NA: case OP_ASSERTBACK_NA: - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM3); if (rrc == MATCH_ACCEPT) { @@ -5791,22 +5812,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type - /* ===================================================================== */ /* Handle negative assertions. Loop for each non-matching branch as for positive assertions. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT_NOT: case OP_ASSERTBACK_NOT: - Lframe_type = GF_NOCAPTURE | Fop; - for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM4); switch(rrc) { @@ -5839,22 +5854,20 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type /* ===================================================================== */ /* Handle scan substring operation. */ -#define Lframe_type F->temp_32[0] -#define Lextra_size F->temp_32[1] -#define Lsaved_moptions F->temp_32[2] -#define Lsaved_end_subject F->temp_sptr[0] -#define Lsaved_eptr F->temp_sptr[1] -#define Ltrue_end_extra F->temp_size +#define Lsaved_end_subject F->fields.op_assert_scs.saved_end_subject +#define Lsaved_eptr F->fields.op_assert_scs.saved_eptr +#define Ltrue_end_extra F->fields.op_assert_scs.true_end_extra +#define Lextra_size F->fields.op_assert_scs.extra_size +#define Lsaved_moptions F->fields.op_assert_scs.saved_moptions case OP_ASSERT_SCS: + length = 0; { PCRE2_SPTR ecode = Fecode + 1 + LINK_SIZE; - uint32_t extra_size = 0; int count; PCRE2_SPTR slot; @@ -5866,7 +5879,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; offset = (GET2(ecode, 1) << 1) - 2; ecode += 1+IMM2_SIZE; if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET) @@ -5878,7 +5891,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, count = GET2(ecode, 1 + IMM2_SIZE); slot = mb->name_table + GET2(ecode, 1) * mb->name_entry_size; - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; while (count > 0) @@ -5898,18 +5911,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; ecode += 1+IMM2_SIZE; } else if (*ecode == OP_DNCREF) { - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; } else break; } - - Lextra_size = extra_size; } Lsaved_end_subject = mb->end_subject; @@ -5922,11 +5933,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->start_subject + Fovector[offset + 1]; mb->moptions &= ~PCRE2_NOTEOL; - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; - RMATCH(Fecode + 1 + LINK_SIZE + Lextra_size, RM38); + group_frame_type = GF_NOCAPTURE; + RMATCH(Fecode + 1 + LINK_SIZE + length, RM38); if (rrc == MATCH_ACCEPT) { memcpy(Fovector, @@ -5956,7 +5966,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->moptions = Lsaved_moptions; RRETURN(MATCH_NOMATCH); } - Lextra_size = 0; + length = 0; } do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT); @@ -5964,13 +5974,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr = Lsaved_eptr; break; -#undef Lframe_type -#undef Lextra_size #undef Lsaved_end_subject #undef Lsaved_eptr #undef Ltrue_end_extra +#undef Lextra_size #undef Lsave_moptions + /* ===================================================================== */ /* The callout item calls an external function, if one is provided, passing details of the match so far. This is mainly for debugging, though the @@ -5991,18 +6001,22 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, past the end of the item if there is only one branch, but that's exactly what we want. */ +#define Lstart_branch F->fields.op_cond.start_branch +#define Llength F->fields.op_cond.length +#define Lpositive F->byte1 + case OP_COND: case OP_SCOND: - /* The variable Flength will be added to Fecode when the condition is + /* The variable Llength will be added to Fecode when the condition is false, to get to the second branch. Setting it to the offset to the ALT or KET, then incrementing Fecode achieves this effect. However, if the second branch is non-existent, we must point to the KET so that the end of the group is correctly processed. We now have Fecode pointing to the condition or callout. */ - Flength = GET(Fecode, 1); /* Offset to the second branch */ - if (Fecode[Flength] != OP_ALT) Flength -= 1 + LINK_SIZE; + Llength = GET(Fecode, 1); /* Offset to the second branch */ + if (Fecode[Llength] != OP_ALT) Llength -= 1 + LINK_SIZE; Fecode += 1 + LINK_SIZE; /* From this opcode */ /* Because of the way auto-callout works during compile, a callout item is @@ -6016,10 +6030,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (rrc < 0) RRETURN(rrc); /* Advance Fecode past the callout, so it now points to the condition. We - must adjust Flength so that the value of Fecode+Flength is unchanged. */ + must adjust Llength so that the value of Fecode+Llength is unchanged. */ Fecode += length; - Flength -= length; + Llength -= length; } /* Test the various possible conditions */ @@ -6080,16 +6094,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* The condition is an assertion. Run code similar to the assertion code above. */ -#define Lpositive F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] default: - Lpositive = (*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); + Lpositive = (uint8_t)(*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); Lstart_branch = Fecode; for (;;) { - group_frame_type = GF_CONDASSERT | *Fecode; + group_frame_type = GF_CONDASSERT; RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM5); switch(rrc) @@ -6142,12 +6154,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; /* End of assertion condition */ } -#undef Lpositive -#undef Lstart_branch - /* Choose branch according to the condition. */ - Fecode += condition? PRIV(OP_lengths)[*Fecode] : Flength; + Fecode += condition? PRIV(OP_lengths)[*Fecode] : Llength; /* If the opcode is OP_SCOND it means we are at a repeated conditional group that might match an empty string. We must therefore descend a level @@ -6156,12 +6165,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (Fop == OP_SCOND) { - group_frame_type = GF_NOCAPTURE | Fop; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode, RM35); RRETURN(rrc); } break; +#undef Lstart_branch +#undef Llength +#undef Lpositive /* ========================================================================= */ @@ -6215,14 +6227,12 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, the start to move back even the minimum amount, fail. When working with UTF-8 we move back a number of characters, not bytes. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Leptr F->temp_sptr[0] +#define Lmin F->fields.op_vreverse.min +#define Lmax F->fields.op_vreverse.max case OP_VREVERSE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); - Leptr = Feptr; /* Move back by the maximum branch length and then work forwards. This ensures that items such as \d{3,5} get the maximum length, which is @@ -6273,7 +6283,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmin #undef Lmax -#undef Leptr + /* ===================================================================== */ /* An alternation is the end of a branch; scan along to find the end of the @@ -6328,7 +6338,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, N so that they are set on return. Doing this for all assertions, both positive and negative, seems to match what Perl does. */ - if (GF_IDMASK(N->group_frame_type) == GF_CONDASSERT) + if (N->group_frame_type == GF_CONDASSERT) { if ((*bracode == OP_ASSERTBACK || *bracode == OP_ASSERTBACK_NOT) && branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr) @@ -6451,14 +6461,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, pattern. */ case OP_ASSERT_SCS: - F->temp_sptr[0] = mb->end_subject; - mb->end_subject = P->temp_sptr[0]; - mb->true_end_subject = mb->end_subject + P->temp_size; - Feptr = P->temp_sptr[1]; + F->fields.op_assert_scs.saved_end_subject = mb->end_subject; + mb->end_subject = P->fields.op_assert_scs.saved_end_subject; + mb->true_end_subject = mb->end_subject + P->fields.op_assert_scs.true_end_extra; + Feptr = P->fields.op_assert_scs.saved_eptr; RMATCH(Fecode + 1 + LINK_SIZE, RM39); - mb->end_subject = F->temp_sptr[0]; + mb->end_subject = F->fields.op_assert_scs.saved_end_subject; mb->true_end_subject = mb->end_subject; RRETURN(rrc); break; @@ -6599,7 +6609,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6647,7 +6657,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6995,10 +7005,6 @@ PCRE2_SPTR req_cu_ptr; PCRE2_SPTR start_partial; PCRE2_SPTR match_partial; -#ifdef SUPPORT_JIT -BOOL use_jit; -#endif - /* This flag is needed even when Unicode is not supported for convenience (it is used by the IS_NEWLINE macro). */ @@ -7008,9 +7014,6 @@ BOOL utf = FALSE; BOOL ucp = FALSE; BOOL allow_invalid; uint32_t fragment_options = 0; -#ifdef SUPPORT_JIT -BOOL jit_checked_utf = FALSE; -#endif #endif /* SUPPORT_UNICODE */ PCRE2_SIZE frame_size; @@ -7073,15 +7076,6 @@ options |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1))); #undef FF #undef OO -/* If the pattern was successfully studied with JIT support, we will run the -JIT executable instead of the rest of this function. Most options must be set -at compile time for the JIT code to be usable. */ - -#ifdef SUPPORT_JIT -use_jit = (re->executable_jit != NULL && - (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0); -#endif - /* Initialize UTF/UCP parameters. */ #ifdef SUPPORT_UNICODE @@ -7128,20 +7122,25 @@ match_data->startchar = 0; /* ============================= JIT matching ============================== */ -/* Prepare for JIT matching. Check a UTF string for validity unless no check is -requested or invalid UTF can be handled. We check only the portion of the -subject that might be be inspected during matching - from the offset minus the -maximum lookbehind to the given length. This saves time when a small part of a -large subject is being matched by the use of a starting offset. Note that the -maximum lookbehind is a number of characters, not code units. */ +/* If the pattern was successfully studied with JIT support, we will run the +JIT executable instead of the rest of this function. Most options must be set +at compile time for the JIT code to be usable. */ #ifdef SUPPORT_JIT -if (use_jit) +if (re->executable_jit != NULL && + (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0 && + PRIV(jit_check_exec)(re->executable_jit, options)) { + /* Prepare for JIT matching. Check a UTF string for validity unless no check + is requested or invalid UTF can be handled. We check only the portion of the + subject that might be be inspected during matching - from the offset minus + the maximum lookbehind to the given length. This saves time when a small part + of a large subject is being matched by the use of a starting offset. Note that + the maximum lookbehind is a number of characters, not code units. */ + #ifdef SUPPORT_UNICODE if (utf && (options & PCRE2_NO_UTF_CHECK) == 0 && !allow_invalid) { - /* For 8-bit and 16-bit UTF, check that the first code unit is a valid character start. */ @@ -7194,40 +7193,36 @@ if (use_jit) match_data->startchar += start_match - subject; return match_data->rc = rc; } - jit_checked_utf = TRUE; } #endif /* SUPPORT_UNICODE */ - /* If JIT returns BADOPTION, which means that the selected complete or - partial matching mode was not compiled, fall through to the interpreter. */ - rc = pcre2_jit_match(code, subject, length, start_offset, options, match_data, mcontext); - if (rc != PCRE2_ERROR_JIT_BADOPTION) + /* JIT must be able to perform the match. */ + PCRE2_ASSERT(rc != PCRE2_ERROR_JIT_BADOPTION); + + match_data->options = original_options; + if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) { - match_data->options = original_options; - if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) + if (length != 0) { - if (length != 0) - { - match_data->subject = match_data->memctl.malloc(CU2BYTES(length), - match_data->memctl.memory_data); - if (match_data->subject == NULL) - return match_data->rc = PCRE2_ERROR_NOMEMORY; - memcpy((void *)match_data->subject, subject, CU2BYTES(length)); - } - else - match_data->subject = NULL; - match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + match_data->subject = match_data->memctl.malloc(CU2BYTES(length), + match_data->memctl.memory_data); + if (match_data->subject == NULL) + return match_data->rc = PCRE2_ERROR_NOMEMORY; + memcpy((void *)match_data->subject, subject, CU2BYTES(length)); } else - { - /* When pcre2_jit_match sets the subject, it doesn't know what the - original passed-in pointer was. */ - if (match_data->subject != NULL) match_data->subject = original_subject; - } - return rc; + match_data->subject = NULL; + match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + } + else + { + /* When pcre2_jit_match sets the subject, it doesn't know what the + original passed-in pointer was. */ + if (match_data->subject != NULL) match_data->subject = original_subject; } + return rc; } #endif /* SUPPORT_JIT */ @@ -7240,12 +7235,8 @@ this. */ mb->check_subject = subject; -/* If a UTF subject string was not checked for validity in the JIT code above, -check it here, and handle support for invalid UTF strings. The check above -happens only when invalid UTF is not supported and PCRE2_NO_CHECK_UTF is unset. -If we get here in those circumstances, it means the subject string is valid, -but for some reason JIT matching was not successful. There is no need to check -the subject again. +/* Check the validity of UTF subject strings. The check happens only when +PCRE2_NO_CHECK_UTF is unset. We check only the portion of the subject that might be be inspected during matching - from the offset minus the maximum lookbehind to the given length. @@ -7257,11 +7248,7 @@ Note also that support for invalid UTF forces a check, overriding the setting of PCRE2_NO_CHECK_UTF. */ #ifdef SUPPORT_UNICODE -if (utf && -#ifdef SUPPORT_JIT - !jit_checked_utf && -#endif - ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) +if (utf && ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) { #if PCRE2_CODE_UNIT_WIDTH != 32 BOOL skipped_bad_start = FALSE; @@ -7649,7 +7636,7 @@ for(;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -7681,7 +7668,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -7741,7 +7728,7 @@ for(;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else @@ -7796,7 +7783,7 @@ for(;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -7810,7 +7797,7 @@ for(;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -7884,7 +7871,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -7905,7 +7892,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ diff --git a/vendor/pcre2/src/pcre2_serialize.c b/vendor/pcre2/src/pcre2_serialize.c index f10a3fa0dd..725b54099b 100644 --- a/vendor/pcre2/src/pcre2_serialize.c +++ b/vendor/pcre2/src/pcre2_serialize.c @@ -166,9 +166,10 @@ const pcre2_memctl *memctl = (gcontext != NULL) ? &gcontext->memctl : &PRIV(default_compile_context).memctl; const uint8_t *src_bytes; -pcre2_real_code *dst_re; +pcre2_real_code *dst_re = NULL; uint8_t *tables; int32_t i, j; +int32_t error; /* Sanity checks. */ @@ -206,7 +207,10 @@ for (i = 0; i < number_of_codes; i++) memcpy(&blocksize, src_bytes + offsetof(pcre2_real_code, blocksize), sizeof(CODE_BLOCKSIZE_TYPE)); if (blocksize <= sizeof(pcre2_real_code)) - return PCRE2_ERROR_BADSERIALIZEDDATA; + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* The allocator provided by gcontext replaces the original one. */ @@ -214,13 +218,8 @@ for (i = 0; i < number_of_codes; i++) (pcre2_memctl *)gcontext); if (dst_re == NULL) { - memctl->free(tables, memctl->memory_data); - for (j = 0; j < i; j++) - { - memctl->free(codes[j], memctl->memory_data); - codes[j] = NULL; - } - return PCRE2_ERROR_NOMEMORY; + error = PCRE2_ERROR_NOMEMORY; + goto cleanup; } /* The new allocator must be preserved. */ @@ -230,10 +229,10 @@ for (i = 0; i < number_of_codes; i++) if (dst_re->magic_number != MAGIC_NUMBER || dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 || dst_re->name_count > MAX_NAME_COUNT) - { - memctl->free(dst_re, memctl->memory_data); - return PCRE2_ERROR_BADSERIALIZEDDATA; - } + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* At the moment only one table is supported. */ @@ -242,10 +241,22 @@ for (i = 0; i < number_of_codes; i++) dst_re->flags |= PCRE2_DEREF_TABLES; codes[i] = dst_re; + dst_re = NULL; src_bytes += blocksize; } return number_of_codes; + +cleanup: +if (dst_re != NULL) + memctl->free(dst_re, memctl->memory_data); +memctl->free(tables, memctl->memory_data); +for (j = 0; j < i; j++) + { + memctl->free(codes[j], memctl->memory_data); + codes[j] = NULL; + } +return error; } diff --git a/vendor/pcre2/src/pcre2_substitute.c b/vendor/pcre2/src/pcre2_substitute.c index 5cb84748e0..d512f69b68 100644 --- a/vendor/pcre2/src/pcre2_substitute.c +++ b/vendor/pcre2/src/pcre2_substitute.c @@ -115,6 +115,7 @@ for (; ptr < ptrend; ptr++) int erc; int errorcode; uint32_t ch; + PCRE2_SPTR esc_end_ptr; if (ptr < ptrend - 1) switch (ptr[1]) { @@ -137,6 +138,9 @@ for (; ptr < ptrend; ptr++) goto EXIT; } + esc_end_ptr = ptr; + ptr -= 1; /* Rewind by one, because the for-loop will increment it */ + switch(erc) { case 0: /* Data character */ @@ -160,7 +164,8 @@ for (; ptr < ptrend; ptr++) default: if (erc < 0) - break; /* capture group reference */ + break; /* capture group reference */ + ptr = esc_end_ptr; rc = PCRE2_ERROR_BADREPESCAPE; goto EXIT; } @@ -751,6 +756,7 @@ BOOL overflowed = FALSE; BOOL use_existing_match; BOOL replacement_only; BOOL utf = (code->overall_options & PCRE2_UTF) != 0; +BOOL partial = (options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0; PCRE2_UCHAR temp[6]; PCRE2_UCHAR null_str[1] = { 0xcd }; PCRE2_SPTR original_subject = subject; @@ -778,10 +784,16 @@ if (mcontext != NULL) substitute_case_callout_data = mcontext->substitute_case_callout_data; } -/* Partial matching is not valid. This must come after setting *blength to -PCRE2_UNSET, so as not to imply an offset in the replacement. */ +/* Partial matching is supported, with limitations. We allow matching in partial +mode, however, if a partial match is found, the substitution will fail with a +PCRE2_ERROR_PARTIAL error. Additionally, outputting the after-match text is not +allowed (PCRE2_ERROR_BADOPTION), and certain replacement items such as $' and $_ +are not supported (PCRE2_ERROR_PARTIALSUBS). + +This must come after setting *blength to PCRE2_UNSET, so as not to imply an +offset in the replacement. */ -if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) +if (partial && (options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) == 0) return PCRE2_ERROR_BADOPTION; /* Validate length and find the end of the replacement. A NULL replacement of @@ -854,7 +866,8 @@ if (use_existing_match) if (start_offset != match_data->start_offset) return PCRE2_ERROR_DIFFSUBSOFFSET; - if ((options & ~SUBSTITUTE_OPTIONS) != match_data->options) + if ((options & ~(SUBSTITUTE_OPTIONS|PCRE2_NO_UTF_CHECK)) != + (match_data->options & ~PCRE2_NO_UTF_CHECK)) return PCRE2_ERROR_DIFFSUBSOPTIONS; } @@ -1119,8 +1132,16 @@ for (;;) if (next == CHAR_GRAVE_ACCENT || next == CHAR_APOSTROPHE) { ++ptr; + + /* (Sanity-check ovector before reading from it.) */ rc = pcre2_substring_length_bynumber(match_data, 0, &sublength); - if (rc < 0) goto PTREXIT; /* (Sanity-check ovector before reading from it.) */ + /* LCOV_EXCL_START */ + if (rc < 0) + { + PCRE2_DEBUG_UNREACHABLE(); + goto PTREXIT; + } + /* LCOV_EXCL_STOP */ if (next == CHAR_GRAVE_ACCENT) { @@ -1129,6 +1150,12 @@ for (;;) } else { + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject + ovector[1]; subptrend = subject + length; } @@ -1139,12 +1166,19 @@ for (;;) { /* Java, .NET support $_ for "entire input string". */ ++ptr; + + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject; subptrend = subject + length; goto SUBPTR_SUBSTITUTE; } - else if (next == CHAR_PLUS && - !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) + if (next == CHAR_PLUS && + !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) { /* Perl supports $+ for "highest captured group" (not the same as $^N which is mainly only useful inside Perl's match callbacks). We also diff --git a/vendor/pcre2/src/pcre2_substring.c b/vendor/pcre2/src/pcre2_substring.c index f68b464e05..a6f5277a34 100644 --- a/vendor/pcre2/src/pcre2_substring.c +++ b/vendor/pcre2/src/pcre2_substring.c @@ -210,9 +210,10 @@ PCRE2_SIZE size; PCRE2_UCHAR *yield; rc = pcre2_substring_length_bynumber(match_data, stringnumber, &size); if (rc < 0) return rc; -yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (size + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)match_data); -if (yield == NULL) return PCRE2_ERROR_NOMEMORY; +if (size > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / CU2BYTES(1)) - 1 || + (yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(size + 1), (pcre2_memctl *)match_data)) == NULL) + return PCRE2_ERROR_NOMEMORY; yield = (PCRE2_UCHAR *)(((char *)yield) + sizeof(pcre2_memctl)); if (size != 0) memcpy(yield, match_data->subject + match_data->ovector[stringnumber*2], CU2BYTES(size)); diff --git a/vendor/pcre2/src/pcre2_ucd.c b/vendor/pcre2/src/pcre2_ucd.c index 1cbff3afec..7b294a8581 100644 --- a/vendor/pcre2/src/pcre2_ucd.c +++ b/vendor/pcre2/src/pcre2_ucd.c @@ -77,9 +77,9 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = {0}; const uint32_t PRIV(ucd_nocase_ranges_size) = 0; #else -/* Total size: 116564 bytes, block size: 128. */ +/* Total size: 116548 bytes, block size: 128. */ -const char *PRIV(unicode_version) = "16.0.0"; +const char *PRIV(unicode_version) = "17.0.0"; /* When recompiling tables with a new Unicode version, please check the types in this structure definition with those in pcre2_internal.h (the actual field @@ -200,20 +200,21 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = { 0x10d65, 0x10d70, /* 10 */ 0x10d85, 0x118a0, /* 2842 */ 0x118df, 0x16e40, /* 21856 */ - 0x16e7f, 0x1e900, /* 31360 */ + 0x16e7f, 0x16ea0, /* 32 */ + 0x16ed3, 0x1e900, /* 31276 */ 0x1e943, 0x110000, /* 988860 */ 0xffffffff, 0xffffffff /* terminator */ }; -/* Total: 1110933 characters. */ -const uint32_t PRIV(ucd_nocase_ranges_size) = 80; +/* Total: 1110881 characters. */ +const uint32_t PRIV(ucd_nocase_ranges_size) = 82; /* This table lists the code points for the '9' characters in each set of decimal digits. It is used to ensure that all the digits in a script run come from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { - 76, /* Number of subsequent values */ + 77, /* Number of subsequent values */ 0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef, 0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9, 0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89, @@ -221,9 +222,9 @@ const uint32_t PRIV(ucd_digit_sets)[] = { 0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x10d49, 0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9, 0x116d9, 0x116e3, 0x11739, 0x118e9, 0x11959, 0x11bf9, 0x11c59, - 0x11d59, 0x11da9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, 0x16d79, - 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, - 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, + 0x11d59, 0x11da9, 0x11de9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, + 0x16d79, 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, + 0x1e2f9, 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, }; /* This vector is a list of script bitsets for the Script Extension property. @@ -232,60 +233,60 @@ ucd_script_sets_item_size. */ const uint32_t PRIV(ucd_script_sets)[] = { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x40200003u, 0x00381901u, 0x00100246u, 0x00000000u, - 0x00040305u, 0x00800000u, 0x08000000u, 0x00000000u, + 0x40200003u, 0x00381901u, 0x00200246u, 0x00000000u, + 0x00040305u, 0x00800000u, 0x10000000u, 0x00000000u, 0x20000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800000u, 0x00000000u, 0x00000000u, 0x00040001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01000007u, 0x00000840u, 0x80000200u, 0x00000000u, - 0x01000007u, 0x00000040u, 0x80010000u, 0x00000001u, + 0x01000007u, 0x00000840u, 0x00000200u, 0x00000001u, + 0x01000007u, 0x00000040u, 0x00020000u, 0x00000003u, 0x01000005u, 0x00002000u, 0x00000000u, 0x00000000u, - 0x00040041u, 0x00001000u, 0x80000000u, 0x00000000u, - 0x01000047u, 0x00002801u, 0x00010001u, 0x00000001u, + 0x00040041u, 0x00001000u, 0x00000000u, 0x00000001u, + 0x01000047u, 0x00002801u, 0x00020001u, 0x00000002u, 0x10000001u, 0x00001801u, 0x00000004u, 0x00000000u, - 0x00000007u, 0x00000000u, 0x00000200u, 0x00000000u, - 0x00000051u, 0x00002840u, 0x00000202u, 0x00000001u, - 0x0000005fu, 0x00000041u, 0x00000202u, 0x00000000u, + 0x00000007u, 0x00002000u, 0x00000200u, 0x00000000u, + 0x00000051u, 0x00002840u, 0x00000202u, 0x00000002u, + 0x0000005fu, 0x00002041u, 0x00000202u, 0x00000000u, 0x00000001u, 0x00002000u, 0x00000000u, 0x00000000u, 0x00000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x01000005u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x01000005u, 0x00000000u, 0x00020000u, 0x00000000u, 0x01000001u, 0x00000040u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000005u, 0x00000000u, 0x00000000u, 0x00000001u, - 0x00000003u, 0x00000000u, 0x00000200u, 0x00000001u, - 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x11000041u, 0x00000000u, 0x00000002u, 0x00000000u, + 0x00000005u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00000003u, 0x00000000u, 0x00000200u, 0x00000002u, + 0x11000041u, 0x00002000u, 0x00000002u, 0x00000000u, 0x01000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x00000041u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000001u, 0x01000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01040001u, 0x00000001u, 0x80000001u, 0x00000000u, + 0x01040041u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00010000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00000001u, 0x00000001u, + 0x00000001u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000800u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00000000u, 0x00000200u, 0x00000000u, 0x00000004u, 0x00001000u, 0x00000000u, 0x00000000u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00200008u, 0x00001000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11200000u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22400000u, 0x00000000u, 0x000000e0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11208000u, 0x00000000u, - 0x00000060u, 0x08000000u, 0x04608480u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22408000u, 0x00000000u, + 0x00000060u, 0x08000000u, 0x08c08480u, 0x00000000u, 0x00000060u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000a0u, 0x00000000u, 0x01000000u, 0x00000000u, - 0x00000020u, 0x00000000u, 0x00200000u, 0x00000000u, - 0x0001ff01u, 0x40000000u, 0x00001008u, 0x00000000u, - 0x0001ff01u, 0x00000000u, 0x00001008u, 0x00000000u, - 0x0003ff00u, 0x80004000u, 0x409c1848u, 0x00000000u, - 0x0003ff00u, 0x80004020u, 0x609c1848u, 0x00000000u, - 0x00000100u, 0x04000000u, 0x00080040u, 0x00000000u, + 0x000000a0u, 0x00000000u, 0x02000000u, 0x00000000u, + 0x00000020u, 0x00000000u, 0x00400000u, 0x00000000u, + 0x0001ff01u, 0x40000000u, 0x01011008u, 0x00000000u, + 0x0001ff01u, 0x00000000u, 0x00011008u, 0x00000000u, + 0x0003ff00u, 0x80004000u, 0x81381848u, 0x00000000u, + 0x0003ff00u, 0x80004020u, 0xc1381848u, 0x00000000u, + 0x00000100u, 0x04000000u, 0x00100040u, 0x00000000u, 0x00000200u, 0x10004000u, 0x00000000u, 0x00000000u, 0x00000400u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000800u, 0x00000000u, 0x00000010u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008000u, 0x00000000u, 0x00800000u, 0x00000002u, + 0x00008000u, 0x00000000u, 0x01000000u, 0x00000004u, 0x00100000u, 0x10000040u, 0x00000000u, 0x00000000u, 0x00200001u, 0x00001000u, 0x00000000u, 0x00000000u, 0x02000000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -294,15 +295,23 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00008300u, 0x00000000u, 0x00000008u, 0x00000000u, 0x00000100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00008100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00010000u, 0x00000000u, 0x00000100u, 0x40000000u, 0x00000000u, 0x00000000u, 0x0001f100u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000100u, 0x00000000u, 0x00800000u, 0x00000000u, - 0x0003d300u, 0x00000000u, 0x00801008u, 0x00000002u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x01010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x0003d300u, 0x00000000u, 0x01001008u, 0x00000004u, 0x00000100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008100u, 0x00000000u, 0x00000008u, 0x00000002u, + 0x00008100u, 0x00000000u, 0x00000008u, 0x00000004u, 0x00000200u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x00800000u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x01000000u, 0x00000000u, 0x00000045u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000040u, 0x00000000u, 0x00000000u, 0x00000000u, 0x04000001u, 0x00008000u, 0x00000000u, 0x00000000u, @@ -315,7 +324,7 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00200000u, 0x04780000u, 0x00004000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000000u, 0x00000020u, 0x00000000u, 0x0000c000u, 0x00000000u, - 0x40000000u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x40000000u, 0x00000000u, 0x00040000u, 0x00000000u, 0xfc400000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xfc400000u, 0x00008000u, 0x00000000u, 0x00000000u, 0x78400000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -327,21 +336,21 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x18000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x58000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x40000001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00018d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00008d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00000d00u, 0x84000000u, 0x00081950u, 0x00000000u, - 0x00000d00u, 0xc4000000u, 0x00081950u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00018d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00008d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00000d00u, 0x84000000u, 0x00101950u, 0x00000000u, + 0x00000d00u, 0xc4000000u, 0x00101950u, 0x00000000u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00002100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00100001u, 0x00020000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01000400u, 0x00000000u, 0x00000000u, 0x00000020u, 0x00010000u, 0x00000000u, 0x00000000u, 0x000000a0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000280u, 0x02000000u, 0x00000000u, + 0x00000000u, 0x00000280u, 0x04000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000020u, 0x00000000u, 0x00000020u, 0x00000800u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x04000080u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x08000080u, 0x00000000u, }; /* This vector is a list of bitsets for Boolean properties. The number of @@ -444,6 +453,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00802004u, 0x01800003u, 0x00800344u, 0x01900003u, 0x03008000u, 0x00800009u, + 0x00804004u, 0x0180000bu, 0x00c00000u, 0x00000000u, 0x01002020u, 0x00a00009u, 0x01000024u, 0x0180000bu, @@ -451,7 +461,6 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01408024u, 0x00800009u, 0x00808000u, 0x00000000u, 0x00800044u, 0x01820043u, - 0x00800064u, 0x01820043u, 0x01002020u, 0x00800011u, 0x00022020u, 0x00800019u, 0x00002028u, 0x00000800u, @@ -467,6 +476,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00002020u, 0x00000080u, 0x00002000u, 0x00000000u, 0x00006020u, 0x00000000u, + 0x00800064u, 0x01820043u, 0x40800000u, 0x00000080u, 0x40801000u, 0x00000080u, 0x40800010u, 0x00000080u, @@ -485,13 +495,11 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00801000u, 0x00000480u, 0x00b10000u, 0x00000400u, 0x00804010u, 0x00000400u, - 0x00a00000u, 0x00000400u, 0x00000000u, 0x00000400u, 0x008003c4u, 0x00100000u, 0x00a103c4u, 0x00100000u, 0x00800d44u, 0x00000040u, 0x00b10000u, 0x00000480u, - 0x00a00000u, 0x00000480u, 0x00a90000u, 0x00000400u, 0x00b90000u, 0x00000400u, 0x03000020u, 0x00800009u, @@ -528,9 +536,9 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01400020u, 0x00800009u, 0x01000020u, 0x0080000du, 0x01008004u, 0x00800009u, + 0x00c00024u, 0x01800007u, 0x01000000u, 0x00800009u, 0xc0800000u, 0x00000080u, - 0x00a00000u, 0x00000000u, 0x00b10000u, 0x00000000u, 0x00200000u, 0x00000000u, 0x00800044u, 0x00100000u, @@ -549,66 +557,66 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero (32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed into a 16-bit field, and offset in binary properties table (16 bits). */ -const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ - { 99, 0, 2, 0, 0, 6144, 2, }, /* 0 */ - { 99, 0, 2, 0, 0, 43008, 4, }, /* 1 */ - { 99, 0, 1, 0, 0, 4096, 4, }, /* 2 */ - { 99, 0, 2, 0, 0, 45056, 4, }, /* 3 */ - { 99, 0, 0, 0, 0, 4096, 4, }, /* 4 */ - { 99, 0, 2, 0, 0, 4096, 2, }, /* 5 */ - { 99, 0, 2, 0, 0, 43008, 2, }, /* 6 */ - { 99, 29, 12, 0, 0, 45056, 6, }, /* 7 */ - { 99, 21, 12, 0, 0, 28672, 8, }, /* 8 */ - { 99, 21, 12, 0, 0, 28672, 10, }, /* 9 */ - { 99, 21, 12, 0, 0, 14336, 12, }, /* 10 */ - { 99, 23, 12, 0, 0, 14336, 14, }, /* 11 */ - { 99, 21, 12, 0, 0, 14336, 14, }, /* 12 */ - { 99, 21, 12, 0, 0, 28672, 14, }, /* 13 */ - { 99, 21, 12, 0, 0, 28672, 16, }, /* 14 */ - { 99, 22, 12, 0, 0, 28672, 18, }, /* 15 */ - { 99, 18, 12, 0, 0, 28672, 18, }, /* 16 */ - { 99, 21, 12, 0, 0, 28672, 12, }, /* 17 */ - { 99, 25, 12, 0, 0, 12288, 20, }, /* 18 */ - { 99, 21, 12, 0, 0, 8192, 22, }, /* 19 */ - { 99, 17, 12, 0, 0, 12288, 24, }, /* 20 */ - { 99, 21, 12, 0, 0, 8192, 26, }, /* 21 */ - { 99, 21, 12, 0, 0, 8192, 14, }, /* 22 */ - { 99, 13, 12, 0, 0, 10240, 28, }, /* 23 */ - { 99, 21, 12, 0, 0, 8192, 30, }, /* 24 */ - { 99, 21, 12, 0, 0, 28672, 22, }, /* 25 */ - { 99, 25, 12, 0, 0, 28672, 32, }, /* 26 */ - { 99, 25, 12, 0, 0, 28672, 20, }, /* 27 */ +const ucd_record PRIV(ucd_records)[] = { /* 18756 bytes, record size 12 */ + { 100, 0, 2, 0, 0, 6144, 2, }, /* 0 */ + { 100, 0, 2, 0, 0, 43008, 4, }, /* 1 */ + { 100, 0, 1, 0, 0, 4096, 4, }, /* 2 */ + { 100, 0, 2, 0, 0, 45056, 4, }, /* 3 */ + { 100, 0, 0, 0, 0, 4096, 4, }, /* 4 */ + { 100, 0, 2, 0, 0, 4096, 2, }, /* 5 */ + { 100, 0, 2, 0, 0, 43008, 2, }, /* 6 */ + { 100, 29, 12, 0, 0, 45056, 6, }, /* 7 */ + { 100, 21, 12, 0, 0, 28672, 8, }, /* 8 */ + { 100, 21, 12, 0, 0, 28672, 10, }, /* 9 */ + { 100, 21, 12, 0, 0, 14336, 12, }, /* 10 */ + { 100, 23, 12, 0, 0, 14336, 14, }, /* 11 */ + { 100, 21, 12, 0, 0, 14336, 14, }, /* 12 */ + { 100, 21, 12, 0, 0, 28672, 14, }, /* 13 */ + { 100, 21, 12, 0, 0, 28672, 16, }, /* 14 */ + { 100, 22, 12, 0, 0, 28672, 18, }, /* 15 */ + { 100, 18, 12, 0, 0, 28672, 18, }, /* 16 */ + { 100, 21, 12, 0, 0, 28672, 12, }, /* 17 */ + { 100, 25, 12, 0, 0, 12288, 20, }, /* 18 */ + { 100, 21, 12, 0, 0, 8192, 22, }, /* 19 */ + { 100, 17, 12, 0, 0, 12288, 24, }, /* 20 */ + { 100, 21, 12, 0, 0, 8192, 26, }, /* 21 */ + { 100, 21, 12, 0, 0, 8192, 14, }, /* 22 */ + { 100, 13, 12, 0, 0, 10240, 28, }, /* 23 */ + { 100, 21, 12, 0, 0, 8192, 30, }, /* 24 */ + { 100, 21, 12, 0, 0, 28672, 22, }, /* 25 */ + { 100, 25, 12, 0, 0, 28672, 32, }, /* 26 */ + { 100, 25, 12, 0, 0, 28672, 20, }, /* 27 */ { 0, 9, 12, 0, 32, 18432, 34, }, /* 28 */ { 0, 9, 12, 0, 32, 18432, 36, }, /* 29 */ { 0, 9, 12, 100, 32, 18432, 36, }, /* 30 */ { 0, 9, 12, 1, 32, 18432, 36, }, /* 31 */ - { 99, 24, 12, 0, 0, 28672, 38, }, /* 32 */ - { 99, 16, 12, 0, 0, 28672, 40, }, /* 33 */ - { 99, 24, 12, 0, 0, 28672, 42, }, /* 34 */ + { 100, 24, 12, 0, 0, 28672, 38, }, /* 32 */ + { 100, 16, 12, 0, 0, 28672, 40, }, /* 33 */ + { 100, 24, 12, 0, 0, 28672, 42, }, /* 34 */ { 0, 5, 12, 0, -32, 18432, 44, }, /* 35 */ { 0, 5, 12, 0, -32, 18432, 46, }, /* 36 */ { 0, 5, 12, 0, -32, 18432, 48, }, /* 37 */ { 0, 5, 12, 100, -32, 18432, 46, }, /* 38 */ { 0, 5, 12, 1, -32, 18432, 46, }, /* 39 */ - { 99, 0, 2, 0, 0, 6144, 0, }, /* 40 */ - { 99, 0, 2, 0, 0, 4096, 50, }, /* 41 */ - { 99, 29, 12, 0, 0, 8192, 52, }, /* 42 */ - { 99, 21, 12, 0, 0, 28672, 54, }, /* 43 */ - { 99, 23, 12, 0, 0, 14336, 54, }, /* 44 */ - { 99, 26, 12, 0, 0, 28672, 54, }, /* 45 */ - { 99, 24, 12, 0, 0, 28672, 56, }, /* 46 */ - { 99, 26, 14, 0, 0, 28672, 58, }, /* 47 */ + { 100, 0, 2, 0, 0, 6144, 0, }, /* 40 */ + { 100, 0, 2, 0, 0, 4096, 50, }, /* 41 */ + { 100, 29, 12, 0, 0, 8192, 52, }, /* 42 */ + { 100, 21, 12, 0, 0, 28672, 54, }, /* 43 */ + { 100, 23, 12, 0, 0, 14336, 54, }, /* 44 */ + { 100, 26, 12, 0, 0, 28672, 54, }, /* 45 */ + { 100, 24, 12, 0, 0, 28672, 56, }, /* 46 */ + { 100, 26, 14, 0, 0, 28672, 58, }, /* 47 */ { 0, 7, 12, 0, 0, 18432, 60, }, /* 48 */ - { 99, 20, 12, 0, 0, 28672, 62, }, /* 49 */ - { 99, 25, 12, 0, 0, 28672, 64, }, /* 50 */ - { 99, 1, 2, 0, 0, 6144, 66, }, /* 51 */ - { 99, 26, 12, 0, 0, 14336, 54, }, /* 52 */ - { 99, 25, 12, 0, 0, 14336, 64, }, /* 53 */ - { 99, 15, 12, 0, 0, 10240, 68, }, /* 54 */ - { 99, 5, 12, 26, 775, 18432, 70, }, /* 55 */ - { 99, 21, 12, 0, 0, 28676, 72, }, /* 56 */ - { 99, 19, 12, 0, 0, 28672, 62, }, /* 57 */ - { 99, 15, 12, 0, 0, 28672, 74, }, /* 58 */ + { 100, 20, 12, 0, 0, 28672, 62, }, /* 49 */ + { 100, 25, 12, 0, 0, 28672, 64, }, /* 50 */ + { 100, 1, 2, 0, 0, 6144, 66, }, /* 51 */ + { 100, 26, 12, 0, 0, 14336, 54, }, /* 52 */ + { 100, 25, 12, 0, 0, 14336, 64, }, /* 53 */ + { 100, 15, 12, 0, 0, 10240, 68, }, /* 54 */ + { 100, 5, 12, 26, 775, 18432, 70, }, /* 55 */ + { 100, 21, 12, 0, 0, 28676, 72, }, /* 56 */ + { 100, 19, 12, 0, 0, 28672, 62, }, /* 57 */ + { 100, 15, 12, 0, 0, 28672, 74, }, /* 58 */ { 0, 9, 12, 0, 32, 18432, 76, }, /* 59 */ { 0, 9, 12, 104, 32, 18432, 76, }, /* 60 */ { 0, 5, 12, 0, 7615, 18432, 70, }, /* 61 */ @@ -701,59 +709,59 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 0, 5, 12, 0, 42258, 18432, 78, }, /* 148 */ { 0, 6, 12, 0, 0, 18432, 90, }, /* 149 */ { 0, 6, 12, 0, 0, 18432, 92, }, /* 150 */ - { 99, 6, 12, 0, 0, 28672, 94, }, /* 151 */ - { 99, 6, 12, 0, 0, 18432, 94, }, /* 152 */ - { 99, 6, 12, 0, 0, 18440, 94, }, /* 153 */ - { 99, 6, 12, 0, 0, 18432, 90, }, /* 154 */ - { 99, 6, 12, 0, 0, 28684, 94, }, /* 155 */ - { 99, 6, 12, 0, 0, 28688, 94, }, /* 156 */ - { 99, 6, 12, 0, 0, 18432, 96, }, /* 157 */ - { 99, 24, 12, 0, 0, 28692, 56, }, /* 158 */ - { 99, 24, 12, 0, 0, 28684, 56, }, /* 159 */ + { 100, 6, 12, 0, 0, 28672, 94, }, /* 151 */ + { 100, 6, 12, 0, 0, 18432, 94, }, /* 152 */ + { 100, 6, 12, 0, 0, 18440, 94, }, /* 153 */ + { 100, 6, 12, 0, 0, 18432, 90, }, /* 154 */ + { 100, 6, 12, 0, 0, 28684, 94, }, /* 155 */ + { 100, 6, 12, 0, 0, 28688, 94, }, /* 156 */ + { 100, 6, 12, 0, 0, 18432, 96, }, /* 157 */ + { 100, 24, 12, 0, 0, 28692, 56, }, /* 158 */ + { 100, 24, 12, 0, 0, 28684, 56, }, /* 159 */ { 29, 24, 12, 0, 0, 28672, 56, }, /* 160 */ - { 106, 12, 3, 0, 0, 26648, 98, }, /* 161 */ - { 106, 12, 3, 0, 0, 26652, 98, }, /* 162 */ - { 106, 12, 3, 0, 0, 26656, 98, }, /* 163 */ - { 106, 12, 3, 0, 0, 26660, 98, }, /* 164 */ - { 106, 12, 3, 0, 0, 26664, 98, }, /* 165 */ - { 106, 12, 3, 0, 0, 26668, 98, }, /* 166 */ - { 106, 12, 3, 0, 0, 26672, 98, }, /* 167 */ - { 106, 12, 3, 0, 0, 26676, 98, }, /* 168 */ - { 106, 12, 3, 0, 0, 26680, 98, }, /* 169 */ - { 106, 12, 3, 0, 0, 26684, 98, }, /* 170 */ - { 106, 12, 3, 0, 0, 26688, 98, }, /* 171 */ - { 106, 12, 3, 0, 0, 26692, 98, }, /* 172 */ - { 106, 12, 3, 0, 0, 26696, 98, }, /* 173 */ - { 106, 12, 3, 0, 0, 26700, 98, }, /* 174 */ - { 106, 12, 3, 0, 0, 26704, 98, }, /* 175 */ - { 106, 12, 3, 0, 0, 26624, 98, }, /* 176 */ - { 106, 12, 3, 0, 0, 26708, 98, }, /* 177 */ - { 106, 12, 3, 0, 0, 26712, 98, }, /* 178 */ - { 106, 12, 3, 0, 0, 26716, 98, }, /* 179 */ - { 106, 12, 3, 0, 0, 26720, 98, }, /* 180 */ - { 106, 12, 3, 0, 0, 26724, 98, }, /* 181 */ - { 106, 12, 3, 0, 0, 26728, 98, }, /* 182 */ - { 106, 12, 3, 0, 0, 26732, 98, }, /* 183 */ - { 106, 12, 3, 0, 0, 26736, 98, }, /* 184 */ - { 106, 12, 3, 0, 0, 26740, 98, }, /* 185 */ - { 106, 12, 3, 21, 116, 26740, 100, }, /* 186 */ - { 106, 12, 3, 0, 0, 26624, 102, }, /* 187 */ - { 106, 12, 3, 0, 0, 26744, 104, }, /* 188 */ - { 106, 12, 3, 0, 0, 26624, 104, }, /* 189 */ - { 106, 12, 3, 0, 0, 26748, 98, }, /* 190 */ - { 106, 12, 3, 0, 0, 26752, 106, }, /* 191 */ + { 107, 12, 3, 0, 0, 26648, 98, }, /* 161 */ + { 107, 12, 3, 0, 0, 26652, 98, }, /* 162 */ + { 107, 12, 3, 0, 0, 26656, 98, }, /* 163 */ + { 107, 12, 3, 0, 0, 26660, 98, }, /* 164 */ + { 107, 12, 3, 0, 0, 26664, 98, }, /* 165 */ + { 107, 12, 3, 0, 0, 26668, 98, }, /* 166 */ + { 107, 12, 3, 0, 0, 26672, 98, }, /* 167 */ + { 107, 12, 3, 0, 0, 26676, 98, }, /* 168 */ + { 107, 12, 3, 0, 0, 26680, 98, }, /* 169 */ + { 107, 12, 3, 0, 0, 26684, 98, }, /* 170 */ + { 107, 12, 3, 0, 0, 26688, 98, }, /* 171 */ + { 107, 12, 3, 0, 0, 26692, 98, }, /* 172 */ + { 107, 12, 3, 0, 0, 26696, 98, }, /* 173 */ + { 107, 12, 3, 0, 0, 26700, 98, }, /* 174 */ + { 107, 12, 3, 0, 0, 26704, 98, }, /* 175 */ + { 107, 12, 3, 0, 0, 26624, 98, }, /* 176 */ + { 107, 12, 3, 0, 0, 26708, 98, }, /* 177 */ + { 107, 12, 3, 0, 0, 26712, 98, }, /* 178 */ + { 107, 12, 3, 0, 0, 26716, 98, }, /* 179 */ + { 107, 12, 3, 0, 0, 26720, 98, }, /* 180 */ + { 107, 12, 3, 0, 0, 26724, 98, }, /* 181 */ + { 107, 12, 3, 0, 0, 26728, 98, }, /* 182 */ + { 107, 12, 3, 0, 0, 26732, 98, }, /* 183 */ + { 107, 12, 3, 0, 0, 26736, 98, }, /* 184 */ + { 107, 12, 3, 0, 0, 26740, 98, }, /* 185 */ + { 107, 12, 3, 21, 116, 26740, 100, }, /* 186 */ + { 107, 12, 3, 0, 0, 26624, 102, }, /* 187 */ + { 107, 12, 3, 0, 0, 26744, 104, }, /* 188 */ + { 107, 12, 3, 0, 0, 26624, 104, }, /* 189 */ + { 107, 12, 3, 0, 0, 26748, 98, }, /* 190 */ + { 107, 12, 3, 0, 0, 26752, 106, }, /* 191 */ { 1, 9, 12, 0, 1, 18432, 76, }, /* 192 */ { 1, 5, 12, 0, -1, 18432, 78, }, /* 193 */ - { 99, 6, 12, 0, 0, 28804, 94, }, /* 194 */ + { 100, 6, 12, 0, 0, 28804, 94, }, /* 194 */ { 1, 24, 12, 0, 0, 28804, 56, }, /* 195 */ - { 98, 2, 12, 0, 0, 18432, 0, }, /* 196 */ + { 99, 2, 12, 0, 0, 18432, 0, }, /* 196 */ { 1, 6, 12, 0, 0, 18432, 108, }, /* 197 */ { 1, 5, 12, 0, 130, 18432, 78, }, /* 198 */ - { 99, 21, 12, 0, 0, 28672, 110, }, /* 199 */ + { 100, 21, 12, 0, 0, 28672, 110, }, /* 199 */ { 1, 9, 12, 0, 116, 18432, 76, }, /* 200 */ { 1, 24, 12, 0, 0, 28672, 56, }, /* 201 */ { 1, 9, 12, 0, 38, 18432, 76, }, /* 202 */ - { 99, 21, 12, 0, 0, 28672, 112, }, /* 203 */ + { 100, 21, 12, 0, 0, 28672, 112, }, /* 203 */ { 1, 9, 12, 0, 37, 18432, 76, }, /* 204 */ { 1, 9, 12, 0, 64, 18432, 76, }, /* 205 */ { 1, 9, 12, 0, 63, 18432, 76, }, /* 206 */ @@ -832,7 +840,7 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 2, 26, 12, 0, 0, 18432, 74, }, /* 279 */ { 2, 12, 3, 0, 0, 26760, 98, }, /* 280 */ { 2, 12, 3, 0, 0, 26764, 98, }, /* 281 */ - { 106, 12, 3, 0, 0, 26768, 98, }, /* 282 */ + { 107, 12, 3, 0, 0, 26768, 98, }, /* 282 */ { 2, 11, 3, 0, 0, 26624, 124, }, /* 283 */ { 2, 9, 12, 0, 15, 18432, 76, }, /* 284 */ { 2, 5, 12, 0, -15, 18432, 78, }, /* 285 */ @@ -847,1252 +855,1272 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 3, 17, 12, 0, 0, 28672, 130, }, /* 294 */ { 3, 26, 12, 0, 0, 28672, 74, }, /* 295 */ { 3, 23, 12, 0, 0, 14336, 74, }, /* 296 */ - { 98, 2, 12, 0, 0, 34816, 0, }, /* 297 */ + { 99, 2, 12, 0, 0, 34816, 0, }, /* 297 */ { 4, 12, 3, 0, 0, 26624, 98, }, /* 298 */ - { 4, 12, 3, 0, 0, 26624, 104, }, /* 299 */ - { 4, 12, 3, 0, 0, 26624, 132, }, /* 300 */ - { 4, 17, 12, 0, 0, 34816, 130, }, /* 301 */ - { 4, 21, 12, 0, 0, 34816, 74, }, /* 302 */ - { 4, 21, 12, 0, 0, 34816, 110, }, /* 303 */ - { 4, 12, 3, 0, 0, 26624, 106, }, /* 304 */ - { 4, 7, 12, 0, 0, 34816, 84, }, /* 305 */ - { 4, 21, 12, 0, 0, 34816, 126, }, /* 306 */ - { 5, 1, 4, 0, 0, 2048, 134, }, /* 307 */ - { 99, 1, 4, 0, 0, 2048, 134, }, /* 308 */ - { 5, 25, 12, 0, 0, 28672, 122, }, /* 309 */ - { 5, 25, 12, 0, 0, 0, 122, }, /* 310 */ - { 5, 21, 12, 0, 0, 14336, 74, }, /* 311 */ - { 5, 23, 12, 0, 0, 0, 74, }, /* 312 */ - { 99, 21, 12, 0, 0, 8344, 110, }, /* 313 */ - { 5, 21, 12, 0, 0, 0, 74, }, /* 314 */ - { 5, 26, 12, 0, 0, 28672, 74, }, /* 315 */ - { 5, 12, 3, 0, 0, 26624, 106, }, /* 316 */ - { 99, 21, 12, 0, 0, 152, 110, }, /* 317 */ - { 5, 1, 2, 0, 0, 156, 136, }, /* 318 */ - { 5, 21, 12, 0, 0, 0, 128, }, /* 319 */ - { 99, 21, 12, 0, 0, 160, 128, }, /* 320 */ - { 5, 7, 12, 0, 0, 0, 84, }, /* 321 */ - { 99, 6, 12, 0, 0, 164, 138, }, /* 322 */ - { 106, 12, 3, 0, 0, 26792, 132, }, /* 323 */ - { 106, 12, 3, 0, 0, 26792, 106, }, /* 324 */ - { 106, 12, 3, 0, 0, 26792, 140, }, /* 325 */ - { 5, 12, 3, 0, 0, 26624, 132, }, /* 326 */ - { 5, 12, 3, 0, 0, 26624, 142, }, /* 327 */ - { 5, 13, 12, 0, 0, 2220, 144, }, /* 328 */ - { 5, 21, 12, 0, 0, 2048, 74, }, /* 329 */ - { 5, 7, 12, 0, 0, 0, 146, }, /* 330 */ - { 5, 21, 12, 0, 0, 176, 128, }, /* 331 */ - { 5, 12, 3, 0, 0, 26624, 140, }, /* 332 */ - { 5, 12, 3, 0, 0, 26624, 98, }, /* 333 */ - { 5, 6, 12, 0, 0, 0, 94, }, /* 334 */ - { 5, 13, 12, 0, 0, 10240, 144, }, /* 335 */ - { 5, 26, 12, 0, 0, 0, 74, }, /* 336 */ - { 6, 21, 12, 0, 0, 0, 128, }, /* 337 */ - { 6, 21, 12, 0, 0, 0, 110, }, /* 338 */ - { 6, 21, 12, 0, 0, 0, 74, }, /* 339 */ - { 98, 2, 12, 0, 0, 0, 0, }, /* 340 */ - { 6, 1, 4, 0, 0, 0, 134, }, /* 341 */ - { 6, 7, 12, 0, 0, 0, 84, }, /* 342 */ - { 6, 12, 3, 0, 0, 26624, 106, }, /* 343 */ - { 6, 12, 3, 0, 0, 26624, 132, }, /* 344 */ - { 6, 12, 3, 0, 0, 26624, 98, }, /* 345 */ - { 7, 7, 12, 0, 0, 0, 84, }, /* 346 */ - { 7, 12, 3, 0, 0, 26624, 132, }, /* 347 */ - { 48, 13, 12, 0, 0, 34816, 144, }, /* 348 */ - { 48, 7, 12, 0, 0, 34816, 84, }, /* 349 */ - { 48, 12, 3, 0, 0, 26624, 98, }, /* 350 */ - { 48, 6, 12, 0, 0, 34816, 94, }, /* 351 */ - { 48, 26, 12, 0, 0, 28672, 74, }, /* 352 */ - { 48, 21, 12, 0, 0, 28672, 74, }, /* 353 */ - { 48, 21, 12, 0, 0, 28672, 110, }, /* 354 */ - { 48, 21, 12, 0, 0, 28672, 128, }, /* 355 */ - { 48, 6, 12, 0, 0, 34816, 138, }, /* 356 */ - { 48, 12, 3, 0, 0, 26624, 104, }, /* 357 */ - { 48, 23, 12, 0, 0, 34816, 74, }, /* 358 */ - { 54, 7, 12, 0, 0, 34816, 84, }, /* 359 */ - { 54, 12, 3, 0, 0, 26624, 106, }, /* 360 */ - { 54, 12, 3, 0, 0, 26624, 98, }, /* 361 */ - { 54, 6, 12, 0, 0, 34816, 148, }, /* 362 */ - { 54, 12, 3, 0, 0, 26624, 104, }, /* 363 */ - { 54, 21, 12, 0, 0, 34816, 110, }, /* 364 */ - { 54, 21, 12, 0, 0, 34816, 74, }, /* 365 */ - { 54, 21, 12, 0, 0, 34816, 128, }, /* 366 */ - { 59, 7, 12, 0, 0, 34816, 84, }, /* 367 */ - { 59, 12, 3, 0, 0, 26624, 104, }, /* 368 */ - { 59, 21, 12, 0, 0, 34816, 110, }, /* 369 */ - { 5, 24, 12, 0, 0, 0, 126, }, /* 370 */ - { 5, 12, 3, 0, 0, 26624, 150, }, /* 371 */ - { 5, 12, 3, 0, 0, 26624, 104, }, /* 372 */ - { 5, 12, 3, 0, 0, 26624, 152, }, /* 373 */ - { 8, 12, 3, 0, 0, 26624, 106, }, /* 374 */ - { 8, 10, 5, 0, 0, 18432, 154, }, /* 375 */ - { 8, 7, 12, 0, 0, 18432, 84, }, /* 376 */ - { 8, 7, 12, 0, 0, 18432, 156, }, /* 377 */ - { 8, 12, 3, 0, 0, 26624, 98, }, /* 378 */ - { 8, 12, 3, 0, 0, 26624, 158, }, /* 379 */ - { 106, 12, 3, 0, 0, 26804, 98, }, /* 380 */ - { 106, 12, 3, 0, 0, 26808, 98, }, /* 381 */ - { 99, 21, 12, 0, 0, 18620, 128, }, /* 382 */ - { 99, 21, 12, 0, 0, 18624, 128, }, /* 383 */ - { 8, 13, 12, 0, 0, 18628, 144, }, /* 384 */ - { 8, 21, 12, 0, 0, 18432, 74, }, /* 385 */ - { 8, 6, 12, 0, 0, 18432, 94, }, /* 386 */ - { 9, 7, 12, 0, 0, 18432, 84, }, /* 387 */ - { 9, 12, 3, 0, 0, 26624, 106, }, /* 388 */ - { 9, 10, 5, 0, 0, 18432, 154, }, /* 389 */ - { 9, 7, 12, 0, 0, 18432, 156, }, /* 390 */ - { 9, 12, 3, 0, 0, 26624, 98, }, /* 391 */ - { 9, 10, 3, 0, 0, 18432, 160, }, /* 392 */ - { 9, 12, 3, 0, 0, 26624, 158, }, /* 393 */ - { 9, 13, 12, 0, 0, 18632, 144, }, /* 394 */ - { 9, 23, 12, 0, 0, 14336, 74, }, /* 395 */ - { 9, 15, 12, 0, 0, 18432, 74, }, /* 396 */ - { 9, 26, 12, 0, 0, 18432, 74, }, /* 397 */ - { 9, 21, 12, 0, 0, 18432, 74, }, /* 398 */ - { 9, 12, 3, 0, 0, 26624, 104, }, /* 399 */ - { 10, 12, 3, 0, 0, 26624, 106, }, /* 400 */ - { 10, 10, 5, 0, 0, 18432, 154, }, /* 401 */ - { 10, 7, 12, 0, 0, 18432, 84, }, /* 402 */ - { 10, 12, 3, 0, 0, 26624, 98, }, /* 403 */ - { 10, 12, 3, 0, 0, 26624, 158, }, /* 404 */ - { 10, 13, 12, 0, 0, 18636, 144, }, /* 405 */ - { 10, 12, 3, 0, 0, 26624, 162, }, /* 406 */ - { 10, 21, 12, 0, 0, 18432, 74, }, /* 407 */ - { 11, 12, 3, 0, 0, 26624, 106, }, /* 408 */ - { 11, 10, 5, 0, 0, 18432, 154, }, /* 409 */ - { 11, 7, 12, 0, 0, 18432, 84, }, /* 410 */ - { 11, 7, 12, 0, 0, 18432, 156, }, /* 411 */ - { 11, 12, 3, 0, 0, 26624, 98, }, /* 412 */ - { 11, 12, 3, 0, 0, 26624, 158, }, /* 413 */ - { 11, 13, 12, 0, 0, 18640, 144, }, /* 414 */ - { 11, 21, 12, 0, 0, 18432, 74, }, /* 415 */ - { 11, 23, 12, 0, 0, 14336, 74, }, /* 416 */ - { 11, 12, 3, 0, 0, 26624, 162, }, /* 417 */ - { 12, 12, 3, 0, 0, 26624, 106, }, /* 418 */ - { 12, 10, 5, 0, 0, 18432, 154, }, /* 419 */ - { 12, 7, 12, 0, 0, 18432, 84, }, /* 420 */ - { 12, 7, 12, 0, 0, 18432, 156, }, /* 421 */ - { 12, 12, 3, 0, 0, 26624, 98, }, /* 422 */ - { 12, 10, 3, 0, 0, 18432, 160, }, /* 423 */ - { 12, 12, 3, 0, 0, 26624, 158, }, /* 424 */ - { 12, 12, 3, 0, 0, 26624, 164, }, /* 425 */ - { 12, 13, 12, 0, 0, 18432, 144, }, /* 426 */ - { 12, 26, 12, 0, 0, 18432, 74, }, /* 427 */ - { 12, 15, 12, 0, 0, 18432, 74, }, /* 428 */ - { 13, 12, 3, 0, 0, 26624, 106, }, /* 429 */ - { 13, 7, 12, 0, 0, 18432, 84, }, /* 430 */ - { 13, 10, 3, 0, 0, 18432, 160, }, /* 431 */ - { 13, 10, 5, 0, 0, 18432, 154, }, /* 432 */ - { 13, 12, 3, 0, 0, 26624, 158, }, /* 433 */ - { 13, 13, 12, 0, 0, 18644, 144, }, /* 434 */ - { 13, 15, 12, 0, 0, 18644, 74, }, /* 435 */ - { 13, 26, 12, 0, 0, 28884, 74, }, /* 436 */ - { 13, 26, 12, 0, 0, 28672, 74, }, /* 437 */ - { 13, 23, 12, 0, 0, 14336, 74, }, /* 438 */ - { 14, 12, 3, 0, 0, 26624, 106, }, /* 439 */ - { 14, 10, 5, 0, 0, 18432, 154, }, /* 440 */ - { 14, 7, 12, 0, 0, 18432, 84, }, /* 441 */ - { 14, 7, 12, 0, 0, 18432, 156, }, /* 442 */ - { 14, 12, 3, 0, 0, 26624, 98, }, /* 443 */ - { 14, 12, 3, 0, 0, 26624, 158, }, /* 444 */ - { 14, 13, 12, 0, 0, 18432, 144, }, /* 445 */ - { 14, 21, 12, 0, 0, 18432, 74, }, /* 446 */ - { 14, 15, 12, 0, 0, 28672, 74, }, /* 447 */ - { 14, 26, 12, 0, 0, 18432, 74, }, /* 448 */ - { 15, 7, 12, 0, 0, 18432, 84, }, /* 449 */ - { 15, 12, 3, 0, 0, 26624, 106, }, /* 450 */ - { 15, 10, 5, 0, 0, 18432, 154, }, /* 451 */ - { 15, 21, 12, 0, 0, 18432, 74, }, /* 452 */ - { 15, 12, 3, 0, 0, 26624, 98, }, /* 453 */ - { 15, 12, 3, 0, 0, 18432, 106, }, /* 454 */ - { 15, 10, 3, 0, 0, 18432, 160, }, /* 455 */ - { 15, 12, 3, 0, 0, 26624, 158, }, /* 456 */ - { 15, 13, 12, 0, 0, 18648, 144, }, /* 457 */ - { 16, 12, 3, 0, 0, 26624, 106, }, /* 458 */ - { 16, 10, 5, 0, 0, 18432, 154, }, /* 459 */ - { 16, 7, 12, 0, 0, 18432, 84, }, /* 460 */ - { 16, 7, 12, 0, 0, 18432, 156, }, /* 461 */ - { 16, 12, 3, 0, 0, 26624, 158, }, /* 462 */ - { 16, 10, 3, 0, 0, 18432, 160, }, /* 463 */ - { 16, 7, 4, 0, 0, 18432, 84, }, /* 464 */ - { 16, 26, 12, 0, 0, 18432, 74, }, /* 465 */ - { 16, 15, 12, 0, 0, 18432, 74, }, /* 466 */ - { 16, 13, 12, 0, 0, 18432, 144, }, /* 467 */ - { 17, 12, 3, 0, 0, 26624, 106, }, /* 468 */ - { 17, 10, 5, 0, 0, 18432, 154, }, /* 469 */ - { 17, 7, 12, 0, 0, 18432, 84, }, /* 470 */ - { 17, 12, 3, 0, 0, 26624, 158, }, /* 471 */ - { 17, 10, 3, 0, 0, 18432, 160, }, /* 472 */ - { 17, 13, 12, 0, 0, 18432, 144, }, /* 473 */ - { 17, 21, 12, 0, 0, 18432, 74, }, /* 474 */ - { 18, 7, 12, 0, 0, 18432, 84, }, /* 475 */ - { 18, 12, 3, 0, 0, 26624, 106, }, /* 476 */ - { 18, 7, 5, 0, 0, 18432, 166, }, /* 477 */ - { 18, 12, 3, 0, 0, 26624, 168, }, /* 478 */ - { 99, 23, 12, 0, 0, 14336, 74, }, /* 479 */ - { 18, 7, 12, 0, 0, 18432, 170, }, /* 480 */ - { 18, 6, 12, 0, 0, 18432, 138, }, /* 481 */ - { 18, 12, 3, 0, 0, 26624, 98, }, /* 482 */ - { 18, 21, 12, 0, 0, 18432, 74, }, /* 483 */ - { 18, 13, 12, 0, 0, 18432, 144, }, /* 484 */ - { 18, 21, 12, 0, 0, 18432, 110, }, /* 485 */ - { 100, 7, 12, 0, 0, 18432, 84, }, /* 486 */ - { 100, 12, 3, 0, 0, 26624, 106, }, /* 487 */ - { 100, 7, 5, 0, 0, 18432, 166, }, /* 488 */ - { 100, 12, 3, 0, 0, 26624, 158, }, /* 489 */ - { 100, 7, 12, 0, 0, 18432, 170, }, /* 490 */ - { 100, 6, 12, 0, 0, 18432, 138, }, /* 491 */ - { 100, 12, 3, 0, 0, 26624, 98, }, /* 492 */ - { 100, 12, 3, 0, 0, 26624, 104, }, /* 493 */ - { 100, 13, 12, 0, 0, 18432, 144, }, /* 494 */ - { 19, 7, 12, 0, 0, 18432, 84, }, /* 495 */ - { 19, 26, 12, 0, 0, 18432, 74, }, /* 496 */ - { 19, 21, 12, 0, 0, 18432, 74, }, /* 497 */ - { 19, 21, 12, 0, 0, 18432, 110, }, /* 498 */ - { 19, 12, 3, 0, 0, 26624, 98, }, /* 499 */ - { 19, 13, 12, 0, 0, 18432, 144, }, /* 500 */ - { 19, 15, 12, 0, 0, 18432, 74, }, /* 501 */ - { 19, 22, 12, 0, 0, 28672, 172, }, /* 502 */ - { 19, 18, 12, 0, 0, 28672, 172, }, /* 503 */ - { 19, 10, 5, 0, 0, 18432, 174, }, /* 504 */ - { 19, 12, 3, 0, 0, 26624, 106, }, /* 505 */ - { 19, 12, 3, 0, 0, 26624, 176, }, /* 506 */ - { 19, 10, 5, 0, 0, 18432, 154, }, /* 507 */ - { 19, 12, 3, 0, 0, 26624, 132, }, /* 508 */ - { 19, 12, 3, 0, 0, 26624, 158, }, /* 509 */ - { 99, 26, 12, 0, 0, 18432, 74, }, /* 510 */ - { 20, 7, 12, 0, 0, 18432, 84, }, /* 511 */ - { 20, 10, 12, 0, 0, 18432, 154, }, /* 512 */ - { 20, 12, 3, 0, 0, 26624, 106, }, /* 513 */ - { 20, 10, 5, 0, 0, 18432, 154, }, /* 514 */ - { 20, 12, 3, 0, 0, 26624, 98, }, /* 515 */ - { 20, 12, 3, 0, 0, 26624, 158, }, /* 516 */ - { 20, 13, 12, 0, 0, 18652, 144, }, /* 517 */ - { 20, 21, 12, 0, 0, 18432, 128, }, /* 518 */ - { 20, 21, 12, 0, 0, 18432, 74, }, /* 519 */ - { 20, 10, 12, 0, 0, 18432, 178, }, /* 520 */ - { 20, 12, 3, 0, 0, 26624, 132, }, /* 521 */ - { 20, 13, 12, 0, 0, 18432, 144, }, /* 522 */ - { 20, 26, 12, 0, 0, 18432, 74, }, /* 523 */ - { 21, 9, 12, 0, 7264, 18432, 76, }, /* 524 */ - { 21, 5, 12, 0, 3008, 18432, 180, }, /* 525 */ - { 99, 21, 12, 0, 0, 18656, 74, }, /* 526 */ - { 21, 6, 12, 0, 0, 18432, 182, }, /* 527 */ - { 22, 7, 6, 0, 0, 18432, 84, }, /* 528 */ - { 22, 7, 6, 0, 0, 18432, 184, }, /* 529 */ - { 22, 7, 7, 0, 0, 18432, 184, }, /* 530 */ - { 22, 7, 7, 0, 0, 18432, 84, }, /* 531 */ - { 22, 7, 8, 0, 0, 18432, 84, }, /* 532 */ - { 23, 7, 12, 0, 0, 18432, 84, }, /* 533 */ - { 23, 12, 3, 0, 0, 26624, 98, }, /* 534 */ - { 23, 21, 12, 0, 0, 18432, 74, }, /* 535 */ - { 23, 21, 12, 0, 0, 18432, 110, }, /* 536 */ - { 23, 21, 12, 0, 0, 18432, 128, }, /* 537 */ - { 23, 15, 12, 0, 0, 18432, 144, }, /* 538 */ - { 23, 15, 12, 0, 0, 18432, 74, }, /* 539 */ - { 23, 26, 12, 0, 0, 28672, 74, }, /* 540 */ - { 24, 9, 12, 0, 38864, 18432, 186, }, /* 541 */ - { 24, 9, 12, 0, 8, 18432, 186, }, /* 542 */ - { 24, 5, 12, 0, -8, 18432, 70, }, /* 543 */ - { 101, 17, 12, 0, 0, 28672, 130, }, /* 544 */ - { 101, 7, 12, 0, 0, 18432, 84, }, /* 545 */ - { 101, 26, 12, 0, 0, 18432, 74, }, /* 546 */ - { 101, 21, 12, 0, 0, 18432, 128, }, /* 547 */ - { 102, 29, 12, 0, 0, 45056, 52, }, /* 548 */ - { 102, 7, 12, 0, 0, 18432, 84, }, /* 549 */ - { 102, 22, 12, 0, 0, 28672, 172, }, /* 550 */ - { 102, 18, 12, 0, 0, 28672, 172, }, /* 551 */ - { 25, 7, 12, 0, 0, 18432, 84, }, /* 552 */ - { 99, 21, 12, 0, 0, 18660, 110, }, /* 553 */ - { 25, 14, 12, 0, 0, 18432, 84, }, /* 554 */ - { 33, 7, 12, 0, 0, 18432, 84, }, /* 555 */ - { 33, 12, 3, 0, 0, 26624, 106, }, /* 556 */ - { 33, 12, 3, 0, 0, 26624, 158, }, /* 557 */ - { 33, 10, 3, 0, 0, 18432, 188, }, /* 558 */ - { 34, 7, 12, 0, 0, 18432, 84, }, /* 559 */ - { 34, 12, 3, 0, 0, 26624, 106, }, /* 560 */ - { 34, 10, 3, 0, 0, 18432, 188, }, /* 561 */ - { 99, 21, 12, 0, 0, 18664, 128, }, /* 562 */ - { 35, 7, 12, 0, 0, 18432, 84, }, /* 563 */ - { 35, 12, 3, 0, 0, 26624, 106, }, /* 564 */ - { 36, 7, 12, 0, 0, 18432, 84, }, /* 565 */ - { 36, 12, 3, 0, 0, 26624, 106, }, /* 566 */ - { 103, 7, 12, 0, 0, 18432, 84, }, /* 567 */ - { 103, 7, 12, 0, 0, 18432, 146, }, /* 568 */ - { 103, 12, 3, 0, 0, 26624, 102, }, /* 569 */ - { 103, 10, 5, 0, 0, 18432, 154, }, /* 570 */ - { 103, 12, 3, 0, 0, 26624, 106, }, /* 571 */ - { 103, 12, 3, 0, 0, 26624, 98, }, /* 572 */ - { 103, 12, 3, 0, 0, 26624, 158, }, /* 573 */ - { 103, 21, 12, 0, 0, 18432, 128, }, /* 574 */ - { 103, 21, 12, 0, 0, 18432, 110, }, /* 575 */ - { 103, 6, 12, 0, 0, 18432, 148, }, /* 576 */ - { 103, 21, 12, 0, 0, 18432, 74, }, /* 577 */ - { 103, 23, 12, 0, 0, 14336, 74, }, /* 578 */ - { 103, 13, 12, 0, 0, 18432, 144, }, /* 579 */ - { 103, 15, 12, 0, 0, 28672, 74, }, /* 580 */ - { 26, 21, 12, 0, 0, 28672, 74, }, /* 581 */ - { 99, 21, 12, 0, 0, 28908, 110, }, /* 582 */ - { 99, 21, 12, 0, 0, 28908, 128, }, /* 583 */ - { 26, 21, 12, 0, 0, 28672, 110, }, /* 584 */ - { 26, 17, 12, 0, 0, 28672, 130, }, /* 585 */ - { 26, 21, 12, 0, 0, 28672, 128, }, /* 586 */ - { 26, 21, 12, 0, 0, 28672, 190, }, /* 587 */ - { 26, 12, 3, 0, 0, 26624, 192, }, /* 588 */ - { 26, 1, 2, 0, 0, 6144, 66, }, /* 589 */ - { 26, 13, 12, 0, 0, 18432, 144, }, /* 590 */ - { 26, 7, 12, 0, 0, 18432, 84, }, /* 591 */ - { 26, 6, 12, 0, 0, 18432, 138, }, /* 592 */ - { 26, 12, 3, 0, 0, 26624, 194, }, /* 593 */ - { 26, 12, 3, 0, 0, 26624, 106, }, /* 594 */ - { 37, 7, 12, 0, 0, 18432, 84, }, /* 595 */ - { 37, 12, 3, 0, 0, 26624, 106, }, /* 596 */ - { 37, 10, 5, 0, 0, 18432, 154, }, /* 597 */ - { 37, 12, 3, 0, 0, 26624, 98, }, /* 598 */ - { 37, 26, 12, 0, 0, 28672, 74, }, /* 599 */ - { 37, 21, 12, 0, 0, 28672, 128, }, /* 600 */ - { 37, 13, 12, 0, 0, 18432, 144, }, /* 601 */ - { 38, 7, 12, 0, 0, 18432, 84, }, /* 602 */ - { 110, 7, 12, 0, 0, 18432, 84, }, /* 603 */ - { 110, 7, 12, 0, 0, 18432, 170, }, /* 604 */ - { 110, 13, 12, 0, 0, 18432, 144, }, /* 605 */ - { 110, 15, 12, 0, 0, 18432, 144, }, /* 606 */ - { 110, 26, 12, 0, 0, 28672, 74, }, /* 607 */ - { 103, 26, 12, 0, 0, 28672, 74, }, /* 608 */ - { 42, 7, 12, 0, 0, 18432, 84, }, /* 609 */ - { 42, 12, 3, 0, 0, 26624, 106, }, /* 610 */ - { 42, 10, 5, 0, 0, 18432, 154, }, /* 611 */ - { 42, 21, 12, 0, 0, 18432, 74, }, /* 612 */ - { 123, 7, 12, 0, 0, 18432, 84, }, /* 613 */ - { 123, 10, 5, 0, 0, 18432, 154, }, /* 614 */ - { 123, 12, 3, 0, 0, 26624, 106, }, /* 615 */ - { 123, 12, 3, 0, 0, 26624, 158, }, /* 616 */ - { 123, 10, 12, 0, 0, 18432, 154, }, /* 617 */ - { 123, 12, 3, 0, 0, 26624, 98, }, /* 618 */ - { 123, 13, 12, 0, 0, 18432, 144, }, /* 619 */ - { 123, 21, 12, 0, 0, 18432, 74, }, /* 620 */ - { 123, 6, 12, 0, 0, 18432, 138, }, /* 621 */ - { 123, 21, 12, 0, 0, 18432, 128, }, /* 622 */ - { 106, 11, 3, 0, 0, 26624, 196, }, /* 623 */ - { 106, 12, 3, 0, 0, 26624, 106, }, /* 624 */ - { 113, 12, 3, 0, 0, 26624, 106, }, /* 625 */ - { 113, 10, 5, 0, 0, 18432, 154, }, /* 626 */ - { 113, 7, 12, 0, 0, 18432, 84, }, /* 627 */ - { 113, 12, 3, 0, 0, 26624, 98, }, /* 628 */ - { 113, 10, 3, 0, 0, 18432, 160, }, /* 629 */ - { 113, 10, 3, 0, 0, 18432, 188, }, /* 630 */ - { 113, 21, 12, 0, 0, 18432, 128, }, /* 631 */ - { 113, 13, 12, 0, 0, 18432, 144, }, /* 632 */ - { 113, 21, 12, 0, 0, 18432, 74, }, /* 633 */ - { 113, 21, 12, 0, 0, 18432, 110, }, /* 634 */ - { 113, 26, 12, 0, 0, 18432, 74, }, /* 635 */ - { 116, 12, 3, 0, 0, 26624, 106, }, /* 636 */ - { 116, 10, 5, 0, 0, 18432, 154, }, /* 637 */ - { 116, 7, 12, 0, 0, 18432, 84, }, /* 638 */ - { 116, 10, 3, 0, 0, 18432, 188, }, /* 639 */ - { 116, 12, 3, 0, 0, 26624, 158, }, /* 640 */ - { 116, 13, 12, 0, 0, 18432, 144, }, /* 641 */ - { 132, 7, 12, 0, 0, 18432, 84, }, /* 642 */ - { 132, 12, 3, 0, 0, 26624, 98, }, /* 643 */ - { 132, 10, 5, 0, 0, 18432, 154, }, /* 644 */ - { 132, 12, 3, 0, 0, 26624, 106, }, /* 645 */ - { 132, 10, 3, 0, 0, 18432, 188, }, /* 646 */ - { 132, 21, 12, 0, 0, 18432, 74, }, /* 647 */ - { 117, 7, 12, 0, 0, 18432, 84, }, /* 648 */ - { 117, 10, 5, 0, 0, 18432, 154, }, /* 649 */ - { 117, 12, 3, 0, 0, 26624, 106, }, /* 650 */ - { 117, 12, 3, 0, 0, 26624, 198, }, /* 651 */ - { 117, 12, 3, 0, 0, 26624, 98, }, /* 652 */ - { 117, 21, 12, 0, 0, 18432, 128, }, /* 653 */ - { 117, 21, 12, 0, 0, 18432, 110, }, /* 654 */ - { 117, 13, 12, 0, 0, 18432, 144, }, /* 655 */ + { 4, 12, 3, 0, 0, 26624, 132, }, /* 299 */ + { 4, 17, 12, 0, 0, 34816, 130, }, /* 300 */ + { 4, 21, 12, 0, 0, 34816, 74, }, /* 301 */ + { 4, 21, 12, 0, 0, 34816, 110, }, /* 302 */ + { 4, 7, 12, 0, 0, 34816, 84, }, /* 303 */ + { 4, 21, 12, 0, 0, 34816, 126, }, /* 304 */ + { 5, 1, 4, 0, 0, 2048, 134, }, /* 305 */ + { 100, 1, 4, 0, 0, 2048, 134, }, /* 306 */ + { 5, 25, 12, 0, 0, 28672, 122, }, /* 307 */ + { 5, 25, 12, 0, 0, 0, 122, }, /* 308 */ + { 5, 21, 12, 0, 0, 14336, 74, }, /* 309 */ + { 5, 23, 12, 0, 0, 0, 74, }, /* 310 */ + { 100, 21, 12, 0, 0, 8344, 110, }, /* 311 */ + { 5, 21, 12, 0, 0, 0, 74, }, /* 312 */ + { 5, 26, 12, 0, 0, 28672, 74, }, /* 313 */ + { 5, 12, 3, 0, 0, 26624, 106, }, /* 314 */ + { 100, 21, 12, 0, 0, 152, 110, }, /* 315 */ + { 5, 1, 2, 0, 0, 156, 136, }, /* 316 */ + { 5, 21, 12, 0, 0, 0, 128, }, /* 317 */ + { 100, 21, 12, 0, 0, 160, 128, }, /* 318 */ + { 5, 7, 12, 0, 0, 0, 84, }, /* 319 */ + { 100, 6, 12, 0, 0, 164, 138, }, /* 320 */ + { 107, 12, 3, 0, 0, 26792, 132, }, /* 321 */ + { 107, 12, 3, 0, 0, 26792, 106, }, /* 322 */ + { 107, 12, 3, 0, 0, 26792, 140, }, /* 323 */ + { 5, 12, 3, 0, 0, 26624, 132, }, /* 324 */ + { 5, 12, 3, 0, 0, 26624, 142, }, /* 325 */ + { 5, 13, 12, 0, 0, 2220, 144, }, /* 326 */ + { 5, 21, 12, 0, 0, 2048, 74, }, /* 327 */ + { 5, 7, 12, 0, 0, 0, 146, }, /* 328 */ + { 5, 21, 12, 0, 0, 176, 128, }, /* 329 */ + { 5, 12, 3, 0, 0, 26624, 140, }, /* 330 */ + { 5, 12, 3, 0, 0, 26624, 98, }, /* 331 */ + { 5, 6, 12, 0, 0, 0, 94, }, /* 332 */ + { 5, 13, 12, 0, 0, 10240, 144, }, /* 333 */ + { 5, 26, 12, 0, 0, 0, 74, }, /* 334 */ + { 6, 21, 12, 0, 0, 0, 128, }, /* 335 */ + { 6, 21, 12, 0, 0, 0, 110, }, /* 336 */ + { 6, 21, 12, 0, 0, 0, 74, }, /* 337 */ + { 99, 2, 12, 0, 0, 0, 0, }, /* 338 */ + { 6, 1, 4, 0, 0, 0, 134, }, /* 339 */ + { 6, 7, 12, 0, 0, 0, 84, }, /* 340 */ + { 6, 12, 3, 0, 0, 26624, 106, }, /* 341 */ + { 6, 12, 3, 0, 0, 26624, 132, }, /* 342 */ + { 6, 12, 3, 0, 0, 26624, 98, }, /* 343 */ + { 7, 7, 12, 0, 0, 0, 84, }, /* 344 */ + { 7, 12, 3, 0, 0, 26624, 132, }, /* 345 */ + { 48, 13, 12, 0, 0, 34816, 144, }, /* 346 */ + { 48, 7, 12, 0, 0, 34816, 84, }, /* 347 */ + { 48, 12, 3, 0, 0, 26624, 98, }, /* 348 */ + { 48, 6, 12, 0, 0, 34816, 94, }, /* 349 */ + { 48, 26, 12, 0, 0, 28672, 74, }, /* 350 */ + { 48, 21, 12, 0, 0, 28672, 74, }, /* 351 */ + { 48, 21, 12, 0, 0, 28672, 110, }, /* 352 */ + { 48, 21, 12, 0, 0, 28672, 128, }, /* 353 */ + { 48, 6, 12, 0, 0, 34816, 138, }, /* 354 */ + { 48, 12, 3, 0, 0, 26624, 104, }, /* 355 */ + { 48, 23, 12, 0, 0, 34816, 74, }, /* 356 */ + { 54, 7, 12, 0, 0, 34816, 84, }, /* 357 */ + { 54, 12, 3, 0, 0, 26624, 106, }, /* 358 */ + { 54, 12, 3, 0, 0, 26624, 98, }, /* 359 */ + { 54, 6, 12, 0, 0, 34816, 148, }, /* 360 */ + { 54, 12, 3, 0, 0, 26624, 104, }, /* 361 */ + { 54, 21, 12, 0, 0, 34816, 110, }, /* 362 */ + { 54, 21, 12, 0, 0, 34816, 74, }, /* 363 */ + { 54, 21, 12, 0, 0, 34816, 128, }, /* 364 */ + { 59, 7, 12, 0, 0, 34816, 84, }, /* 365 */ + { 59, 12, 3, 0, 0, 26624, 104, }, /* 366 */ + { 59, 21, 12, 0, 0, 34816, 110, }, /* 367 */ + { 5, 24, 12, 0, 0, 0, 126, }, /* 368 */ + { 5, 12, 3, 0, 0, 26624, 150, }, /* 369 */ + { 5, 12, 3, 0, 0, 26624, 104, }, /* 370 */ + { 5, 12, 3, 0, 0, 26624, 152, }, /* 371 */ + { 8, 12, 3, 0, 0, 26624, 106, }, /* 372 */ + { 8, 10, 5, 0, 0, 18432, 154, }, /* 373 */ + { 8, 7, 12, 0, 0, 18432, 84, }, /* 374 */ + { 8, 7, 12, 0, 0, 18432, 156, }, /* 375 */ + { 8, 12, 3, 0, 0, 26624, 98, }, /* 376 */ + { 8, 12, 3, 0, 0, 26624, 158, }, /* 377 */ + { 107, 12, 3, 0, 0, 26804, 98, }, /* 378 */ + { 107, 12, 3, 0, 0, 26808, 98, }, /* 379 */ + { 100, 21, 12, 0, 0, 18620, 128, }, /* 380 */ + { 100, 21, 12, 0, 0, 18624, 128, }, /* 381 */ + { 8, 13, 12, 0, 0, 18628, 144, }, /* 382 */ + { 8, 21, 12, 0, 0, 18432, 74, }, /* 383 */ + { 8, 6, 12, 0, 0, 18432, 94, }, /* 384 */ + { 9, 7, 12, 0, 0, 18432, 84, }, /* 385 */ + { 9, 12, 3, 0, 0, 26624, 106, }, /* 386 */ + { 9, 10, 5, 0, 0, 18432, 154, }, /* 387 */ + { 9, 7, 12, 0, 0, 18432, 156, }, /* 388 */ + { 9, 12, 3, 0, 0, 26624, 98, }, /* 389 */ + { 9, 10, 3, 0, 0, 18432, 160, }, /* 390 */ + { 9, 12, 3, 0, 0, 26624, 158, }, /* 391 */ + { 9, 13, 12, 0, 0, 18632, 144, }, /* 392 */ + { 9, 23, 12, 0, 0, 14336, 74, }, /* 393 */ + { 9, 15, 12, 0, 0, 18432, 74, }, /* 394 */ + { 9, 26, 12, 0, 0, 18432, 74, }, /* 395 */ + { 9, 21, 12, 0, 0, 18432, 74, }, /* 396 */ + { 9, 12, 3, 0, 0, 26624, 104, }, /* 397 */ + { 10, 12, 3, 0, 0, 26624, 106, }, /* 398 */ + { 10, 10, 5, 0, 0, 18432, 154, }, /* 399 */ + { 10, 7, 12, 0, 0, 18432, 84, }, /* 400 */ + { 10, 12, 3, 0, 0, 26624, 98, }, /* 401 */ + { 10, 12, 3, 0, 0, 26624, 158, }, /* 402 */ + { 10, 13, 12, 0, 0, 18636, 144, }, /* 403 */ + { 10, 12, 3, 0, 0, 26624, 162, }, /* 404 */ + { 10, 21, 12, 0, 0, 18432, 74, }, /* 405 */ + { 11, 12, 3, 0, 0, 26624, 106, }, /* 406 */ + { 11, 10, 5, 0, 0, 18432, 154, }, /* 407 */ + { 11, 7, 12, 0, 0, 18432, 84, }, /* 408 */ + { 11, 7, 12, 0, 0, 18432, 156, }, /* 409 */ + { 11, 12, 3, 0, 0, 26624, 98, }, /* 410 */ + { 11, 12, 3, 0, 0, 26624, 158, }, /* 411 */ + { 11, 13, 12, 0, 0, 18640, 144, }, /* 412 */ + { 11, 21, 12, 0, 0, 18432, 74, }, /* 413 */ + { 11, 23, 12, 0, 0, 14336, 74, }, /* 414 */ + { 11, 12, 3, 0, 0, 26624, 162, }, /* 415 */ + { 12, 12, 3, 0, 0, 26624, 106, }, /* 416 */ + { 12, 10, 5, 0, 0, 18432, 154, }, /* 417 */ + { 12, 7, 12, 0, 0, 18432, 84, }, /* 418 */ + { 12, 7, 12, 0, 0, 18432, 156, }, /* 419 */ + { 12, 12, 3, 0, 0, 26624, 98, }, /* 420 */ + { 12, 10, 3, 0, 0, 18432, 160, }, /* 421 */ + { 12, 12, 3, 0, 0, 26624, 158, }, /* 422 */ + { 12, 12, 3, 0, 0, 26624, 164, }, /* 423 */ + { 12, 13, 12, 0, 0, 18432, 144, }, /* 424 */ + { 12, 26, 12, 0, 0, 18432, 74, }, /* 425 */ + { 12, 15, 12, 0, 0, 18432, 74, }, /* 426 */ + { 13, 12, 3, 0, 0, 26624, 106, }, /* 427 */ + { 13, 7, 12, 0, 0, 18432, 84, }, /* 428 */ + { 13, 10, 3, 0, 0, 18432, 160, }, /* 429 */ + { 13, 10, 5, 0, 0, 18432, 154, }, /* 430 */ + { 13, 12, 3, 0, 0, 26624, 158, }, /* 431 */ + { 13, 13, 12, 0, 0, 18644, 144, }, /* 432 */ + { 13, 15, 12, 0, 0, 18644, 74, }, /* 433 */ + { 13, 26, 12, 0, 0, 28884, 74, }, /* 434 */ + { 13, 26, 12, 0, 0, 28672, 74, }, /* 435 */ + { 13, 23, 12, 0, 0, 14336, 74, }, /* 436 */ + { 14, 12, 3, 0, 0, 26624, 106, }, /* 437 */ + { 14, 10, 5, 0, 0, 18432, 154, }, /* 438 */ + { 14, 7, 12, 0, 0, 18432, 84, }, /* 439 */ + { 14, 7, 12, 0, 0, 18432, 156, }, /* 440 */ + { 14, 12, 3, 0, 0, 26624, 98, }, /* 441 */ + { 14, 12, 3, 0, 0, 26624, 158, }, /* 442 */ + { 14, 13, 12, 0, 0, 18432, 144, }, /* 443 */ + { 14, 21, 12, 0, 0, 18432, 74, }, /* 444 */ + { 14, 15, 12, 0, 0, 28672, 74, }, /* 445 */ + { 14, 26, 12, 0, 0, 18432, 74, }, /* 446 */ + { 15, 7, 12, 0, 0, 18432, 84, }, /* 447 */ + { 15, 12, 3, 0, 0, 26624, 106, }, /* 448 */ + { 15, 10, 5, 0, 0, 18432, 154, }, /* 449 */ + { 15, 21, 12, 0, 0, 18432, 74, }, /* 450 */ + { 15, 12, 3, 0, 0, 26624, 98, }, /* 451 */ + { 15, 12, 3, 0, 0, 18432, 106, }, /* 452 */ + { 15, 10, 3, 0, 0, 18432, 160, }, /* 453 */ + { 15, 12, 3, 0, 0, 26624, 158, }, /* 454 */ + { 15, 13, 12, 0, 0, 18648, 144, }, /* 455 */ + { 16, 12, 3, 0, 0, 26624, 106, }, /* 456 */ + { 16, 10, 5, 0, 0, 18432, 154, }, /* 457 */ + { 16, 7, 12, 0, 0, 18432, 84, }, /* 458 */ + { 16, 7, 12, 0, 0, 18432, 156, }, /* 459 */ + { 16, 12, 3, 0, 0, 26624, 158, }, /* 460 */ + { 16, 10, 3, 0, 0, 18432, 160, }, /* 461 */ + { 16, 7, 4, 0, 0, 18432, 84, }, /* 462 */ + { 16, 26, 12, 0, 0, 18432, 74, }, /* 463 */ + { 16, 15, 12, 0, 0, 18432, 74, }, /* 464 */ + { 16, 13, 12, 0, 0, 18432, 144, }, /* 465 */ + { 17, 12, 3, 0, 0, 26624, 106, }, /* 466 */ + { 17, 10, 5, 0, 0, 18432, 154, }, /* 467 */ + { 17, 7, 12, 0, 0, 18432, 84, }, /* 468 */ + { 17, 12, 3, 0, 0, 26624, 158, }, /* 469 */ + { 17, 10, 3, 0, 0, 18432, 160, }, /* 470 */ + { 17, 13, 12, 0, 0, 18432, 144, }, /* 471 */ + { 17, 21, 12, 0, 0, 18432, 74, }, /* 472 */ + { 18, 7, 12, 0, 0, 18432, 84, }, /* 473 */ + { 18, 12, 3, 0, 0, 26624, 106, }, /* 474 */ + { 18, 7, 5, 0, 0, 18432, 166, }, /* 475 */ + { 18, 12, 3, 0, 0, 26624, 168, }, /* 476 */ + { 100, 23, 12, 0, 0, 14336, 74, }, /* 477 */ + { 18, 7, 12, 0, 0, 18432, 170, }, /* 478 */ + { 18, 6, 12, 0, 0, 18432, 138, }, /* 479 */ + { 18, 12, 3, 0, 0, 26624, 98, }, /* 480 */ + { 18, 21, 12, 0, 0, 18432, 74, }, /* 481 */ + { 18, 13, 12, 0, 0, 18432, 144, }, /* 482 */ + { 18, 21, 12, 0, 0, 18432, 110, }, /* 483 */ + { 101, 7, 12, 0, 0, 18432, 84, }, /* 484 */ + { 101, 12, 3, 0, 0, 26624, 106, }, /* 485 */ + { 101, 7, 5, 0, 0, 18432, 166, }, /* 486 */ + { 101, 12, 3, 0, 0, 26624, 158, }, /* 487 */ + { 101, 7, 12, 0, 0, 18432, 170, }, /* 488 */ + { 101, 6, 12, 0, 0, 18432, 138, }, /* 489 */ + { 101, 12, 3, 0, 0, 26624, 98, }, /* 490 */ + { 101, 12, 3, 0, 0, 26624, 104, }, /* 491 */ + { 101, 13, 12, 0, 0, 18432, 144, }, /* 492 */ + { 19, 7, 12, 0, 0, 18432, 84, }, /* 493 */ + { 19, 26, 12, 0, 0, 18432, 74, }, /* 494 */ + { 19, 21, 12, 0, 0, 18432, 74, }, /* 495 */ + { 19, 21, 12, 0, 0, 18432, 110, }, /* 496 */ + { 19, 12, 3, 0, 0, 26624, 98, }, /* 497 */ + { 19, 13, 12, 0, 0, 18432, 144, }, /* 498 */ + { 19, 15, 12, 0, 0, 18432, 74, }, /* 499 */ + { 19, 22, 12, 0, 0, 28672, 172, }, /* 500 */ + { 19, 18, 12, 0, 0, 28672, 172, }, /* 501 */ + { 19, 10, 5, 0, 0, 18432, 174, }, /* 502 */ + { 19, 12, 3, 0, 0, 26624, 106, }, /* 503 */ + { 19, 12, 3, 0, 0, 26624, 176, }, /* 504 */ + { 19, 10, 5, 0, 0, 18432, 154, }, /* 505 */ + { 19, 12, 3, 0, 0, 26624, 132, }, /* 506 */ + { 19, 12, 3, 0, 0, 26624, 158, }, /* 507 */ + { 100, 26, 12, 0, 0, 18432, 74, }, /* 508 */ + { 20, 7, 12, 0, 0, 18432, 156, }, /* 509 */ + { 20, 10, 12, 0, 0, 18432, 154, }, /* 510 */ + { 20, 12, 3, 0, 0, 26624, 106, }, /* 511 */ + { 20, 10, 5, 0, 0, 18432, 154, }, /* 512 */ + { 20, 12, 3, 0, 0, 26624, 98, }, /* 513 */ + { 20, 12, 3, 0, 0, 26624, 158, }, /* 514 */ + { 20, 13, 12, 0, 0, 18652, 144, }, /* 515 */ + { 20, 21, 12, 0, 0, 18432, 128, }, /* 516 */ + { 20, 21, 12, 0, 0, 18432, 74, }, /* 517 */ + { 20, 10, 12, 0, 0, 18432, 178, }, /* 518 */ + { 20, 12, 3, 0, 0, 26624, 132, }, /* 519 */ + { 20, 13, 12, 0, 0, 18432, 144, }, /* 520 */ + { 20, 26, 12, 0, 0, 18432, 74, }, /* 521 */ + { 21, 9, 12, 0, 7264, 18432, 76, }, /* 522 */ + { 21, 5, 12, 0, 3008, 18432, 180, }, /* 523 */ + { 100, 21, 12, 0, 0, 18656, 74, }, /* 524 */ + { 21, 6, 12, 0, 0, 18432, 182, }, /* 525 */ + { 22, 7, 6, 0, 0, 18432, 84, }, /* 526 */ + { 22, 7, 6, 0, 0, 18432, 184, }, /* 527 */ + { 22, 7, 7, 0, 0, 18432, 184, }, /* 528 */ + { 22, 7, 7, 0, 0, 18432, 84, }, /* 529 */ + { 22, 7, 8, 0, 0, 18432, 84, }, /* 530 */ + { 23, 7, 12, 0, 0, 18432, 84, }, /* 531 */ + { 23, 12, 3, 0, 0, 26624, 98, }, /* 532 */ + { 23, 21, 12, 0, 0, 18432, 74, }, /* 533 */ + { 23, 21, 12, 0, 0, 18432, 110, }, /* 534 */ + { 23, 21, 12, 0, 0, 18432, 128, }, /* 535 */ + { 23, 15, 12, 0, 0, 18432, 144, }, /* 536 */ + { 23, 15, 12, 0, 0, 18432, 74, }, /* 537 */ + { 23, 26, 12, 0, 0, 28672, 74, }, /* 538 */ + { 24, 9, 12, 0, 38864, 18432, 186, }, /* 539 */ + { 24, 9, 12, 0, 8, 18432, 186, }, /* 540 */ + { 24, 5, 12, 0, -8, 18432, 70, }, /* 541 */ + { 102, 17, 12, 0, 0, 28672, 130, }, /* 542 */ + { 102, 7, 12, 0, 0, 18432, 84, }, /* 543 */ + { 102, 26, 12, 0, 0, 18432, 74, }, /* 544 */ + { 102, 21, 12, 0, 0, 18432, 128, }, /* 545 */ + { 103, 29, 12, 0, 0, 45056, 52, }, /* 546 */ + { 103, 7, 12, 0, 0, 18432, 84, }, /* 547 */ + { 103, 22, 12, 0, 0, 28672, 172, }, /* 548 */ + { 103, 18, 12, 0, 0, 28672, 172, }, /* 549 */ + { 25, 7, 12, 0, 0, 18432, 84, }, /* 550 */ + { 100, 21, 12, 0, 0, 18660, 110, }, /* 551 */ + { 25, 14, 12, 0, 0, 18432, 84, }, /* 552 */ + { 33, 7, 12, 0, 0, 18432, 84, }, /* 553 */ + { 33, 12, 3, 0, 0, 26624, 106, }, /* 554 */ + { 33, 12, 3, 0, 0, 26624, 158, }, /* 555 */ + { 33, 10, 3, 0, 0, 18432, 188, }, /* 556 */ + { 34, 7, 12, 0, 0, 18432, 84, }, /* 557 */ + { 34, 12, 3, 0, 0, 26624, 106, }, /* 558 */ + { 34, 10, 3, 0, 0, 18432, 188, }, /* 559 */ + { 100, 21, 12, 0, 0, 18664, 128, }, /* 560 */ + { 35, 7, 12, 0, 0, 18432, 84, }, /* 561 */ + { 35, 12, 3, 0, 0, 26624, 106, }, /* 562 */ + { 36, 7, 12, 0, 0, 18432, 84, }, /* 563 */ + { 36, 12, 3, 0, 0, 26624, 106, }, /* 564 */ + { 104, 7, 12, 0, 0, 18432, 156, }, /* 565 */ + { 104, 7, 12, 0, 0, 18432, 190, }, /* 566 */ + { 104, 12, 3, 0, 0, 26624, 102, }, /* 567 */ + { 104, 10, 5, 0, 0, 18432, 154, }, /* 568 */ + { 104, 12, 3, 0, 0, 26624, 106, }, /* 569 */ + { 104, 12, 3, 0, 0, 26624, 98, }, /* 570 */ + { 104, 12, 3, 0, 0, 26624, 158, }, /* 571 */ + { 104, 21, 12, 0, 0, 18432, 128, }, /* 572 */ + { 104, 21, 12, 0, 0, 18432, 110, }, /* 573 */ + { 104, 6, 12, 0, 0, 18432, 148, }, /* 574 */ + { 104, 21, 12, 0, 0, 18432, 74, }, /* 575 */ + { 104, 23, 12, 0, 0, 14336, 74, }, /* 576 */ + { 104, 7, 12, 0, 0, 18432, 84, }, /* 577 */ + { 104, 13, 12, 0, 0, 18432, 144, }, /* 578 */ + { 104, 15, 12, 0, 0, 28672, 74, }, /* 579 */ + { 26, 21, 12, 0, 0, 28672, 74, }, /* 580 */ + { 100, 21, 12, 0, 0, 28908, 110, }, /* 581 */ + { 100, 21, 12, 0, 0, 28908, 128, }, /* 582 */ + { 26, 21, 12, 0, 0, 28672, 110, }, /* 583 */ + { 26, 17, 12, 0, 0, 28672, 130, }, /* 584 */ + { 26, 21, 12, 0, 0, 28672, 128, }, /* 585 */ + { 26, 21, 12, 0, 0, 28672, 192, }, /* 586 */ + { 26, 12, 3, 0, 0, 26624, 194, }, /* 587 */ + { 26, 1, 2, 0, 0, 6144, 66, }, /* 588 */ + { 26, 13, 12, 0, 0, 18432, 144, }, /* 589 */ + { 26, 7, 12, 0, 0, 18432, 84, }, /* 590 */ + { 26, 6, 12, 0, 0, 18432, 138, }, /* 591 */ + { 26, 12, 3, 0, 0, 26624, 196, }, /* 592 */ + { 26, 12, 3, 0, 0, 26624, 106, }, /* 593 */ + { 37, 7, 12, 0, 0, 18432, 84, }, /* 594 */ + { 37, 12, 3, 0, 0, 26624, 106, }, /* 595 */ + { 37, 10, 5, 0, 0, 18432, 154, }, /* 596 */ + { 37, 12, 3, 0, 0, 26624, 98, }, /* 597 */ + { 37, 26, 12, 0, 0, 28672, 74, }, /* 598 */ + { 37, 21, 12, 0, 0, 28672, 128, }, /* 599 */ + { 37, 13, 12, 0, 0, 18432, 144, }, /* 600 */ + { 38, 7, 12, 0, 0, 18432, 84, }, /* 601 */ + { 111, 7, 12, 0, 0, 18432, 84, }, /* 602 */ + { 111, 7, 12, 0, 0, 18432, 170, }, /* 603 */ + { 111, 13, 12, 0, 0, 18432, 144, }, /* 604 */ + { 111, 15, 12, 0, 0, 18432, 144, }, /* 605 */ + { 111, 26, 12, 0, 0, 28672, 74, }, /* 606 */ + { 104, 26, 12, 0, 0, 28672, 74, }, /* 607 */ + { 42, 7, 12, 0, 0, 18432, 84, }, /* 608 */ + { 42, 12, 3, 0, 0, 26624, 106, }, /* 609 */ + { 42, 10, 5, 0, 0, 18432, 154, }, /* 610 */ + { 42, 21, 12, 0, 0, 18432, 74, }, /* 611 */ + { 124, 7, 12, 0, 0, 18432, 156, }, /* 612 */ + { 124, 10, 5, 0, 0, 18432, 154, }, /* 613 */ + { 124, 12, 3, 0, 0, 26624, 106, }, /* 614 */ + { 124, 12, 3, 0, 0, 26624, 158, }, /* 615 */ + { 124, 10, 12, 0, 0, 18432, 154, }, /* 616 */ + { 124, 12, 3, 0, 0, 26624, 98, }, /* 617 */ + { 124, 13, 12, 0, 0, 18432, 144, }, /* 618 */ + { 124, 21, 12, 0, 0, 18432, 74, }, /* 619 */ + { 124, 6, 12, 0, 0, 18432, 138, }, /* 620 */ + { 124, 21, 12, 0, 0, 18432, 128, }, /* 621 */ + { 107, 11, 3, 0, 0, 26624, 198, }, /* 622 */ + { 107, 12, 3, 0, 0, 26624, 106, }, /* 623 */ + { 114, 12, 3, 0, 0, 26624, 106, }, /* 624 */ + { 114, 10, 5, 0, 0, 18432, 154, }, /* 625 */ + { 114, 7, 12, 0, 0, 18432, 84, }, /* 626 */ + { 114, 7, 12, 0, 0, 18432, 156, }, /* 627 */ + { 114, 12, 3, 0, 0, 26624, 98, }, /* 628 */ + { 114, 10, 3, 0, 0, 18432, 160, }, /* 629 */ + { 114, 10, 3, 0, 0, 18432, 188, }, /* 630 */ + { 114, 21, 12, 0, 0, 18432, 128, }, /* 631 */ + { 114, 13, 12, 0, 0, 18432, 144, }, /* 632 */ + { 114, 21, 12, 0, 0, 18432, 74, }, /* 633 */ + { 114, 21, 12, 0, 0, 18432, 110, }, /* 634 */ + { 114, 26, 12, 0, 0, 18432, 74, }, /* 635 */ + { 117, 12, 3, 0, 0, 26624, 106, }, /* 636 */ + { 117, 10, 5, 0, 0, 18432, 154, }, /* 637 */ + { 117, 7, 12, 0, 0, 18432, 156, }, /* 638 */ + { 117, 10, 3, 0, 0, 18432, 188, }, /* 639 */ + { 117, 12, 3, 0, 0, 26624, 158, }, /* 640 */ + { 117, 13, 12, 0, 0, 18432, 144, }, /* 641 */ + { 117, 7, 12, 0, 0, 18432, 84, }, /* 642 */ + { 133, 7, 12, 0, 0, 18432, 84, }, /* 643 */ + { 133, 12, 3, 0, 0, 26624, 98, }, /* 644 */ + { 133, 10, 5, 0, 0, 18432, 154, }, /* 645 */ + { 133, 12, 3, 0, 0, 26624, 106, }, /* 646 */ + { 133, 10, 3, 0, 0, 18432, 188, }, /* 647 */ + { 133, 21, 12, 0, 0, 18432, 74, }, /* 648 */ + { 118, 7, 12, 0, 0, 18432, 84, }, /* 649 */ + { 118, 10, 5, 0, 0, 18432, 154, }, /* 650 */ + { 118, 12, 3, 0, 0, 26624, 106, }, /* 651 */ + { 118, 12, 3, 0, 0, 26624, 200, }, /* 652 */ + { 118, 12, 3, 0, 0, 26624, 98, }, /* 653 */ + { 118, 21, 12, 0, 0, 18432, 128, }, /* 654 */ + { 118, 21, 12, 0, 0, 18432, 110, }, /* 655 */ { 118, 13, 12, 0, 0, 18432, 144, }, /* 656 */ - { 118, 7, 12, 0, 0, 18432, 84, }, /* 657 */ - { 118, 6, 12, 0, 0, 18432, 94, }, /* 658 */ - { 118, 6, 12, 0, 0, 18432, 96, }, /* 659 */ - { 118, 21, 12, 0, 0, 18432, 128, }, /* 660 */ - { 2, 5, 12, 63, -6222, 18432, 70, }, /* 661 */ - { 2, 5, 12, 67, -6221, 18432, 70, }, /* 662 */ - { 2, 5, 12, 71, -6212, 18432, 70, }, /* 663 */ - { 2, 5, 12, 75, -6210, 18432, 70, }, /* 664 */ - { 2, 5, 12, 79, -6210, 18432, 70, }, /* 665 */ - { 2, 5, 12, 79, -6211, 18432, 70, }, /* 666 */ - { 2, 5, 12, 84, -6204, 18432, 70, }, /* 667 */ - { 2, 5, 12, 88, -6180, 18432, 70, }, /* 668 */ - { 2, 5, 12, 108, 35267, 18432, 70, }, /* 669 */ - { 21, 9, 12, 0, -3008, 18432, 76, }, /* 670 */ - { 116, 21, 12, 0, 0, 18432, 74, }, /* 671 */ - { 106, 12, 3, 0, 0, 26864, 98, }, /* 672 */ - { 106, 12, 3, 0, 0, 26868, 98, }, /* 673 */ - { 99, 21, 12, 0, 0, 18680, 200, }, /* 674 */ - { 106, 12, 3, 0, 0, 26876, 98, }, /* 675 */ - { 106, 12, 3, 0, 0, 26880, 98, }, /* 676 */ - { 106, 12, 3, 0, 0, 26884, 98, }, /* 677 */ - { 99, 10, 5, 0, 0, 18684, 174, }, /* 678 */ - { 99, 7, 12, 0, 0, 18696, 84, }, /* 679 */ - { 99, 7, 12, 0, 0, 18684, 84, }, /* 680 */ - { 99, 7, 12, 0, 0, 18676, 84, }, /* 681 */ - { 99, 7, 12, 0, 0, 18700, 84, }, /* 682 */ - { 99, 7, 12, 0, 0, 18704, 84, }, /* 683 */ - { 106, 12, 3, 0, 0, 26900, 98, }, /* 684 */ - { 99, 10, 5, 0, 0, 18712, 174, }, /* 685 */ - { 106, 12, 3, 0, 0, 26896, 98, }, /* 686 */ - { 99, 7, 12, 0, 0, 18716, 84, }, /* 687 */ - { 2, 5, 12, 0, 0, 18432, 60, }, /* 688 */ - { 1, 6, 12, 0, 0, 18432, 90, }, /* 689 */ - { 2, 6, 12, 0, 0, 18432, 182, }, /* 690 */ - { 0, 5, 12, 0, 35332, 18432, 78, }, /* 691 */ - { 0, 5, 12, 0, 3814, 18432, 78, }, /* 692 */ - { 0, 5, 12, 0, 35384, 18432, 78, }, /* 693 */ - { 0, 5, 12, 0, 0, 18432, 202, }, /* 694 */ - { 0, 6, 12, 0, 0, 18432, 182, }, /* 695 */ - { 0, 6, 12, 0, 0, 18432, 204, }, /* 696 */ - { 1, 6, 12, 0, 0, 18432, 182, }, /* 697 */ - { 106, 12, 3, 0, 0, 26740, 104, }, /* 698 */ - { 106, 12, 3, 0, 0, 26912, 98, }, /* 699 */ - { 106, 12, 3, 0, 0, 26916, 98, }, /* 700 */ - { 0, 9, 12, 92, 1, 18432, 76, }, /* 701 */ - { 0, 5, 12, 92, -1, 18432, 78, }, /* 702 */ - { 0, 5, 12, 0, 0, 18432, 70, }, /* 703 */ - { 0, 5, 12, 92, -58, 18432, 70, }, /* 704 */ - { 0, 9, 12, 0, -7615, 18432, 76, }, /* 705 */ - { 1, 5, 12, 0, 8, 18432, 78, }, /* 706 */ - { 1, 9, 12, 0, -8, 18432, 76, }, /* 707 */ - { 1, 5, 12, 0, 0, 18432, 78, }, /* 708 */ - { 1, 5, 12, 0, 74, 18432, 78, }, /* 709 */ - { 1, 5, 12, 0, 86, 18432, 78, }, /* 710 */ - { 1, 5, 12, 0, 100, 18432, 78, }, /* 711 */ - { 1, 5, 12, 0, 128, 18432, 78, }, /* 712 */ - { 1, 5, 12, 0, 112, 18432, 78, }, /* 713 */ - { 1, 5, 12, 0, 126, 18432, 78, }, /* 714 */ - { 1, 5, 12, 0, 8, 18432, 70, }, /* 715 */ - { 1, 8, 12, 0, -8, 18432, 88, }, /* 716 */ - { 1, 5, 12, 0, 0, 18432, 70, }, /* 717 */ - { 1, 5, 12, 0, 9, 18432, 70, }, /* 718 */ - { 1, 9, 12, 0, -74, 18432, 76, }, /* 719 */ - { 1, 8, 12, 0, -9, 18432, 88, }, /* 720 */ - { 1, 5, 12, 21, -7173, 18432, 78, }, /* 721 */ - { 1, 9, 12, 0, -86, 18432, 76, }, /* 722 */ - { 1, 5, 12, 0, -7235, 18432, 78, }, /* 723 */ - { 1, 9, 12, 0, -100, 18432, 76, }, /* 724 */ - { 1, 5, 12, 0, -7219, 18432, 78, }, /* 725 */ - { 1, 9, 12, 0, -112, 18432, 76, }, /* 726 */ - { 1, 9, 12, 0, -128, 18432, 76, }, /* 727 */ - { 1, 9, 12, 0, -126, 18432, 76, }, /* 728 */ - { 99, 29, 12, 0, 0, 45056, 52, }, /* 729 */ - { 106, 1, 3, 0, 0, 6144, 206, }, /* 730 */ - { 106, 1, 13, 0, 0, 6144, 208, }, /* 731 */ - { 99, 1, 2, 0, 0, 18432, 210, }, /* 732 */ - { 99, 1, 2, 0, 0, 34816, 210, }, /* 733 */ - { 99, 17, 12, 0, 0, 28672, 212, }, /* 734 */ - { 99, 21, 12, 0, 0, 28672, 64, }, /* 735 */ - { 99, 20, 12, 0, 0, 28672, 214, }, /* 736 */ - { 99, 19, 12, 0, 0, 28672, 214, }, /* 737 */ - { 99, 22, 12, 0, 0, 28672, 216, }, /* 738 */ - { 99, 20, 12, 0, 0, 28672, 216, }, /* 739 */ - { 99, 19, 12, 0, 0, 28672, 216, }, /* 740 */ - { 99, 21, 12, 0, 0, 28672, 218, }, /* 741 */ - { 99, 21, 12, 0, 0, 28672, 220, }, /* 742 */ - { 99, 27, 2, 0, 0, 45056, 50, }, /* 743 */ - { 99, 28, 2, 0, 0, 4096, 50, }, /* 744 */ - { 99, 1, 2, 0, 0, 20480, 136, }, /* 745 */ - { 99, 1, 2, 0, 0, 36864, 136, }, /* 746 */ - { 99, 1, 2, 0, 0, 30720, 136, }, /* 747 */ - { 99, 1, 2, 0, 0, 24576, 136, }, /* 748 */ - { 99, 1, 2, 0, 0, 40960, 136, }, /* 749 */ - { 99, 29, 12, 0, 0, 8488, 52, }, /* 750 */ - { 99, 21, 12, 0, 0, 14336, 54, }, /* 751 */ - { 99, 21, 12, 0, 0, 14336, 64, }, /* 752 */ - { 99, 21, 14, 0, 0, 28672, 222, }, /* 753 */ - { 99, 21, 12, 0, 0, 28672, 224, }, /* 754 */ - { 99, 16, 12, 0, 0, 28672, 144, }, /* 755 */ - { 99, 16, 12, 0, 0, 28672, 226, }, /* 756 */ - { 99, 25, 12, 0, 0, 8192, 64, }, /* 757 */ - { 99, 22, 12, 0, 0, 28672, 228, }, /* 758 */ - { 99, 18, 12, 0, 0, 28672, 228, }, /* 759 */ - { 99, 21, 12, 0, 0, 28972, 54, }, /* 760 */ - { 99, 21, 12, 0, 0, 28672, 212, }, /* 761 */ - { 99, 21, 12, 0, 0, 28976, 54, }, /* 762 */ - { 99, 21, 12, 0, 0, 28980, 54, }, /* 763 */ - { 99, 1, 2, 0, 0, 6144, 230, }, /* 764 */ - { 98, 2, 2, 0, 0, 6144, 232, }, /* 765 */ - { 99, 1, 2, 0, 0, 22528, 136, }, /* 766 */ - { 99, 1, 2, 0, 0, 38912, 136, }, /* 767 */ - { 99, 1, 2, 0, 0, 16384, 136, }, /* 768 */ - { 99, 1, 2, 0, 0, 32768, 136, }, /* 769 */ - { 99, 1, 2, 0, 0, 6144, 234, }, /* 770 */ - { 99, 25, 12, 0, 0, 12288, 236, }, /* 771 */ - { 99, 25, 12, 0, 0, 12288, 238, }, /* 772 */ - { 99, 25, 12, 0, 0, 28672, 236, }, /* 773 */ - { 99, 22, 12, 0, 0, 28672, 240, }, /* 774 */ - { 99, 18, 12, 0, 0, 28672, 240, }, /* 775 */ - { 98, 2, 12, 0, 0, 14336, 0, }, /* 776 */ - { 106, 12, 3, 0, 0, 26624, 242, }, /* 777 */ - { 106, 11, 3, 0, 0, 26624, 124, }, /* 778 */ - { 106, 11, 3, 0, 0, 26624, 244, }, /* 779 */ - { 106, 12, 3, 0, 0, 26936, 104, }, /* 780 */ - { 99, 26, 12, 0, 0, 28672, 74, }, /* 781 */ - { 99, 9, 12, 0, 0, 18432, 116, }, /* 782 */ - { 99, 5, 12, 0, 0, 18432, 246, }, /* 783 */ - { 99, 25, 12, 0, 0, 28672, 248, }, /* 784 */ - { 99, 26, 14, 0, 0, 28672, 250, }, /* 785 */ - { 1, 9, 12, 96, -7517, 18432, 76, }, /* 786 */ - { 99, 26, 12, 0, 0, 28672, 122, }, /* 787 */ - { 0, 9, 12, 100, 0, 18432, 76, }, /* 788 */ - { 0, 9, 12, 104, -8262, 18432, 76, }, /* 789 */ - { 99, 26, 12, 0, 0, 14336, 252, }, /* 790 */ - { 0, 9, 12, 0, 28, 18432, 76, }, /* 791 */ - { 99, 7, 12, 0, 0, 18432, 254, }, /* 792 */ - { 99, 5, 14, 0, 0, 18432, 256, }, /* 793 */ - { 99, 25, 12, 0, 0, 28672, 122, }, /* 794 */ - { 99, 5, 12, 0, 0, 18432, 258, }, /* 795 */ - { 0, 5, 12, 0, -28, 18432, 78, }, /* 796 */ - { 0, 14, 12, 0, 16, 18432, 76, }, /* 797 */ - { 0, 14, 12, 0, -16, 18432, 78, }, /* 798 */ - { 0, 14, 12, 0, 0, 18432, 84, }, /* 799 */ - { 99, 25, 14, 0, 0, 28672, 260, }, /* 800 */ - { 99, 26, 14, 0, 0, 28672, 260, }, /* 801 */ - { 99, 26, 12, 0, 0, 28672, 64, }, /* 802 */ - { 99, 25, 12, 0, 0, 28672, 262, }, /* 803 */ - { 99, 25, 12, 0, 0, 28672, 264, }, /* 804 */ - { 99, 25, 12, 0, 0, 12288, 266, }, /* 805 */ - { 99, 22, 12, 0, 0, 28672, 264, }, /* 806 */ - { 99, 18, 12, 0, 0, 28672, 264, }, /* 807 */ - { 99, 26, 14, 0, 0, 28672, 268, }, /* 808 */ - { 99, 22, 12, 0, 0, 28672, 270, }, /* 809 */ - { 99, 18, 12, 0, 0, 28672, 270, }, /* 810 */ - { 99, 26, 12, 0, 0, 18432, 54, }, /* 811 */ - { 99, 26, 14, 0, 0, 28672, 272, }, /* 812 */ - { 98, 2, 12, 0, 0, 18432, 274, }, /* 813 */ - { 99, 15, 12, 0, 0, 10240, 74, }, /* 814 */ - { 99, 26, 12, 0, 26, 18432, 276, }, /* 815 */ - { 99, 26, 14, 0, 26, 18432, 278, }, /* 816 */ - { 99, 26, 12, 0, -26, 18432, 280, }, /* 817 */ - { 99, 25, 14, 0, 0, 28672, 282, }, /* 818 */ - { 99, 26, 14, 0, 0, 28672, 284, }, /* 819 */ - { 99, 26, 14, 0, 0, 28672, 286, }, /* 820 */ - { 99, 25, 14, 0, 0, 28672, 284, }, /* 821 */ - { 99, 26, 14, 0, 0, 18432, 272, }, /* 822 */ - { 99, 26, 14, 0, 0, 28672, 288, }, /* 823 */ - { 109, 26, 12, 0, 0, 18432, 54, }, /* 824 */ - { 99, 26, 12, 0, 0, 28672, 228, }, /* 825 */ - { 44, 9, 12, 0, 48, 18432, 76, }, /* 826 */ - { 44, 5, 12, 0, -48, 18432, 78, }, /* 827 */ - { 0, 9, 12, 0, -10743, 18432, 76, }, /* 828 */ - { 0, 9, 12, 0, -3814, 18432, 76, }, /* 829 */ - { 0, 9, 12, 0, -10727, 18432, 76, }, /* 830 */ - { 0, 5, 12, 0, -10795, 18432, 78, }, /* 831 */ - { 0, 5, 12, 0, -10792, 18432, 78, }, /* 832 */ - { 0, 9, 12, 0, -10780, 18432, 76, }, /* 833 */ - { 0, 9, 12, 0, -10749, 18432, 76, }, /* 834 */ - { 0, 9, 12, 0, -10783, 18432, 76, }, /* 835 */ - { 0, 9, 12, 0, -10782, 18432, 76, }, /* 836 */ - { 0, 9, 12, 0, -10815, 18432, 76, }, /* 837 */ - { 43, 5, 12, 0, 0, 18432, 60, }, /* 838 */ - { 43, 26, 12, 0, 0, 28672, 74, }, /* 839 */ - { 43, 12, 3, 0, 0, 26624, 98, }, /* 840 */ - { 43, 21, 12, 0, 0, 28672, 128, }, /* 841 */ - { 43, 21, 12, 0, 0, 28672, 74, }, /* 842 */ - { 43, 15, 12, 0, 0, 28672, 74, }, /* 843 */ - { 21, 5, 12, 0, -7264, 18432, 78, }, /* 844 */ - { 45, 7, 12, 0, 0, 18432, 84, }, /* 845 */ - { 45, 6, 12, 0, 0, 18432, 148, }, /* 846 */ - { 45, 21, 12, 0, 0, 18432, 74, }, /* 847 */ - { 45, 12, 3, 0, 0, 26624, 290, }, /* 848 */ - { 2, 12, 3, 0, 0, 26624, 106, }, /* 849 */ - { 99, 20, 12, 0, 0, 28672, 228, }, /* 850 */ - { 99, 19, 12, 0, 0, 28672, 228, }, /* 851 */ - { 99, 17, 12, 0, 0, 28988, 212, }, /* 852 */ - { 99, 6, 12, 0, 0, 28672, 292, }, /* 853 */ - { 99, 21, 12, 0, 0, 28992, 54, }, /* 854 */ - { 99, 21, 12, 0, 0, 28996, 54, }, /* 855 */ - { 99, 21, 12, 0, 0, 29000, 224, }, /* 856 */ - { 99, 21, 12, 0, 0, 29004, 294, }, /* 857 */ - { 99, 21, 12, 0, 0, 28812, 54, }, /* 858 */ - { 99, 21, 12, 0, 0, 28672, 294, }, /* 859 */ - { 30, 26, 12, 0, 0, 28672, 296, }, /* 860 */ - { 99, 26, 12, 0, 0, 29008, 298, }, /* 861 */ - { 99, 26, 12, 0, 0, 29008, 300, }, /* 862 */ - { 99, 26, 12, 0, 0, 29008, 302, }, /* 863 */ - { 99, 21, 12, 0, 0, 29012, 294, }, /* 864 */ - { 99, 21, 12, 0, 0, 29016, 224, }, /* 865 */ - { 99, 21, 12, 0, 0, 29020, 54, }, /* 866 */ - { 30, 6, 12, 0, 0, 18432, 138, }, /* 867 */ - { 99, 7, 12, 0, 0, 18784, 304, }, /* 868 */ - { 30, 14, 12, 0, 0, 18432, 304, }, /* 869 */ - { 99, 22, 12, 0, 0, 29028, 228, }, /* 870 */ - { 99, 18, 12, 0, 0, 29028, 228, }, /* 871 */ - { 99, 22, 12, 0, 0, 29032, 228, }, /* 872 */ - { 99, 18, 12, 0, 0, 29032, 228, }, /* 873 */ - { 99, 22, 12, 0, 0, 29036, 62, }, /* 874 */ - { 99, 18, 12, 0, 0, 29036, 62, }, /* 875 */ - { 99, 22, 12, 0, 0, 29036, 228, }, /* 876 */ - { 99, 18, 12, 0, 0, 29036, 228, }, /* 877 */ - { 99, 26, 12, 0, 0, 29020, 54, }, /* 878 */ - { 99, 17, 12, 0, 0, 29020, 212, }, /* 879 */ - { 99, 22, 12, 0, 0, 29020, 216, }, /* 880 */ - { 99, 18, 12, 0, 0, 29020, 216, }, /* 881 */ - { 106, 12, 3, 0, 0, 26992, 98, }, /* 882 */ - { 22, 10, 3, 0, 0, 18432, 306, }, /* 883 */ - { 99, 17, 14, 0, 0, 29020, 308, }, /* 884 */ - { 99, 6, 12, 0, 0, 18804, 138, }, /* 885 */ - { 99, 26, 12, 0, 0, 29020, 74, }, /* 886 */ - { 30, 6, 12, 0, 0, 18432, 148, }, /* 887 */ - { 99, 7, 12, 0, 0, 18808, 84, }, /* 888 */ - { 99, 21, 14, 0, 0, 29048, 250, }, /* 889 */ - { 99, 26, 12, 0, 0, 29024, 74, }, /* 890 */ - { 27, 7, 12, 0, 0, 18432, 84, }, /* 891 */ - { 106, 12, 3, 0, 0, 26996, 98, }, /* 892 */ - { 99, 24, 12, 0, 0, 29044, 310, }, /* 893 */ - { 27, 6, 12, 0, 0, 18432, 138, }, /* 894 */ - { 99, 17, 12, 0, 0, 29044, 130, }, /* 895 */ - { 28, 7, 12, 0, 0, 18432, 84, }, /* 896 */ - { 99, 21, 12, 0, 0, 29036, 144, }, /* 897 */ - { 99, 6, 12, 0, 0, 18804, 96, }, /* 898 */ - { 28, 6, 12, 0, 0, 18432, 138, }, /* 899 */ - { 29, 7, 12, 0, 0, 18432, 84, }, /* 900 */ - { 22, 7, 12, 0, 0, 18432, 84, }, /* 901 */ - { 22, 7, 12, 0, 0, 18432, 184, }, /* 902 */ - { 99, 26, 12, 0, 0, 18784, 74, }, /* 903 */ - { 99, 15, 12, 0, 0, 18784, 74, }, /* 904 */ - { 22, 26, 12, 0, 0, 18432, 74, }, /* 905 */ - { 22, 26, 12, 0, 0, 28672, 74, }, /* 906 */ - { 99, 15, 12, 0, 0, 18432, 74, }, /* 907 */ - { 99, 26, 14, 0, 0, 18784, 250, }, /* 908 */ - { 28, 26, 12, 0, 0, 18432, 74, }, /* 909 */ - { 30, 7, 12, 0, 0, 18432, 312, }, /* 910 */ - { 31, 7, 12, 0, 0, 18432, 84, }, /* 911 */ - { 31, 6, 12, 0, 0, 18432, 138, }, /* 912 */ - { 31, 26, 12, 0, 0, 28672, 74, }, /* 913 */ - { 55, 7, 12, 0, 0, 18432, 84, }, /* 914 */ - { 55, 6, 12, 0, 0, 18432, 148, }, /* 915 */ - { 55, 21, 12, 0, 0, 18432, 110, }, /* 916 */ - { 55, 21, 12, 0, 0, 18432, 128, }, /* 917 */ - { 119, 7, 12, 0, 0, 18432, 84, }, /* 918 */ - { 119, 6, 12, 0, 0, 18432, 138, }, /* 919 */ - { 119, 21, 12, 0, 0, 28672, 110, }, /* 920 */ - { 119, 21, 12, 0, 0, 28672, 128, }, /* 921 */ - { 119, 13, 12, 0, 0, 18432, 144, }, /* 922 */ - { 2, 9, 12, 108, 1, 18432, 76, }, /* 923 */ - { 2, 5, 12, 108, -35267, 18432, 78, }, /* 924 */ - { 2, 7, 12, 0, 0, 18432, 84, }, /* 925 */ - { 2, 21, 12, 0, 0, 28672, 74, }, /* 926 */ - { 2, 12, 3, 0, 0, 26624, 98, }, /* 927 */ - { 2, 6, 12, 0, 0, 28672, 94, }, /* 928 */ - { 2, 6, 12, 0, 0, 18432, 90, }, /* 929 */ - { 126, 7, 12, 0, 0, 18432, 84, }, /* 930 */ - { 126, 14, 12, 0, 0, 18432, 84, }, /* 931 */ - { 126, 12, 3, 0, 0, 26624, 98, }, /* 932 */ - { 126, 21, 12, 0, 0, 18432, 74, }, /* 933 */ - { 126, 21, 12, 0, 0, 18432, 128, }, /* 934 */ - { 126, 21, 12, 0, 0, 18432, 110, }, /* 935 */ - { 99, 24, 12, 0, 0, 29052, 56, }, /* 936 */ - { 0, 9, 12, 0, -35332, 18432, 76, }, /* 937 */ - { 99, 24, 12, 0, 0, 18432, 56, }, /* 938 */ - { 0, 9, 12, 0, -42280, 18432, 76, }, /* 939 */ - { 0, 5, 12, 0, 48, 18432, 78, }, /* 940 */ - { 0, 9, 12, 0, -42308, 18432, 76, }, /* 941 */ - { 0, 9, 12, 0, -42319, 18432, 76, }, /* 942 */ - { 0, 9, 12, 0, -42315, 18432, 76, }, /* 943 */ - { 0, 9, 12, 0, -42305, 18432, 76, }, /* 944 */ - { 0, 9, 12, 0, -42258, 18432, 76, }, /* 945 */ - { 0, 9, 12, 0, -42282, 18432, 76, }, /* 946 */ - { 0, 9, 12, 0, -42261, 18432, 76, }, /* 947 */ - { 0, 9, 12, 0, 928, 18432, 76, }, /* 948 */ - { 0, 9, 12, 0, -48, 18432, 76, }, /* 949 */ - { 0, 9, 12, 0, -42307, 18432, 76, }, /* 950 */ - { 0, 9, 12, 0, -35384, 18432, 76, }, /* 951 */ - { 0, 9, 12, 0, -42343, 18432, 76, }, /* 952 */ - { 0, 9, 12, 0, -42561, 18432, 76, }, /* 953 */ - { 46, 7, 12, 0, 0, 18432, 84, }, /* 954 */ - { 46, 12, 3, 0, 0, 26624, 106, }, /* 955 */ - { 46, 12, 3, 0, 0, 26624, 158, }, /* 956 */ - { 46, 10, 5, 0, 0, 18432, 154, }, /* 957 */ - { 46, 26, 12, 0, 0, 28672, 74, }, /* 958 */ - { 99, 15, 12, 0, 0, 18816, 74, }, /* 959 */ - { 99, 15, 12, 0, 0, 18820, 74, }, /* 960 */ - { 99, 26, 12, 0, 0, 18824, 74, }, /* 961 */ - { 99, 23, 12, 0, 0, 14732, 74, }, /* 962 */ - { 99, 26, 12, 0, 0, 14728, 74, }, /* 963 */ - { 47, 7, 12, 0, 0, 18432, 84, }, /* 964 */ - { 47, 21, 12, 0, 0, 28672, 74, }, /* 965 */ - { 47, 21, 12, 0, 0, 28672, 128, }, /* 966 */ - { 120, 10, 5, 0, 0, 18432, 154, }, /* 967 */ - { 120, 7, 12, 0, 0, 18432, 84, }, /* 968 */ - { 120, 12, 3, 0, 0, 26624, 158, }, /* 969 */ - { 120, 12, 3, 0, 0, 26624, 106, }, /* 970 */ - { 120, 21, 12, 0, 0, 18432, 128, }, /* 971 */ - { 120, 13, 12, 0, 0, 18432, 144, }, /* 972 */ - { 8, 12, 3, 0, 0, 27024, 98, }, /* 973 */ - { 8, 7, 12, 0, 0, 18836, 84, }, /* 974 */ - { 49, 13, 12, 0, 0, 18432, 144, }, /* 975 */ - { 49, 7, 12, 0, 0, 18432, 84, }, /* 976 */ - { 49, 12, 3, 0, 0, 26624, 106, }, /* 977 */ - { 49, 12, 3, 0, 0, 26624, 98, }, /* 978 */ - { 99, 21, 12, 0, 0, 18840, 200, }, /* 979 */ - { 49, 21, 12, 0, 0, 18432, 128, }, /* 980 */ - { 121, 7, 12, 0, 0, 18432, 84, }, /* 981 */ - { 121, 12, 3, 0, 0, 26624, 106, }, /* 982 */ - { 121, 10, 5, 0, 0, 18432, 154, }, /* 983 */ - { 121, 10, 3, 0, 0, 18432, 188, }, /* 984 */ - { 121, 21, 12, 0, 0, 18432, 74, }, /* 985 */ - { 56, 12, 3, 0, 0, 26624, 106, }, /* 986 */ - { 56, 10, 5, 0, 0, 18432, 154, }, /* 987 */ - { 56, 7, 12, 0, 0, 18432, 84, }, /* 988 */ - { 56, 12, 3, 0, 0, 26624, 98, }, /* 989 */ - { 56, 10, 3, 0, 0, 18432, 188, }, /* 990 */ - { 56, 21, 12, 0, 0, 18432, 74, }, /* 991 */ - { 56, 21, 12, 0, 0, 18432, 110, }, /* 992 */ - { 56, 21, 12, 0, 0, 18432, 128, }, /* 993 */ - { 99, 6, 12, 0, 0, 18844, 138, }, /* 994 */ - { 56, 13, 12, 0, 0, 18432, 144, }, /* 995 */ - { 20, 6, 12, 0, 0, 18432, 138, }, /* 996 */ - { 122, 7, 12, 0, 0, 18432, 84, }, /* 997 */ - { 122, 12, 3, 0, 0, 26624, 106, }, /* 998 */ - { 122, 10, 5, 0, 0, 18432, 154, }, /* 999 */ - { 122, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ - { 122, 21, 12, 0, 0, 18432, 74, }, /* 1001 */ - { 122, 21, 12, 0, 0, 18432, 128, }, /* 1002 */ - { 124, 7, 12, 0, 0, 18432, 84, }, /* 1003 */ - { 124, 12, 3, 0, 0, 26624, 106, }, /* 1004 */ - { 124, 7, 12, 0, 0, 18432, 170, }, /* 1005 */ - { 124, 12, 3, 0, 0, 26624, 98, }, /* 1006 */ - { 124, 7, 12, 0, 0, 18432, 314, }, /* 1007 */ - { 124, 6, 12, 0, 0, 18432, 138, }, /* 1008 */ - { 124, 21, 12, 0, 0, 18432, 74, }, /* 1009 */ - { 124, 21, 12, 0, 0, 18432, 110, }, /* 1010 */ - { 127, 7, 12, 0, 0, 18432, 84, }, /* 1011 */ - { 127, 10, 5, 0, 0, 18432, 154, }, /* 1012 */ - { 127, 12, 3, 0, 0, 26624, 106, }, /* 1013 */ - { 127, 21, 12, 0, 0, 18432, 128, }, /* 1014 */ - { 127, 6, 12, 0, 0, 18432, 138, }, /* 1015 */ - { 127, 12, 3, 0, 0, 26624, 158, }, /* 1016 */ - { 0, 5, 12, 0, -928, 18432, 78, }, /* 1017 */ - { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1018 */ - { 127, 10, 5, 0, 0, 18432, 174, }, /* 1019 */ - { 127, 13, 12, 0, 0, 18432, 144, }, /* 1020 */ - { 22, 7, 9, 0, 0, 18432, 84, }, /* 1021 */ - { 22, 7, 10, 0, 0, 18432, 84, }, /* 1022 */ - { 98, 4, 12, 0, 0, 18432, 0, }, /* 1023 */ - { 98, 3, 12, 0, 0, 18432, 0, }, /* 1024 */ - { 30, 7, 12, 0, 0, 18432, 304, }, /* 1025 */ - { 0, 5, 12, 0, 1, 18432, 70, }, /* 1026 */ - { 0, 5, 12, 0, -1, 18432, 70, }, /* 1027 */ - { 4, 25, 12, 0, 0, 12288, 122, }, /* 1028 */ - { 5, 7, 12, 0, 0, 0, 316, }, /* 1029 */ - { 99, 18, 12, 0, 0, 29088, 54, }, /* 1030 */ - { 99, 22, 12, 0, 0, 29088, 54, }, /* 1031 */ - { 98, 2, 12, 0, 0, 6144, 318, }, /* 1032 */ - { 5, 7, 12, 0, 0, 420, 84, }, /* 1033 */ - { 5, 26, 12, 0, 0, 29092, 74, }, /* 1034 */ - { 106, 12, 3, 0, 0, 26624, 192, }, /* 1035 */ - { 106, 12, 3, 0, 0, 26624, 320, }, /* 1036 */ - { 99, 21, 12, 0, 0, 28672, 74, }, /* 1037 */ - { 99, 21, 12, 0, 0, 28672, 128, }, /* 1038 */ - { 99, 21, 12, 0, 0, 28672, 126, }, /* 1039 */ - { 99, 22, 12, 0, 0, 28672, 74, }, /* 1040 */ - { 99, 18, 12, 0, 0, 28672, 74, }, /* 1041 */ - { 99, 17, 12, 0, 0, 28672, 130, }, /* 1042 */ - { 99, 22, 12, 0, 0, 28672, 322, }, /* 1043 */ - { 99, 18, 12, 0, 0, 28672, 322, }, /* 1044 */ - { 99, 21, 12, 0, 0, 8192, 110, }, /* 1045 */ - { 99, 21, 12, 0, 0, 8192, 324, }, /* 1046 */ - { 99, 21, 12, 0, 0, 8192, 326, }, /* 1047 */ - { 99, 22, 12, 0, 0, 28672, 172, }, /* 1048 */ - { 99, 18, 12, 0, 0, 28672, 172, }, /* 1049 */ - { 99, 21, 12, 0, 0, 14336, 74, }, /* 1050 */ - { 99, 21, 12, 0, 0, 28672, 122, }, /* 1051 */ - { 99, 25, 12, 0, 0, 12288, 122, }, /* 1052 */ - { 99, 17, 12, 0, 0, 12288, 328, }, /* 1053 */ - { 99, 25, 12, 0, 0, 28672, 330, }, /* 1054 */ - { 99, 21, 12, 0, 0, 28672, 322, }, /* 1055 */ - { 99, 21, 12, 0, 0, 28672, 332, }, /* 1056 */ - { 99, 17, 12, 0, 0, 12288, 130, }, /* 1057 */ - { 99, 21, 12, 0, 0, 8192, 74, }, /* 1058 */ - { 99, 13, 12, 0, 0, 10240, 334, }, /* 1059 */ - { 0, 9, 12, 0, 32, 18432, 336, }, /* 1060 */ - { 99, 24, 12, 0, 0, 28672, 338, }, /* 1061 */ - { 0, 5, 12, 0, -32, 18432, 340, }, /* 1062 */ - { 99, 21, 12, 0, 0, 29036, 128, }, /* 1063 */ - { 99, 22, 12, 0, 0, 29036, 342, }, /* 1064 */ - { 99, 18, 12, 0, 0, 29036, 342, }, /* 1065 */ - { 99, 21, 12, 0, 0, 29036, 110, }, /* 1066 */ - { 99, 6, 3, 0, 0, 18804, 344, }, /* 1067 */ - { 99, 1, 2, 0, 0, 28672, 346, }, /* 1068 */ - { 39, 7, 12, 0, 0, 18432, 84, }, /* 1069 */ - { 99, 21, 12, 0, 0, 18856, 74, }, /* 1070 */ - { 99, 21, 12, 0, 0, 29096, 74, }, /* 1071 */ - { 99, 21, 12, 0, 0, 18860, 74, }, /* 1072 */ - { 99, 15, 12, 0, 0, 18864, 74, }, /* 1073 */ - { 99, 26, 12, 0, 0, 18860, 74, }, /* 1074 */ - { 1, 14, 12, 0, 0, 28672, 84, }, /* 1075 */ - { 1, 15, 12, 0, 0, 28672, 74, }, /* 1076 */ - { 1, 26, 12, 0, 0, 28672, 74, }, /* 1077 */ - { 1, 26, 12, 0, 0, 18432, 74, }, /* 1078 */ - { 50, 7, 12, 0, 0, 18432, 84, }, /* 1079 */ - { 51, 7, 12, 0, 0, 18432, 84, }, /* 1080 */ - { 106, 12, 3, 0, 0, 27060, 98, }, /* 1081 */ - { 99, 15, 12, 0, 0, 10676, 74, }, /* 1082 */ - { 104, 7, 12, 0, 0, 18432, 84, }, /* 1083 */ - { 104, 15, 12, 0, 0, 18432, 74, }, /* 1084 */ - { 32, 7, 12, 0, 0, 18432, 84, }, /* 1085 */ - { 32, 14, 12, 0, 0, 18432, 84, }, /* 1086 */ - { 73, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ - { 73, 12, 3, 0, 0, 26624, 106, }, /* 1088 */ - { 107, 7, 12, 0, 0, 18432, 84, }, /* 1089 */ - { 107, 21, 12, 0, 0, 18432, 110, }, /* 1090 */ - { 111, 7, 12, 0, 0, 18432, 84, }, /* 1091 */ - { 111, 21, 12, 0, 0, 18432, 110, }, /* 1092 */ - { 111, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ - { 105, 9, 12, 0, 40, 18432, 76, }, /* 1094 */ - { 105, 5, 12, 0, -40, 18432, 78, }, /* 1095 */ - { 40, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ - { 108, 7, 12, 0, 0, 18432, 84, }, /* 1097 */ - { 108, 13, 12, 0, 0, 18432, 144, }, /* 1098 */ - { 80, 9, 12, 0, 40, 18432, 76, }, /* 1099 */ - { 80, 5, 12, 0, -40, 18432, 78, }, /* 1100 */ - { 66, 7, 12, 0, 0, 18432, 84, }, /* 1101 */ - { 64, 7, 12, 0, 0, 18432, 84, }, /* 1102 */ - { 64, 21, 12, 0, 0, 18432, 74, }, /* 1103 */ - { 167, 9, 12, 0, 39, 18432, 76, }, /* 1104 */ - { 167, 5, 12, 0, -39, 18432, 78, }, /* 1105 */ - { 96, 7, 12, 0, 0, 18432, 84, }, /* 1106 */ - { 69, 7, 12, 0, 0, 18432, 84, }, /* 1107 */ - { 0, 6, 12, 0, 0, 18432, 96, }, /* 1108 */ - { 41, 7, 12, 0, 0, 34816, 84, }, /* 1109 */ - { 128, 7, 12, 0, 0, 34816, 84, }, /* 1110 */ - { 128, 21, 12, 0, 0, 34816, 110, }, /* 1111 */ - { 128, 15, 12, 0, 0, 34816, 74, }, /* 1112 */ - { 143, 7, 12, 0, 0, 34816, 84, }, /* 1113 */ - { 143, 26, 12, 0, 0, 34816, 74, }, /* 1114 */ - { 143, 15, 12, 0, 0, 34816, 74, }, /* 1115 */ - { 142, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ - { 142, 15, 12, 0, 0, 34816, 74, }, /* 1117 */ - { 149, 7, 12, 0, 0, 34816, 84, }, /* 1118 */ - { 149, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ - { 115, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ - { 115, 15, 12, 0, 0, 34816, 74, }, /* 1121 */ - { 115, 21, 12, 0, 0, 28672, 110, }, /* 1122 */ - { 52, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ - { 52, 21, 12, 0, 0, 34816, 74, }, /* 1124 */ - { 61, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ - { 134, 7, 12, 0, 0, 34816, 84, }, /* 1126 */ - { 134, 15, 12, 0, 0, 34816, 74, }, /* 1127 */ - { 112, 7, 12, 0, 0, 34816, 84, }, /* 1128 */ - { 112, 12, 3, 0, 0, 26624, 106, }, /* 1129 */ - { 112, 12, 3, 0, 0, 26624, 98, }, /* 1130 */ - { 112, 12, 3, 0, 0, 26624, 158, }, /* 1131 */ - { 112, 15, 12, 0, 0, 34816, 74, }, /* 1132 */ - { 112, 21, 12, 0, 0, 34816, 74, }, /* 1133 */ - { 112, 21, 12, 0, 0, 34816, 128, }, /* 1134 */ - { 129, 7, 12, 0, 0, 34816, 84, }, /* 1135 */ - { 129, 15, 12, 0, 0, 34816, 74, }, /* 1136 */ - { 129, 21, 12, 0, 0, 34816, 74, }, /* 1137 */ - { 141, 7, 12, 0, 0, 34816, 84, }, /* 1138 */ - { 141, 15, 12, 0, 0, 34816, 74, }, /* 1139 */ - { 71, 7, 12, 0, 0, 34816, 84, }, /* 1140 */ - { 71, 26, 12, 0, 0, 34816, 74, }, /* 1141 */ - { 71, 12, 3, 0, 0, 26624, 98, }, /* 1142 */ - { 71, 15, 12, 0, 0, 34816, 74, }, /* 1143 */ - { 71, 21, 12, 0, 0, 34816, 110, }, /* 1144 */ - { 71, 21, 12, 0, 0, 35256, 110, }, /* 1145 */ - { 71, 21, 12, 0, 0, 34816, 74, }, /* 1146 */ - { 53, 7, 12, 0, 0, 34816, 84, }, /* 1147 */ - { 53, 21, 12, 0, 0, 28672, 74, }, /* 1148 */ - { 53, 21, 12, 0, 0, 28672, 110, }, /* 1149 */ - { 130, 7, 12, 0, 0, 34816, 84, }, /* 1150 */ - { 130, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ - { 131, 7, 12, 0, 0, 34816, 84, }, /* 1152 */ - { 131, 15, 12, 0, 0, 34816, 74, }, /* 1153 */ - { 74, 7, 12, 0, 0, 34816, 84, }, /* 1154 */ - { 74, 21, 12, 0, 0, 34816, 110, }, /* 1155 */ - { 74, 15, 12, 0, 0, 34816, 74, }, /* 1156 */ - { 57, 7, 12, 0, 0, 34816, 84, }, /* 1157 */ - { 78, 9, 12, 0, 64, 34816, 76, }, /* 1158 */ - { 78, 5, 12, 0, -64, 34816, 78, }, /* 1159 */ - { 78, 15, 12, 0, 0, 34816, 74, }, /* 1160 */ - { 85, 7, 12, 0, 0, 0, 84, }, /* 1161 */ - { 85, 7, 12, 0, 0, 0, 314, }, /* 1162 */ - { 85, 12, 3, 0, 0, 26624, 132, }, /* 1163 */ - { 85, 13, 12, 0, 0, 2048, 144, }, /* 1164 */ - { 92, 13, 12, 0, 0, 2048, 144, }, /* 1165 */ - { 92, 7, 12, 0, 0, 34816, 84, }, /* 1166 */ - { 92, 6, 12, 0, 0, 34816, 96, }, /* 1167 */ - { 92, 9, 12, 0, 32, 34816, 76, }, /* 1168 */ - { 92, 12, 3, 0, 0, 26624, 132, }, /* 1169 */ - { 92, 12, 3, 0, 0, 26624, 164, }, /* 1170 */ - { 92, 12, 3, 0, 0, 26624, 98, }, /* 1171 */ - { 92, 17, 12, 0, 0, 28672, 130, }, /* 1172 */ - { 92, 6, 12, 0, 0, 34816, 138, }, /* 1173 */ - { 92, 5, 12, 0, -32, 34816, 78, }, /* 1174 */ - { 92, 25, 12, 0, 0, 34816, 122, }, /* 1175 */ - { 5, 15, 12, 0, 0, 2048, 74, }, /* 1176 */ - { 88, 7, 12, 0, 0, 34816, 84, }, /* 1177 */ - { 88, 12, 3, 0, 0, 26624, 106, }, /* 1178 */ - { 88, 17, 12, 0, 0, 34816, 130, }, /* 1179 */ - { 159, 7, 12, 0, 0, 34816, 84, }, /* 1180 */ - { 159, 15, 12, 0, 0, 34816, 74, }, /* 1181 */ - { 86, 7, 12, 0, 0, 0, 84, }, /* 1182 */ - { 86, 12, 3, 0, 0, 26624, 98, }, /* 1183 */ - { 86, 15, 12, 0, 0, 0, 74, }, /* 1184 */ - { 86, 21, 12, 0, 0, 0, 128, }, /* 1185 */ - { 90, 7, 12, 0, 0, 34816, 84, }, /* 1186 */ - { 90, 12, 3, 0, 0, 26624, 98, }, /* 1187 */ - { 90, 21, 12, 0, 0, 34816, 128, }, /* 1188 */ - { 163, 7, 12, 0, 0, 34816, 84, }, /* 1189 */ - { 163, 15, 12, 0, 0, 34816, 74, }, /* 1190 */ - { 160, 7, 12, 0, 0, 34816, 84, }, /* 1191 */ - { 133, 10, 5, 0, 0, 18432, 154, }, /* 1192 */ - { 133, 12, 3, 0, 0, 26624, 106, }, /* 1193 */ - { 133, 7, 12, 0, 0, 18432, 84, }, /* 1194 */ - { 133, 12, 3, 0, 0, 26624, 158, }, /* 1195 */ - { 133, 21, 12, 0, 0, 18432, 128, }, /* 1196 */ - { 133, 21, 12, 0, 0, 18432, 110, }, /* 1197 */ - { 133, 15, 12, 0, 0, 28672, 74, }, /* 1198 */ - { 133, 13, 12, 0, 0, 18432, 144, }, /* 1199 */ - { 133, 12, 3, 0, 0, 26624, 290, }, /* 1200 */ - { 58, 12, 3, 0, 0, 26624, 106, }, /* 1201 */ - { 58, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ - { 58, 7, 12, 0, 0, 18432, 84, }, /* 1203 */ - { 58, 12, 3, 0, 0, 26624, 158, }, /* 1204 */ - { 58, 12, 3, 0, 0, 26624, 98, }, /* 1205 */ - { 58, 21, 12, 0, 0, 18432, 74, }, /* 1206 */ - { 58, 1, 4, 0, 0, 18432, 134, }, /* 1207 */ - { 58, 21, 12, 0, 0, 18432, 128, }, /* 1208 */ - { 136, 7, 12, 0, 0, 18432, 84, }, /* 1209 */ - { 136, 13, 12, 0, 0, 18432, 144, }, /* 1210 */ - { 60, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ - { 60, 7, 12, 0, 0, 18432, 84, }, /* 1212 */ - { 60, 10, 5, 0, 0, 18432, 154, }, /* 1213 */ - { 60, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ - { 60, 13, 12, 0, 0, 18432, 144, }, /* 1215 */ - { 60, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ - { 60, 21, 12, 0, 0, 18432, 128, }, /* 1217 */ - { 70, 7, 12, 0, 0, 18432, 84, }, /* 1218 */ - { 70, 12, 3, 0, 0, 26624, 98, }, /* 1219 */ - { 70, 21, 12, 0, 0, 18432, 74, }, /* 1220 */ - { 62, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ - { 62, 10, 5, 0, 0, 18432, 154, }, /* 1222 */ - { 62, 7, 12, 0, 0, 18432, 84, }, /* 1223 */ - { 62, 10, 3, 0, 0, 18432, 188, }, /* 1224 */ - { 62, 7, 4, 0, 0, 18432, 84, }, /* 1225 */ - { 62, 21, 12, 0, 0, 18432, 128, }, /* 1226 */ - { 62, 21, 12, 0, 0, 18432, 74, }, /* 1227 */ - { 62, 12, 3, 0, 0, 26624, 104, }, /* 1228 */ - { 62, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ - { 62, 13, 12, 0, 0, 18432, 144, }, /* 1230 */ - { 17, 15, 12, 0, 0, 18432, 74, }, /* 1231 */ - { 68, 7, 12, 0, 0, 18432, 84, }, /* 1232 */ - { 68, 10, 5, 0, 0, 18432, 154, }, /* 1233 */ - { 68, 12, 3, 0, 0, 26624, 106, }, /* 1234 */ - { 68, 10, 3, 0, 0, 18432, 188, }, /* 1235 */ - { 68, 12, 3, 0, 0, 26624, 98, }, /* 1236 */ - { 68, 12, 3, 0, 0, 26624, 162, }, /* 1237 */ - { 68, 21, 12, 0, 0, 18432, 128, }, /* 1238 */ - { 68, 21, 12, 0, 0, 18432, 110, }, /* 1239 */ - { 68, 21, 12, 0, 0, 18432, 74, }, /* 1240 */ - { 77, 7, 12, 0, 0, 18432, 84, }, /* 1241 */ - { 77, 21, 12, 0, 0, 18432, 128, }, /* 1242 */ - { 75, 7, 12, 0, 0, 18432, 84, }, /* 1243 */ - { 75, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ - { 75, 10, 5, 0, 0, 18432, 154, }, /* 1245 */ - { 75, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ - { 75, 12, 3, 0, 0, 26624, 158, }, /* 1247 */ - { 75, 13, 12, 0, 0, 18432, 144, }, /* 1248 */ - { 67, 12, 3, 0, 0, 26624, 106, }, /* 1249 */ - { 67, 12, 3, 0, 0, 26836, 106, }, /* 1250 */ - { 67, 10, 5, 0, 0, 18432, 154, }, /* 1251 */ - { 67, 10, 5, 0, 0, 18644, 154, }, /* 1252 */ - { 67, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ - { 106, 12, 3, 0, 0, 26836, 98, }, /* 1254 */ - { 67, 12, 3, 0, 0, 26836, 98, }, /* 1255 */ - { 67, 10, 3, 0, 0, 18432, 160, }, /* 1256 */ - { 67, 10, 3, 0, 0, 18432, 188, }, /* 1257 */ - { 67, 7, 12, 0, 0, 18432, 348, }, /* 1258 */ - { 67, 12, 3, 0, 0, 26624, 98, }, /* 1259 */ - { 97, 7, 12, 0, 0, 18432, 84, }, /* 1260 */ - { 97, 10, 3, 0, 0, 18432, 160, }, /* 1261 */ - { 97, 10, 5, 0, 0, 18432, 154, }, /* 1262 */ - { 97, 12, 3, 0, 0, 26624, 106, }, /* 1263 */ - { 97, 12, 3, 0, 0, 26624, 158, }, /* 1264 */ - { 97, 10, 3, 0, 0, 18432, 188, }, /* 1265 */ - { 97, 7, 4, 0, 0, 18432, 84, }, /* 1266 */ - { 97, 12, 3, 0, 0, 26624, 164, }, /* 1267 */ - { 97, 7, 12, 0, 0, 18432, 350, }, /* 1268 */ - { 97, 21, 12, 0, 0, 18432, 128, }, /* 1269 */ - { 97, 21, 12, 0, 0, 18432, 74, }, /* 1270 */ - { 97, 12, 3, 0, 0, 26624, 98, }, /* 1271 */ - { 153, 7, 12, 0, 0, 18432, 84, }, /* 1272 */ - { 153, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ - { 153, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ - { 153, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ - { 153, 12, 3, 0, 0, 26624, 98, }, /* 1276 */ - { 153, 21, 12, 0, 0, 18432, 128, }, /* 1277 */ - { 153, 21, 12, 0, 0, 18432, 110, }, /* 1278 */ - { 153, 21, 12, 0, 0, 18432, 74, }, /* 1279 */ - { 153, 13, 12, 0, 0, 18432, 144, }, /* 1280 */ - { 153, 12, 3, 0, 0, 26624, 104, }, /* 1281 */ - { 76, 7, 12, 0, 0, 18432, 84, }, /* 1282 */ - { 76, 10, 3, 0, 0, 18432, 160, }, /* 1283 */ - { 76, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ - { 76, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ - { 76, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ - { 76, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ - { 76, 21, 12, 0, 0, 18432, 74, }, /* 1288 */ - { 76, 13, 12, 0, 0, 18432, 144, }, /* 1289 */ - { 145, 7, 12, 0, 0, 18432, 84, }, /* 1290 */ - { 145, 10, 3, 0, 0, 18432, 160, }, /* 1291 */ - { 145, 10, 5, 0, 0, 18432, 154, }, /* 1292 */ - { 145, 12, 3, 0, 0, 26624, 106, }, /* 1293 */ - { 145, 12, 3, 0, 0, 26624, 158, }, /* 1294 */ - { 145, 12, 3, 0, 0, 26624, 98, }, /* 1295 */ - { 145, 21, 12, 0, 0, 18432, 74, }, /* 1296 */ - { 145, 21, 12, 0, 0, 18432, 128, }, /* 1297 */ - { 145, 21, 12, 0, 0, 18432, 110, }, /* 1298 */ - { 145, 21, 12, 0, 0, 18432, 190, }, /* 1299 */ - { 72, 7, 12, 0, 0, 18432, 84, }, /* 1300 */ - { 72, 10, 5, 0, 0, 18432, 154, }, /* 1301 */ - { 72, 12, 3, 0, 0, 26624, 106, }, /* 1302 */ - { 72, 12, 3, 0, 0, 26624, 158, }, /* 1303 */ - { 72, 21, 12, 0, 0, 18432, 128, }, /* 1304 */ - { 72, 21, 12, 0, 0, 18432, 74, }, /* 1305 */ - { 72, 13, 12, 0, 0, 18432, 144, }, /* 1306 */ - { 63, 7, 12, 0, 0, 18432, 84, }, /* 1307 */ - { 63, 12, 3, 0, 0, 26624, 106, }, /* 1308 */ - { 63, 10, 5, 0, 0, 18432, 154, }, /* 1309 */ - { 63, 10, 3, 0, 0, 18432, 188, }, /* 1310 */ - { 63, 12, 3, 0, 0, 26624, 98, }, /* 1311 */ - { 63, 21, 12, 0, 0, 18432, 74, }, /* 1312 */ - { 63, 13, 12, 0, 0, 18432, 144, }, /* 1313 */ - { 147, 7, 12, 0, 0, 18432, 84, }, /* 1314 */ - { 147, 12, 3, 0, 0, 26624, 106, }, /* 1315 */ - { 147, 10, 5, 0, 0, 18432, 154, }, /* 1316 */ - { 147, 10, 12, 0, 0, 18432, 154, }, /* 1317 */ - { 147, 12, 3, 0, 0, 26624, 158, }, /* 1318 */ - { 147, 13, 12, 0, 0, 18432, 144, }, /* 1319 */ - { 147, 15, 12, 0, 0, 18432, 74, }, /* 1320 */ - { 147, 21, 12, 0, 0, 18432, 128, }, /* 1321 */ - { 147, 26, 12, 0, 0, 18432, 74, }, /* 1322 */ - { 83, 7, 12, 0, 0, 18432, 84, }, /* 1323 */ - { 83, 10, 5, 0, 0, 18432, 154, }, /* 1324 */ - { 83, 12, 3, 0, 0, 26624, 106, }, /* 1325 */ - { 83, 12, 3, 0, 0, 26624, 158, }, /* 1326 */ - { 83, 12, 3, 0, 0, 26624, 98, }, /* 1327 */ - { 83, 21, 12, 0, 0, 18432, 74, }, /* 1328 */ - { 146, 9, 12, 0, 32, 18432, 76, }, /* 1329 */ - { 146, 5, 12, 0, -32, 18432, 78, }, /* 1330 */ - { 146, 13, 12, 0, 0, 18432, 144, }, /* 1331 */ - { 146, 15, 12, 0, 0, 18432, 74, }, /* 1332 */ - { 146, 7, 12, 0, 0, 18432, 84, }, /* 1333 */ - { 164, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ - { 164, 10, 3, 0, 0, 18432, 160, }, /* 1335 */ - { 164, 10, 5, 0, 0, 18432, 154, }, /* 1336 */ - { 164, 12, 3, 0, 0, 26624, 106, }, /* 1337 */ - { 164, 10, 3, 0, 0, 18432, 188, }, /* 1338 */ - { 164, 12, 3, 0, 0, 26624, 158, }, /* 1339 */ - { 164, 7, 4, 0, 0, 18432, 84, }, /* 1340 */ - { 164, 12, 3, 0, 0, 26624, 98, }, /* 1341 */ - { 164, 21, 12, 0, 0, 18432, 128, }, /* 1342 */ - { 164, 21, 12, 0, 0, 18432, 74, }, /* 1343 */ - { 164, 13, 12, 0, 0, 18432, 144, }, /* 1344 */ - { 87, 7, 12, 0, 0, 18432, 84, }, /* 1345 */ - { 87, 10, 5, 0, 0, 18432, 154, }, /* 1346 */ - { 87, 12, 3, 0, 0, 26624, 106, }, /* 1347 */ - { 87, 12, 3, 0, 0, 26624, 158, }, /* 1348 */ - { 87, 21, 12, 0, 0, 18432, 74, }, /* 1349 */ - { 156, 7, 12, 0, 0, 18432, 84, }, /* 1350 */ - { 156, 12, 3, 0, 0, 26624, 106, }, /* 1351 */ - { 156, 12, 3, 0, 0, 18432, 106, }, /* 1352 */ - { 156, 12, 3, 0, 0, 26624, 104, }, /* 1353 */ - { 156, 12, 3, 0, 0, 26624, 158, }, /* 1354 */ - { 156, 10, 5, 0, 0, 18432, 154, }, /* 1355 */ - { 156, 7, 4, 0, 0, 18432, 84, }, /* 1356 */ - { 156, 21, 12, 0, 0, 18432, 74, }, /* 1357 */ - { 156, 21, 12, 0, 0, 18432, 128, }, /* 1358 */ - { 155, 7, 12, 0, 0, 18432, 84, }, /* 1359 */ - { 155, 12, 3, 0, 0, 26624, 106, }, /* 1360 */ - { 155, 10, 5, 0, 0, 18432, 154, }, /* 1361 */ - { 155, 7, 4, 0, 0, 18432, 84, }, /* 1362 */ - { 155, 12, 3, 0, 0, 26624, 352, }, /* 1363 */ - { 155, 12, 3, 0, 0, 26624, 158, }, /* 1364 */ - { 155, 21, 12, 0, 0, 18432, 74, }, /* 1365 */ - { 155, 21, 12, 0, 0, 18432, 128, }, /* 1366 */ - { 155, 21, 12, 0, 0, 18432, 110, }, /* 1367 */ - { 144, 7, 12, 0, 0, 18432, 84, }, /* 1368 */ - { 95, 7, 12, 0, 0, 18432, 84, }, /* 1369 */ - { 95, 21, 12, 0, 0, 18432, 74, }, /* 1370 */ - { 95, 13, 12, 0, 0, 18432, 144, }, /* 1371 */ - { 151, 7, 12, 0, 0, 18432, 84, }, /* 1372 */ - { 151, 10, 5, 0, 0, 18432, 154, }, /* 1373 */ - { 151, 12, 3, 0, 0, 26624, 106, }, /* 1374 */ - { 151, 12, 3, 0, 0, 18432, 158, }, /* 1375 */ - { 151, 21, 12, 0, 0, 18432, 128, }, /* 1376 */ - { 151, 21, 12, 0, 0, 18432, 110, }, /* 1377 */ - { 151, 21, 12, 0, 0, 18432, 74, }, /* 1378 */ - { 151, 13, 12, 0, 0, 18432, 144, }, /* 1379 */ - { 151, 15, 12, 0, 0, 18432, 74, }, /* 1380 */ - { 152, 21, 12, 0, 0, 18432, 74, }, /* 1381 */ - { 152, 21, 12, 0, 0, 18432, 110, }, /* 1382 */ - { 152, 7, 12, 0, 0, 18432, 84, }, /* 1383 */ - { 152, 12, 3, 0, 0, 26624, 106, }, /* 1384 */ + { 119, 13, 12, 0, 0, 18432, 144, }, /* 657 */ + { 119, 7, 12, 0, 0, 18432, 84, }, /* 658 */ + { 119, 6, 12, 0, 0, 18432, 94, }, /* 659 */ + { 119, 6, 12, 0, 0, 18432, 96, }, /* 660 */ + { 119, 21, 12, 0, 0, 18432, 128, }, /* 661 */ + { 2, 5, 12, 63, -6222, 18432, 70, }, /* 662 */ + { 2, 5, 12, 67, -6221, 18432, 70, }, /* 663 */ + { 2, 5, 12, 71, -6212, 18432, 70, }, /* 664 */ + { 2, 5, 12, 75, -6210, 18432, 70, }, /* 665 */ + { 2, 5, 12, 79, -6210, 18432, 70, }, /* 666 */ + { 2, 5, 12, 79, -6211, 18432, 70, }, /* 667 */ + { 2, 5, 12, 84, -6204, 18432, 70, }, /* 668 */ + { 2, 5, 12, 88, -6180, 18432, 70, }, /* 669 */ + { 2, 5, 12, 108, 35267, 18432, 70, }, /* 670 */ + { 21, 9, 12, 0, -3008, 18432, 76, }, /* 671 */ + { 117, 21, 12, 0, 0, 18432, 74, }, /* 672 */ + { 107, 12, 3, 0, 0, 26864, 98, }, /* 673 */ + { 107, 12, 3, 0, 0, 26868, 98, }, /* 674 */ + { 100, 21, 12, 0, 0, 18680, 202, }, /* 675 */ + { 107, 12, 3, 0, 0, 26876, 98, }, /* 676 */ + { 107, 12, 3, 0, 0, 26880, 98, }, /* 677 */ + { 107, 12, 3, 0, 0, 26884, 98, }, /* 678 */ + { 107, 12, 3, 0, 0, 26888, 98, }, /* 679 */ + { 107, 12, 3, 0, 0, 26892, 98, }, /* 680 */ + { 107, 12, 3, 0, 0, 26896, 98, }, /* 681 */ + { 100, 10, 5, 0, 0, 18708, 174, }, /* 682 */ + { 107, 12, 3, 0, 0, 26904, 98, }, /* 683 */ + { 100, 7, 12, 0, 0, 18716, 84, }, /* 684 */ + { 100, 7, 12, 0, 0, 18720, 84, }, /* 685 */ + { 100, 7, 12, 0, 0, 18724, 84, }, /* 686 */ + { 100, 7, 12, 0, 0, 18676, 84, }, /* 687 */ + { 107, 12, 3, 0, 0, 26920, 98, }, /* 688 */ + { 100, 7, 12, 0, 0, 18732, 84, }, /* 689 */ + { 100, 7, 12, 0, 0, 18736, 84, }, /* 690 */ + { 107, 12, 3, 0, 0, 26932, 98, }, /* 691 */ + { 100, 7, 12, 0, 0, 18708, 84, }, /* 692 */ + { 100, 10, 5, 0, 0, 18744, 174, }, /* 693 */ + { 107, 12, 3, 0, 0, 26928, 98, }, /* 694 */ + { 100, 7, 12, 0, 0, 18748, 84, }, /* 695 */ + { 2, 5, 12, 0, 0, 18432, 60, }, /* 696 */ + { 1, 6, 12, 0, 0, 18432, 90, }, /* 697 */ + { 2, 6, 12, 0, 0, 18432, 182, }, /* 698 */ + { 0, 5, 12, 0, 35332, 18432, 78, }, /* 699 */ + { 0, 5, 12, 0, 3814, 18432, 78, }, /* 700 */ + { 0, 5, 12, 0, 35384, 18432, 78, }, /* 701 */ + { 0, 5, 12, 0, 0, 18432, 204, }, /* 702 */ + { 1, 6, 12, 0, 0, 18432, 182, }, /* 703 */ + { 107, 12, 3, 0, 0, 26740, 104, }, /* 704 */ + { 107, 12, 3, 0, 0, 26944, 98, }, /* 705 */ + { 107, 12, 3, 0, 0, 26948, 98, }, /* 706 */ + { 0, 9, 12, 92, 1, 18432, 76, }, /* 707 */ + { 0, 5, 12, 92, -1, 18432, 78, }, /* 708 */ + { 0, 5, 12, 0, 0, 18432, 70, }, /* 709 */ + { 0, 5, 12, 92, -58, 18432, 70, }, /* 710 */ + { 0, 9, 12, 0, -7615, 18432, 76, }, /* 711 */ + { 1, 5, 12, 0, 8, 18432, 78, }, /* 712 */ + { 1, 9, 12, 0, -8, 18432, 76, }, /* 713 */ + { 1, 5, 12, 0, 0, 18432, 78, }, /* 714 */ + { 1, 5, 12, 0, 74, 18432, 78, }, /* 715 */ + { 1, 5, 12, 0, 86, 18432, 78, }, /* 716 */ + { 1, 5, 12, 0, 100, 18432, 78, }, /* 717 */ + { 1, 5, 12, 0, 128, 18432, 78, }, /* 718 */ + { 1, 5, 12, 0, 112, 18432, 78, }, /* 719 */ + { 1, 5, 12, 0, 126, 18432, 78, }, /* 720 */ + { 1, 5, 12, 0, 8, 18432, 70, }, /* 721 */ + { 1, 8, 12, 0, -8, 18432, 88, }, /* 722 */ + { 1, 5, 12, 0, 0, 18432, 70, }, /* 723 */ + { 1, 5, 12, 0, 9, 18432, 70, }, /* 724 */ + { 1, 9, 12, 0, -74, 18432, 76, }, /* 725 */ + { 1, 8, 12, 0, -9, 18432, 88, }, /* 726 */ + { 1, 5, 12, 21, -7173, 18432, 78, }, /* 727 */ + { 1, 9, 12, 0, -86, 18432, 76, }, /* 728 */ + { 1, 5, 12, 0, -7235, 18432, 78, }, /* 729 */ + { 1, 9, 12, 0, -100, 18432, 76, }, /* 730 */ + { 1, 5, 12, 0, -7219, 18432, 78, }, /* 731 */ + { 1, 9, 12, 0, -112, 18432, 76, }, /* 732 */ + { 1, 9, 12, 0, -128, 18432, 76, }, /* 733 */ + { 1, 9, 12, 0, -126, 18432, 76, }, /* 734 */ + { 100, 29, 12, 0, 0, 45056, 52, }, /* 735 */ + { 107, 1, 3, 0, 0, 6144, 206, }, /* 736 */ + { 107, 1, 13, 0, 0, 6144, 208, }, /* 737 */ + { 100, 1, 2, 0, 0, 18432, 210, }, /* 738 */ + { 100, 1, 2, 0, 0, 34816, 210, }, /* 739 */ + { 100, 17, 12, 0, 0, 28672, 212, }, /* 740 */ + { 100, 21, 12, 0, 0, 28672, 64, }, /* 741 */ + { 100, 20, 12, 0, 0, 28672, 214, }, /* 742 */ + { 100, 19, 12, 0, 0, 28672, 214, }, /* 743 */ + { 100, 22, 12, 0, 0, 28672, 216, }, /* 744 */ + { 100, 20, 12, 0, 0, 28672, 216, }, /* 745 */ + { 100, 19, 12, 0, 0, 28672, 216, }, /* 746 */ + { 100, 21, 12, 0, 0, 28672, 218, }, /* 747 */ + { 100, 21, 12, 0, 0, 28672, 220, }, /* 748 */ + { 100, 27, 2, 0, 0, 45056, 50, }, /* 749 */ + { 100, 28, 2, 0, 0, 4096, 50, }, /* 750 */ + { 100, 1, 2, 0, 0, 20480, 136, }, /* 751 */ + { 100, 1, 2, 0, 0, 36864, 136, }, /* 752 */ + { 100, 1, 2, 0, 0, 30720, 136, }, /* 753 */ + { 100, 1, 2, 0, 0, 24576, 136, }, /* 754 */ + { 100, 1, 2, 0, 0, 40960, 136, }, /* 755 */ + { 100, 29, 12, 0, 0, 8520, 52, }, /* 756 */ + { 100, 21, 12, 0, 0, 14336, 54, }, /* 757 */ + { 100, 21, 12, 0, 0, 14336, 64, }, /* 758 */ + { 100, 21, 14, 0, 0, 28672, 222, }, /* 759 */ + { 100, 21, 12, 0, 0, 28672, 224, }, /* 760 */ + { 100, 16, 12, 0, 0, 28672, 144, }, /* 761 */ + { 100, 16, 12, 0, 0, 28672, 226, }, /* 762 */ + { 100, 25, 12, 0, 0, 8192, 64, }, /* 763 */ + { 100, 22, 12, 0, 0, 28672, 228, }, /* 764 */ + { 100, 18, 12, 0, 0, 28672, 228, }, /* 765 */ + { 100, 21, 12, 0, 0, 29004, 54, }, /* 766 */ + { 100, 21, 12, 0, 0, 28672, 212, }, /* 767 */ + { 100, 21, 12, 0, 0, 29008, 54, }, /* 768 */ + { 100, 21, 12, 0, 0, 29012, 54, }, /* 769 */ + { 100, 1, 2, 0, 0, 6144, 230, }, /* 770 */ + { 99, 2, 2, 0, 0, 6144, 232, }, /* 771 */ + { 100, 1, 2, 0, 0, 22528, 136, }, /* 772 */ + { 100, 1, 2, 0, 0, 38912, 136, }, /* 773 */ + { 100, 1, 2, 0, 0, 16384, 136, }, /* 774 */ + { 100, 1, 2, 0, 0, 32768, 136, }, /* 775 */ + { 100, 1, 2, 0, 0, 6144, 234, }, /* 776 */ + { 0, 6, 12, 0, 0, 18432, 236, }, /* 777 */ + { 100, 25, 12, 0, 0, 12288, 238, }, /* 778 */ + { 100, 25, 12, 0, 0, 12288, 240, }, /* 779 */ + { 100, 25, 12, 0, 0, 28672, 238, }, /* 780 */ + { 100, 22, 12, 0, 0, 28672, 242, }, /* 781 */ + { 100, 18, 12, 0, 0, 28672, 242, }, /* 782 */ + { 0, 6, 12, 0, 0, 18432, 182, }, /* 783 */ + { 99, 2, 12, 0, 0, 14336, 0, }, /* 784 */ + { 107, 12, 3, 0, 0, 26624, 244, }, /* 785 */ + { 107, 11, 3, 0, 0, 26624, 124, }, /* 786 */ + { 107, 11, 3, 0, 0, 26624, 246, }, /* 787 */ + { 107, 12, 3, 0, 0, 26968, 104, }, /* 788 */ + { 100, 26, 12, 0, 0, 28672, 74, }, /* 789 */ + { 100, 9, 12, 0, 0, 18432, 116, }, /* 790 */ + { 100, 5, 12, 0, 0, 18432, 248, }, /* 791 */ + { 100, 25, 12, 0, 0, 28672, 250, }, /* 792 */ + { 100, 26, 14, 0, 0, 28672, 252, }, /* 793 */ + { 1, 9, 12, 96, -7517, 18432, 76, }, /* 794 */ + { 100, 26, 12, 0, 0, 28672, 122, }, /* 795 */ + { 0, 9, 12, 100, 0, 18432, 76, }, /* 796 */ + { 0, 9, 12, 104, -8262, 18432, 76, }, /* 797 */ + { 100, 26, 12, 0, 0, 14336, 254, }, /* 798 */ + { 0, 9, 12, 0, 28, 18432, 76, }, /* 799 */ + { 100, 7, 12, 0, 0, 18432, 256, }, /* 800 */ + { 100, 5, 14, 0, 0, 18432, 258, }, /* 801 */ + { 100, 25, 12, 0, 0, 28672, 122, }, /* 802 */ + { 100, 5, 12, 0, 0, 18432, 260, }, /* 803 */ + { 0, 5, 12, 0, -28, 18432, 78, }, /* 804 */ + { 0, 14, 12, 0, 16, 18432, 76, }, /* 805 */ + { 0, 14, 12, 0, -16, 18432, 78, }, /* 806 */ + { 0, 14, 12, 0, 0, 18432, 84, }, /* 807 */ + { 100, 25, 14, 0, 0, 28672, 262, }, /* 808 */ + { 100, 26, 14, 0, 0, 28672, 262, }, /* 809 */ + { 100, 26, 12, 0, 0, 28672, 64, }, /* 810 */ + { 100, 25, 12, 0, 0, 28672, 264, }, /* 811 */ + { 100, 25, 12, 0, 0, 28672, 266, }, /* 812 */ + { 100, 25, 12, 0, 0, 12288, 268, }, /* 813 */ + { 100, 22, 12, 0, 0, 28672, 266, }, /* 814 */ + { 100, 18, 12, 0, 0, 28672, 266, }, /* 815 */ + { 100, 26, 14, 0, 0, 28672, 270, }, /* 816 */ + { 100, 22, 12, 0, 0, 28672, 272, }, /* 817 */ + { 100, 18, 12, 0, 0, 28672, 272, }, /* 818 */ + { 100, 26, 12, 0, 0, 18432, 54, }, /* 819 */ + { 99, 2, 12, 0, 0, 18432, 274, }, /* 820 */ + { 100, 15, 12, 0, 0, 10240, 74, }, /* 821 */ + { 100, 26, 12, 0, 26, 18432, 276, }, /* 822 */ + { 100, 26, 14, 0, 26, 18432, 278, }, /* 823 */ + { 100, 26, 12, 0, -26, 18432, 280, }, /* 824 */ + { 100, 25, 14, 0, 0, 28672, 282, }, /* 825 */ + { 100, 26, 14, 0, 0, 28672, 284, }, /* 826 */ + { 100, 26, 14, 0, 0, 28672, 286, }, /* 827 */ + { 110, 26, 12, 0, 0, 18432, 54, }, /* 828 */ + { 100, 26, 12, 0, 0, 28672, 228, }, /* 829 */ + { 44, 9, 12, 0, 48, 18432, 76, }, /* 830 */ + { 44, 5, 12, 0, -48, 18432, 78, }, /* 831 */ + { 0, 9, 12, 0, -10743, 18432, 76, }, /* 832 */ + { 0, 9, 12, 0, -3814, 18432, 76, }, /* 833 */ + { 0, 9, 12, 0, -10727, 18432, 76, }, /* 834 */ + { 0, 5, 12, 0, -10795, 18432, 78, }, /* 835 */ + { 0, 5, 12, 0, -10792, 18432, 78, }, /* 836 */ + { 0, 9, 12, 0, -10780, 18432, 76, }, /* 837 */ + { 0, 9, 12, 0, -10749, 18432, 76, }, /* 838 */ + { 0, 9, 12, 0, -10783, 18432, 76, }, /* 839 */ + { 0, 9, 12, 0, -10782, 18432, 76, }, /* 840 */ + { 0, 9, 12, 0, -10815, 18432, 76, }, /* 841 */ + { 43, 5, 12, 0, 0, 18432, 60, }, /* 842 */ + { 43, 26, 12, 0, 0, 28672, 74, }, /* 843 */ + { 43, 12, 3, 0, 0, 26624, 98, }, /* 844 */ + { 43, 21, 12, 0, 0, 28672, 128, }, /* 845 */ + { 43, 21, 12, 0, 0, 28672, 74, }, /* 846 */ + { 43, 15, 12, 0, 0, 28672, 74, }, /* 847 */ + { 21, 5, 12, 0, -7264, 18432, 78, }, /* 848 */ + { 45, 7, 12, 0, 0, 18432, 84, }, /* 849 */ + { 45, 6, 12, 0, 0, 18432, 148, }, /* 850 */ + { 45, 21, 12, 0, 0, 18432, 74, }, /* 851 */ + { 45, 12, 3, 0, 0, 26624, 288, }, /* 852 */ + { 2, 12, 3, 0, 0, 26624, 106, }, /* 853 */ + { 100, 20, 12, 0, 0, 28672, 228, }, /* 854 */ + { 100, 19, 12, 0, 0, 28672, 228, }, /* 855 */ + { 100, 17, 12, 0, 0, 29020, 212, }, /* 856 */ + { 100, 6, 12, 0, 0, 28672, 290, }, /* 857 */ + { 100, 21, 12, 0, 0, 29024, 54, }, /* 858 */ + { 100, 21, 12, 0, 0, 29028, 54, }, /* 859 */ + { 100, 21, 12, 0, 0, 29032, 224, }, /* 860 */ + { 100, 21, 12, 0, 0, 29036, 292, }, /* 861 */ + { 100, 21, 12, 0, 0, 28812, 54, }, /* 862 */ + { 100, 21, 12, 0, 0, 28672, 292, }, /* 863 */ + { 30, 26, 12, 0, 0, 28672, 294, }, /* 864 */ + { 100, 26, 12, 0, 0, 29040, 296, }, /* 865 */ + { 100, 26, 12, 0, 0, 29040, 298, }, /* 866 */ + { 100, 26, 12, 0, 0, 29040, 300, }, /* 867 */ + { 100, 21, 12, 0, 0, 29044, 292, }, /* 868 */ + { 100, 21, 12, 0, 0, 29048, 224, }, /* 869 */ + { 100, 21, 12, 0, 0, 29052, 54, }, /* 870 */ + { 30, 6, 12, 0, 0, 18432, 138, }, /* 871 */ + { 100, 7, 12, 0, 0, 18816, 302, }, /* 872 */ + { 30, 14, 12, 0, 0, 18432, 302, }, /* 873 */ + { 100, 22, 12, 0, 0, 29060, 228, }, /* 874 */ + { 100, 18, 12, 0, 0, 29060, 228, }, /* 875 */ + { 100, 22, 12, 0, 0, 29064, 228, }, /* 876 */ + { 100, 18, 12, 0, 0, 29064, 228, }, /* 877 */ + { 100, 22, 12, 0, 0, 29068, 62, }, /* 878 */ + { 100, 18, 12, 0, 0, 29068, 62, }, /* 879 */ + { 100, 22, 12, 0, 0, 29068, 228, }, /* 880 */ + { 100, 18, 12, 0, 0, 29068, 228, }, /* 881 */ + { 100, 26, 12, 0, 0, 29052, 54, }, /* 882 */ + { 100, 17, 12, 0, 0, 29052, 212, }, /* 883 */ + { 100, 22, 12, 0, 0, 29052, 216, }, /* 884 */ + { 100, 18, 12, 0, 0, 29052, 216, }, /* 885 */ + { 107, 12, 3, 0, 0, 27024, 98, }, /* 886 */ + { 22, 10, 3, 0, 0, 18432, 304, }, /* 887 */ + { 100, 17, 14, 0, 0, 29052, 306, }, /* 888 */ + { 100, 6, 12, 0, 0, 18836, 138, }, /* 889 */ + { 100, 26, 12, 0, 0, 29052, 74, }, /* 890 */ + { 30, 6, 12, 0, 0, 18432, 148, }, /* 891 */ + { 100, 7, 12, 0, 0, 18840, 84, }, /* 892 */ + { 100, 21, 14, 0, 0, 29080, 252, }, /* 893 */ + { 100, 26, 12, 0, 0, 29056, 74, }, /* 894 */ + { 27, 7, 12, 0, 0, 18432, 84, }, /* 895 */ + { 107, 12, 3, 0, 0, 27028, 98, }, /* 896 */ + { 100, 24, 12, 0, 0, 29076, 308, }, /* 897 */ + { 27, 6, 12, 0, 0, 18432, 138, }, /* 898 */ + { 100, 17, 12, 0, 0, 29076, 130, }, /* 899 */ + { 28, 7, 12, 0, 0, 18432, 84, }, /* 900 */ + { 100, 21, 12, 0, 0, 29068, 144, }, /* 901 */ + { 100, 6, 12, 0, 0, 18836, 96, }, /* 902 */ + { 28, 6, 12, 0, 0, 18432, 138, }, /* 903 */ + { 29, 7, 12, 0, 0, 18432, 84, }, /* 904 */ + { 22, 7, 12, 0, 0, 18432, 84, }, /* 905 */ + { 22, 7, 12, 0, 0, 18432, 184, }, /* 906 */ + { 100, 26, 12, 0, 0, 18816, 74, }, /* 907 */ + { 100, 15, 12, 0, 0, 18816, 74, }, /* 908 */ + { 22, 26, 12, 0, 0, 18432, 74, }, /* 909 */ + { 22, 26, 12, 0, 0, 28672, 74, }, /* 910 */ + { 100, 15, 12, 0, 0, 18432, 74, }, /* 911 */ + { 100, 26, 14, 0, 0, 18816, 252, }, /* 912 */ + { 28, 26, 12, 0, 0, 18432, 74, }, /* 913 */ + { 30, 7, 12, 0, 0, 18432, 310, }, /* 914 */ + { 31, 7, 12, 0, 0, 18432, 84, }, /* 915 */ + { 31, 6, 12, 0, 0, 18432, 138, }, /* 916 */ + { 31, 26, 12, 0, 0, 28672, 74, }, /* 917 */ + { 55, 7, 12, 0, 0, 18432, 84, }, /* 918 */ + { 55, 6, 12, 0, 0, 18432, 148, }, /* 919 */ + { 55, 21, 12, 0, 0, 18432, 110, }, /* 920 */ + { 55, 21, 12, 0, 0, 18432, 128, }, /* 921 */ + { 120, 7, 12, 0, 0, 18432, 84, }, /* 922 */ + { 120, 6, 12, 0, 0, 18432, 138, }, /* 923 */ + { 120, 21, 12, 0, 0, 28672, 110, }, /* 924 */ + { 120, 21, 12, 0, 0, 28672, 128, }, /* 925 */ + { 120, 13, 12, 0, 0, 18432, 144, }, /* 926 */ + { 2, 9, 12, 108, 1, 18432, 76, }, /* 927 */ + { 2, 5, 12, 108, -35267, 18432, 78, }, /* 928 */ + { 2, 7, 12, 0, 0, 18432, 84, }, /* 929 */ + { 2, 21, 12, 0, 0, 28672, 74, }, /* 930 */ + { 2, 12, 3, 0, 0, 26624, 98, }, /* 931 */ + { 2, 6, 12, 0, 0, 28672, 94, }, /* 932 */ + { 2, 6, 12, 0, 0, 18432, 90, }, /* 933 */ + { 127, 7, 12, 0, 0, 18432, 84, }, /* 934 */ + { 127, 14, 12, 0, 0, 18432, 84, }, /* 935 */ + { 127, 12, 3, 0, 0, 26624, 98, }, /* 936 */ + { 127, 21, 12, 0, 0, 18432, 74, }, /* 937 */ + { 127, 21, 12, 0, 0, 18432, 128, }, /* 938 */ + { 127, 21, 12, 0, 0, 18432, 110, }, /* 939 */ + { 100, 24, 12, 0, 0, 29084, 56, }, /* 940 */ + { 0, 9, 12, 0, -35332, 18432, 76, }, /* 941 */ + { 100, 24, 12, 0, 0, 18432, 56, }, /* 942 */ + { 0, 9, 12, 0, -42280, 18432, 76, }, /* 943 */ + { 0, 5, 12, 0, 48, 18432, 78, }, /* 944 */ + { 0, 9, 12, 0, -42308, 18432, 76, }, /* 945 */ + { 0, 9, 12, 0, -42319, 18432, 76, }, /* 946 */ + { 0, 9, 12, 0, -42315, 18432, 76, }, /* 947 */ + { 0, 9, 12, 0, -42305, 18432, 76, }, /* 948 */ + { 0, 9, 12, 0, -42258, 18432, 76, }, /* 949 */ + { 0, 9, 12, 0, -42282, 18432, 76, }, /* 950 */ + { 0, 9, 12, 0, -42261, 18432, 76, }, /* 951 */ + { 0, 9, 12, 0, 928, 18432, 76, }, /* 952 */ + { 0, 9, 12, 0, -48, 18432, 76, }, /* 953 */ + { 0, 9, 12, 0, -42307, 18432, 76, }, /* 954 */ + { 0, 9, 12, 0, -35384, 18432, 76, }, /* 955 */ + { 0, 9, 12, 0, -42343, 18432, 76, }, /* 956 */ + { 0, 9, 12, 0, -42561, 18432, 76, }, /* 957 */ + { 46, 7, 12, 0, 0, 18432, 84, }, /* 958 */ + { 46, 12, 3, 0, 0, 26624, 106, }, /* 959 */ + { 46, 12, 3, 0, 0, 26624, 158, }, /* 960 */ + { 46, 10, 5, 0, 0, 18432, 154, }, /* 961 */ + { 46, 26, 12, 0, 0, 28672, 74, }, /* 962 */ + { 100, 15, 12, 0, 0, 18848, 74, }, /* 963 */ + { 100, 15, 12, 0, 0, 18852, 74, }, /* 964 */ + { 100, 26, 12, 0, 0, 18856, 74, }, /* 965 */ + { 100, 23, 12, 0, 0, 14764, 74, }, /* 966 */ + { 100, 26, 12, 0, 0, 14760, 74, }, /* 967 */ + { 47, 7, 12, 0, 0, 18432, 84, }, /* 968 */ + { 47, 21, 12, 0, 0, 28672, 74, }, /* 969 */ + { 47, 21, 12, 0, 0, 28672, 128, }, /* 970 */ + { 121, 10, 5, 0, 0, 18432, 154, }, /* 971 */ + { 121, 7, 12, 0, 0, 18432, 84, }, /* 972 */ + { 121, 12, 3, 0, 0, 26624, 158, }, /* 973 */ + { 121, 12, 3, 0, 0, 26624, 106, }, /* 974 */ + { 121, 21, 12, 0, 0, 18432, 128, }, /* 975 */ + { 121, 13, 12, 0, 0, 18432, 144, }, /* 976 */ + { 8, 12, 3, 0, 0, 27056, 98, }, /* 977 */ + { 8, 7, 12, 0, 0, 18868, 84, }, /* 978 */ + { 49, 13, 12, 0, 0, 18432, 144, }, /* 979 */ + { 49, 7, 12, 0, 0, 18432, 84, }, /* 980 */ + { 49, 12, 3, 0, 0, 26624, 106, }, /* 981 */ + { 49, 12, 3, 0, 0, 26624, 98, }, /* 982 */ + { 100, 21, 12, 0, 0, 18872, 202, }, /* 983 */ + { 49, 21, 12, 0, 0, 18432, 128, }, /* 984 */ + { 122, 7, 12, 0, 0, 18432, 84, }, /* 985 */ + { 122, 12, 3, 0, 0, 26624, 106, }, /* 986 */ + { 122, 10, 5, 0, 0, 18432, 154, }, /* 987 */ + { 122, 10, 3, 0, 0, 18432, 188, }, /* 988 */ + { 122, 21, 12, 0, 0, 18432, 74, }, /* 989 */ + { 56, 12, 3, 0, 0, 26624, 106, }, /* 990 */ + { 56, 10, 5, 0, 0, 18432, 154, }, /* 991 */ + { 56, 7, 12, 0, 0, 18432, 84, }, /* 992 */ + { 56, 7, 12, 0, 0, 18432, 156, }, /* 993 */ + { 56, 12, 3, 0, 0, 26624, 98, }, /* 994 */ + { 56, 10, 3, 0, 0, 18432, 188, }, /* 995 */ + { 56, 21, 12, 0, 0, 18432, 74, }, /* 996 */ + { 56, 21, 12, 0, 0, 18432, 110, }, /* 997 */ + { 56, 21, 12, 0, 0, 18432, 128, }, /* 998 */ + { 100, 6, 12, 0, 0, 18876, 138, }, /* 999 */ + { 56, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ + { 20, 6, 12, 0, 0, 18432, 138, }, /* 1001 */ + { 123, 7, 12, 0, 0, 18432, 84, }, /* 1002 */ + { 123, 12, 3, 0, 0, 26624, 106, }, /* 1003 */ + { 123, 10, 5, 0, 0, 18432, 154, }, /* 1004 */ + { 123, 13, 12, 0, 0, 18432, 144, }, /* 1005 */ + { 123, 21, 12, 0, 0, 18432, 74, }, /* 1006 */ + { 123, 21, 12, 0, 0, 18432, 128, }, /* 1007 */ + { 20, 7, 12, 0, 0, 18432, 84, }, /* 1008 */ + { 125, 7, 12, 0, 0, 18432, 84, }, /* 1009 */ + { 125, 12, 3, 0, 0, 26624, 106, }, /* 1010 */ + { 125, 7, 12, 0, 0, 18432, 170, }, /* 1011 */ + { 125, 12, 3, 0, 0, 26624, 98, }, /* 1012 */ + { 125, 7, 12, 0, 0, 18432, 312, }, /* 1013 */ + { 125, 6, 12, 0, 0, 18432, 138, }, /* 1014 */ + { 125, 21, 12, 0, 0, 18432, 74, }, /* 1015 */ + { 125, 21, 12, 0, 0, 18432, 110, }, /* 1016 */ + { 128, 7, 12, 0, 0, 18432, 156, }, /* 1017 */ + { 128, 10, 5, 0, 0, 18432, 154, }, /* 1018 */ + { 128, 12, 3, 0, 0, 26624, 106, }, /* 1019 */ + { 128, 21, 12, 0, 0, 18432, 128, }, /* 1020 */ + { 128, 7, 12, 0, 0, 18432, 84, }, /* 1021 */ + { 128, 6, 12, 0, 0, 18432, 138, }, /* 1022 */ + { 128, 12, 3, 0, 0, 26624, 158, }, /* 1023 */ + { 0, 5, 12, 0, -928, 18432, 78, }, /* 1024 */ + { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1025 */ + { 128, 10, 5, 0, 0, 18432, 174, }, /* 1026 */ + { 128, 13, 12, 0, 0, 18432, 144, }, /* 1027 */ + { 22, 7, 9, 0, 0, 18432, 84, }, /* 1028 */ + { 22, 7, 10, 0, 0, 18432, 84, }, /* 1029 */ + { 99, 4, 12, 0, 0, 18432, 0, }, /* 1030 */ + { 99, 3, 12, 0, 0, 18432, 0, }, /* 1031 */ + { 30, 7, 12, 0, 0, 18432, 302, }, /* 1032 */ + { 0, 5, 12, 0, 1, 18432, 70, }, /* 1033 */ + { 0, 5, 12, 0, -1, 18432, 70, }, /* 1034 */ + { 4, 25, 12, 0, 0, 12288, 122, }, /* 1035 */ + { 5, 7, 12, 0, 0, 0, 314, }, /* 1036 */ + { 100, 18, 12, 0, 0, 29120, 54, }, /* 1037 */ + { 100, 22, 12, 0, 0, 29120, 54, }, /* 1038 */ + { 99, 2, 12, 0, 0, 6144, 316, }, /* 1039 */ + { 5, 7, 12, 0, 0, 452, 84, }, /* 1040 */ + { 5, 26, 12, 0, 0, 29124, 74, }, /* 1041 */ + { 107, 12, 3, 0, 0, 26624, 194, }, /* 1042 */ + { 107, 12, 3, 0, 0, 26624, 318, }, /* 1043 */ + { 100, 21, 12, 0, 0, 28672, 74, }, /* 1044 */ + { 100, 21, 12, 0, 0, 28672, 128, }, /* 1045 */ + { 100, 21, 12, 0, 0, 28672, 126, }, /* 1046 */ + { 100, 22, 12, 0, 0, 28672, 74, }, /* 1047 */ + { 100, 18, 12, 0, 0, 28672, 74, }, /* 1048 */ + { 100, 17, 12, 0, 0, 28672, 130, }, /* 1049 */ + { 100, 22, 12, 0, 0, 28672, 320, }, /* 1050 */ + { 100, 18, 12, 0, 0, 28672, 320, }, /* 1051 */ + { 100, 21, 12, 0, 0, 8192, 110, }, /* 1052 */ + { 100, 21, 12, 0, 0, 8192, 322, }, /* 1053 */ + { 100, 21, 12, 0, 0, 8192, 324, }, /* 1054 */ + { 100, 22, 12, 0, 0, 28672, 172, }, /* 1055 */ + { 100, 18, 12, 0, 0, 28672, 172, }, /* 1056 */ + { 100, 21, 12, 0, 0, 14336, 74, }, /* 1057 */ + { 100, 21, 12, 0, 0, 28672, 122, }, /* 1058 */ + { 100, 25, 12, 0, 0, 12288, 122, }, /* 1059 */ + { 100, 17, 12, 0, 0, 12288, 326, }, /* 1060 */ + { 100, 25, 12, 0, 0, 28672, 328, }, /* 1061 */ + { 100, 21, 12, 0, 0, 28672, 320, }, /* 1062 */ + { 100, 21, 12, 0, 0, 28672, 330, }, /* 1063 */ + { 100, 17, 12, 0, 0, 12288, 130, }, /* 1064 */ + { 100, 21, 12, 0, 0, 8192, 74, }, /* 1065 */ + { 100, 13, 12, 0, 0, 10240, 332, }, /* 1066 */ + { 0, 9, 12, 0, 32, 18432, 334, }, /* 1067 */ + { 100, 24, 12, 0, 0, 28672, 336, }, /* 1068 */ + { 0, 5, 12, 0, -32, 18432, 338, }, /* 1069 */ + { 100, 21, 12, 0, 0, 29068, 128, }, /* 1070 */ + { 100, 22, 12, 0, 0, 29068, 340, }, /* 1071 */ + { 100, 18, 12, 0, 0, 29068, 340, }, /* 1072 */ + { 100, 21, 12, 0, 0, 29068, 110, }, /* 1073 */ + { 100, 6, 3, 0, 0, 18836, 342, }, /* 1074 */ + { 100, 1, 2, 0, 0, 28672, 344, }, /* 1075 */ + { 39, 7, 12, 0, 0, 18432, 84, }, /* 1076 */ + { 100, 21, 12, 0, 0, 18888, 74, }, /* 1077 */ + { 100, 21, 12, 0, 0, 29128, 74, }, /* 1078 */ + { 100, 21, 12, 0, 0, 18892, 74, }, /* 1079 */ + { 100, 15, 12, 0, 0, 18896, 74, }, /* 1080 */ + { 100, 26, 12, 0, 0, 18892, 74, }, /* 1081 */ + { 1, 14, 12, 0, 0, 28672, 84, }, /* 1082 */ + { 1, 15, 12, 0, 0, 28672, 74, }, /* 1083 */ + { 1, 26, 12, 0, 0, 28672, 74, }, /* 1084 */ + { 1, 26, 12, 0, 0, 18432, 74, }, /* 1085 */ + { 50, 7, 12, 0, 0, 18432, 84, }, /* 1086 */ + { 51, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ + { 107, 12, 3, 0, 0, 27092, 98, }, /* 1088 */ + { 100, 15, 12, 0, 0, 10708, 74, }, /* 1089 */ + { 105, 7, 12, 0, 0, 18432, 84, }, /* 1090 */ + { 105, 15, 12, 0, 0, 18432, 74, }, /* 1091 */ + { 32, 7, 12, 0, 0, 18432, 84, }, /* 1092 */ + { 32, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ + { 73, 7, 12, 0, 0, 18432, 84, }, /* 1094 */ + { 73, 12, 3, 0, 0, 26624, 106, }, /* 1095 */ + { 108, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ + { 108, 21, 12, 0, 0, 18432, 110, }, /* 1097 */ + { 112, 7, 12, 0, 0, 18432, 84, }, /* 1098 */ + { 112, 21, 12, 0, 0, 18432, 110, }, /* 1099 */ + { 112, 14, 12, 0, 0, 18432, 84, }, /* 1100 */ + { 106, 9, 12, 0, 40, 18432, 76, }, /* 1101 */ + { 106, 5, 12, 0, -40, 18432, 78, }, /* 1102 */ + { 40, 7, 12, 0, 0, 18432, 84, }, /* 1103 */ + { 109, 7, 12, 0, 0, 18432, 84, }, /* 1104 */ + { 109, 13, 12, 0, 0, 18432, 144, }, /* 1105 */ + { 81, 9, 12, 0, 40, 18432, 76, }, /* 1106 */ + { 81, 5, 12, 0, -40, 18432, 78, }, /* 1107 */ + { 66, 7, 12, 0, 0, 18432, 84, }, /* 1108 */ + { 64, 7, 12, 0, 0, 18432, 84, }, /* 1109 */ + { 64, 21, 12, 0, 0, 18432, 74, }, /* 1110 */ + { 167, 9, 12, 0, 39, 18432, 76, }, /* 1111 */ + { 167, 5, 12, 0, -39, 18432, 78, }, /* 1112 */ + { 97, 7, 12, 0, 0, 18432, 84, }, /* 1113 */ + { 69, 7, 12, 0, 0, 18432, 84, }, /* 1114 */ + { 0, 6, 12, 0, 0, 18432, 96, }, /* 1115 */ + { 41, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ + { 129, 7, 12, 0, 0, 34816, 84, }, /* 1117 */ + { 129, 21, 12, 0, 0, 34816, 110, }, /* 1118 */ + { 129, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ + { 144, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ + { 144, 26, 12, 0, 0, 34816, 74, }, /* 1121 */ + { 144, 15, 12, 0, 0, 34816, 74, }, /* 1122 */ + { 143, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ + { 143, 15, 12, 0, 0, 34816, 74, }, /* 1124 */ + { 150, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ + { 150, 15, 12, 0, 0, 34816, 74, }, /* 1126 */ + { 116, 7, 12, 0, 0, 34816, 84, }, /* 1127 */ + { 116, 15, 12, 0, 0, 34816, 74, }, /* 1128 */ + { 116, 21, 12, 0, 0, 28672, 110, }, /* 1129 */ + { 52, 7, 12, 0, 0, 34816, 84, }, /* 1130 */ + { 52, 21, 12, 0, 0, 34816, 74, }, /* 1131 */ + { 171, 7, 12, 0, 0, 34816, 84, }, /* 1132 */ + { 61, 7, 12, 0, 0, 34816, 84, }, /* 1133 */ + { 135, 7, 12, 0, 0, 34816, 84, }, /* 1134 */ + { 135, 15, 12, 0, 0, 34816, 74, }, /* 1135 */ + { 113, 7, 12, 0, 0, 34816, 156, }, /* 1136 */ + { 113, 12, 3, 0, 0, 26624, 106, }, /* 1137 */ + { 113, 12, 3, 0, 0, 26624, 98, }, /* 1138 */ + { 113, 12, 3, 0, 0, 26624, 158, }, /* 1139 */ + { 113, 15, 12, 0, 0, 34816, 74, }, /* 1140 */ + { 113, 21, 12, 0, 0, 34816, 74, }, /* 1141 */ + { 113, 21, 12, 0, 0, 34816, 128, }, /* 1142 */ + { 130, 7, 12, 0, 0, 34816, 84, }, /* 1143 */ + { 130, 15, 12, 0, 0, 34816, 74, }, /* 1144 */ + { 130, 21, 12, 0, 0, 34816, 74, }, /* 1145 */ + { 142, 7, 12, 0, 0, 34816, 84, }, /* 1146 */ + { 142, 15, 12, 0, 0, 34816, 74, }, /* 1147 */ + { 71, 7, 12, 0, 0, 34816, 84, }, /* 1148 */ + { 71, 26, 12, 0, 0, 34816, 74, }, /* 1149 */ + { 71, 12, 3, 0, 0, 26624, 98, }, /* 1150 */ + { 71, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ + { 71, 21, 12, 0, 0, 34816, 110, }, /* 1152 */ + { 71, 21, 12, 0, 0, 35288, 110, }, /* 1153 */ + { 71, 21, 12, 0, 0, 34816, 74, }, /* 1154 */ + { 53, 7, 12, 0, 0, 34816, 84, }, /* 1155 */ + { 53, 21, 12, 0, 0, 28672, 74, }, /* 1156 */ + { 53, 21, 12, 0, 0, 28672, 110, }, /* 1157 */ + { 131, 7, 12, 0, 0, 34816, 84, }, /* 1158 */ + { 131, 15, 12, 0, 0, 34816, 74, }, /* 1159 */ + { 132, 7, 12, 0, 0, 34816, 84, }, /* 1160 */ + { 132, 15, 12, 0, 0, 34816, 74, }, /* 1161 */ + { 74, 7, 12, 0, 0, 34816, 84, }, /* 1162 */ + { 74, 21, 12, 0, 0, 34816, 110, }, /* 1163 */ + { 74, 15, 12, 0, 0, 34816, 74, }, /* 1164 */ + { 57, 7, 12, 0, 0, 34816, 84, }, /* 1165 */ + { 78, 9, 12, 0, 64, 34816, 76, }, /* 1166 */ + { 78, 5, 12, 0, -64, 34816, 78, }, /* 1167 */ + { 78, 15, 12, 0, 0, 34816, 74, }, /* 1168 */ + { 86, 7, 12, 0, 0, 0, 84, }, /* 1169 */ + { 86, 7, 12, 0, 0, 0, 312, }, /* 1170 */ + { 86, 12, 3, 0, 0, 26624, 132, }, /* 1171 */ + { 86, 13, 12, 0, 0, 2048, 144, }, /* 1172 */ + { 93, 13, 12, 0, 0, 2048, 144, }, /* 1173 */ + { 93, 7, 12, 0, 0, 34816, 84, }, /* 1174 */ + { 93, 6, 12, 0, 0, 34816, 96, }, /* 1175 */ + { 93, 9, 12, 0, 32, 34816, 76, }, /* 1176 */ + { 93, 12, 3, 0, 0, 26624, 132, }, /* 1177 */ + { 93, 12, 3, 0, 0, 26624, 164, }, /* 1178 */ + { 93, 12, 3, 0, 0, 26624, 98, }, /* 1179 */ + { 93, 17, 12, 0, 0, 28672, 130, }, /* 1180 */ + { 93, 6, 12, 0, 0, 34816, 138, }, /* 1181 */ + { 93, 5, 12, 0, -32, 34816, 78, }, /* 1182 */ + { 93, 25, 12, 0, 0, 34816, 122, }, /* 1183 */ + { 5, 15, 12, 0, 0, 2048, 74, }, /* 1184 */ + { 89, 7, 12, 0, 0, 34816, 84, }, /* 1185 */ + { 89, 12, 3, 0, 0, 26624, 106, }, /* 1186 */ + { 89, 17, 12, 0, 0, 34816, 130, }, /* 1187 */ + { 5, 6, 12, 0, 0, 0, 148, }, /* 1188 */ + { 5, 21, 12, 0, 0, 28672, 74, }, /* 1189 */ + { 159, 7, 12, 0, 0, 34816, 84, }, /* 1190 */ + { 159, 15, 12, 0, 0, 34816, 74, }, /* 1191 */ + { 87, 7, 12, 0, 0, 0, 84, }, /* 1192 */ + { 87, 12, 3, 0, 0, 26624, 98, }, /* 1193 */ + { 87, 15, 12, 0, 0, 0, 74, }, /* 1194 */ + { 87, 21, 12, 0, 0, 0, 128, }, /* 1195 */ + { 91, 7, 12, 0, 0, 34816, 84, }, /* 1196 */ + { 91, 12, 3, 0, 0, 26624, 98, }, /* 1197 */ + { 91, 21, 12, 0, 0, 34816, 128, }, /* 1198 */ + { 163, 7, 12, 0, 0, 34816, 84, }, /* 1199 */ + { 163, 15, 12, 0, 0, 34816, 74, }, /* 1200 */ + { 160, 7, 12, 0, 0, 34816, 84, }, /* 1201 */ + { 134, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ + { 134, 12, 3, 0, 0, 26624, 106, }, /* 1203 */ + { 134, 7, 12, 0, 0, 18432, 84, }, /* 1204 */ + { 134, 12, 3, 0, 0, 26624, 158, }, /* 1205 */ + { 134, 21, 12, 0, 0, 18432, 128, }, /* 1206 */ + { 134, 21, 12, 0, 0, 18432, 110, }, /* 1207 */ + { 134, 15, 12, 0, 0, 28672, 74, }, /* 1208 */ + { 134, 13, 12, 0, 0, 18432, 144, }, /* 1209 */ + { 134, 12, 3, 0, 0, 26624, 288, }, /* 1210 */ + { 58, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ + { 58, 10, 5, 0, 0, 18432, 154, }, /* 1212 */ + { 58, 7, 12, 0, 0, 18432, 84, }, /* 1213 */ + { 58, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ + { 58, 12, 3, 0, 0, 26624, 98, }, /* 1215 */ + { 58, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ + { 58, 1, 4, 0, 0, 18432, 134, }, /* 1217 */ + { 58, 21, 12, 0, 0, 18432, 128, }, /* 1218 */ + { 137, 7, 12, 0, 0, 18432, 84, }, /* 1219 */ + { 137, 13, 12, 0, 0, 18432, 144, }, /* 1220 */ + { 60, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ + { 60, 7, 12, 0, 0, 18432, 156, }, /* 1222 */ + { 60, 10, 5, 0, 0, 18432, 154, }, /* 1223 */ + { 60, 12, 3, 0, 0, 26624, 158, }, /* 1224 */ + { 60, 13, 12, 0, 0, 18432, 144, }, /* 1225 */ + { 60, 21, 12, 0, 0, 18432, 74, }, /* 1226 */ + { 60, 21, 12, 0, 0, 18432, 128, }, /* 1227 */ + { 70, 7, 12, 0, 0, 18432, 84, }, /* 1228 */ + { 70, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ + { 70, 21, 12, 0, 0, 18432, 74, }, /* 1230 */ + { 62, 12, 3, 0, 0, 26624, 106, }, /* 1231 */ + { 62, 10, 5, 0, 0, 18432, 154, }, /* 1232 */ + { 62, 7, 12, 0, 0, 18432, 84, }, /* 1233 */ + { 62, 10, 3, 0, 0, 18432, 188, }, /* 1234 */ + { 62, 7, 4, 0, 0, 18432, 84, }, /* 1235 */ + { 62, 21, 12, 0, 0, 18432, 128, }, /* 1236 */ + { 62, 21, 12, 0, 0, 18432, 74, }, /* 1237 */ + { 62, 12, 3, 0, 0, 26624, 104, }, /* 1238 */ + { 62, 12, 3, 0, 0, 26624, 98, }, /* 1239 */ + { 62, 13, 12, 0, 0, 18432, 144, }, /* 1240 */ + { 17, 15, 12, 0, 0, 18432, 74, }, /* 1241 */ + { 68, 7, 12, 0, 0, 18432, 84, }, /* 1242 */ + { 68, 10, 5, 0, 0, 18432, 154, }, /* 1243 */ + { 68, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ + { 68, 10, 3, 0, 0, 18432, 188, }, /* 1245 */ + { 68, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ + { 68, 12, 3, 0, 0, 26624, 162, }, /* 1247 */ + { 68, 21, 12, 0, 0, 18432, 128, }, /* 1248 */ + { 68, 21, 12, 0, 0, 18432, 110, }, /* 1249 */ + { 68, 21, 12, 0, 0, 18432, 74, }, /* 1250 */ + { 77, 7, 12, 0, 0, 18432, 84, }, /* 1251 */ + { 77, 21, 12, 0, 0, 18432, 128, }, /* 1252 */ + { 75, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ + { 75, 12, 3, 0, 0, 26624, 106, }, /* 1254 */ + { 75, 10, 5, 0, 0, 18432, 154, }, /* 1255 */ + { 75, 12, 3, 0, 0, 26624, 98, }, /* 1256 */ + { 75, 12, 3, 0, 0, 26624, 158, }, /* 1257 */ + { 75, 13, 12, 0, 0, 18432, 144, }, /* 1258 */ + { 67, 12, 3, 0, 0, 26624, 106, }, /* 1259 */ + { 67, 12, 3, 0, 0, 26836, 106, }, /* 1260 */ + { 67, 10, 5, 0, 0, 18432, 154, }, /* 1261 */ + { 67, 10, 5, 0, 0, 18644, 154, }, /* 1262 */ + { 67, 7, 12, 0, 0, 18432, 84, }, /* 1263 */ + { 107, 12, 3, 0, 0, 26836, 98, }, /* 1264 */ + { 67, 12, 3, 0, 0, 26836, 98, }, /* 1265 */ + { 67, 10, 3, 0, 0, 18432, 160, }, /* 1266 */ + { 67, 10, 3, 0, 0, 18432, 188, }, /* 1267 */ + { 67, 7, 12, 0, 0, 18432, 346, }, /* 1268 */ + { 67, 12, 3, 0, 0, 26624, 98, }, /* 1269 */ + { 98, 7, 12, 0, 0, 18432, 156, }, /* 1270 */ + { 98, 7, 12, 0, 0, 18432, 84, }, /* 1271 */ + { 98, 10, 3, 0, 0, 18432, 160, }, /* 1272 */ + { 98, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ + { 98, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ + { 98, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ + { 98, 10, 3, 0, 0, 18432, 188, }, /* 1276 */ + { 98, 7, 4, 0, 0, 18432, 84, }, /* 1277 */ + { 98, 12, 3, 0, 0, 26624, 164, }, /* 1278 */ + { 98, 7, 12, 0, 0, 18432, 348, }, /* 1279 */ + { 98, 21, 12, 0, 0, 18432, 128, }, /* 1280 */ + { 98, 21, 12, 0, 0, 18432, 74, }, /* 1281 */ + { 98, 12, 3, 0, 0, 26624, 98, }, /* 1282 */ + { 80, 7, 12, 0, 0, 18432, 84, }, /* 1283 */ + { 80, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ + { 80, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ + { 80, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ + { 80, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ + { 80, 21, 12, 0, 0, 18432, 128, }, /* 1288 */ + { 80, 21, 12, 0, 0, 18432, 110, }, /* 1289 */ + { 80, 21, 12, 0, 0, 18432, 74, }, /* 1290 */ + { 80, 13, 12, 0, 0, 18432, 144, }, /* 1291 */ + { 80, 12, 3, 0, 0, 26624, 104, }, /* 1292 */ + { 76, 7, 12, 0, 0, 18432, 84, }, /* 1293 */ + { 76, 10, 3, 0, 0, 18432, 160, }, /* 1294 */ + { 76, 10, 5, 0, 0, 18432, 154, }, /* 1295 */ + { 76, 12, 3, 0, 0, 26624, 106, }, /* 1296 */ + { 76, 12, 3, 0, 0, 26624, 158, }, /* 1297 */ + { 76, 12, 3, 0, 0, 26624, 98, }, /* 1298 */ + { 76, 21, 12, 0, 0, 18432, 74, }, /* 1299 */ + { 76, 13, 12, 0, 0, 18432, 144, }, /* 1300 */ + { 146, 7, 12, 0, 0, 18432, 84, }, /* 1301 */ + { 146, 10, 3, 0, 0, 18432, 160, }, /* 1302 */ + { 146, 10, 5, 0, 0, 18432, 154, }, /* 1303 */ + { 146, 12, 3, 0, 0, 26624, 106, }, /* 1304 */ + { 146, 12, 3, 0, 0, 26624, 158, }, /* 1305 */ + { 146, 12, 3, 0, 0, 26624, 98, }, /* 1306 */ + { 146, 21, 12, 0, 0, 18432, 74, }, /* 1307 */ + { 146, 21, 12, 0, 0, 18432, 128, }, /* 1308 */ + { 146, 21, 12, 0, 0, 18432, 110, }, /* 1309 */ + { 146, 21, 12, 0, 0, 18432, 192, }, /* 1310 */ + { 72, 7, 12, 0, 0, 18432, 84, }, /* 1311 */ + { 72, 10, 5, 0, 0, 18432, 154, }, /* 1312 */ + { 72, 12, 3, 0, 0, 26624, 106, }, /* 1313 */ + { 72, 12, 3, 0, 0, 26624, 158, }, /* 1314 */ + { 72, 21, 12, 0, 0, 18432, 128, }, /* 1315 */ + { 72, 21, 12, 0, 0, 18432, 74, }, /* 1316 */ + { 72, 13, 12, 0, 0, 18432, 144, }, /* 1317 */ + { 63, 7, 12, 0, 0, 18432, 84, }, /* 1318 */ + { 63, 12, 3, 0, 0, 26624, 106, }, /* 1319 */ + { 63, 10, 5, 0, 0, 18432, 154, }, /* 1320 */ + { 63, 10, 3, 0, 0, 18432, 188, }, /* 1321 */ + { 63, 12, 3, 0, 0, 26624, 98, }, /* 1322 */ + { 63, 21, 12, 0, 0, 18432, 74, }, /* 1323 */ + { 63, 13, 12, 0, 0, 18432, 144, }, /* 1324 */ + { 148, 7, 12, 0, 0, 18432, 84, }, /* 1325 */ + { 148, 12, 3, 0, 0, 26624, 106, }, /* 1326 */ + { 148, 10, 5, 0, 0, 18432, 154, }, /* 1327 */ + { 148, 10, 12, 0, 0, 18432, 154, }, /* 1328 */ + { 148, 12, 3, 0, 0, 26624, 158, }, /* 1329 */ + { 148, 13, 12, 0, 0, 18432, 144, }, /* 1330 */ + { 148, 15, 12, 0, 0, 18432, 74, }, /* 1331 */ + { 148, 21, 12, 0, 0, 18432, 128, }, /* 1332 */ + { 148, 26, 12, 0, 0, 18432, 74, }, /* 1333 */ + { 84, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ + { 84, 10, 5, 0, 0, 18432, 154, }, /* 1335 */ + { 84, 12, 3, 0, 0, 26624, 106, }, /* 1336 */ + { 84, 12, 3, 0, 0, 26624, 158, }, /* 1337 */ + { 84, 12, 3, 0, 0, 26624, 98, }, /* 1338 */ + { 84, 21, 12, 0, 0, 18432, 74, }, /* 1339 */ + { 147, 9, 12, 0, 32, 18432, 76, }, /* 1340 */ + { 147, 5, 12, 0, -32, 18432, 78, }, /* 1341 */ + { 147, 13, 12, 0, 0, 18432, 144, }, /* 1342 */ + { 147, 15, 12, 0, 0, 18432, 74, }, /* 1343 */ + { 147, 7, 12, 0, 0, 18432, 84, }, /* 1344 */ + { 164, 7, 12, 0, 0, 18432, 156, }, /* 1345 */ + { 164, 10, 3, 0, 0, 18432, 160, }, /* 1346 */ + { 164, 10, 5, 0, 0, 18432, 154, }, /* 1347 */ + { 164, 12, 3, 0, 0, 26624, 106, }, /* 1348 */ + { 164, 10, 3, 0, 0, 18432, 188, }, /* 1349 */ + { 164, 12, 3, 0, 0, 26624, 158, }, /* 1350 */ + { 164, 7, 4, 0, 0, 18432, 84, }, /* 1351 */ + { 164, 12, 3, 0, 0, 26624, 98, }, /* 1352 */ + { 164, 21, 12, 0, 0, 18432, 128, }, /* 1353 */ + { 164, 21, 12, 0, 0, 18432, 74, }, /* 1354 */ + { 164, 13, 12, 0, 0, 18432, 144, }, /* 1355 */ + { 88, 7, 12, 0, 0, 18432, 84, }, /* 1356 */ + { 88, 10, 5, 0, 0, 18432, 154, }, /* 1357 */ + { 88, 12, 3, 0, 0, 26624, 106, }, /* 1358 */ + { 88, 12, 3, 0, 0, 26624, 158, }, /* 1359 */ + { 88, 21, 12, 0, 0, 18432, 74, }, /* 1360 */ + { 156, 7, 12, 0, 0, 18432, 156, }, /* 1361 */ + { 156, 12, 3, 0, 0, 26624, 106, }, /* 1362 */ + { 156, 12, 3, 0, 0, 18432, 106, }, /* 1363 */ + { 156, 12, 3, 0, 0, 26624, 104, }, /* 1364 */ + { 156, 12, 3, 0, 0, 26624, 158, }, /* 1365 */ + { 156, 10, 5, 0, 0, 18432, 154, }, /* 1366 */ + { 156, 7, 12, 0, 0, 18432, 84, }, /* 1367 */ + { 156, 21, 12, 0, 0, 18432, 74, }, /* 1368 */ + { 156, 21, 12, 0, 0, 18432, 128, }, /* 1369 */ + { 155, 7, 12, 0, 0, 18432, 156, }, /* 1370 */ + { 155, 12, 3, 0, 0, 26624, 106, }, /* 1371 */ + { 155, 10, 5, 0, 0, 18432, 154, }, /* 1372 */ + { 155, 7, 4, 0, 0, 18432, 84, }, /* 1373 */ + { 155, 12, 3, 0, 0, 26624, 350, }, /* 1374 */ + { 155, 12, 3, 0, 0, 26624, 158, }, /* 1375 */ + { 155, 21, 12, 0, 0, 18432, 74, }, /* 1376 */ + { 155, 21, 12, 0, 0, 18432, 128, }, /* 1377 */ + { 155, 7, 12, 0, 0, 18432, 84, }, /* 1378 */ + { 155, 21, 12, 0, 0, 18432, 110, }, /* 1379 */ + { 145, 7, 12, 0, 0, 18432, 84, }, /* 1380 */ + { 96, 7, 12, 0, 0, 18432, 84, }, /* 1381 */ + { 96, 21, 12, 0, 0, 18432, 74, }, /* 1382 */ + { 96, 13, 12, 0, 0, 18432, 144, }, /* 1383 */ + { 152, 7, 12, 0, 0, 18432, 84, }, /* 1384 */ { 152, 10, 5, 0, 0, 18432, 154, }, /* 1385 */ - { 82, 7, 12, 0, 0, 18432, 84, }, /* 1386 */ - { 82, 12, 3, 0, 0, 26624, 106, }, /* 1387 */ - { 82, 12, 3, 0, 0, 26624, 98, }, /* 1388 */ - { 82, 12, 3, 0, 0, 26624, 158, }, /* 1389 */ - { 82, 7, 4, 0, 0, 18432, 84, }, /* 1390 */ - { 82, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ - { 84, 7, 12, 0, 0, 18432, 84, }, /* 1392 */ - { 84, 10, 5, 0, 0, 18432, 154, }, /* 1393 */ - { 84, 12, 3, 0, 0, 26624, 106, }, /* 1394 */ - { 84, 12, 3, 0, 0, 26624, 158, }, /* 1395 */ - { 84, 13, 12, 0, 0, 18432, 144, }, /* 1396 */ - { 157, 7, 12, 0, 0, 18432, 84, }, /* 1397 */ - { 157, 12, 3, 0, 0, 26624, 106, }, /* 1398 */ - { 157, 10, 5, 0, 0, 18432, 154, }, /* 1399 */ - { 157, 21, 12, 0, 0, 18432, 128, }, /* 1400 */ - { 168, 12, 3, 0, 0, 26624, 106, }, /* 1401 */ - { 168, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ - { 168, 10, 5, 0, 0, 18432, 154, }, /* 1403 */ - { 168, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ - { 168, 10, 3, 0, 0, 18432, 188, }, /* 1405 */ - { 168, 12, 3, 0, 0, 26624, 158, }, /* 1406 */ - { 168, 21, 12, 0, 0, 18432, 128, }, /* 1407 */ - { 168, 21, 12, 0, 0, 18432, 74, }, /* 1408 */ - { 168, 13, 12, 0, 0, 18432, 144, }, /* 1409 */ - { 168, 12, 3, 0, 0, 26624, 98, }, /* 1410 */ - { 13, 15, 12, 0, 0, 18432, 74, }, /* 1411 */ - { 13, 21, 12, 0, 0, 18432, 74, }, /* 1412 */ - { 114, 7, 12, 0, 0, 18432, 84, }, /* 1413 */ - { 114, 14, 12, 0, 0, 18432, 84, }, /* 1414 */ - { 114, 21, 12, 0, 0, 18432, 110, }, /* 1415 */ - { 89, 7, 12, 0, 0, 18432, 84, }, /* 1416 */ - { 89, 21, 12, 0, 0, 18432, 74, }, /* 1417 */ - { 125, 7, 12, 0, 0, 18432, 84, }, /* 1418 */ - { 125, 1, 2, 0, 0, 18432, 346, }, /* 1419 */ - { 125, 12, 3, 0, 0, 26624, 104, }, /* 1420 */ - { 125, 12, 3, 0, 0, 26624, 98, }, /* 1421 */ - { 148, 7, 12, 0, 0, 18432, 84, }, /* 1422 */ - { 93, 7, 12, 0, 0, 18432, 84, }, /* 1423 */ - { 93, 12, 3, 0, 0, 26624, 106, }, /* 1424 */ - { 93, 10, 5, 0, 0, 18432, 154, }, /* 1425 */ - { 93, 12, 3, 0, 0, 26624, 158, }, /* 1426 */ - { 93, 13, 12, 0, 0, 18432, 144, }, /* 1427 */ - { 140, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ - { 140, 13, 12, 0, 0, 18432, 144, }, /* 1429 */ - { 140, 21, 12, 0, 0, 18432, 128, }, /* 1430 */ - { 166, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ - { 166, 13, 12, 0, 0, 18432, 144, }, /* 1432 */ - { 137, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ - { 137, 12, 3, 0, 0, 26624, 98, }, /* 1434 */ - { 137, 21, 12, 0, 0, 18432, 128, }, /* 1435 */ - { 138, 7, 12, 0, 0, 18432, 84, }, /* 1436 */ - { 138, 12, 3, 0, 0, 26624, 98, }, /* 1437 */ - { 138, 21, 12, 0, 0, 18432, 128, }, /* 1438 */ - { 138, 21, 12, 0, 0, 18432, 110, }, /* 1439 */ - { 138, 21, 12, 0, 0, 18432, 74, }, /* 1440 */ - { 138, 26, 12, 0, 0, 18432, 74, }, /* 1441 */ - { 138, 6, 12, 0, 0, 18432, 148, }, /* 1442 */ - { 138, 6, 12, 0, 0, 18432, 138, }, /* 1443 */ - { 138, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ - { 138, 15, 12, 0, 0, 18432, 74, }, /* 1445 */ - { 170, 6, 12, 0, 0, 18432, 148, }, /* 1446 */ - { 170, 7, 12, 0, 0, 18432, 84, }, /* 1447 */ - { 170, 7, 7, 0, 0, 18432, 84, }, /* 1448 */ - { 170, 6, 12, 0, 0, 18432, 94, }, /* 1449 */ - { 170, 21, 12, 0, 0, 18432, 74, }, /* 1450 */ - { 170, 21, 12, 0, 0, 18432, 128, }, /* 1451 */ - { 170, 13, 12, 0, 0, 18432, 144, }, /* 1452 */ - { 158, 9, 12, 0, 32, 18432, 76, }, /* 1453 */ - { 158, 5, 12, 0, -32, 18432, 78, }, /* 1454 */ - { 158, 15, 12, 0, 0, 18432, 74, }, /* 1455 */ - { 158, 21, 12, 0, 0, 18432, 110, }, /* 1456 */ - { 158, 21, 12, 0, 0, 18432, 128, }, /* 1457 */ - { 158, 21, 12, 0, 0, 18432, 74, }, /* 1458 */ - { 135, 7, 12, 0, 0, 18432, 84, }, /* 1459 */ - { 135, 12, 3, 0, 0, 26624, 106, }, /* 1460 */ - { 135, 10, 5, 0, 0, 18432, 154, }, /* 1461 */ - { 135, 12, 3, 0, 0, 26624, 132, }, /* 1462 */ - { 135, 6, 12, 0, 0, 18432, 94, }, /* 1463 */ - { 81, 6, 12, 0, 0, 18432, 138, }, /* 1464 */ - { 154, 6, 12, 0, 0, 18432, 138, }, /* 1465 */ - { 30, 21, 12, 0, 0, 28672, 74, }, /* 1466 */ - { 165, 12, 3, 0, 0, 26624, 354, }, /* 1467 */ - { 30, 10, 3, 0, 0, 18432, 356, }, /* 1468 */ - { 81, 7, 12, 0, 0, 18432, 304, }, /* 1469 */ - { 165, 7, 12, 0, 0, 18432, 304, }, /* 1470 */ - { 28, 6, 12, 0, 0, 18432, 94, }, /* 1471 */ - { 154, 7, 12, 0, 0, 18432, 304, }, /* 1472 */ - { 65, 7, 12, 0, 0, 18432, 84, }, /* 1473 */ - { 65, 26, 12, 0, 0, 18432, 74, }, /* 1474 */ - { 65, 12, 3, 0, 0, 26624, 104, }, /* 1475 */ - { 65, 12, 3, 0, 0, 26624, 106, }, /* 1476 */ - { 65, 21, 12, 0, 0, 18432, 128, }, /* 1477 */ - { 99, 1, 2, 0, 0, 6472, 66, }, /* 1478 */ - { 99, 13, 12, 0, 0, 10240, 144, }, /* 1479 */ - { 99, 10, 3, 0, 0, 18432, 358, }, /* 1480 */ - { 99, 10, 3, 0, 0, 18432, 306, }, /* 1481 */ - { 1, 12, 3, 0, 0, 26624, 104, }, /* 1482 */ - { 99, 25, 12, 0, 0, 28672, 360, }, /* 1483 */ - { 99, 13, 12, 0, 0, 10240, 226, }, /* 1484 */ - { 150, 26, 12, 0, 0, 18432, 74, }, /* 1485 */ - { 150, 12, 3, 0, 0, 26624, 104, }, /* 1486 */ - { 150, 21, 12, 0, 0, 18432, 110, }, /* 1487 */ - { 150, 21, 12, 0, 0, 18432, 128, }, /* 1488 */ - { 150, 21, 12, 0, 0, 18432, 74, }, /* 1489 */ - { 44, 12, 3, 0, 0, 26624, 106, }, /* 1490 */ - { 2, 6, 12, 0, 0, 18432, 92, }, /* 1491 */ - { 161, 7, 12, 0, 0, 18432, 84, }, /* 1492 */ - { 161, 12, 3, 0, 0, 26624, 98, }, /* 1493 */ - { 161, 6, 12, 0, 0, 18432, 148, }, /* 1494 */ - { 161, 6, 12, 0, 0, 18432, 138, }, /* 1495 */ - { 161, 13, 12, 0, 0, 18432, 144, }, /* 1496 */ - { 161, 26, 12, 0, 0, 18432, 74, }, /* 1497 */ - { 91, 7, 12, 0, 0, 18432, 84, }, /* 1498 */ - { 91, 12, 3, 0, 0, 26624, 98, }, /* 1499 */ - { 162, 7, 12, 0, 0, 18432, 84, }, /* 1500 */ - { 162, 12, 3, 0, 0, 26624, 98, }, /* 1501 */ - { 162, 13, 12, 0, 0, 18432, 144, }, /* 1502 */ - { 162, 23, 12, 0, 0, 14336, 74, }, /* 1503 */ - { 169, 7, 12, 0, 0, 18432, 84, }, /* 1504 */ - { 169, 6, 12, 0, 0, 18432, 148, }, /* 1505 */ - { 169, 12, 3, 0, 0, 26624, 104, }, /* 1506 */ - { 169, 13, 12, 0, 0, 18432, 144, }, /* 1507 */ - { 94, 7, 12, 0, 0, 18432, 84, }, /* 1508 */ - { 94, 12, 3, 0, 0, 26624, 98, }, /* 1509 */ - { 94, 12, 3, 0, 0, 26624, 164, }, /* 1510 */ - { 94, 13, 12, 0, 0, 18432, 144, }, /* 1511 */ - { 94, 21, 12, 0, 0, 18432, 74, }, /* 1512 */ - { 139, 7, 12, 0, 0, 34816, 84, }, /* 1513 */ - { 139, 15, 12, 0, 0, 34816, 74, }, /* 1514 */ - { 139, 12, 3, 0, 0, 26624, 98, }, /* 1515 */ - { 79, 9, 12, 0, 34, 34816, 76, }, /* 1516 */ - { 79, 5, 12, 0, -34, 34816, 78, }, /* 1517 */ - { 79, 12, 3, 0, 0, 26624, 164, }, /* 1518 */ - { 79, 12, 3, 0, 0, 26624, 106, }, /* 1519 */ - { 79, 12, 3, 0, 0, 26624, 98, }, /* 1520 */ - { 79, 6, 12, 0, 0, 34816, 148, }, /* 1521 */ - { 79, 13, 12, 0, 0, 34816, 144, }, /* 1522 */ - { 79, 21, 12, 0, 0, 34816, 74, }, /* 1523 */ - { 99, 15, 12, 0, 0, 0, 74, }, /* 1524 */ - { 99, 26, 12, 0, 0, 0, 74, }, /* 1525 */ - { 99, 23, 12, 0, 0, 0, 74, }, /* 1526 */ - { 5, 7, 12, 0, 0, 0, 254, }, /* 1527 */ - { 99, 26, 14, 0, 0, 28672, 362, }, /* 1528 */ - { 99, 26, 14, 0, 0, 28672, 364, }, /* 1529 */ - { 98, 2, 14, 0, 0, 18432, 366, }, /* 1530 */ - { 99, 26, 12, 0, 0, 18432, 368, }, /* 1531 */ - { 99, 26, 14, 0, 0, 18432, 370, }, /* 1532 */ - { 99, 26, 14, 0, 0, 18432, 364, }, /* 1533 */ - { 99, 26, 11, 0, 0, 18432, 372, }, /* 1534 */ - { 27, 26, 12, 0, 0, 18432, 74, }, /* 1535 */ - { 99, 26, 14, 0, 0, 18432, 250, }, /* 1536 */ - { 99, 26, 14, 0, 0, 18784, 364, }, /* 1537 */ - { 99, 26, 14, 0, 0, 28672, 374, }, /* 1538 */ - { 99, 26, 14, 0, 0, 28672, 376, }, /* 1539 */ - { 99, 24, 3, 0, 0, 28672, 378, }, /* 1540 */ - { 99, 26, 14, 0, 0, 28672, 380, }, /* 1541 */ - { 99, 1, 3, 0, 0, 6144, 382, }, /* 1542 */ + { 152, 12, 3, 0, 0, 26624, 106, }, /* 1386 */ + { 152, 12, 3, 0, 0, 18432, 158, }, /* 1387 */ + { 152, 21, 12, 0, 0, 18432, 128, }, /* 1388 */ + { 152, 21, 12, 0, 0, 18432, 110, }, /* 1389 */ + { 152, 21, 12, 0, 0, 18432, 74, }, /* 1390 */ + { 152, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ + { 152, 15, 12, 0, 0, 18432, 74, }, /* 1392 */ + { 153, 21, 12, 0, 0, 18432, 74, }, /* 1393 */ + { 153, 21, 12, 0, 0, 18432, 110, }, /* 1394 */ + { 153, 7, 12, 0, 0, 18432, 84, }, /* 1395 */ + { 153, 12, 3, 0, 0, 26624, 106, }, /* 1396 */ + { 153, 10, 5, 0, 0, 18432, 154, }, /* 1397 */ + { 83, 7, 12, 0, 0, 18432, 84, }, /* 1398 */ + { 83, 12, 3, 0, 0, 26624, 106, }, /* 1399 */ + { 83, 12, 3, 0, 0, 26624, 98, }, /* 1400 */ + { 83, 12, 3, 0, 0, 26624, 158, }, /* 1401 */ + { 83, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ + { 83, 13, 12, 0, 0, 18432, 144, }, /* 1403 */ + { 85, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ + { 85, 10, 5, 0, 0, 18432, 154, }, /* 1405 */ + { 85, 12, 3, 0, 0, 26624, 106, }, /* 1406 */ + { 85, 12, 3, 0, 0, 26624, 158, }, /* 1407 */ + { 85, 13, 12, 0, 0, 18432, 144, }, /* 1408 */ + { 173, 7, 12, 0, 0, 18432, 84, }, /* 1409 */ + { 173, 6, 12, 0, 0, 18432, 96, }, /* 1410 */ + { 173, 13, 12, 0, 0, 18432, 144, }, /* 1411 */ + { 157, 7, 12, 0, 0, 18432, 84, }, /* 1412 */ + { 157, 12, 3, 0, 0, 26624, 106, }, /* 1413 */ + { 157, 10, 5, 0, 0, 18432, 154, }, /* 1414 */ + { 157, 21, 12, 0, 0, 18432, 128, }, /* 1415 */ + { 168, 12, 3, 0, 0, 26624, 106, }, /* 1416 */ + { 168, 7, 4, 0, 0, 18432, 84, }, /* 1417 */ + { 168, 10, 5, 0, 0, 18432, 154, }, /* 1418 */ + { 168, 7, 12, 0, 0, 18432, 156, }, /* 1419 */ + { 168, 10, 3, 0, 0, 18432, 188, }, /* 1420 */ + { 168, 12, 3, 0, 0, 26624, 158, }, /* 1421 */ + { 168, 21, 12, 0, 0, 18432, 128, }, /* 1422 */ + { 168, 21, 12, 0, 0, 18432, 74, }, /* 1423 */ + { 168, 13, 12, 0, 0, 18432, 144, }, /* 1424 */ + { 168, 12, 3, 0, 0, 26624, 98, }, /* 1425 */ + { 13, 15, 12, 0, 0, 18432, 74, }, /* 1426 */ + { 13, 21, 12, 0, 0, 18432, 74, }, /* 1427 */ + { 115, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ + { 115, 14, 12, 0, 0, 18432, 84, }, /* 1429 */ + { 115, 21, 12, 0, 0, 18432, 110, }, /* 1430 */ + { 90, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ + { 90, 21, 12, 0, 0, 18432, 74, }, /* 1432 */ + { 126, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ + { 126, 1, 2, 0, 0, 18432, 344, }, /* 1434 */ + { 126, 12, 3, 0, 0, 26624, 104, }, /* 1435 */ + { 126, 12, 3, 0, 0, 26624, 98, }, /* 1436 */ + { 149, 7, 12, 0, 0, 18432, 84, }, /* 1437 */ + { 94, 7, 12, 0, 0, 18432, 84, }, /* 1438 */ + { 94, 12, 3, 0, 0, 26624, 106, }, /* 1439 */ + { 94, 10, 5, 0, 0, 18432, 154, }, /* 1440 */ + { 94, 12, 3, 0, 0, 26624, 158, }, /* 1441 */ + { 94, 13, 12, 0, 0, 18432, 144, }, /* 1442 */ + { 141, 7, 12, 0, 0, 18432, 84, }, /* 1443 */ + { 141, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ + { 141, 21, 12, 0, 0, 18432, 128, }, /* 1445 */ + { 166, 7, 12, 0, 0, 18432, 84, }, /* 1446 */ + { 166, 13, 12, 0, 0, 18432, 144, }, /* 1447 */ + { 138, 7, 12, 0, 0, 18432, 84, }, /* 1448 */ + { 138, 12, 3, 0, 0, 26624, 98, }, /* 1449 */ + { 138, 21, 12, 0, 0, 18432, 128, }, /* 1450 */ + { 139, 7, 12, 0, 0, 18432, 84, }, /* 1451 */ + { 139, 12, 3, 0, 0, 26624, 98, }, /* 1452 */ + { 139, 21, 12, 0, 0, 18432, 128, }, /* 1453 */ + { 139, 21, 12, 0, 0, 18432, 110, }, /* 1454 */ + { 139, 21, 12, 0, 0, 18432, 74, }, /* 1455 */ + { 139, 26, 12, 0, 0, 18432, 74, }, /* 1456 */ + { 139, 6, 12, 0, 0, 18432, 148, }, /* 1457 */ + { 139, 6, 12, 0, 0, 18432, 138, }, /* 1458 */ + { 139, 13, 12, 0, 0, 18432, 144, }, /* 1459 */ + { 139, 15, 12, 0, 0, 18432, 74, }, /* 1460 */ + { 170, 6, 12, 0, 0, 18432, 148, }, /* 1461 */ + { 170, 7, 12, 0, 0, 18432, 84, }, /* 1462 */ + { 170, 7, 7, 0, 0, 18432, 84, }, /* 1463 */ + { 170, 6, 12, 0, 0, 18432, 94, }, /* 1464 */ + { 170, 21, 12, 0, 0, 18432, 74, }, /* 1465 */ + { 170, 21, 12, 0, 0, 18432, 128, }, /* 1466 */ + { 170, 13, 12, 0, 0, 18432, 144, }, /* 1467 */ + { 158, 9, 12, 0, 32, 18432, 76, }, /* 1468 */ + { 158, 5, 12, 0, -32, 18432, 78, }, /* 1469 */ + { 158, 15, 12, 0, 0, 18432, 74, }, /* 1470 */ + { 158, 21, 12, 0, 0, 18432, 110, }, /* 1471 */ + { 158, 21, 12, 0, 0, 18432, 128, }, /* 1472 */ + { 158, 21, 12, 0, 0, 18432, 74, }, /* 1473 */ + { 174, 9, 12, 0, 27, 18432, 76, }, /* 1474 */ + { 174, 5, 12, 0, -27, 18432, 78, }, /* 1475 */ + { 136, 7, 12, 0, 0, 18432, 84, }, /* 1476 */ + { 136, 12, 3, 0, 0, 26624, 106, }, /* 1477 */ + { 136, 10, 5, 0, 0, 18432, 154, }, /* 1478 */ + { 136, 12, 3, 0, 0, 26624, 132, }, /* 1479 */ + { 136, 6, 12, 0, 0, 18432, 94, }, /* 1480 */ + { 82, 6, 12, 0, 0, 18432, 138, }, /* 1481 */ + { 154, 6, 12, 0, 0, 18432, 138, }, /* 1482 */ + { 30, 21, 12, 0, 0, 28672, 74, }, /* 1483 */ + { 165, 12, 3, 0, 0, 26624, 352, }, /* 1484 */ + { 30, 10, 3, 0, 0, 18432, 354, }, /* 1485 */ + { 30, 6, 12, 0, 0, 18432, 356, }, /* 1486 */ + { 82, 7, 12, 0, 0, 18432, 302, }, /* 1487 */ + { 165, 7, 12, 0, 0, 18432, 302, }, /* 1488 */ + { 28, 6, 12, 0, 0, 18432, 94, }, /* 1489 */ + { 154, 7, 12, 0, 0, 18432, 302, }, /* 1490 */ + { 65, 7, 12, 0, 0, 18432, 84, }, /* 1491 */ + { 65, 26, 12, 0, 0, 18432, 74, }, /* 1492 */ + { 65, 12, 3, 0, 0, 26624, 104, }, /* 1493 */ + { 65, 12, 3, 0, 0, 26624, 106, }, /* 1494 */ + { 65, 21, 12, 0, 0, 18432, 128, }, /* 1495 */ + { 100, 1, 2, 0, 0, 6504, 66, }, /* 1496 */ + { 100, 13, 12, 0, 0, 10240, 144, }, /* 1497 */ + { 100, 10, 3, 0, 0, 18432, 358, }, /* 1498 */ + { 100, 10, 3, 0, 0, 18432, 304, }, /* 1499 */ + { 1, 12, 3, 0, 0, 26624, 104, }, /* 1500 */ + { 100, 25, 12, 0, 0, 28672, 360, }, /* 1501 */ + { 100, 13, 12, 0, 0, 10240, 226, }, /* 1502 */ + { 151, 26, 12, 0, 0, 18432, 74, }, /* 1503 */ + { 151, 12, 3, 0, 0, 26624, 104, }, /* 1504 */ + { 151, 21, 12, 0, 0, 18432, 110, }, /* 1505 */ + { 151, 21, 12, 0, 0, 18432, 128, }, /* 1506 */ + { 151, 21, 12, 0, 0, 18432, 74, }, /* 1507 */ + { 44, 12, 3, 0, 0, 26624, 106, }, /* 1508 */ + { 2, 6, 12, 0, 0, 18432, 92, }, /* 1509 */ + { 161, 7, 12, 0, 0, 18432, 84, }, /* 1510 */ + { 161, 12, 3, 0, 0, 26624, 98, }, /* 1511 */ + { 161, 6, 12, 0, 0, 18432, 148, }, /* 1512 */ + { 161, 6, 12, 0, 0, 18432, 138, }, /* 1513 */ + { 161, 13, 12, 0, 0, 18432, 144, }, /* 1514 */ + { 161, 26, 12, 0, 0, 18432, 74, }, /* 1515 */ + { 92, 7, 12, 0, 0, 18432, 84, }, /* 1516 */ + { 92, 12, 3, 0, 0, 26624, 98, }, /* 1517 */ + { 162, 7, 12, 0, 0, 18432, 84, }, /* 1518 */ + { 162, 12, 3, 0, 0, 26624, 98, }, /* 1519 */ + { 162, 13, 12, 0, 0, 18432, 144, }, /* 1520 */ + { 162, 23, 12, 0, 0, 14336, 74, }, /* 1521 */ + { 169, 7, 12, 0, 0, 18432, 84, }, /* 1522 */ + { 169, 6, 12, 0, 0, 18432, 148, }, /* 1523 */ + { 169, 12, 3, 0, 0, 26624, 104, }, /* 1524 */ + { 169, 13, 12, 0, 0, 18432, 144, }, /* 1525 */ + { 95, 7, 12, 0, 0, 18432, 84, }, /* 1526 */ + { 95, 12, 3, 0, 0, 26624, 98, }, /* 1527 */ + { 95, 12, 3, 0, 0, 26624, 164, }, /* 1528 */ + { 95, 13, 12, 0, 0, 18432, 144, }, /* 1529 */ + { 95, 21, 12, 0, 0, 18432, 74, }, /* 1530 */ + { 172, 7, 12, 0, 0, 18432, 84, }, /* 1531 */ + { 172, 12, 3, 0, 0, 26624, 106, }, /* 1532 */ + { 172, 6, 12, 0, 0, 18432, 148, }, /* 1533 */ + { 140, 7, 12, 0, 0, 34816, 84, }, /* 1534 */ + { 140, 15, 12, 0, 0, 34816, 74, }, /* 1535 */ + { 140, 12, 3, 0, 0, 26624, 98, }, /* 1536 */ + { 79, 9, 12, 0, 34, 34816, 76, }, /* 1537 */ + { 79, 5, 12, 0, -34, 34816, 78, }, /* 1538 */ + { 79, 12, 3, 0, 0, 26624, 164, }, /* 1539 */ + { 79, 12, 3, 0, 0, 26624, 106, }, /* 1540 */ + { 79, 12, 3, 0, 0, 26624, 98, }, /* 1541 */ + { 79, 6, 12, 0, 0, 34816, 148, }, /* 1542 */ + { 79, 13, 12, 0, 0, 34816, 144, }, /* 1543 */ + { 79, 21, 12, 0, 0, 34816, 74, }, /* 1544 */ + { 100, 15, 12, 0, 0, 0, 74, }, /* 1545 */ + { 100, 26, 12, 0, 0, 0, 74, }, /* 1546 */ + { 100, 23, 12, 0, 0, 0, 74, }, /* 1547 */ + { 5, 7, 12, 0, 0, 0, 256, }, /* 1548 */ + { 100, 26, 14, 0, 0, 28672, 362, }, /* 1549 */ + { 99, 2, 14, 0, 0, 18432, 364, }, /* 1550 */ + { 100, 26, 12, 0, 0, 18432, 366, }, /* 1551 */ + { 100, 26, 14, 0, 0, 18432, 368, }, /* 1552 */ + { 100, 26, 14, 0, 0, 18432, 362, }, /* 1553 */ + { 100, 26, 11, 0, 0, 18432, 370, }, /* 1554 */ + { 27, 26, 12, 0, 0, 18432, 74, }, /* 1555 */ + { 100, 26, 14, 0, 0, 18432, 252, }, /* 1556 */ + { 100, 26, 14, 0, 0, 18816, 362, }, /* 1557 */ + { 100, 26, 14, 0, 0, 28672, 372, }, /* 1558 */ + { 100, 26, 14, 0, 0, 28672, 374, }, /* 1559 */ + { 100, 24, 3, 0, 0, 28672, 376, }, /* 1560 */ + { 100, 26, 14, 0, 0, 28672, 378, }, /* 1561 */ + { 100, 1, 3, 0, 0, 6144, 380, }, /* 1562 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -2144,8 +2172,8 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 213,213,213,213,214,215,216,217,146,146,218,146,219,220,221,222, /* U+16800 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17000 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17800 */ -223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224, /* U+18000 */ -223,223,223,223,223,223,225,225,225,226,227,146,146,146,146,146, /* U+18800 */ +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+18000 */ +223,223,223,223,223,223,224,224,224,225,226,227,146,146,146,146, /* U+18800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */ @@ -2156,10 +2184,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,236,237,236,236,236,238,239,240, /* U+1C800 */ 241,242,243,244,245,246,247,146,248,249,250,251,252,253,254,255, /* U+1D000 */ 256,256,256,256,257,258,146,146,146,146,146,146,146,146,259,146, /* U+1D800 */ -260,261,262,146,146,263,146,146,146,264,146,265,146,146,146,266, /* U+1E000 */ -267,268,269,270,270,270,270,270,271,272,273,270,274,275,270,270, /* U+1E800 */ -276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291, /* U+1F000 */ -292,293,294,295,296,297,236,298,281,281,281,281,281,281,281,299, /* U+1F800 */ +260,261,262,146,146,263,146,146,146,264,146,265,146,266,146,267, /* U+1E000 */ +268,269,270,271,271,271,271,271,272,273,274,271,275,276,271,271, /* U+1E800 */ +277,278,279,280,281,282,283,284,285,286,287,288,289,290,236,291, /* U+1F000 */ +292,293,294,295,296,297,236,298,282,282,282,282,282,282,282,299, /* U+1F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */ @@ -2182,23 +2210,23 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,300,101,101, /* U+2A000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,101,301,101, /* U+2B000 */ -302,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B000 */ +301,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,303,101,101, /* U+2C800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,302,101,101, /* U+2C800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */ -101,101,101,101,101,101,101,304,101,101,101,101,305,146,146,146, /* U+2E800 */ +101,101,101,101,101,101,101,303,101,101,101,101,304,146,146,146, /* U+2E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */ -129,129,129,129,306,146,146,146,146,146,146,146,146,146,146,307, /* U+2F800 */ +129,129,129,129,305,146,146,146,146,146,146,146,146,146,146,306, /* U+2F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */ -101,101,101,101,101,101,308,101,101,101,101,101,101,101,101,101, /* U+31000 */ +101,101,101,101,101,101,307,101,101,101,101,101,101,101,101,101, /* U+31000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+31800 */ -101,101,101,101,101,101,101,309,146,146,146,146,146,146,146,146, /* U+32000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32800 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32800 */ +101,101,101,101,101,101,101,101,308,146,146,146,146,146,146,146, /* U+33000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */ @@ -2223,7 +2251,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+3F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+3F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */ @@ -2255,7 +2283,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+4F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+4F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */ @@ -2287,7 +2315,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+5F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+5F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */ @@ -2319,7 +2347,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+6F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+6F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */ @@ -2351,7 +2379,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+7F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+7F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */ @@ -2383,7 +2411,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+8F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+8F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */ @@ -2415,7 +2443,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+9F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+9F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */ @@ -2447,7 +2475,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+AF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+AF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */ @@ -2479,7 +2507,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+BF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+BF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */ @@ -2511,7 +2539,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+CF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+CF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */ @@ -2543,9 +2571,9 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+DF800 */ -310,311,312,313,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0000 */ -311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+DF800 */ +309,310,311,312,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0000 */ +310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */ @@ -2575,7 +2603,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+EF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+EF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */ @@ -2607,7 +2635,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+FF800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+FF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */ @@ -2639,10 +2667,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+10F800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 80384 bytes, block = 128 */ /* block 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 4, 0, 0, @@ -2696,7 +2724,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 5 */ 140, 70,141,140, 70, 70, 70,142,140,143,144,144,145, 70, 70, 70, - 70, 70,146, 70, 93, 70, 70, 70, 70, 70, 70, 70, 70,147,148, 70, + 70, 70,146, 70, 93, 93, 70, 70, 70, 70, 70, 70, 70,147,148, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 149,149,150,149,149,149,149,149,149,151,151,152,153,152,152,152, 154,154, 46, 46, 46, 46,151,155,151,155,155,155,151,156,151,151, @@ -2707,7 +2735,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 6 */ 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, 174,177,176,178,176,176,176,176,176,176,176,176,176,176,176,176, -179,176,176,180,181,179,176,176,176,176,176,176,176,182,179,176, +176,176,176,179,180,181,176,176,176,176,176,176,176,182,181,176, 183,184,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,185,176,176,186,176,176,176,176,176,176,176,176,176,187, 176,176,176,176,176,176,176,176,188,189,189,189,189,176,190,176, @@ -2757,419 +2785,419 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 11 */ 291,291,291,291,291,291,291,292,290,293,294,196,196,295,295,296, 297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, -298,298,299,298,298,298,298,298,298,298,298,298,298,298,298,298, -300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,300, -302,300,300,303,300,304,302,304,297,297,297,297,297,297,297,297, -305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305, -305,305,305,305,305,305,305,305,305,305,305,297,297,297,297,305, -305,305,305,302,306,297,297,297,297,297,297,297,297,297,297,297, +298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, +299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,299, +301,299,299,302,299,299,301,299,297,297,297,297,297,297,297,297, +303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303, +303,303,303,303,303,303,303,303,303,303,303,297,297,297,297,303, +303,303,303,301,304,297,297,297,297,297,297,297,297,297,297,297, /* block 12 */ -307,307,307,307,307,308,309,309,310,311,311,312,313,314,315,315, -316,316,316,316,316,316,316,316,316,316,316,317,318,319,319,320, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -322,321,321,321,321,321,321,321,321,321,321,323,323,323,323,323, -323,323,323,324,325,325,316,326,327,316,316,316,316,316,316,316, -328,328,328,328,328,328,328,328,328,328,311,329,329,314,321,321, -324,321,321,330,321,321,321,321,321,321,321,321,321,321,321,321, +305,305,305,305,305,306,307,307,308,309,309,310,311,312,313,313, +314,314,314,314,314,314,314,314,314,314,314,315,316,317,317,318, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +320,319,319,319,319,319,319,319,319,319,319,321,321,321,321,321, +321,321,321,322,323,323,314,324,325,314,314,314,314,314,314,314, +326,326,326,326,326,326,326,326,326,326,309,327,327,312,319,319, +322,319,319,328,319,319,319,319,319,319,319,319,319,319,319,319, /* block 13 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,331,321,316,316,316,316,316,316,332,308,315,333, -333,316,316,332,316,334,334,332,332,315,333,333,333,316,321,321, -335,335,335,335,335,335,335,335,335,335,321,321,321,336,336,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,329,319,314,314,314,314,314,314,330,306,313,331, +331,314,314,330,314,332,332,330,330,313,331,331,331,314,319,319, +333,333,333,333,333,333,333,333,333,333,319,319,319,334,334,319, /* block 14 */ -337,337,337,338,338,338,338,338,338,338,338,339,338,339,340,341, -342,343,342,342,342,342,342,342,342,342,342,342,342,342,342,342, +335,335,335,336,336,336,336,336,336,336,336,337,336,337,338,339, +340,341,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, 342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342, -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -345,345,345,345,345,345,345,345,345,345,345,340,340,342,342,342, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +343,343,343,343,343,343,343,343,343,343,343,338,338,340,340,340, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 15 */ -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,347,347,347,347,347,347,347,347,347,347, -347,346,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350, -350,350,350,350,351,351,352,353,354,355,356,297,297,357,358,358, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345, +345,344,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348, +348,348,348,348,349,349,350,351,352,353,354,297,297,355,356,356, /* block 16 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,360,360,361,361,362,360,360,360,360,360, -360,360,360,360,362,360,360,360,362,360,360,360,360,363,297,297, -364,364,364,364,364,364,365,366,364,366,364,364,364,366,366,297, -367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367, -367,367,367,367,367,367,367,367,367,368,368,368,297,297,369,297, -342,342,342,342,342,342,342,342,342,342,342,340,340,340,340,340, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, +357,357,357,357,357,357,358,358,359,359,360,358,358,358,358,358, +358,358,358,358,360,358,358,358,360,358,358,358,358,361,297,297, +362,362,362,362,362,362,363,364,362,364,362,362,362,364,364,297, +365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, +365,365,365,365,365,365,365,365,365,366,366,366,297,297,367,297, +340,340,340,340,340,340,340,340,340,340,340,338,338,338,338,338, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 17 */ -321,321,321,321,321,321,321,321,370,321,321,321,321,321,321,340, -307,307,340,340,340,340,340,316,333,333,333,333,333,333,333,333, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,334,327,327,333,327,327,327, -333,333,333,371,316,316,316,316,316,316,316,316,316,316,316,316, -372,372,308,326,326,326,326,326,326,326,333,333,333,333,333,333, -326,326,326,373,326,326,326,326,326,326,326,326,326,326,326,316, +319,319,319,319,319,319,319,319,368,319,319,319,319,319,319,319, +305,305,338,338,338,338,338,314,331,331,331,331,331,331,331,331, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,332,325,325,331,325,325,325, +331,331,331,369,314,314,314,314,314,314,314,314,314,314,314,314, +370,370,306,324,324,324,324,324,324,324,331,331,331,331,331,331, +324,324,324,371,324,324,324,324,324,324,324,324,324,324,324,314, /* block 18 */ -374,374,374,375,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,374,375,378,376,375,375, -375,374,374,374,374,374,374,374,374,375,375,375,375,379,375,375, -376,380,381,176,176,374,374,374,377,377,377,377,377,377,377,377, -376,376,374,374,382,383,384,384,384,384,384,384,384,384,384,384, -385,386,376,376,376,376,376,376,377,377,377,377,377,377,377,377, +372,372,372,373,374,374,374,374,374,374,374,374,374,374,374,374, +374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,372,373,376,374,373,373, +373,372,372,372,372,372,372,372,372,373,373,373,373,377,373,373, +374,378,379,176,176,372,372,372,375,375,375,375,375,375,375,375, +374,374,372,372,380,381,382,382,382,382,382,382,382,382,382,382, +383,384,374,374,374,374,374,374,375,375,375,375,375,375,375,375, /* block 19 */ -387,388,389,389,196,387,387,387,387,387,387,387,387,196,196,387, -387,196,196,387,387,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,390,390,390,390,390,196,390,390,390,390,390,390, -390,196,390,196,196,196,390,390,390,390,196,196,391,387,392,389, -389,388,388,388,388,196,196,389,389,196,196,389,389,393,387,196, -196,196,196,196,196,196,196,392,196,196,196,196,390,390,196,390, -387,387,388,388,196,196,394,394,394,394,394,394,394,394,394,394, -390,390,395,395,396,396,396,396,396,396,397,395,387,398,399,196, +385,386,387,387,196,385,385,385,385,385,385,385,385,196,196,385, +385,196,196,385,385,388,388,388,388,388,388,388,388,388,388,388, +388,388,388,388,388,388,388,388,388,196,388,388,388,388,388,388, +388,196,388,196,196,196,388,388,388,388,196,196,389,385,390,387, +387,386,386,386,386,196,196,387,387,196,196,387,387,391,385,196, +196,196,196,196,196,196,196,390,196,196,196,196,388,388,196,388, +385,385,386,386,196,196,392,392,392,392,392,392,392,392,392,392, +388,388,393,393,394,394,394,394,394,394,395,393,385,396,397,196, /* block 20 */ -196,400,400,401,196,402,402,402,402,402,402,196,196,196,196,402, -402,196,196,402,402,402,402,402,402,402,402,402,402,402,402,402, -402,402,402,402,402,402,402,402,402,196,402,402,402,402,402,402, -402,196,402,402,196,402,402,196,402,402,196,196,403,196,401,401, -401,400,400,196,196,196,196,400,400,196,196,400,400,404,196,196, -196,400,196,196,196,196,196,196,196,402,402,402,402,196,402,196, -196,196,196,196,196,196,405,405,405,405,405,405,405,405,405,405, -400,406,402,402,402,400,407,196,196,196,196,196,196,196,196,196, +196,398,398,399,196,400,400,400,400,400,400,196,196,196,196,400, +400,196,196,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,196,400,400,400,400,400,400, +400,196,400,400,196,400,400,196,400,400,196,196,401,196,399,399, +399,398,398,196,196,196,196,398,398,196,196,398,398,402,196,196, +196,398,196,196,196,196,196,196,196,400,400,400,400,196,400,196, +196,196,196,196,196,196,403,403,403,403,403,403,403,403,403,403, +398,404,400,400,400,398,405,196,196,196,196,196,196,196,196,196, /* block 21 */ -196,408,408,409,196,410,410,410,410,410,410,410,410,410,196,410, -410,410,196,410,410,411,411,411,411,411,411,411,411,411,411,411, -411,411,411,411,411,411,411,411,411,196,411,411,411,411,411,411, -411,196,411,411,196,411,411,411,411,411,196,196,412,410,409,409, -409,408,408,408,408,408,196,408,408,409,196,409,409,413,196,196, -410,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -410,410,408,408,196,196,414,414,414,414,414,414,414,414,414,414, -415,416,196,196,196,196,196,196,196,411,408,417,408,412,412,412, +196,406,406,407,196,408,408,408,408,408,408,408,408,408,196,408, +408,408,196,408,408,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,196,409,409,409,409,409,409, +409,196,409,409,196,409,409,409,409,409,196,196,410,408,407,407, +407,406,406,406,406,406,196,406,406,407,196,407,407,411,196,196, +408,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +408,408,406,406,196,196,412,412,412,412,412,412,412,412,412,412, +413,414,196,196,196,196,196,196,196,409,406,415,406,410,410,410, /* block 22 */ -196,418,419,419,196,420,420,420,420,420,420,420,420,196,196,420, -420,196,196,420,420,421,421,421,421,421,421,421,421,421,421,421, -421,421,421,421,421,421,421,421,421,196,421,421,421,421,421,421, -421,196,421,421,196,421,421,421,421,421,196,196,422,420,423,418, -419,418,418,418,418,196,196,419,419,196,196,419,419,424,196,196, -196,196,196,196,196,425,418,423,196,196,196,196,421,421,196,421, -420,420,418,418,196,196,426,426,426,426,426,426,426,426,426,426, -427,421,428,428,428,428,428,428,196,196,196,196,196,196,196,196, +196,416,417,417,196,418,418,418,418,418,418,418,418,196,196,418, +418,196,196,418,418,419,419,419,419,419,419,419,419,419,419,419, +419,419,419,419,419,419,419,419,419,196,419,419,419,419,419,419, +419,196,419,419,196,419,419,419,419,419,196,196,420,418,421,416, +417,416,416,416,416,196,196,417,417,196,196,417,417,422,196,196, +196,196,196,196,196,423,416,421,196,196,196,196,419,419,196,419, +418,418,416,416,196,196,424,424,424,424,424,424,424,424,424,424, +425,419,426,426,426,426,426,426,196,196,196,196,196,196,196,196, /* block 23 */ -196,196,429,430,196,430,430,430,430,430,430,196,196,196,430,430, -430,196,430,430,430,430,196,196,196,430,430,196,430,196,430,430, -196,196,196,430,430,196,196,196,430,430,430,196,196,196,430,430, -430,430,430,430,430,430,430,430,430,430,196,196,196,196,431,432, -429,432,432,196,196,196,432,432,432,196,432,432,432,433,196,196, -430,196,196,196,196,196,196,431,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,434,434,434,434,434,434,434,434,434,434, -435,435,435,436,437,437,437,437,437,438,437,196,196,196,196,196, +196,196,427,428,196,428,428,428,428,428,428,196,196,196,428,428, +428,196,428,428,428,428,196,196,196,428,428,196,428,196,428,428, +196,196,196,428,428,196,196,196,428,428,428,196,196,196,428,428, +428,428,428,428,428,428,428,428,428,428,196,196,196,196,429,430, +427,430,430,196,196,196,430,430,430,196,430,430,430,431,196,196, +428,196,196,196,196,196,196,429,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,432,432,432,432,432,432,432,432,432,432, +433,433,433,434,435,435,435,435,435,436,435,196,196,196,196,196, /* block 24 */ -439,440,440,440,439,441,441,441,441,441,441,441,441,196,441,441, -441,196,441,441,441,442,442,442,442,442,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,196,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,442,196,196,443,441,439,439, -439,440,440,440,440,196,439,439,439,196,439,439,439,444,196,196, -196,196,196,196,196,439,439,196,442,442,442,196,196,441,196,196, -441,441,439,439,196,196,445,445,445,445,445,445,445,445,445,445, -196,196,196,196,196,196,196,446,447,447,447,447,447,447,447,448, +437,438,438,438,437,439,439,439,439,439,439,439,439,196,439,439, +439,196,439,439,439,440,440,440,440,440,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,196,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,440,196,196,441,439,437,437, +437,438,438,438,438,196,437,437,437,196,437,437,437,442,196,196, +196,196,196,196,196,437,437,196,440,440,440,196,439,439,196,196, +439,439,437,437,196,196,443,443,443,443,443,443,443,443,443,443, +196,196,196,196,196,196,196,444,445,445,445,445,445,445,445,446, /* block 25 */ -449,450,451,451,452,449,449,449,449,449,449,449,449,196,449,449, -449,196,449,449,449,449,449,449,449,449,449,449,449,449,449,449, -449,449,449,449,449,449,449,449,449,196,449,449,449,449,449,449, -449,449,449,449,196,449,449,449,449,449,196,196,453,449,451,454, -455,451,455,451,451,196,454,455,455,196,455,455,450,456,196,196, -196,196,196,196,196,455,455,196,196,196,196,196,196,449,449,196, -449,449,450,450,196,196,457,457,457,457,457,457,457,457,457,457, -196,449,449,451,196,196,196,196,196,196,196,196,196,196,196,196, +447,448,449,449,450,447,447,447,447,447,447,447,447,196,447,447, +447,196,447,447,447,447,447,447,447,447,447,447,447,447,447,447, +447,447,447,447,447,447,447,447,447,196,447,447,447,447,447,447, +447,447,447,447,196,447,447,447,447,447,196,196,451,447,449,452, +453,449,453,449,449,196,452,453,453,196,453,453,448,454,196,196, +196,196,196,196,196,453,453,196,196,196,196,196,447,447,447,196, +447,447,448,448,196,196,455,455,455,455,455,455,455,455,455,455, +196,447,447,449,196,196,196,196,196,196,196,196,196,196,196,196, /* block 26 */ -458,458,459,459,460,460,460,460,460,460,460,460,460,196,460,460, -460,196,460,460,460,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,462,462,460,463,459, -459,458,458,458,458,196,459,459,459,196,459,459,459,462,464,465, -196,196,196,196,460,460,460,463,466,466,466,466,466,466,466,460, -460,460,458,458,196,196,467,467,467,467,467,467,467,467,467,467, -466,466,466,466,466,466,466,466,466,465,460,460,460,460,460,460, +456,456,457,457,458,458,458,458,458,458,458,458,458,196,458,458, +458,196,458,458,458,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,460,460,458,461,457, +457,456,456,456,456,196,457,457,457,196,457,457,457,460,462,463, +196,196,196,196,458,458,458,461,464,464,464,464,464,464,464,458, +458,458,456,456,196,196,465,465,465,465,465,465,465,465,465,465, +464,464,464,464,464,464,464,464,464,463,458,458,458,458,458,458, /* block 27 */ -196,468,469,469,196,470,470,470,470,470,470,470,470,470,470,470, -470,470,470,470,470,470,470,196,196,196,470,470,470,470,470,470, -470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470, -470,470,196,470,470,470,470,470,470,470,470,470,196,470,196,196, -470,470,470,470,470,470,470,196,196,196,471,196,196,196,196,472, -469,469,468,468,468,196,468,196,469,469,469,469,469,469,469,472, -196,196,196,196,196,196,473,473,473,473,473,473,473,473,473,473, -196,196,469,469,474,196,196,196,196,196,196,196,196,196,196,196, +196,466,467,467,196,468,468,468,468,468,468,468,468,468,468,468, +468,468,468,468,468,468,468,196,196,196,468,468,468,468,468,468, +468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468, +468,468,196,468,468,468,468,468,468,468,468,468,196,468,196,196, +468,468,468,468,468,468,468,196,196,196,469,196,196,196,196,470, +467,467,466,466,466,196,466,196,467,467,467,467,467,467,467,470, +196,196,196,196,196,196,471,471,471,471,471,471,471,471,471,471, +196,196,467,467,472,196,196,196,196,196,196,196,196,196,196,196, /* block 28 */ -196,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,476,475,477,476,476,476,476,476,476,478,196,196,196,196,479, -480,480,480,480,480,475,481,482,482,482,482,482,482,476,482,483, -484,484,484,484,484,484,484,484,484,484,485,485,196,196,196,196, +196,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,474,473,475,474,474,474,474,474,474,476,196,196,196,196,477, +478,478,478,478,478,473,479,480,480,480,480,480,480,474,480,481, +482,482,482,482,482,482,482,482,482,482,483,483,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 29 */ -196,486,486,196,486,196,486,486,486,486,486,196,486,486,486,486, -486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486, -486,486,486,486,196,486,196,486,486,486,486,486,486,486,486,486, -486,487,486,488,487,487,487,487,487,487,489,487,487,486,196,196, -490,490,490,490,490,196,491,196,492,492,492,492,492,487,493,196, -494,494,494,494,494,494,494,494,494,494,196,196,486,486,486,486, +196,484,484,196,484,196,484,484,484,484,484,196,484,484,484,484, +484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484, +484,484,484,484,196,484,196,484,484,484,484,484,484,484,484,484, +484,485,484,486,485,485,485,485,485,485,487,485,485,484,196,196, +488,488,488,488,488,196,489,196,490,490,490,490,490,485,491,196, +492,492,492,492,492,492,492,492,492,492,196,196,484,484,484,484, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 30 */ -495,496,496,496,497,497,497,497,498,497,497,497,497,498,498,498, -498,498,498,496,497,496,496,496,499,499,496,496,496,496,496,496, -500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501, -501,501,501,501,496,499,496,499,496,499,502,503,502,503,504,504, -495,495,495,495,495,495,495,495,196,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,196,196,196, -196,505,505,505,505,505,505,506,505,506,505,505,505,505,505,507, +493,494,494,494,495,495,495,495,496,495,495,495,495,496,496,496, +496,496,496,494,495,494,494,494,497,497,494,494,494,494,494,494, +498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499, +499,499,499,499,494,497,494,497,494,497,500,501,500,501,502,502, +493,493,493,493,493,493,493,493,196,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,196,196,196, +196,503,503,503,503,503,503,504,503,504,503,503,503,503,503,505, /* block 31 */ -505,505,508,508,509,497,499,499,495,495,495,495,495,505,505,505, -505,505,505,505,505,505,505,505,196,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,196,496,496, -496,496,496,496,496,496,499,496,496,496,496,496,496,196,496,496, -497,497,497,497,497,510,510,510,510,497,497,196,196,196,196,196, +503,503,506,506,507,495,497,497,493,493,493,493,493,503,503,503, +503,503,503,503,503,503,503,503,196,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,196,494,494, +494,494,494,494,494,494,497,494,494,494,494,494,494,196,494,494, +495,495,495,495,495,508,508,508,508,495,495,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 32 */ -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,512,512,513,513,513, -513,514,513,513,513,513,513,515,512,516,516,514,514,513,513,511, -517,517,517,517,517,517,517,517,517,517,518,518,519,519,519,519, -511,511,511,511,511,511,514,514,513,513,511,511,511,511,513,513, -513,511,512,520,520,511,511,512,512,520,520,520,520,520,511,511, -511,513,513,513,513,511,511,511,511,511,511,511,511,511,511,511, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,510,510,511,511,511, +511,512,511,511,511,511,511,513,510,514,514,512,512,511,511,509, +515,515,515,515,515,515,515,515,515,515,516,516,517,517,517,517, +509,509,509,509,509,509,512,512,511,511,509,509,509,509,511,511, +511,509,510,518,518,509,509,510,510,518,518,518,518,518,509,509, +509,511,511,511,511,509,509,509,509,509,509,509,509,509,509,509, /* block 33 */ -511,511,513,512,514,513,513,520,520,520,520,520,520,521,511,520, -522,522,522,522,522,522,522,522,522,522,520,520,512,513,523,523, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,196,524,196,196,196,196,196,524,196,196, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,526,527,525,525,525, +509,509,511,510,512,511,511,518,518,518,518,518,518,519,509,518, +520,520,520,520,520,520,520,520,520,520,518,518,510,511,521,521, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,196,522,196,196,196,196,196,522,196,196, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,524,525,523,523,523, /* block 34 */ -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,529, -530,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527, +528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, /* block 35 */ -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, /* block 36 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,196,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,196,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 37 */ -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,196, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,196, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 38 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,196,196,534,534,534, -535,536,537,536,536,536,536,537,537,538,538,538,538,538,538,538, -538,538,539,539,539,539,539,539,539,539,539,539,539,196,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,196,196,532,532,532, +533,534,535,534,534,534,534,535,535,536,536,536,536,536,536,536, +536,536,537,537,537,537,537,537,537,537,537,537,537,196,196,196, /* block 39 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -540,540,540,540,540,540,540,540,540,540,196,196,196,196,196,196, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -542,542,542,542,542,542,196,196,543,543,543,543,543,543,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +538,538,538,538,538,538,538,538,538,538,196,196,196,196,196,196, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +540,540,540,540,540,540,196,196,541,541,541,541,541,541,196,196, /* block 40 */ -544,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 41 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 42 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,546,547,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,544,545,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 43 */ -548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549, -549,549,549,549,549,549,549,549,549,549,549,550,551,196,196,196, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,553,553,553,554,554, -554,552,552,552,552,552,552,552,552,196,196,196,196,196,196,196, +546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547, +547,547,547,547,547,547,547,547,547,547,547,548,549,196,196,196, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,551,551,551,552,552, +552,550,550,550,550,550,550,550,550,196,196,196,196,196,196,196, /* block 44 */ -555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555, -555,555,556,556,557,558,196,196,196,196,196,196,196,196,196,555, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,560,560,561,562,562,196,196,196,196,196,196,196,196,196, -563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563, -563,563,564,564,196,196,196,196,196,196,196,196,196,196,196,196, -565,565,565,565,565,565,565,565,565,565,565,565,565,196,565,565, -565,196,566,566,196,196,196,196,196,196,196,196,196,196,196,196, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,554,554,555,556,196,196,196,196,196,196,196,196,196,553, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +557,557,558,558,559,560,560,196,196,196,196,196,196,196,196,196, +561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561, +561,561,562,562,196,196,196,196,196,196,196,196,196,196,196,196, +563,563,563,563,563,563,563,563,563,563,563,563,563,196,563,563, +563,196,564,564,196,196,196,196,196,196,196,196,196,196,196,196, /* block 45 */ -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,568,568,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,569,569,570,571,571,571,571,571,571,571,570,570, -570,570,570,570,570,570,571,570,570,572,572,572,572,572,572,572, -572,572,573,572,574,574,575,576,577,577,575,578,567,572,196,196, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,566,566,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,567,567,568,569,569,569,569,569,569,569,568,568, +568,568,568,568,568,568,569,568,568,570,570,570,570,570,570,570, +570,570,571,570,572,572,573,574,575,575,573,576,577,570,196,196, +578,578,578,578,578,578,578,578,578,578,196,196,196,196,196,196, 579,579,579,579,579,579,579,579,579,579,196,196,196,196,196,196, -580,580,580,580,580,580,580,580,580,580,196,196,196,196,196,196, /* block 46 */ -581,581,582,583,584,582,585,581,584,586,587,588,588,588,589,588, -590,590,590,590,590,590,590,590,590,590,196,196,196,196,196,196, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,592,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,196,196,196,196,196,196,196, +580,580,581,582,583,581,584,580,583,585,586,587,587,587,588,587, +589,589,589,589,589,589,589,589,589,589,196,196,196,196,196,196, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,591,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,196, /* block 47 */ -591,591,591,591,591,593,593,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,594,591,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,196,196,196,196,196,196,196,196,196,196, +590,590,590,590,590,592,592,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,593,590,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,196,196,196,196,196,196,196,196,196,196, /* block 48 */ -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,196, -596,596,596,597,597,597,597,596,596,597,597,597,196,196,196,196, -597,597,596,597,597,597,597,597,597,598,598,598,196,196,196,196, -599,196,196,196,600,600,601,601,601,601,601,601,601,601,601,601, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,196,196, -602,602,602,602,602,196,196,196,196,196,196,196,196,196,196,196, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,196, +595,595,595,596,596,596,596,595,595,596,596,596,196,196,196,196, +596,596,595,596,596,596,596,596,596,597,597,597,196,196,196,196, +598,196,196,196,599,599,600,600,600,600,600,600,600,600,600,600, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,196,196, +601,601,601,601,601,196,196,196,196,196,196,196,196,196,196,196, /* block 49 */ -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,196,196,196,196, -603,603,603,603,603,604,604,604,603,603,604,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,196,196,196,196,196,196, -605,605,605,605,605,605,605,605,605,605,606,196,196,196,607,607, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,196,196,196,196, +602,602,602,602,602,603,603,603,602,602,603,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,196,196,196,196,196,196, +604,604,604,604,604,604,604,604,604,604,605,196,196,196,606,606, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, /* block 50 */ -609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609, -609,609,609,609,609,609,609,610,610,611,611,610,196,196,612,612, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,614,615,614,615,615,615,615,615,615,615,196, -616,617,615,617,617,615,615,615,615,615,615,615,615,614,614,614, -614,614,614,615,615,618,618,618,618,618,618,618,618,196,196,618, +608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +608,608,608,608,608,608,608,609,609,610,610,609,196,196,611,611, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,613,614,613,614,614,614,614,614,614,614,196, +615,616,614,616,616,614,614,614,614,614,614,614,614,613,613,613, +613,613,613,614,614,617,617,617,617,617,617,617,617,196,196,617, /* block 51 */ -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -620,620,620,620,620,620,620,621,622,622,622,622,620,620,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,623,624, -624,176,176,176,176,176,176,176,176,176,176,176,624,624,624,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +619,619,619,619,619,619,619,620,621,621,621,621,619,619,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,622,623, +623,176,176,176,176,176,176,176,176,176,176,176,623,623,623,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 52 */ -625,625,625,625,626,627,627,627,627,627,627,627,627,627,627,627, +624,624,624,624,625,626,626,626,626,626,626,627,627,626,626,626, +626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627, 627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,628,629,625,625,625,625,625,629,625,629,626,626, -626,626,625,629,630,627,627,627,627,627,627,627,627,196,631,631, +627,627,627,627,628,629,624,624,624,624,624,629,624,629,625,625, +625,625,624,629,630,627,627,627,627,627,627,627,627,196,631,631, 632,632,632,632,632,632,632,632,632,632,631,631,633,634,631,631, 633,635,635,635,635,635,635,635,635,635,635,628,628,628,628,628, 628,628,628,628,635,635,635,635,635,635,635,635,635,631,631,631, @@ -3178,51 +3206,51 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 636,636,637,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,637,636,636,636,636,637,637,636,636,639,640,636,636,638,638, -641,641,641,641,641,641,641,641,641,641,638,638,638,638,638,638, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,643,644,645,645,644,644,644,645,644,645, -645,645,646,646,196,196,196,196,196,196,196,196,647,647,647,647, +641,641,641,641,641,641,641,641,641,641,642,638,638,638,642,642, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,644,645,646,646,645,645,645,646,645,646, +646,646,647,647,196,196,196,196,196,196,196,196,648,648,648,648, /* block 54 */ -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,649,649,649,649,649,649,649,649,650,650,650,650, -650,650,650,650,649,649,651,652,196,196,196,653,653,654,654,654, -655,655,655,655,655,655,655,655,655,655,196,196,196,648,648,648, -656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,658,658,658,659,658,658,660,660, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,650,650,650,650,650,650,650,650,651,651,651,651, +651,651,651,651,650,650,652,653,196,196,196,654,654,655,655,655, +656,656,656,656,656,656,656,656,656,656,196,196,196,649,649,649, +657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,659,659,659,660,659,659,661,661, /* block 55 */ -661,662,663,664,665,666,667,668,669,275,276,196,196,196,196,196, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,196,196,670,670,670, -671,671,671,671,671,671,671,671,196,196,196,196,196,196,196,196, -672,673,672,674,673,675,675,676,675,676,677,673,676,676,673,673, -676,678,673,673,673,673,673,673,673,679,680,681,681,675,681,681, -681,681,682,683,684,680,680,685,686,686,687,196,196,196,196,196, +662,663,664,665,666,667,668,669,670,275,276,196,196,196,196,196, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,196,196,671,671,671, +672,672,672,672,672,672,672,672,196,196,196,196,196,196,196,196, +673,674,673,675,674,676,677,678,679,680,681,674,680,680,674,674, +680,682,683,674,674,674,674,674,674,684,685,686,687,688,687,687, +687,687,689,690,691,692,692,693,694,694,695,196,196,196,196,196, /* block 56 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70,256,256,256,256,256,688,149,149,149,149, + 70, 70, 70, 70, 70, 70,256,256,256,256,256,696,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, -149,149,149,149,149,149,149,149,149,149,149,149,149,689,689,689, -689,689,150,149,149,149,689,689,689,689,689, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70,690,691, 70, 70, 70,692, 70, 70, +149,149,149,149,149,149,149,149,149,149,149,149,149,697,697,697, +697,697,150,149,149,149,697,697,697,697,697, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70,698,699, 70, 70, 70,700, 70, 70, /* block 57 */ - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,693, 70, - 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,695,695,695,695,695, -695,695,695,695,696,695,695,695,696,695,695,695,695,695,695,695, -695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,697, -698,698,189,189,176,176,176,176,176,176,176,176,176,176,176,176, -189,189,189,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,176,176,176,699,176,700,176,176,176,176,176, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,701, 70, + 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,149,149,149,149,149, +149,149,149,149,150,149,149,149,150,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,703, +704,704,189,189,176,176,176,176,176,176,176,176,176,176,176,176, +189,189,189,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,176,176,176,705,176,706,176,176,176,176,176, /* block 58 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, @@ -3231,12 +3259,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -701,702, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +707,708, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 59 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,703,704, 70, 70,705, 70, + 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,709,710, 70, 70,711, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66, @@ -3245,123 +3273,123 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 60 */ -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -708,706,708,706,708,706,708,706,196,707,196,707,196,707,196,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -709,709,710,710,710,710,711,711,712,712,713,713,714,714,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +714,712,714,712,714,712,714,712,196,713,196,713,196,713,196,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +715,715,716,716,716,716,717,717,718,718,719,719,720,720,196,196, /* block 61 */ -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -706,706,717,718,717,196,708,717,707,707,719,719,720,201,721,201, -201,201,717,718,717,196,708,717,722,722,722,722,720,201,201,201, -706,706,708,723,196,196,708,708,707,707,724,724,196,201,201,201, -706,706,708,725,708,250,708,708,707,707,726,726,255,201,201,201, -196,196,717,718,717,196,708,717,727,727,728,728,720,201,201,196, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +712,712,723,724,723,196,714,723,713,713,725,725,726,201,727,201, +201,201,723,724,723,196,714,723,728,728,728,728,726,201,201,201, +712,712,714,729,196,196,714,714,713,713,730,730,196,201,201,201, +712,712,714,731,714,250,714,714,713,713,732,732,255,201,201,201, +196,196,723,724,723,196,714,723,733,733,734,734,726,201,201,196, /* block 62 */ -729,729,729,729,729,729,729,729,729,729,729, 51,730,731,732,733, -734,734,734,734,734,734,735, 43,736,737,738,739,739,740,738,739, - 43, 43, 43, 43,741, 43, 43,742,743,744,745,746,747,748,749,750, -751,751,752,752,752, 43, 43, 43, 43, 49, 57, 43,753,754, 43,755, -756, 43, 43, 43,757,758,759,754,754,753, 43, 43, 43, 43, 43,760, - 43, 43, 50,761,755, 43, 43, 43, 43, 43,762, 43, 43,763, 43,729, - 51,764,764,764,764,765,766,767,768,769,770,770,770,770,770,770, - 54,696,196,196, 54, 54, 54, 54, 54, 54,771,772,773,774,775,695, +735,735,735,735,735,735,735,735,735,735,735, 51,736,737,738,739, +740,740,740,740,740,740,741, 43,742,743,744,745,745,746,744,745, + 43, 43, 43, 43,747, 43, 43,748,749,750,751,752,753,754,755,756, +757,757,758,758,758, 43, 43, 43, 43, 49, 57, 43,759,760, 43,761, +762, 43, 43, 43,763,764,765,760,760,759, 43, 43, 43, 43, 43,766, + 43, 43, 50,767,761, 43, 43, 43, 43, 43,768, 43, 43,769, 43,735, + 51,770,770,770,770,771,772,773,774,775,776,776,776,776,776,776, + 54,777,196,196, 54, 54, 54, 54, 54, 54,778,779,780,781,782,783, /* block 63 */ - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,771,772,773,774,775,196, -695,695,695,695,695,695,695,695,695,695,695,695,695,196,196,196, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -777,777,777,777,777,777,777,777,777,777,777,777,777,778,778,778, -778,777,778,779,778,777,777,189,189,189,189,777,777,777,777,777, -780,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,778,779,780,781,782,196, +783,783,783,783,783,783,783,783,783,783,783,783,783,196,196,196, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,784,784,784,784,784,784,784,784,784,784,784,784,784,784, +785,785,785,785,785,785,785,785,785,785,785,785,785,786,786,786, +786,785,786,787,786,785,785,189,189,189,189,785,785,785,785,785, +788,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 64 */ -781,781,782,781,781,781,781,782,781,781,783,782,782,782,783,783, -782,782,782,783,781,782,781,781,784,782,782,782,782,782,781,781, -781,781,785,781,782,781,786,781,782,787,788,789,782,782,790,783, -782,782,791,782,783,792,792,792,792,793,781,781,783,783,782,782, -794,794,794,794,794,782,783,783,795,795,781,794,781,781,796,510, +789,789,790,789,789,789,789,790,789,789,791,790,790,790,791,791, +790,790,790,791,789,790,789,789,792,790,790,790,790,790,789,789, +789,789,793,789,790,789,794,789,790,795,796,797,790,790,798,791, +790,790,799,790,791,800,800,800,800,801,789,789,791,791,790,790, +802,802,802,802,802,790,791,791,803,803,789,802,789,789,804,508, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, -798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798, +805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, +806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806, /* block 65 */ -799,799,799, 65, 66,799,799,799,799, 58,781,781,196,196,196,196, - 50, 50, 50, 50,800,801,801,801,801,801, 50, 50,802,802,802,802, - 50,802,802, 50,802,802, 50,802, 45,801,801,802,802,802, 50, 45, -802,802, 45, 45, 45, 45,802,802, 45, 45, 45, 45,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,802,802, 50, 50, -802,802, 50,802, 50,802,802,802,802,802,802,802, 45,802, 45, 45, - 45, 45, 45, 45,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +807,807,807, 65, 66,807,807,807,807, 58,789,789,196,196,196,196, + 50, 50, 50, 50,808,809,809,809,809,809, 50, 50,810,810,810,810, + 50,810,810, 50,810,810, 50,810, 45,809,809,810,810,810, 50, 45, +810,810, 45, 45, 45, 45,810,810, 45, 45, 45, 45,810,810,810,810, +810,810,810,810,810,810,810,810,810,810,810,810,810,810, 50, 50, +810,810, 50,810, 50,810,810,810,810,810,810,810, 45,810, 45, 45, + 45, 45, 45, 45,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 66 */ - 50, 50,803, 50, 50, 50, 50,803,804,804,804,804,804,804, 50, 50, - 50, 50,805, 53, 50,804, 50, 50, 50, 50, 50, 50, 50, 50,803,804, -804,804,804, 50,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, - 50, 50, 50,804, 50,804, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, - 50, 50,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804,804,804,804,804,804,804, 50, 50,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, + 50, 50,811, 50, 50, 50, 50,811,812,812,812,812,812,812, 50, 50, + 50, 50,813, 53, 50,812, 50, 50, 50, 50, 50, 50, 50, 50,811,812, +812,812,812, 50,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, + 50, 50, 50,812, 50,812, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, + 50, 50,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,812,812,812,812,812,812,812,812, 50, 50,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, /* block 67 */ -804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, 50,804, -804,804,804, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50,804,804, 50, 50,804, 50,804,804, 50,804, 50, 50, 50, 50, -804,804,804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804, 50, 50, -804,804, 50, 50, 50, 50,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, -804,804,804,804,804, 50,804,804, 50, 50,804,804,804,804,804, 50, +812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, 50,812, +812,812,812, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50,812,812, 50, 50,812, 50,812,812, 50,812, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812, 50, 50, +812,812, 50, 50, 50, 50,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, +812,812,812,812,812, 50,812,812, 50, 50,812,812,812,812,812, 50, /* block 68 */ - 45, 45, 45, 45, 45, 45, 45, 45,806,807,806,807, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, 45, - 50, 50, 45, 45, 45, 45, 45, 45, 47,809,810, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811, 45, 50, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45,814,815,814,815, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, + 50, 50, 45, 45, 45, 45, 45, 45, 47,817,818, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819, 45, 50, 45, 45, 45, /* block 69 */ - 45, 45, 45, 45, 45, 45, 45, 45,812, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45,811, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45,819, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,802,802, 45,802, 45, 45, 45, 45, 45, 45, 45, 45, + 50, 50, 50, 50,810,810, 45,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, -802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, - 50, 50,802, 45, 45, 45, 45, 45, 45,808,808,808,808, 47, 47, 47, -808, 47, 47,808, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, + 50, 50,810, 45, 45, 45, 45, 45, 45,816,816,816,816, 47, 47, 47, +816, 47, 47,816, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, /* block 70 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 71 */ - 58, 58, 58, 58, 58, 58, 58, 58,814,814,814,814,814,814,814,814, -814,814,814,814,814,814,814,814,814,814,814,814,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,815,815,815,815,815,815,815,815,815,815, -815,815,816,815,815,815,815,815,815,815,815,815,815,815,815,815, -817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817, -817,817,817,817,817,817,817,817,817,817, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58,821,821,821,821,821,821,821,821, +821,821,821,821,821,821,821,821,821,821,821,821,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,822,822,822,822,822,822,822,822,822,822, +822,822,823,822,822,822,822,822,822,822,822,822,822,822,822,822, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 72 */ @@ -3377,132 +3405,132 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 73 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -802,802, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,802,802, -802,802,802,802,802,802,801, 50, 45, 45, 45, 45,802,802,802,802, -801, 50, 45, 45, 45, 45,802,802, 45, 45,802,802, 45, 45, 45,802, -802,802,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45,802, 45,802, 45, 45,802,802,802,802,802,802, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,800,800,818,818, 50, +810,810, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,810,810, +810,810,810,810,810,810,809, 50, 45, 45, 45, 45,810,810,810,810, +809, 50, 45, 45, 45, 45,810,810, 45, 45,810,810, 45, 45, 45,810, +810,810,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45,810, 45,810, 45, 45,810,810,810,810,810,810, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,808,808,825,825, 50, /* block 74 */ - 47, 47, 47, 47, 47,819,802,812,812,812,812,812,812,812, 47,812, -812, 47,812, 45,808,808,812,812, 47,812,812,812,812,820,812,812, - 47,812, 47, 47,812,812, 47,812,812,812, 47,812,812,812, 47, 47, -812,812,812,812,812,812,812,812, 47, 47, 47,812,812,812,812,812, -801,812,801,812,812,812,812,812,808,808,808,808,808,808,808,808, -808,808,808,808,812,812,812,812,812,812,812,812,812,812,812, 47, -801,819,819,801,812, 47, 47,812, 47,812,812,812,812,819,819,821, -812,812,812,812,812,812,812,812,812,812,812, 47,812,812, 47,808, + 47, 47, 47, 47, 47,810,810, 45, 45, 45, 45, 45, 45, 45, 47, 45, + 45, 47, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45,826, 45, 45, + 47, 45, 47, 47, 45, 45, 47, 45, 45, 45, 47, 45, 45, 45, 47, 47, + 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +809, 45,809, 45, 45, 45, 45, 45,816,816,816,816,816,816,816,816, +816,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, +809,810,810,809, 45, 47, 47, 45, 47, 45, 45, 45, 45,810,810, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 47,816, /* block 75 */ -812,812,812,812,812,812, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -812,812, 47,808, 47, 47, 47, 47,812, 47,812, 47, 47,812,812,812, - 47,808,812,812,812,812,812, 47,812,812,808,808,822,812,812,812, - 47, 47,812,812,812,812,812,812,812,812,812,812,812,808,808,812, -812,812,812,812,808,808,812,812, 47,812,812,812,812,812,808, 47, -812, 47,812, 47,808,812,812,812,812,812,812,812,812,812,812,812, -812,812,812,812,812,812,812,812,812, 47,808,812,812,812,812,812, - 47, 47,808,808, 47,808,812, 47, 47,820,808,812,812,808,812,812, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47,816, 47, 47, 47, 47, 45, 47, 45, 47, 47, 45, 45, 45, + 47,816, 45, 45, 45, 45, 45, 47, 45, 45,816,816,819, 45, 45, 45, + 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, + 45, 45, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45, 45,816, 47, + 45, 47, 45, 47,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,816, 45, 45, 45, 45, 45, + 47, 47,816,816, 47,816, 45, 47, 47,826,816, 45, 45,816, 45, 45, /* block 76 */ -812,812, 47,812,812,808, 45, 45, 47, 47,823,823,820,820,812, 47, -812,812, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, - 45, 47, 45, 45, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47, 45, 45,816, 45, 45, 47, 47,827,827,826,826, 45, 47, + 45, 45, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, + 45, 47, 45, 45, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,808, 45,808, 45, - 45, 45, 45,808,808,808, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 47, 47,812,812,812,758,759,758,759,758,759,758,759, -758,759,758,759,758,759, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,816, 45,816, 45, + 45, 45, 45,816,816,816, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 47, 47, 45, 45, 45,764,765,764,765,764,765,764,765, +764,765,764,765,764,765, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 77 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 45,808,808,808, 45, 45, 45, 45, 45, 45, 45, 45, + 58, 58, 58, 58, 45,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808, - 50, 50, 50,804,804,806,807, 50,804,804, 50,804, 50,804, 50, 50, - 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50,804,804,804,804,806,807,806,807,806,807,806,807,806,807, +816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816, + 50, 50, 50,812,812,814,815, 50,812,812, 50,812, 50,812, 50, 50, + 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50,812,812,812,812,814,815,814,815,814,815,814,815,814,815, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 78 */ -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, /* block 79 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,800,800, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,808,808, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 80 */ - 50, 50, 50,806,807,806,807,806,807,806,807,806,807,806,807,806, -807,806,807,806,807,806,807,806,807, 50, 50,804, 50, 50, 50, 50, -804, 50, 50,804,804,804, 50, 50,804,804,804,804,804,804,804,804, - 50, 50, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, -804,804, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50,804, -804,804,804, 50,804,804, 50, 50,806,807,806,807, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50,804, 50, 50,804,804, 50, 50,806,807, 50, 50, + 50, 50, 50,814,815,814,815,814,815,814,815,814,815,814,815,814, +815,814,815,814,815,814,815,814,815, 50, 50,812, 50, 50, 50, 50, +812, 50, 50,812,812,812, 50, 50,812,812,812,812,812,812,812,812, + 50, 50, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, +812,812, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50,812, +812,812,812, 50,812,812, 50, 50,814,815,814,815, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50,812, 50, 50,812,812, 50, 50,814,815, 50, 50, /* block 81 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50,804,804, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804,804,804, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812,812,812, /* block 82 */ -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804, 50, 50, 50,804,804,804,804,804,804,804,804, 50,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50,804, 50, - 50, 50, 50,804,804,804, 50, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812, 50, 50, 50,812,812,812,812,812,812,812,812, 50,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,812, 50, + 50, 50, 50,812,812,812, 50, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, 50, 50, 50, 50, /* block 83 */ 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45, -808, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +816, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45,813,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45,820,820, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, /* block 84 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,825, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,829, 45, /* block 85 */ -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, - 65, 66,828,829,830,831,832, 65, 66, 65, 66, 65, 66,833,834,835, -836, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,696,695,837,837, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, + 65, 66,832,833,834,835,836, 65, 66, 65, 66, 65, 66,837,838,839, +840, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,777,783,841,841, /* block 86 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, @@ -3511,598 +3539,598 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, -246,247,246,247,838,839,839,839,839,839,839,246,247,246,247,840, -840,840,246,247,196,196,196,196,196,841,841,841,842,843,842,842, +246,247,246,247,842,843,843,843,843,843,843,246,247,246,247,844, +844,844,246,247,196,196,196,196,196,845,845,845,846,847,846,846, /* block 87 */ -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,196,844,196,196,196,196,196,844,196,196, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,196,196,196,196,196,196,196,846, -847,196,196,196,196,196,196,196,196,196,196,196,196,196,196,848, - -/* block 88 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,196,848,196,196,196,196,196,848,196,196, +849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, +849,849,849,849,849,849,849,849,196,196,196,196,196,196,196,850, +851,196,196,196,196,196,196,196,196,196,196,196,196,196,196,852, + +/* block 88 */ +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, /* block 89 */ - 43, 43,850,851,850,851, 43, 43, 43,850,851, 43,850,851, 43, 43, - 43, 43, 43, 43, 43, 43, 43,852, 43, 43,734, 43,850,851, 43, 43, -850,851,758,759,758,759,758,759,758,759, 43, 43, 43, 43,754,853, -854,855, 43, 43, 43, 43, 43, 43, 43, 43,734,734,856, 43, 43, 43, -734,857,738,858, 43, 43, 43, 43, 43, 43, 43, 43,859, 43,859,859, - 45, 45, 43,754,754,758,759,758,759,758,759,758,759,734,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 43, 43,854,855,854,855, 43, 43, 43,854,855, 43,854,855, 43, 43, + 43, 43, 43, 43, 43, 43, 43,856, 43, 43,740, 43,854,855, 43, 43, +854,855,764,765,764,765,764,765,764,765, 43, 43, 43, 43,760,857, +858,859, 43, 43, 43, 43, 43, 43, 43, 43,740,740,860, 43, 43, 43, +740,861,744,862, 43, 43, 43, 43, 43, 43, 43, 43,863, 43,863,863, + 45, 45, 43,760,760,764,765,764,765,764,765,764,765,740,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, /* block 90 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,196,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,196,196,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,196,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,196,196,196,196,196,196,196,196,196,196,196,196, /* block 91 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, /* block 92 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -861,861,862,862,861,861,861,861,861,861,861,861,861,861,863,863, +865,865,866,866,865,865,865,865,865,865,865,865,865,865,867,867, /* block 93 */ -729,864,865,866,781,867,868,869,870,871,872,873,874,875,874,875, -876,877, 45,878,876,877,876,877,876,877,876,877,879,880,881,881, - 45,869,869,869,869,869,869,869,869,869,882,882,882,882,883,883, -884,885,885,885,885,885,781,886,869,869,869,887,888,889,890,890, -196,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +735,868,869,870,789,871,872,873,874,875,876,877,878,879,878,879, +880,881, 45,882,880,881,880,881,880,881,880,881,883,884,885,885, + 45,873,873,873,873,873,873,873,873,873,886,886,886,886,887,887, +888,889,889,889,889,889,789,890,873,873,873,891,892,893,894,894, +196,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 94 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,196,196,892,892,893,893,894,894,891, -895,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,897,898,899,899,896, - -/* block 95 */ -196,196,196,196,196,900,900,900,900,900,900,900,900,900,900,900, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,196,196,896,896,897,897,898,898,895, +899,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -196,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,902,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, - -/* block 96 */ -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -903,903,904,904,904,904,903,903,903,903,903,903,903,903,903,903, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,196,196,196,196,196,196,196,196,196,861, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +900,900,900,900,900,900,900,900,900,900,900,901,902,903,903,900, -/* block 97 */ +/* block 95 */ +196,196,196,196,196,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +196,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,905,906,906,196, -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,907,907,907,907,907,907,907,907, -781, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,906,906,906,510, +905,905,905,905,906,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -/* block 98 */ -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,908,903,908,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -903,903,903,903,903,903,903,903,903,903,903,903,781,781,781,781, +/* block 96 */ +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +907,907,908,908,908,908,907,907,907,907,907,907,907,907,907,907, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,196,196,196,196,196,196,196,196,196,865, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, + +/* block 97 */ 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,910,910,196, +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,911,911,911,911,911,911,911,911, +789, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,903, +909,909,909,909,909,909,909,909,909,909,909,909,910,910,910,508, + +/* block 98 */ +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,912,907,912,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +907,907,907,907,907,907,907,907,907,907,907,907,789,789,789,789, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,907, /* block 99 */ -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,510,510,510,510,510,510,781,781,781,781,903,903,903,903,903, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,508,508,508,508,508,508,789,789,789,789,907,907,907,907,907, /* block 100 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,781,781, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,781, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,789, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,789, /* block 101 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 102 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 103 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,912,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,916,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 104 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 105 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,196,196,196, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,196,196,196,196,196,196,196,196,196, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,915,915,915,915,915,915,916,917, - -/* block 106 */ -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +915,915,915,915,915,915,915,915,915,915,915,915,915,196,196,196, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,196,196,196,196,196,196,196,196,196, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,919,919,919,919,919,919,920,921, + +/* block 106 */ +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, /* block 107 */ -918,918,918,918,918,918,918,918,918,918,918,918,919,920,921,921, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -922,922,922,922,922,922,922,922,922,922,918,918,196,196,196,196, +922,922,922,922,922,922,922,922,922,922,922,922,923,924,925,925, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +926,926,926,926,926,926,926,926,926,926,922,922,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -275,276,275,276,275,276,275,276,275,276,923,924,275,276,275,276, +275,276,275,276,275,276,275,276,275,276,927,928,275,276,275,276, 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,275,276,925,281, -283,283,283,926,849,849,849,849,849,849,849,849,927,927,926,928, +275,276,275,276,275,276,275,276,275,276,275,276,275,276,929,281, +283,283,283,930,853,853,853,853,853,853,853,853,931,931,930,932, /* block 108 */ 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,929,929,849,849, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,931,931,931,931,931,931,931,931,931,931, -932,932,933,934,935,935,935,934,196,196,196,196,196,196,196,196, +275,276,275,276,275,276,275,276,275,276,275,276,933,933,853,853, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,935,935,935,935,935,935,935,935,935,935, +936,936,937,938,939,939,939,938,196,196,196,196,196,196,196,196, /* block 109 */ -936,936,936,936,936,936,936,936, 46, 46, 46, 46, 46, 46, 46, 46, +940,940,940,940,940,940,940,940, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,151,151,151,151,151,151,151,151,151, 46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -695, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,937, 65, 66, +783, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,941, 65, 66, /* block 110 */ - 65, 66, 65, 66, 65, 66, 65, 66,151,938,938, 65, 66,939, 70, 93, - 65, 66, 65, 66,940, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,941,942,943,944,941, 70, -945,946,947,948, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66,949,950,951, 65, 66, 65, 66,952, 65, 66,196,196, - 65, 66,196, 70,196, 70, 65, 66, 65, 66, 65, 66,953,196,196,196, + 65, 66, 65, 66, 65, 66, 65, 66,151,942,942, 65, 66,943, 70, 93, + 65, 66, 65, 66,944, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,945,946,947,948,945, 70, +949,950,951,952, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66,953,954,955, 65, 66, 65, 66,956, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,957,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,695,695,695, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, +196,149,783,783,783, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, /* block 111 */ -954,954,955,954,954,954,956,954,954,954,954,955,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,957,957,955,955,957,958,958,958,958,956,196,196,196, -959,959,959,960,960,960,961,961,962,963,196,196,196,196,196,196, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,965,965,966,966,196,196,196,196,196,196,196,196, - -/* block 112 */ -967,967,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +958,958,959,958,958,958,960,958,958,958,958,959,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,961,961,959,959,961,962,962,962,962,960,196,196,196, +963,963,963,964,964,964,965,965,966,967,196,196,196,196,196,196, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,967,967,967,967,967,967,967,967,967,967,967,967, -967,967,967,967,969,970,196,196,196,196,196,196,196,196,971,971, -972,972,972,972,972,972,972,972,972,972,196,196,196,196,196,196, -378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378, -378,973,376,974,376,376,376,376,385,385,385,376,385,376,376,374, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,969,969,970,970,196,196,196,196,196,196,196,196, + +/* block 112 */ +971,971,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,971,971,971,971,971,971,971,971,971,971,971,971, +971,971,971,971,973,974,196,196,196,196,196,196,196,196,975,975, +976,976,976,976,976,976,976,976,976,976,196,196,196,196,196,196, +376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, +376,977,374,978,374,374,374,374,383,383,383,374,383,374,374,372, /* block 113 */ -975,975,975,975,975,975,975,975,975,975,976,976,976,976,976,976, -976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976, -976,976,976,976,976,976,977,977,977,977,977,978,978,978,979,980, -981,981,981,981,981,981,981,981,981,981,981,981,981,981,981,981, -981,981,981,981,981,981,981,982,982,982,982,982,982,982,982,982, -982,982,983,984,196,196,196,196,196,196,196,196,196,196,196,985, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,196,196,196, +979,979,979,979,979,979,979,979,979,979,980,980,980,980,980,980, +980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,980, +980,980,980,980,980,980,981,981,981,981,981,982,982,982,983,984, +985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,985, +985,985,985,985,985,985,985,986,986,986,986,986,986,986,986,986, +986,986,987,988,196,196,196,196,196,196,196,196,196,196,196,989, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,196,196,196, /* block 114 */ -986,986,986,987,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,989,987,987,986,986,986,986,987,987,986,986,987,987, -990,991,991,991,991,991,991,992,993,993,991,991,991,991,196,994, -995,995,995,995,995,995,995,995,995,995,196,196,196,196,991,991, -511,511,511,511,511,521,996,511,511,511,511,511,511,511,511,511, -522,522,522,522,522,522,522,522,522,522,511,511,511,511,511,196, +990,990,990,991,992,992,992,992,992,993,993,993,992,992,992,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,994,991,991,990,990,990,990,991,991,990,990,991,991, +995,996,996,996,996,996,996,997,998,998,996,996,996,996,196,999, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,196,196,996,996, +509,509,509,509,509,519,1001,509,509,509,509,509,509,509,509,509, +520,520,520,520,520,520,520,520,520,520,509,509,509,509,509,196, /* block 115 */ -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,998,998,998,998,998,998,999, -999,998,998,999,999,998,998,196,196,196,196,196,196,196,196,196, -997,997,997,998,997,997,997,997,997,997,997,997,998,999,196,196, -1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,1001,1002,1002,1002, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -996,511,511,511,511,511,511,523,523,523,511,520,521,520,511,511, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1003,1003,1003,1003,1003,1003,1004, +1004,1003,1003,1004,1004,1003,1003,196,196,196,196,196,196,196,196,196, +1002,1002,1002,1003,1002,1002,1002,1002,1002,1002,1002,1002,1003,1004,196,196, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,196,196,1006,1007,1007,1007, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +1001,509,509,509,1008,1008,1008,521,521,521,509,518,519,518,509,509, /* block 116 */ -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1004,1003,1004,1004,1004,1005,1005,1004,1004,1005,1003,1005,1005,1003,1004,1006, -1007,1006,1007,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1003,1003,1008,1009,1010, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1012,1013,1013,1012,1012, -1014,1014,1011,1015,1015,1012,1016,196,196,196,196,196,196,196,196,196, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1010,1009,1010,1010,1010,1011,1011,1010,1010,1011,1009,1011,1011,1009,1010,1012, +1013,1012,1013,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1009,1009,1014,1015,1016, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1018,1019,1019,1018,1018, +1020,1020,1021,1022,1022,1018,1023,196,196,196,196,196,196,196,196,196, /* block 117 */ -196,533,533,533,533,533,533,196,196,533,533,533,533,533,533,196, -196,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +196,531,531,531,531,531,531,196,196,531,531,531,531,531,531,196, +196,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70,1017, 70, 70, 70, 70, 70, 70, 70,938,149,149,149,149, + 70, 70, 70,1024, 70, 70, 70, 70, 70, 70, 70,942,149,149,149,149, 70, 70, 70, 70, 70,256, 70, 70, 70,149, 46, 46,196,196,196,196, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, /* block 118 */ -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1012,1012,1013,1012,1012,1013,1012,1012,1014,1019,1016,196,196, -1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,196,196,196,196,196,196, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1021,1021,1021,1021,1021, +1021,1021,1021,1018,1018,1019,1018,1018,1019,1018,1018,1020,1026,1023,196,196, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,196,196,196,196,196,196, /* block 119 */ -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 120 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, /* block 121 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 122 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, /* block 123 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 124 */ -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 125 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 126 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,196,196,196,196,196,196,196,196,196,196,196,196, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,196,196,196,196,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,196,196,196,196, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,196,196,196,196,196,196,196,196,196,196,196,196, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,196,196,196,196,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,196,196,196,196, /* block 127 */ -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, /* block 128 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, /* block 129 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 130 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910,910, -1025,910,1025,910,910,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910, -1025,910,1025,910,910,1025,1025,910,910,910,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,914, +1032,914,1032,914,914,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914, +1032,914,1032,914,914,1032,1032,914,914,914,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 131 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,196,196,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 132 */ -703,703,703,703,703,1026,1027,196,196,196,196,196,196,196,196,196, -196,196,196,292,292,292,292,292,196,196,196,196,196,305,300,305, -305,305,305,305,305,305,305,305,305,1028,305,305,305,305,305,305, -305,305,305,305,305,305,305,297,305,305,305,305,305,297,305,297, -305,305,297,305,305,297,305,305,305,305,305,305,305,305,305,305, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +709,709,709,709,709,1033,1034,196,196,196,196,196,196,196,196,196, +196,196,196,292,292,292,292,292,196,196,196,196,196,303,299,303, +303,303,303,303,303,303,303,303,303,1035,303,303,303,303,303,303, +303,303,303,303,303,303,303,297,303,303,303,303,303,297,303,297, +303,303,297,303,303,297,303,303,303,303,303,303,303,303,303,303, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 133 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,313,313,313,313,313,313,313,313,313,313,313,313,313, +313,313,313,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 134 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1029,1029, -1029,1029,1029,1029,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1036,1036, +1036,1036,1036,1036,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 135 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 136 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1030,1031, -315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1037,1038, +313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 137 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -340,340,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,340,340,340,340,340,340,340,315, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -321,321,1033,321,321,321,321,321,321,321,1029,1029,312,1034,315,315, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,313,313,313,313,313,313,313,313, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +319,319,1040,319,319,319,319,319,319,319,1036,1036,310,1041,313,313, /* block 138 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1036, -1037,1037,1038,1039,1037,1038,1038,1040,1041,1037,196,196,196,196,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,927,927, -1037,1042,1042,755,755,1040,1041,1040,1041,1040,1041,1040,1041,1040,1041,1040, -1041,1043,1044,1043,1044,866,866,1040,1041,1037,1037,1037,1037,755,755,755, -1045,199,1046,196,199,1047,1038,1038,1042,1048,1049,1048,1049,1048,1049,1050, -1037,1051,1052,1053,1054,1054,794,196,1051,479,1050,1037,196,196,196,196, -1029,321,1029,321,1029,340,1029,321,1029,321,1029,321,1029,321,1029,321, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1043, +1044,1044,1045,1046,1044,1045,1045,1047,1048,1044,196,196,196,196,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,931,931, +1044,1049,1049,761,761,1047,1048,1047,1048,1047,1048,1047,1048,1047,1048,1047, +1048,1050,1051,1050,1051,870,870,1047,1048,1044,1044,1044,1044,761,761,761, +1052,199,1053,196,199,1054,1045,1045,1049,1055,1056,1055,1056,1055,1056,1057, +1044,1058,1059,1060,1061,1061,802,196,1058,477,1057,1044,196,196,196,196, +1036,319,1036,319,1036,338,1036,319,1036,319,1036,319,1036,319,1036,319, /* block 139 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,340,340, 51, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,338,338, 51, /* block 140 */ -196,1038,1055,1050,479,1050,1037,1056,1048,1049,1037,1052,1045,1057,1046,1058, -1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1047,199,1054,794,1054,1038, -1037,1060,1060,1060,1060,1060,1060, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1048,1051,1049,1061,755, - 46,1062,1062,1062,1062,1062,1062, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1048,794,1049,794,1048, -1049,1063,1064,1065,1066,897,896,896,896,896,896,896,896,896,896,896, -898,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +196,1045,1062,1057,477,1057,1044,1063,1055,1056,1044,1059,1052,1064,1053,1065, +1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1054,199,1061,802,1061,1045, +1044,1067,1067,1067,1067,1067,1067, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1055,1058,1056,1068,761, + 46,1069,1069,1069,1069,1069,1069, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1055,802,1056,802,1055, +1056,1070,1071,1072,1073,901,900,900,900,900,900,900,900,900,900,900, +902,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, /* block 141 */ -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,1067,1067, -902,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -196,196,901,901,901,901,901,901,196,196,901,901,901,901,901,901, -196,196,901,901,901,901,901,901,196,196,901,901,901,196,196,196, -479,479,794, 46,781,479,479,196,781,794,794,794,794,781,781,196, -765,765,765,765,765,765,765,765,765,1068,1068,1068,781,781,1032,1032, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,1074,1074, +906,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +196,196,905,905,905,905,905,905,196,196,905,905,905,905,905,905, +196,196,905,905,905,905,905,905,196,196,905,905,905,196,196,196, +477,477,802, 46,789,477,477,196,789,802,802,802,802,789,789,196, +771,771,771,771,771,771,771,771,771,1075,1075,1075,789,789,1039,1039, /* block 142 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,196,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,196,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 143 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,196,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,196,196,196, /* block 144 */ -1070,1071,1072,196,196,196,196,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,196,196,196,1074,1074,1074,1074,1074,1074,1074,1074,1074, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1076,1076,1076,1076,1077,1077,1077,1077,1077,1077,1077, +1077,1078,1079,196,196,196,196,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,196,196,196,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1083,1083,1083,1083,1084,1084,1084,1084,1084,1084,1084, /* block 145 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1076,1076,1077,1078,1078,196, -781,781,781,781,781,781,781,781,781,781,781,781,781,196,196,196, -1077,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1083,1083,1084,1085,1085,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,196,196,196, +1084,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,189,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,189,196,196, /* block 146 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4115,97 +4143,97 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 147 */ -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079, -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,196,196,196, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1081,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, -1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,196,196,196,196, - -/* block 148 */ -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1084,1084,1084,1084,196,196,196,196,196,196,196,196,196,1083,1083,1083, -1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085, -1085,1086,1085,1085,1085,1085,1085,1085,1085,1085,1086,196,196,196,196,196, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,196,196,196, +1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, -1087,1087,1087,1087,1087,1087,1088,1088,1088,1088,1088,196,196,196,196,196, +1087,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1088,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, +1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,196,196,196, + +/* block 148 */ +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1091,1091,1091,1091,196,196,196,196,196,196,196,196,196,1090,1090,1090, +1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092, +1092,1093,1092,1092,1092,1092,1092,1092,1092,1092,1093,196,196,196,196,196, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,196,196,196,196,196, /* block 149 */ -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,1090, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,196,196,196,196,1091,1091,1091,1091,1091,1091,1091,1091, -1092,1093,1093,1093,1093,1093,196,196,196,196,196,196,196,196,196,196, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,196,1097, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,196,196,196,196,1098,1098,1098,1098,1098,1098,1098,1098, +1099,1100,1100,1100,1100,1100,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 150 */ -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, - -/* block 151 */ -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097, -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,196,196, -1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,196,196,196,196,196,196, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,196,196,196,196,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,196,196,196,196, - -/* block 152 */ 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, -1101,1101,1101,1101,1101,1101,1101,1101,196,196,196,196,196,196,196,196, +1101,1101,1101,1101,1101,1101,1101,1101,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,196,196,196,196,196,196,196,196,196,196,196,1103, -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, -/* block 153 */ -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, -1104,1104,1104,196,1104,1104,196,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,196,1105,1105,196,196,196, -1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, +/* block 151 */ +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104, +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,196, +1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,196,196,196,196,196,196, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, -1106,1106,1106,1106,196,196,196,196,196,196,196,196,196,196,196,196, +1106,1106,1106,1106,196,196,196,196,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196, + +/* block 152 */ +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,196,196,196,196,196,196,196,196, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,196,196,196,196,196,196,196,196,196,196,196,1110, +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, + +/* block 153 */ +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, +1111,1111,1111,196,1111,1111,196,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,196,1112,1112,196,196,196, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,196,196,196,196,196,196,196,196,196,196,196,196, /* block 154 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, /* block 155 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 156 */ -149,1108,1108,149,149,149,196,149,149,149,149,149,149,149,149,149, +149,1115,1115,149,149,149,196,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,196,149,149,149,149,149,149,149,149,149,196,196,196,196,196, @@ -4215,79 +4243,79 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 157 */ -1109,1109,1109,1109,1109,1109,297,297,1109,297,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,297,1109,1109,297,297,297,1109,297,297,1109, -1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110, -1110,1110,1110,1110,1110,1110,297,1111,1112,1112,1112,1112,1112,1112,1112,1112, -1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, -1113,1113,1113,1113,1113,1113,1113,1114,1114,1115,1115,1115,1115,1115,1115,1115, +1116,1116,1116,1116,1116,1116,297,297,1116,297,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,297,1116,1116,297,297,297,1116,297,297,1116, +1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1117,1117,1117,1117,1117,1117,297,1118,1119,1119,1119,1119,1119,1119,1119,1119, +1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, +1120,1120,1120,1120,1120,1120,1120,1121,1121,1122,1122,1122,1122,1122,1122,1122, /* block 158 */ -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,297, -297,297,297,297,297,297,297,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297, +297,297,297,297,297,297,297,1124,1124,1124,1124,1124,1124,1124,1124,1124, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118, -1118,1118,1118,297,1118,1118,297,297,297,297,297,1119,1119,1119,1119,1119, +1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, +1125,1125,1125,297,1125,1125,297,297,297,297,297,1126,1126,1126,1126,1126, /* block 159 */ -1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, -1120,1120,1120,1120,1120,1120,1121,1121,1121,1121,1121,1121,297,297,297,1122, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,297,297,297,297,1124, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1127,1127,1127,1127,1127,1127,1128,1128,1128,1128,1128,1128,297,297,297,1129, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,297,297,297,297,297,1131, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 160 */ -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126, -1126,1126,1126,1126,1126,1126,1126,1126,297,297,297,297,1127,1127,1126,1126, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -297,297,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134, +1134,1134,1134,1134,1134,1134,1134,1134,297,297,297,297,1135,1135,1134,1134, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +297,297,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, /* block 161 */ -1128,1129,1129,1129,297,1129,1129,297,297,297,297,297,1129,1129,1129,1129, -1128,1128,1128,1128,297,1128,1128,1128,297,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,297,297,1130,1130,1130,297,297,297,297,1131, -1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,297, -1133,1133,1133,1133,1133,1133,1134,1134,1133,297,297,297,297,297,297,297, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1136,1136,1137, +1136,1137,1137,1137,297,1137,1137,297,297,297,297,297,1137,1137,1137,1137, +1136,1136,1136,1136,297,1136,1136,1136,297,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,297,297,1138,1138,1138,297,297,297,297,1139, +1140,1140,1140,1140,1140,1140,1140,1140,1140,297,297,297,297,297,297,297, +1141,1141,1141,1141,1141,1141,1142,1142,1141,297,297,297,297,297,297,297, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1144,1144,1145, /* block 162 */ -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138, -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1139,1139,1139, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1140,1140,1140,1140,1140,1140,1140,1140,1141,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1142,1142,297,297,297,297,1143,1143,1143,1143,1143, -1144,1144,1145,1144,1144,1144,1146,297,297,297,297,297,297,297,297,297, +1148,1148,1148,1148,1148,1148,1148,1148,1149,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1150,1150,297,297,297,297,1151,1151,1151,1151,1151, +1152,1152,1153,1152,1152,1152,1154,297,297,297,297,297,297,297,297,297, /* block 163 */ -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,297,297,297,1148,1149,1149,1149,1149,1149,1149, -1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150, -1150,1150,1150,1150,1150,1150,297,297,1151,1151,1151,1151,1151,1151,1151,1151, -1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152, -1152,1152,1152,297,297,297,297,297,1153,1153,1153,1153,1153,1153,1153,1153, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,297,297,297,1156,1157,1157,1157,1157,1157,1157, +1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, +1158,1158,1158,1158,1158,1158,297,297,1159,1159,1159,1159,1159,1159,1159,1159, +1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160, +1160,1160,1160,297,297,297,297,297,1161,1161,1161,1161,1161,1161,1161,1161, /* block 164 */ -1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154, -1154,1154,297,297,297,297,297,297,297,1155,1155,1155,1155,297,297,297, -297,297,297,297,297,297,297,297,297,1156,1156,1156,1156,1156,1156,1156, +1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162, +1162,1162,297,297,297,297,297,297,297,1163,1163,1163,1163,297,297,297, +297,297,297,297,297,297,297,297,297,1164,1164,1164,1164,1164,1164,1164, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4295,37 +4323,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 165 */ -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,297,297,297,297,297,297,297, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 166 */ -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,297,297,297,297,297,297,297,297,297,297,297,297,297, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,297,297,297,297,297,297,297,1160,1160,1160,1160,1160,1160, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,297,297,297,297,297,297,297,297,297,297,297,297,297, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,297,297,297,297,297,297,297,1168,1168,1168,1168,1168,1168, /* block 167 */ -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1162,1162,1163,1163,1163,1163,340,340,340,340,340,340,340,340, -1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,340,340,340,340,340,340, -1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1166,1166,1166,1166,1167,1166, -1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168, -1168,1168,1168,1168,1168,1168,297,297,297,1169,1170,1171,1171,1171,1172,1173, -1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1170,1170,1171,1171,1171,1171,338,338,338,338,338,338,338,338, +1172,1172,1172,1172,1172,1172,1172,1172,1172,1172,338,338,338,338,338,338, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1174,1174,1174,1174,1175,1174, +1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, +1176,1176,1176,1176,1176,1176,297,297,297,1177,1178,1179,1179,1179,1180,1181, +1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, /* block 168 */ -1174,1174,1174,1174,1174,1174,297,297,297,297,297,297,297,297,1175,1175, +1182,1182,1182,1182,1182,1182,297,297,297,297,297,297,297,297,1183,1183, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4341,184 +4369,184 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,297, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,297, /* block 170 */ -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,297,1178,1178,1179,297,297, -1177,1177,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,340,321,321,321,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,316,333,333,333, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,297,1186,1186,1187,297,297, +1185,1185,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +338,338,319,319,319,1188,319,319,338,338,338,338,338,338,338,338, +1189,313,313,313,313,313,313,313,313,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,324,314,314,331,331,331, /* block 171 */ -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180, -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1181,1181,1181, -1181,1181,1181,1181,1181,1181,1181,1180,297,297,297,297,297,297,297,297, -1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, -1182,1182,1182,1182,1182,1182,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, -1183,1184,1184,1184,1184,1185,1185,1185,1185,1185,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1191,1191,1191, +1191,1191,1191,1191,1191,1191,1191,1190,297,297,297,297,297,297,297,297, +1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192, +1192,1192,1192,1192,1192,1192,1193,1193,1193,1193,1193,1193,1193,1193,1193,1193, +1193,1194,1194,1194,1194,1195,1195,1195,1195,1195,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196, /* block 172 */ -1186,1186,1187,1187,1187,1187,1188,1188,1188,1188,297,297,297,297,297,297, +1196,1196,1197,1197,1197,1197,1198,1198,1198,1198,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189, -1189,1189,1189,1189,1189,1190,1190,1190,1190,1190,1190,1190,297,297,297,297, +1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, +1199,1199,1199,1199,1199,1200,1200,1200,1200,1200,1200,1200,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191, -1191,1191,1191,1191,1191,1191,1191,297,297,297,297,297,297,297,297,297, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1201,1201,1201,1201,1201,1201,1201,297,297,297,297,297,297,297,297,297, /* block 173 */ -1192,1193,1192,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1193,1193,1193,1193,1193,1193,1193,1193, -1193,1193,1193,1193,1193,1193,1195,1196,1196,1197,1197,1197,1197,1197,196,196, -196,196,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198, -1198,1198,1198,1198,1198,1198,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, -1195,1194,1194,1193,1193,1194,196,196,196,196,196,196,196,196,196,1200, +1202,1203,1202,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1203,1203,1203,1203,1203,1203,1203,1203, +1203,1203,1203,1203,1203,1203,1205,1206,1206,1207,1207,1207,1207,1207,196,196, +196,196,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208, +1208,1208,1208,1208,1208,1208,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, +1205,1204,1204,1203,1203,1204,196,196,196,196,196,196,196,196,196,1210, /* block 174 */ -1201,1201,1202,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1202,1202,1202,1201,1201,1201,1201,1202,1202,1204,1205,1206,1206,1207,1208,1208, -1208,1208,1201,196,196,196,196,196,196,196,196,196,196,1207,196,196, -1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, -1209,1209,1209,1209,1209,1209,1209,1209,1209,196,196,196,196,196,196,196, -1210,1210,1210,1210,1210,1210,1210,1210,1210,1210,196,196,196,196,196,196, +1211,1211,1212,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1212,1212,1212,1211,1211,1211,1211,1212,1212,1214,1215,1216,1216,1217,1218,1218, +1218,1218,1211,196,196,196,196,196,196,196,196,196,196,1217,196,196, +1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219, +1219,1219,1219,1219,1219,1219,1219,1219,1219,196,196,196,196,196,196,196, +1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,196,196,196,196,196,196, /* block 175 */ -1211,1211,1211,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1211,1211,1211,1211,1211,1213,1211,1211,1211, -1211,1211,1211,1214,1214,196,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215, -1216,1217,1217,1217,1212,1213,1213,1212,196,196,196,196,196,196,196,196, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1219,1220,1220,1218,196,196,196,196,196,196,196,196,196, +1221,1221,1221,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1221,1221,1221,1221,1221,1223,1221,1221,1221, +1221,1221,1221,1224,1224,196,1225,1225,1225,1225,1225,1225,1225,1225,1225,1225, +1226,1227,1227,1227,1222,1223,1223,1222,196,196,196,196,196,196,196,196, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1229,1230,1230,1228,196,196,196,196,196,196,196,196,196, /* block 176 */ -1221,1221,1222,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1222,1222,1222,1221,1221,1221,1221,1221,1221,1221,1221,1221,1222, -1224,1223,1225,1225,1223,1226,1226,1227,1227,1228,1229,1229,1229,1226,1222,1221, -1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1223,1227,1223,1227,1226,1226, -196,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231, -1231,1231,1231,1231,1231,196,196,196,196,196,196,196,196,196,196,196, +1231,1231,1232,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1232,1232,1232,1231,1231,1231,1231,1231,1231,1231,1231,1231,1232, +1234,1233,1235,1235,1233,1236,1236,1237,1237,1238,1239,1239,1239,1236,1232,1231, +1240,1240,1240,1240,1240,1240,1240,1240,1240,1240,1233,1237,1233,1237,1236,1236, +196,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241, +1241,1241,1241,1241,1241,196,196,196,196,196,196,196,196,196,196,196, /* block 177 */ -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,196,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1233,1233,1233,1234, -1234,1234,1233,1233,1234,1235,1236,1237,1238,1238,1239,1238,1238,1240,1234,1232, -1232,1234,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,196,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1243,1243,1243,1244, +1244,1244,1243,1243,1244,1245,1246,1247,1248,1248,1249,1248,1248,1250,1244,1242, +1242,1244,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 178 */ -1241,1241,1241,1241,1241,1241,1241,196,1241,196,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1242,196,196,196,196,196,196, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1244, -1245,1245,1245,1244,1244,1244,1244,1244,1244,1246,1247,196,196,196,196,196, -1248,1248,1248,1248,1248,1248,1248,1248,1248,1248,196,196,196,196,196,196, +1251,1251,1251,1251,1251,1251,1251,196,1251,196,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1252,196,196,196,196,196,196, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1254, +1255,1255,1255,1254,1254,1254,1254,1254,1254,1256,1257,196,196,196,196,196, +1258,1258,1258,1258,1258,1258,1258,1258,1258,1258,196,196,196,196,196,196, /* block 179 */ -1249,1250,1251,1252,196,1253,1253,1253,1253,1253,1253,1253,1253,196,196,1253, -1253,196,196,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, -1253,1253,1253,1253,1253,1253,1253,1253,1253,196,1253,1253,1253,1253,1253,1253, -1253,196,1253,1253,196,1253,1253,1253,1253,1253,196,1254,1255,1253,1256,1251, -1249,1251,1251,1251,1251,196,196,1251,1251,196,196,1251,1251,1257,196,196, -1253,196,196,196,196,196,196,1256,196,196,196,196,196,1258,1253,1253, -1253,1253,1251,1251,196,196,1259,1259,1259,1259,1259,1259,1259,196,196,196, -1259,1259,1259,1259,1259,196,196,196,196,196,196,196,196,196,196,196, +1259,1260,1261,1262,196,1263,1263,1263,1263,1263,1263,1263,1263,196,196,1263, +1263,196,196,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263, +1263,1263,1263,1263,1263,1263,1263,1263,1263,196,1263,1263,1263,1263,1263,1263, +1263,196,1263,1263,196,1263,1263,1263,1263,1263,196,1264,1265,1263,1266,1261, +1259,1261,1261,1261,1261,196,196,1261,1261,196,196,1261,1261,1267,196,196, +1263,196,196,196,196,196,196,1266,196,196,196,196,196,1268,1263,1263, +1263,1263,1261,1261,196,196,1269,1269,1269,1269,1269,1269,1269,196,196,196, +1269,1269,1269,1269,1269,196,196,196,196,196,196,196,196,196,196,196, /* block 180 */ -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,196,1260,196,196,1260,196, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,196,1260,1261,1262,1262,1263,1263,1263,1263,1263, -1263,196,1261,196,196,1261,196,1261,1261,1261,1262,196,1262,1262,1264,1265, -1264,1266,1267,1268,1269,1269,196,1270,1270,196,196,196,196,196,196,196, -196,1271,1271,196,196,196,196,196,196,196,196,196,196,196,196,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,196,1270,196,196,1270,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,196,1271,1272,1273,1273,1274,1274,1274,1274,1274, +1274,196,1272,196,196,1272,196,1272,1272,1272,1273,196,1273,1273,1275,1276, +1275,1277,1278,1279,1280,1280,196,1281,1281,196,196,196,196,196,196,196, +196,1282,1282,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 181 */ -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1273,1273,1273,1274,1274,1274,1274,1274,1274,1274,1274, -1273,1273,1275,1274,1274,1273,1276,1272,1272,1272,1272,1277,1277,1278,1279,1279, -1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1278,1278,196,1279,1281,1272, -1272,1272,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1284,1284,1284,1285,1285,1285,1285,1285,1285,1285,1285, +1284,1284,1286,1285,1285,1284,1287,1283,1283,1283,1283,1288,1288,1289,1290,1290, +1291,1291,1291,1291,1291,1291,1291,1291,1291,1291,1289,1289,196,1290,1292,1283, +1283,1283,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 182 */ -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1283,1284,1284,1285,1285,1285,1285,1285,1285,1284,1285,1284,1284,1283,1284,1285, -1285,1284,1286,1287,1282,1282,1288,1282,196,196,196,196,196,196,196,196, -1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,196,196,196,196,196,196, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1294,1295,1295,1296,1296,1296,1296,1296,1296,1295,1296,1295,1295,1294,1295,1296, +1296,1295,1297,1298,1293,1293,1299,1293,196,196,196,196,196,196,196,196, +1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 183 */ -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1291, -1292,1292,1293,1293,1293,1293,196,196,1292,1292,1292,1292,1293,1293,1292,1294, -1295,1296,1297,1297,1298,1298,1299,1299,1299,1297,1297,1297,1297,1297,1297,1297, -1297,1297,1297,1297,1297,1297,1297,1297,1290,1290,1290,1290,1293,1293,196,196, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1302, +1303,1303,1304,1304,1304,1304,196,196,1303,1303,1303,1303,1304,1304,1303,1305, +1306,1307,1308,1308,1309,1309,1310,1310,1310,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1301,1301,1301,1301,1304,1304,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 184 */ -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1301,1301,1301,1302,1302,1302,1302,1302,1302,1302,1302,1301,1301,1302,1301,1303, -1302,1304,1304,1305,1300,196,196,196,196,196,196,196,196,196,196,196, -1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,196,196,196,196,196,196, -581,581,581,581,581,581,581,581,581,581,581,581,581,196,196,196, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1312,1312,1312,1313,1313,1313,1313,1313,1313,1313,1313,1312,1312,1313,1312,1314, +1313,1315,1315,1316,1311,196,196,196,196,196,196,196,196,196,196,196, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,196,196,196,196,196,196, +580,580,580,580,580,580,580,580,580,580,580,580,580,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 185 */ -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1308,1309,1308,1309,1309, -1308,1308,1308,1308,1308,1308,1310,1311,1307,1312,196,196,196,196,196,196, -1313,1313,1313,1313,1313,1313,1313,1313,1313,1313,196,196,196,196,196,196, -522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, -522,522,522,522,196,196,196,196,196,196,196,196,196,196,196,196, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1319,1320,1319,1320,1320, +1319,1319,1319,1319,1319,1319,1321,1322,1318,1323,196,196,196,196,196,196, +1324,1324,1324,1324,1324,1324,1324,1324,1324,1324,196,196,196,196,196,196, +520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520, +520,520,520,520,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 186 */ -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314, -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,196,196,1315,1316,1315, -1317,1317,1315,1315,1315,1315,1316,1315,1315,1315,1315,1318,196,196,196,196, -1319,1319,1319,1319,1319,1319,1319,1319,1319,1319,1320,1320,1321,1321,1321,1322, -1314,1314,1314,1314,1314,1314,1314,196,196,196,196,196,196,196,196,196, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,196,196,1326,1327,1326, +1328,1328,1326,1326,1326,1326,1327,1326,1326,1326,1326,1329,196,196,196,196, +1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1331,1331,1332,1332,1332,1333, +1325,1325,1325,1325,1325,1325,1325,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 187 */ -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1324,1324,1324,1325, -1325,1325,1325,1325,1325,1325,1325,1325,1324,1326,1327,1328,196,196,196,196, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1335,1335,1335,1336, +1336,1336,1336,1336,1336,1336,1336,1336,1335,1337,1338,1339,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4527,61 +4555,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 188 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1331,1331,1331,1331,1331,1331,1331,1331,1331,1331,1332,1332,1332,1332,1332,1332, -1332,1332,1332,196,196,196,196,196,196,196,196,196,196,196,196,1333, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1342,1342,1342,1342,1342,1342,1342,1342,1342,1342,1343,1343,1343,1343,1343,1343, +1343,1343,1343,196,196,196,196,196,196,196,196,196,196,196,196,1344, /* block 189 */ -1334,1334,1334,1334,1334,1334,1334,196,196,1334,196,196,1334,1334,1334,1334, -1334,1334,1334,1334,196,1334,1334,196,1334,1334,1334,1334,1334,1334,1334,1334, -1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, -1335,1336,1336,1336,1336,1336,196,1336,1336,196,196,1337,1337,1338,1339,1340, -1336,1340,1336,1341,1342,1343,1342,196,196,196,196,196,196,196,196,196, -1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,196,196,196,196,196,196, +1345,1345,1345,1345,1345,1345,1345,196,196,1345,196,196,1345,1345,1345,1345, +1345,1345,1345,1345,196,1345,1345,196,1345,1345,1345,1345,1345,1345,1345,1345, +1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, +1346,1347,1347,1347,1347,1347,196,1347,1347,196,196,1348,1348,1349,1350,1351, +1347,1351,1347,1352,1353,1354,1353,196,196,196,196,196,196,196,196,196, +1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 190 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1345,1345,1345,1345,1345,1345,1345,1345,196,196,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1346,1346,1346,1347,1347,1347,1347,196,196,1347,1347,1346,1346,1346,1346, -1348,1345,1349,1345,1346,196,196,196,196,196,196,196,196,196,196,196, +1356,1356,1356,1356,1356,1356,1356,1356,196,196,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1357,1357,1357,1358,1358,1358,1358,196,196,1358,1358,1357,1357,1357,1357, +1359,1356,1360,1356,1357,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 191 */ -1350,1351,1351,1351,1351,1351,1351,1352,1352,1351,1351,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1353,1354,1351,1351,1351,1351,1355,1356,1351,1351,1351,1351,1357, -1357,1357,1358,1358,1357,1357,1357,1354,196,196,196,196,196,196,196,196, -1359,1360,1360,1360,1360,1360,1360,1361,1361,1360,1360,1360,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, +1361,1362,1362,1362,1362,1362,1362,1363,1363,1362,1362,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1364,1365,1362,1362,1362,1362,1366,1367,1362,1362,1362,1362,1368, +1368,1368,1369,1369,1368,1368,1368,1365,196,196,196,196,196,196,196,196, +1370,1371,1371,1371,1371,1371,1371,1372,1372,1371,1371,1371,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, /* block 192 */ -1359,1359,1359,1359,1362,1362,1362,1362,1362,1362,1360,1360,1360,1360,1360,1360, -1360,1360,1360,1360,1360,1360,1360,1361,1363,1364,1365,1366,1366,1359,1365,1365, -1365,1367,1367,196,196,196,196,196,196,196,196,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,196,196,196,196,196,196,196, +1370,1370,1370,1370,1373,1373,1373,1373,1373,1373,1371,1371,1371,1371,1371,1371, +1371,1371,1371,1371,1371,1371,1371,1372,1374,1375,1376,1377,1377,1378,1376,1376, +1376,1379,1379,196,196,196,196,196,196,196,196,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,196,196,196,196, /* block 193 */ -385,385,385,385,385,385,385,385,385,385,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +383,383,383,383,383,383,383,383,383,383,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1231,1232,1231,1231,1231,1232,1231,1232,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 194 */ @@ -4589,49 +4617,49 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1370,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1371,1371,1371,1371,1371,1371,1371,1371,1371,1371,196,196,196,196,196,196, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1382,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,196,196,196,196,196,196, /* block 195 */ -1372,1372,1372,1372,1372,1372,1372,1372,1372,196,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1373, -1374,1374,1374,1374,1374,1374,1374,196,1374,1374,1374,1374,1374,1374,1373,1375, -1372,1376,1376,1377,1378,1378,196,196,196,196,196,196,196,196,196,196, -1379,1379,1379,1379,1379,1379,1379,1379,1379,1379,1380,1380,1380,1380,1380,1380, -1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196, -1381,1382,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, +1384,1384,1384,1384,1384,1384,1384,1384,1384,196,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1385, +1386,1386,1386,1386,1386,1386,1386,196,1386,1386,1386,1386,1386,1386,1385,1387, +1384,1388,1388,1389,1390,1390,196,196,196,196,196,196,196,196,196,196, +1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,1392,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,196,196,196, +1393,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 196 */ -1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, -196,196,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, -1384,1384,1384,1384,1384,1384,1384,1384,196,1385,1384,1384,1384,1384,1384,1384, -1384,1385,1384,1384,1385,1384,1384,196,196,196,196,196,196,196,196,196, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +196,196,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396, +1396,1396,1396,1396,1396,1396,1396,1396,196,1397,1396,1396,1396,1396,1396,1396, +1396,1397,1396,1396,1397,1396,1396,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 197 */ -1386,1386,1386,1386,1386,1386,1386,196,1386,1386,196,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1387,1387,1387,1387,1387,1387,196,196,196,1387,196,1387,1387,196,1387, -1387,1387,1388,1387,1389,1389,1390,1387,196,196,196,196,196,196,196,196, -1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,196,196,196,196,196,196, -1392,1392,1392,1392,1392,1392,196,1392,1392,196,1392,1392,1392,1392,1392,1392, -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392, +1398,1398,1398,1398,1398,1398,1398,196,1398,1398,196,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1399,1399,1399,1399,1399,1399,196,196,196,1399,196,1399,1399,196,1399, +1399,1399,1400,1399,1401,1401,1402,1399,196,196,196,196,196,196,196,196, +1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,196,1404,1404,196,1404,1404,1404,1404,1404,1404, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, /* block 198 */ -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1393,1393,1393,1393,1393,196, -1394,1394,196,1393,1393,1394,1393,1395,1392,196,196,196,196,196,196,196, -1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1405,1405,1405,1405,1405,196, +1406,1406,196,1405,1405,1406,1405,1407,1404,196,196,196,196,196,196,196, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,196,196,196,196,196,196, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,1409,1409,196,196,196,196, +1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 199 */ @@ -4641,16 +4669,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397, -1397,1397,1397,1398,1398,1399,1399,1400,1400,196,196,196,196,196,196,196, +1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412, +1412,1412,1412,1413,1413,1414,1414,1415,1415,196,196,196,196,196,196,196, /* block 200 */ -1401,1401,1402,1403,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,196,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1403,1403,1401,1401,1401,1401,1401,196,196,196,1403,1403, -1401,1405,1406,1407,1407,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, -1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,196,196,196,196,196, +1416,1416,1417,1418,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,196,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1418,1418,1416,1416,1416,1416,1416,196,196,196,1418,1418, +1416,1420,1421,1422,1422,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, +1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4658,25 +4686,25 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411, -435,435,1411,435,1411,437,437,437,437,437,437,437,437,438,438,438, -438,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, -437,437,196,196,196,196,196,196,196,196,196,196,196,196,196,1412, +918,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426, +433,433,1426,433,1426,435,435,435,435,435,435,435,435,436,436,436, +436,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435, +435,435,196,196,196,196,196,196,196,196,196,196,196,196,196,1427, /* block 202 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, /* block 203 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4685,137 +4713,137 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 204 */ -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,196, -1415,1415,1415,1415,1415,196,196,196,196,196,196,196,196,196,196,196, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196, +1430,1430,1430,1430,1430,196,196,196,196,196,196,196,196,196,196,196, /* block 205 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,196,196,196,196,196,196,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 206 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1417,1417,196,196,196,196,196,196,196,196,196,196,196,196,196, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1432,1432,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 207 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 208 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, -1420,1418,1418,1418,1418,1418,1418,1421,1421,1421,1421,1421,1421,1421,1421,1421, -1421,1421,1421,1421,1421,1421,196,196,196,196,196,196,196,196,196,196, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434, +1435,1433,1433,1433,1433,1433,1433,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1436,1436,1436,1436,1436,1436,196,196,196,196,196,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 209 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,196,196,196, /* block 210 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, /* block 211 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,196,196,196,196,196,196,196,196,196, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 212 */ -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1424,1424, -1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,1425,1425,1424,1424,1426, -1427,1427,1427,1427,1427,1427,1427,1427,1427,1427,196,196,196,196,196,196, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1439,1439, +1439,1439,1439,1439,1439,1439,1439,1439,1439,1439,1440,1440,1440,1439,1439,1441, +1442,1442,1442,1442,1442,1442,1442,1442,1442,1442,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 213 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, /* block 214 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,196,196,196,196,196,196,196, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196, -1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,196,196,196,1430,1430, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,196,196,196,196,196,196,196, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,196, +1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,196,196,196,1445,1445, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, /* block 215 */ -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,196, -1432,1432,1432,1432,1432,1432,1432,1432,1432,1432,196,196,196,196,196,196, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196, -1434,1434,1434,1434,1434,1435,196,196,196,196,196,196,196,196,196,196, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,196, +1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,196,196,196,196,196,196, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,196,196, +1449,1449,1449,1449,1449,1450,196,196,196,196,196,196,196,196,196,196, /* block 216 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1437,1437,1437,1437,1437,1437,1437,1438,1438,1439,1440,1440,1441,1441,1441,1441, -1442,1442,1443,1443,1438,1441,196,196,196,196,196,196,196,196,196,196, -1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,1445,1445,1445,1445,1445, -1445,1445,196,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,196,196,196,196,196,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1452,1452,1452,1452,1452,1452,1452,1453,1453,1454,1455,1455,1456,1456,1456,1456, +1457,1457,1458,1458,1453,1456,196,196,196,196,196,196,196,196,196,196, +1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,1460,1460,1460,1460,1460, +1460,1460,196,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,196,196,196,196,196,1451,1451,1451, /* block 217 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4829,94 +4857,84 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1446,1446,1446,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1448,1447,1447,1447,1448,1448,1448,1448,1449,1449,1450,1451,1451, -1452,1452,1452,1452,1452,1452,1452,1452,1452,1452,196,196,196,196,196,196, +1461,1461,1461,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1463,1462,1462,1462,1463,1463,1463,1463,1464,1464,1465,1466,1466, +1467,1467,1467,1467,1467,1467,1467,1467,1467,1467,196,196,196,196,196,196, /* block 219 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, /* block 220 */ -1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455, -1455,1455,1455,1455,1455,1455,1455,1456,1457,1458,1458,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, +1470,1470,1470,1470,1470,1470,1470,1471,1472,1473,1473,196,196,196,196,196, +1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474, +1474,1474,1474,1474,1474,1474,1474,1474,1474,196,196,1475,1475,1475,1475,1475, +1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475, +1475,1475,1475,1475,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 221 */ -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,196,196,196,1460, -1459,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,196,196,196,196,1477, +1476,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, /* block 222 */ -1461,1461,1461,1461,1461,1461,1461,1461,196,196,196,196,196,196,196,1462, -1462,1462,1462,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463, +1478,1478,1478,1478,1478,1478,1478,1478,196,196,196,196,196,196,196,1479, +1479,1479,1479,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1464,1465,1466,867,1467,196,196,196,196,196,196,196,196,196,196,196, -1468,1468,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1481,1482,1483,871,1484,196,196,196,196,196,196,196,196,196,196,196, +1485,1485,1486,1486,873,873,873,196,196,196,196,196,196,196,196,196, /* block 223 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, /* block 224 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, /* block 225 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, - -/* block 226 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,196,196,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1470, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1488, -/* block 227 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 226 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4924,6 +4942,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 227 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,196,196,196,196,196,196,196,196,196,196,196,196,196, + /* block 228 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4932,72 +4960,72 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1471,1471,1471,1471,196,1471,1471,1471,1471,1471,1471,1471,196,1471,1471,196, +1489,1489,1489,1489,196,1489,1489,1489,1489,1489,1489,1489,196,1489,1489,196, /* block 229 */ -896,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +900,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 230 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 231 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -896,896,896,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,891,196,196,196,196,196,196,196,196,196,196,196,196,196, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +900,900,900,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,895,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -891,891,891,196,196,896,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,896,896,896,896,196,196,196,196,196,196,196,196, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +895,895,895,196,196,900,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,900,900,900,900,196,196,196,196,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 232 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 233 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,196,196, /* block 234 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196, /* block 235 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,1474,1475,1476,1477, -1478,1478,1478,1478,196,196,196,196,196,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,1492,1493,1494,1495, +1496,1496,1496,1496,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5005,34 +5033,34 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 236 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 237 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,789,789,196,196,196, /* block 238 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,196,196,196,196,196,196,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +802,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 239 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, @@ -5040,66 +5068,66 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,176,176,176,176,176,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 240 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,196,196,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 241 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 242 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,196,196,196,196,196,196,196,196,196,196, /* block 243 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,196,196,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,1480,1480,176,176,176,510,510,510,1481,1481,1481, -1481,1481,1481, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,196,196,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,1498,1498,176,176,176,508,508,508,1499,1499,1499, +1499,1499,1499, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, /* block 244 */ -176,176,176,510,510,176,176,176,176,176,176,176,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,176,176,176,176,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,781,781,196,196,196,196,196, +176,176,176,508,508,176,176,176,176,176,176,176,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,176,176,176,176,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,789,789,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 245 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1482,1482,1482,1077,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1500,1500,1500,1084,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5109,125 +5137,125 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, /* block 247 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,196,196,196,196,196,196,196,196,196, -904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, -904,904,907,907,907,907,907,907,907,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,196,196,196,196,196,196,196,196,196, +908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908, +908,908,911,911,911,911,911,911,911,196,196,196,196,196,196,196, /* block 248 */ -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,196,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,196,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 249 */ -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,196,782,782, -196,196,782,196,196,782,782,196,196,782,782,782,782,196,782,782, -782,782,782,782,782,782,783,783,783,783,196,783,196,783,795,795, -783,783,783,783,196,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,196,790,790, +196,196,790,196,196,790,790,196,196,790,790,790,790,196,790,790, +790,790,790,790,790,790,791,791,791,791,196,791,196,791,803,803, +791,791,791,791,196,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, /* block 250 */ -783,783,783,783,782,782,196,782,782,782,782,196,196,782,782,782, -782,782,782,782,782,196,782,782,782,782,782,782,782,196,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,196,782,782,782,782,196, -782,782,782,782,782,196,782,196,196,196,782,782,782,782,782,782, -782,196,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,790,790,196,790,790,790,790,196,196,790,790,790, +790,790,790,790,790,196,790,790,790,790,790,790,790,196,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,196,790,790,790,790,196, +790,790,790,790,790,196,790,196,196,196,790,790,790,790,790,790, +790,196,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 251 */ -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, /* block 252 */ -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 253 */ -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,196,196,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,1483,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,1483,783,783,783,783, -783,783,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,1483,783,783,783,783, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,196,196,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,1501,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,1501,791,791,791,791, +791,791,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,1501,791,791,791,791, /* block 254 */ -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,1483,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,1483,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,1483, -783,783,783,783,783,783,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,1483, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,1501,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,1501,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,1501, +791,791,791,791,791,791,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,1501, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, /* block 255 */ -783,783,783,783,783,783,783,783,783,1483,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,1483,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,1483,783,783,783,783,783,783,782,783,196,196,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, +791,791,791,791,791,791,791,791,791,1501,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,1501,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,1501,791,791,791,791,791,791,790,791,196,196,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, /* block 256 */ -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 257 */ -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1485,1485,1485,1485,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1485,1485,1485, -1485,1485,1485,1485,1485,1486,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,1503,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1503,1503,1503, +1503,1503,1503,1503,1503,1504,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 258 */ -1485,1485,1485,1485,1486,1485,1485,1487,1488,1487,1487,1489,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1486,1486,1486,1486,1486, -196,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, +1503,1503,1503,1503,1504,1503,1503,1505,1506,1505,1505,1507,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1504,1504,1504,1504,1504, +196,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5236,7 +5264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 259 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 93, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,196, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,196, 196,196,196,196,196, 70, 70, 70, 70, 70, 70,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5245,17 +5273,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 260 */ -1490,1490,1490,1490,1490,1490,1490,196,1490,1490,1490,1490,1490,1490,1490,1490, -1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,1490,1490,1490,1490,1490, -1490,1490,196,1490,1490,196,1490,1490,1490,1490,1490,196,196,196,196,196, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,1491,1491,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,1491,929,929,929,929,929,196,196, +1508,1508,1508,1508,1508,1508,1508,196,1508,1508,1508,1508,1508,1508,1508,1508, +1508,1508,1508,1508,1508,1508,1508,1508,1508,196,196,1508,1508,1508,1508,1508, +1508,1508,196,1508,1508,196,1508,1508,1508,1508,1508,196,196,196,196,196, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,1509,1509,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,1509,933,933,933,933,933,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 261 */ -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,849, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,853, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5265,24 +5293,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 262 */ -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,196,196,196, -1493,1493,1493,1493,1493,1493,1493,1494,1494,1494,1494,1494,1495,1495,196,196, -1496,1496,1496,1496,1496,1496,1496,1496,1496,1496,196,196,196,196,1492,1497, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,196,196,196, +1511,1511,1511,1511,1511,1511,1511,1512,1512,1512,1512,1512,1513,1513,196,196, +1514,1514,1514,1514,1514,1514,1514,1514,1514,1514,196,196,196,196,1510,1515, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 263 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1499,196, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1517,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1501,1501,1501,1501, -1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,196,196,196,196,196,1503, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1519,1519,1519,1519, +1520,1520,1520,1520,1520,1520,1520,1520,1520,1520,196,196,196,196,196,1521, /* block 264 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5290,9 +5318,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1505,1506,1506,1506,1506, -1507,1507,1507,1507,1507,1507,1507,1507,1507,1507,196,196,196,196,196,196, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1523,1524,1524,1524,1524, +1525,1525,1525,1525,1525,1525,1525,1525,1525,1525,196,196,196,196,196,196, /* block 265 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5300,51 +5328,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1509,1510, -1508,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,196,196,196,196,1512, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1527,1528, +1526,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,196,196,196,196,1530, /* block 266 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,196,533,533,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,196, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,196, +1531,1531,1531,1532,1531,1531,1532,1531,1531,1531,1531,1531,1531,1531,1532,1532, +1531,1531,1531,1531,1531,1532,196,196,196,196,196,196,196,196,1531,1533, /* block 267 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,196,531,531,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,196, /* block 268 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,297,297,1514,1514,1514,1514,1514,1514,1514,1514,1514, -1515,1515,1515,1515,1515,1515,1515,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, /* block 269 */ -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1518,1518,1518,1519,1520,1520,1520,1521,297,297,297,297, -1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,297,297,297,297,1523,1523, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,297,297,1535,1535,1535,1535,1535,1535,1535,1535,1535, +1536,1536,1536,1536,1536,1536,1536,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 270 */ +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1539,1539,1539,1540,1541,1541,1541,1542,297,297,297,297, +1543,1543,1543,1543,1543,1543,1543,1543,1543,1543,297,297,297,297,1544,1544, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, + +/* block 271 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5354,7 +5392,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 271 */ +/* block 272 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5362,351 +5400,331 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, -/* block 272 */ -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524,1524,1524, -1526,1524,1524,1524,1524,340,340,340,340,340,340,340,340,340,340,340, +/* block 273 */ +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,1545,1545, +1547,1545,1545,1545,1545,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 273 */ -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +/* block 274 */ +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 274 */ -1527,1527,1527,1527,340,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,340,1527,340,340,340,340, -340,340,1527,340,340,340,340,1527,340,1527,340,1527,340,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,340,1527,340,1527,340,1527, -340,1527,1527,340,1527,340,340,1527,1527,1527,1527,340,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,1527,1527,1527,340,1527,340, - /* block 275 */ -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,1527,1527,1527,340,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -309,309,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +1548,1548,1548,1548,338,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,1548,338,338,338,338, +338,338,1548,338,338,338,338,1548,338,1548,338,1548,338,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,338,1548,338,1548,338,1548, +338,1548,1548,338,1548,338,338,1548,1548,1548,1548,338,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,1548,1548,1548,338,1548,338, /* block 276 */ -1528,1528,1528,1528,1529,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,1548,1548,1548,338,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +307,307,338,338,338,338,338,338,338,338,338,338,338,338,338,338, /* block 277 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1529, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,1549,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 278 */ -814,814,814,814,814,814,814,814,814,814,814, 58, 58,1528,1528,1528, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1528, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,510,510, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,781,781,1528,1528,1528,1528, -1532,1532,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1532,1532, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1549, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 279 */ -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,1533,510, -510,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,1528,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, -1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +821,821,821,821,821,821,821,821,821,821,821, 58, 58,789,789,789, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,789, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,508,508, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,789,789,789,789,789,789, +1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552, /* block 280 */ -1535,1533,1536,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,510,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1533, -510,510,1533,1533,1533,1533,1533,1536,1533,1533,1533,510,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,1530,1530,1530,1530,1530,1530,1530, -1537,1537,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,1553,508, +508,1553,1553,1553,1553,1553,1553,1553,1553,1553,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,789,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, +1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, /* block 281 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1555,1553,1556,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,508,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,1553, +508,508,1553,1553,1553,1553,1553,1556,1553,1553,1553,508,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,1550,1550,1550,1550,1550,1550,1550, +1557,1557,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 282 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,785,1528,1528,785,785,785,785,785,785,785,785,785,1529,1529,1529, -1529,1529,1529,1529,1529,1529,785,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1529,1529, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 283 */ -1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1528,1528,785,785,1528,785,785,785,1528,1528,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1538,1538,1538,1529,1529,1538,1529,1529,1538,1539,1539,785,785,1529, -1529,1529,1529,1529,785,785,785,785,785,785,785,785,785,785,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1528,1528,785,1529,785,1528,785,1529,1529,1529,1540,1540,1540,1540,1540, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,793,789,789,793,793,793,793,793,793,793,793,793,1549,1549,1549, +1549,1549,1549,1549,1549,1549,793,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,1549,1549, /* block 284 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785, -1529,785,1538,1538,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529,1529,1538,1529,1529,1529, +1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,789,789,793,793,789,793,793,793,789,789,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1558,1558,1558,1549,1549,1558,1549,1549,1558,1559,1559,793,793,1549, +1549,1549,1549,1549,793,793,793,793,793,793,793,793,793,793,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,789,789,793,1549,793,789,793,1549,1549,1549,1560,1560,1560,1560,1560, /* block 285 */ -1529,1538,1538,1538,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1538, -1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1528,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793, +1549,793,1558,1558,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,1549,1558,1549,1549,1549, /* block 286 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,781,781, -781,781,781,781,781,781,1528,1528,1528,785,785,1529,1529,1529,1529,1528, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,1528,1528,785, -785,1528,1528,785,1539,1539,785,785,785,785,1538,1528,1528,1528,1528,1528, +1549,1558,1558,1558,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1558, +1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,789,1549, /* block 287 */ -1528,1528,1528,1528,1528,1528,1528,785,1528,1528,785,785,785,785,1528,1528, -1539,1528,1528,1528,1528,1538,1538,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1529,785,1528,1528,785,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,785,1528,1528,1528, -1528,1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,785,785,785,1528, -1528,785,1528,785,1528,1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785, -1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,789,789, +789,789,789,789,789,789,789,789,789,793,793,1549,1549,1549,1549,789, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,789,789,789,789,789,789,789,793, +793,789,789,793,1559,1559,793,793,793,793,1558,789,789,789,789,789, /* block 288 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1538,1538,1538,1538,1538, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,793,789,789,793,793,793,793,789,789, +1559,789,789,789,789,1558,1558,789,789,789,789,789,789,789,789,789, +789,789,789,789,1549,793,789,789,793,789,789,789,789,789,789,789, +789,793,793,789,789,789,789,789,789,789,789,789,793,789,789,789, +789,789,793,793,793,789,789,789,789,789,789,789,789,789,789,789, +789,793,793,793,789,789,789,789,789,789,789,789,793,793,793,789, +789,793,789,793,789,789,789,789,793,789,789,789,789,789,789,793, +789,789,789,793,789,789,789,789,789,789,793,1549,1549,1549,1549,1549, /* block 289 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,785,1538,785,785,785, -1529,1529,1529,1528,1528,1529,1529,1529,1530,1530,1530,1530,1529,1529,1529,1529, -785,785,785,785,785,785,1528,1528,1528,785,1528,1529,1529,1530,1530,1530, -785,1528,1528,785,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1558,1558,1558,1558,1558, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 290 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,1528,1528,1528,1530,1530,1530,1530,1528,1528,1528,1528,1528, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1549,1549,1549,1549,1549,789,789,789,789,789,793,1558,793,793,793, +1549,1549,1549,789,789,1549,1549,1549,1549,1550,1550,1550,1549,1549,1549,1549, +793,793,793,793,793,793,789,789,789,793,789,1549,1549,1550,1550,1550, +793,789,789,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 291 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530, -1529,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550, +1549,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 292 */ -781,781,781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 293 */ -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +802,802,802,802,802,802,802,802,802,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 294 */ -781,781,781,781,781,781,781,781,781,781,781,781,1538,1529,1529,1538, -1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538, -1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,781,1538,1538,1538,1529, -1529,1529,1529,1529,1529,1529,781,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529, +789,789,789,789,789,789,789,789,789,789,789,789,1558,1549,1549,1558, +1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558, +1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,789,1558,1558,1558,1549, +1549,1549,1549,1549,1549,1549,789,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549, /* block 295 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1541,1541,1541,1541,1529,1538,1538,1529,1538,1538,1529,1538,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538, -1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1561,1561,1561,1561,1549,1558,1558,1549,1558,1558,1549,1558,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558, +1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, /* block 296 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 297 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1538,1538,1529,1530,1530,1530,1530,1530,1530,1530,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1530, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1530,1530,1530,1530,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1558,1558,1549,1550,1549,1550,1550,1550,1550,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1550,1550,1550,1550,1550,1550,1550, /* block 298 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,196,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,196,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,196,196,196,196,196, /* block 299 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1032,1032, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1039,1039, /* block 300 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 301 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 302 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 303 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 304 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, - -/* block 305 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 306 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, +/* block 305 */ +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5714,7 +5732,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 307 */ +/* block 306 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5722,77 +5740,77 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,1032,1032, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,1039,1039, + +/* block 307 */ +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 308 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,196, /* block 309 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +771,776,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, /* block 310 */ -765,770,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 311 */ -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, /* block 312 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 313 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, - -/* block 314 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1032,1032, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1039,1039, }; #if UCD_BLOCK_SIZE != 128 diff --git a/vendor/pcre2/src/pcre2_ucp.h b/vendor/pcre2/src/pcre2_ucp.h index 513c54e29e..74c1cc5391 100644 --- a/vendor/pcre2/src/pcre2_ucp.h +++ b/vendor/pcre2/src/pcre2_ucp.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD #define PCRE2_UCP_H_IDEMPOTENT_GUARD @@ -301,6 +302,7 @@ enum { ucp_Multani, ucp_Old_Hungarian, ucp_Adlam, + ucp_Newa, ucp_Osage, ucp_Tangut, ucp_Masaram_Gondi, @@ -376,7 +378,6 @@ enum { ucp_SignWriting, ucp_Bhaiksuki, ucp_Marchen, - ucp_Newa, ucp_Nushu, ucp_Soyombo, ucp_Zanabazar_Square, @@ -394,6 +395,10 @@ enum { ucp_Kawi, ucp_Nag_Mundari, ucp_Kirat_Rai, + ucp_Sidetic, + ucp_Tai_Yo, + ucp_Tolong_Siki, + ucp_Beria_Erfe, /* This must be last */ ucp_Script_Count diff --git a/vendor/pcre2/src/pcre2_ucptables_inc.h b/vendor/pcre2/src/pcre2_ucptables_inc.h index 6f1731d32c..06a5c0e564 100644 --- a/vendor/pcre2/src/pcre2_ucptables_inc.h +++ b/vendor/pcre2/src/pcre2_ucptables_inc.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifdef SUPPORT_UNICODE /* The PRIV(utt)[] table below translates Unicode property names into type and @@ -81,6 +82,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_batk0 STR_b STR_a STR_t STR_k "\0" #define STRING_beng0 STR_b STR_e STR_n STR_g "\0" #define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i "\0" +#define STRING_berf0 STR_b STR_e STR_r STR_f "\0" +#define STRING_beriaerfe0 STR_b STR_e STR_r STR_i STR_a STR_e STR_r STR_f STR_e "\0" #define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0" #define STRING_bhks0 STR_b STR_h STR_k STR_s "\0" #define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l "\0" @@ -459,6 +462,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_shrd0 STR_s STR_h STR_r STR_d "\0" #define STRING_sidd0 STR_s STR_i STR_d STR_d "\0" #define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m "\0" +#define STRING_sidetic0 STR_s STR_i STR_d STR_e STR_t STR_i STR_c "\0" +#define STRING_sidt0 STR_s STR_i STR_d STR_t "\0" #define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g "\0" #define STRING_sind0 STR_s STR_i STR_n STR_d "\0" #define STRING_sinh0 STR_s STR_i STR_n STR_h "\0" @@ -490,6 +495,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_taile0 STR_t STR_a STR_i STR_l STR_e "\0" #define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m "\0" #define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t "\0" +#define STRING_taiyo0 STR_t STR_a STR_i STR_y STR_o "\0" #define STRING_takr0 STR_t STR_a STR_k STR_r "\0" #define STRING_takri0 STR_t STR_a STR_k STR_r STR_i "\0" #define STRING_tale0 STR_t STR_a STR_l STR_e "\0" @@ -500,6 +506,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a "\0" #define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t "\0" #define STRING_tavt0 STR_t STR_a STR_v STR_t "\0" +#define STRING_tayo0 STR_t STR_a STR_y STR_o "\0" #define STRING_telu0 STR_t STR_e STR_l STR_u "\0" #define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u "\0" #define STRING_term0 STR_t STR_e STR_r STR_m "\0" @@ -517,6 +524,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tnsa0 STR_t STR_n STR_s STR_a "\0" #define STRING_todhri0 STR_t STR_o STR_d STR_h STR_r STR_i "\0" #define STRING_todr0 STR_t STR_o STR_d STR_r "\0" +#define STRING_tolongsiki0 STR_t STR_o STR_l STR_o STR_n STR_g STR_s STR_i STR_k STR_i "\0" +#define STRING_tols0 STR_t STR_o STR_l STR_s "\0" #define STRING_toto0 STR_t STR_o STR_t STR_o "\0" #define STRING_tulutigalari0 STR_t STR_u STR_l STR_u STR_t STR_i STR_g STR_a STR_l STR_a STR_r STR_i "\0" #define STRING_tutg0 STR_t STR_u STR_t STR_g "\0" @@ -593,6 +602,8 @@ const char PRIV(utt_names)[] = STRING_batk0 STRING_beng0 STRING_bengali0 + STRING_berf0 + STRING_beriaerfe0 STRING_bhaiksuki0 STRING_bhks0 STRING_bidial0 @@ -971,6 +982,8 @@ const char PRIV(utt_names)[] = STRING_shrd0 STRING_sidd0 STRING_siddham0 + STRING_sidetic0 + STRING_sidt0 STRING_signwriting0 STRING_sind0 STRING_sinh0 @@ -1002,6 +1015,7 @@ const char PRIV(utt_names)[] = STRING_taile0 STRING_taitham0 STRING_taiviet0 + STRING_taiyo0 STRING_takr0 STRING_takri0 STRING_tale0 @@ -1012,6 +1026,7 @@ const char PRIV(utt_names)[] = STRING_tangsa0 STRING_tangut0 STRING_tavt0 + STRING_tayo0 STRING_telu0 STRING_telugu0 STRING_term0 @@ -1029,6 +1044,8 @@ const char PRIV(utt_names)[] = STRING_tnsa0 STRING_todhri0 STRING_todr0 + STRING_tolongsiki0 + STRING_tols0 STRING_toto0 STRING_tulutigalari0 STRING_tutg0 @@ -1105,488 +1122,496 @@ const ucp_type_table PRIV(utt)[] = { { 177, PT_SC, ucp_Batak }, { 182, PT_SCX, ucp_Bengali }, { 187, PT_SCX, ucp_Bengali }, - { 195, PT_SC, ucp_Bhaiksuki }, - { 205, PT_SC, ucp_Bhaiksuki }, - { 210, PT_BIDICL, ucp_bidiAL }, - { 217, PT_BIDICL, ucp_bidiAN }, - { 224, PT_BIDICL, ucp_bidiB }, - { 230, PT_BIDICL, ucp_bidiBN }, - { 237, PT_BOOL, ucp_Bidi_Control }, - { 243, PT_BOOL, ucp_Bidi_Control }, - { 255, PT_BIDICL, ucp_bidiCS }, - { 262, PT_BIDICL, ucp_bidiEN }, - { 269, PT_BIDICL, ucp_bidiES }, - { 276, PT_BIDICL, ucp_bidiET }, - { 283, PT_BIDICL, ucp_bidiFSI }, - { 291, PT_BIDICL, ucp_bidiL }, - { 297, PT_BIDICL, ucp_bidiLRE }, - { 305, PT_BIDICL, ucp_bidiLRI }, - { 313, PT_BIDICL, ucp_bidiLRO }, - { 321, PT_BOOL, ucp_Bidi_Mirrored }, - { 327, PT_BOOL, ucp_Bidi_Mirrored }, - { 340, PT_BIDICL, ucp_bidiNSM }, - { 348, PT_BIDICL, ucp_bidiON }, - { 355, PT_BIDICL, ucp_bidiPDF }, - { 363, PT_BIDICL, ucp_bidiPDI }, - { 371, PT_BIDICL, ucp_bidiR }, - { 377, PT_BIDICL, ucp_bidiRLE }, - { 385, PT_BIDICL, ucp_bidiRLI }, - { 393, PT_BIDICL, ucp_bidiRLO }, - { 401, PT_BIDICL, ucp_bidiS }, - { 407, PT_BIDICL, ucp_bidiWS }, - { 414, PT_SCX, ucp_Bopomofo }, - { 419, PT_SCX, ucp_Bopomofo }, - { 428, PT_SC, ucp_Brahmi }, - { 433, PT_SC, ucp_Brahmi }, - { 440, PT_SC, ucp_Braille }, - { 445, PT_SC, ucp_Braille }, - { 453, PT_SCX, ucp_Buginese }, - { 458, PT_SCX, ucp_Buginese }, - { 467, PT_SCX, ucp_Buhid }, - { 472, PT_SCX, ucp_Buhid }, - { 478, PT_GC, ucp_C }, - { 480, PT_SCX, ucp_Chakma }, - { 485, PT_SC, ucp_Canadian_Aboriginal }, - { 504, PT_SC, ucp_Canadian_Aboriginal }, - { 509, PT_SCX, ucp_Carian }, - { 514, PT_SCX, ucp_Carian }, - { 521, PT_BOOL, ucp_Cased }, - { 527, PT_BOOL, ucp_Case_Ignorable }, - { 541, PT_SCX, ucp_Caucasian_Albanian }, - { 559, PT_PC, ucp_Cc }, - { 562, PT_PC, ucp_Cf }, - { 565, PT_SCX, ucp_Chakma }, - { 572, PT_SC, ucp_Cham }, - { 577, PT_BOOL, ucp_Changes_When_Casefolded }, - { 599, PT_BOOL, ucp_Changes_When_Casemapped }, - { 621, PT_BOOL, ucp_Changes_When_Lowercased }, - { 643, PT_BOOL, ucp_Changes_When_Titlecased }, - { 665, PT_BOOL, ucp_Changes_When_Uppercased }, - { 687, PT_SCX, ucp_Cherokee }, - { 692, PT_SCX, ucp_Cherokee }, - { 701, PT_SC, ucp_Chorasmian }, - { 712, PT_SC, ucp_Chorasmian }, - { 717, PT_BOOL, ucp_Case_Ignorable }, - { 720, PT_PC, ucp_Cn }, - { 723, PT_PC, ucp_Co }, - { 726, PT_SC, ucp_Common }, - { 733, PT_SCX, ucp_Coptic }, - { 738, PT_SCX, ucp_Coptic }, - { 745, PT_SCX, ucp_Cypro_Minoan }, - { 750, PT_SCX, ucp_Cypriot }, - { 755, PT_PC, ucp_Cs }, - { 758, PT_SC, ucp_Cuneiform }, - { 768, PT_BOOL, ucp_Changes_When_Casefolded }, - { 773, PT_BOOL, ucp_Changes_When_Casemapped }, - { 778, PT_BOOL, ucp_Changes_When_Lowercased }, - { 782, PT_BOOL, ucp_Changes_When_Titlecased }, - { 786, PT_BOOL, ucp_Changes_When_Uppercased }, - { 790, PT_SCX, ucp_Cypriot }, - { 798, PT_SCX, ucp_Cypro_Minoan }, - { 810, PT_SCX, ucp_Cyrillic }, - { 819, PT_SCX, ucp_Cyrillic }, - { 824, PT_BOOL, ucp_Dash }, - { 829, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 855, PT_BOOL, ucp_Deprecated }, - { 859, PT_BOOL, ucp_Deprecated }, - { 870, PT_SC, ucp_Deseret }, - { 878, PT_SCX, ucp_Devanagari }, - { 883, PT_SCX, ucp_Devanagari }, - { 894, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 897, PT_BOOL, ucp_Diacritic }, - { 901, PT_BOOL, ucp_Diacritic }, - { 911, PT_SC, ucp_Dives_Akuru }, - { 916, PT_SC, ucp_Dives_Akuru }, - { 927, PT_SCX, ucp_Dogra }, - { 932, PT_SCX, ucp_Dogra }, - { 938, PT_SC, ucp_Deseret }, - { 943, PT_SCX, ucp_Duployan }, - { 948, PT_SCX, ucp_Duployan }, - { 957, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 963, PT_BOOL, ucp_Emoji_Component }, - { 969, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 974, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 994, PT_SCX, ucp_Elbasan }, - { 999, PT_SCX, ucp_Elbasan }, - { 1007, PT_SC, ucp_Elymaic }, - { 1012, PT_SC, ucp_Elymaic }, - { 1020, PT_BOOL, ucp_Emoji_Modifier }, - { 1025, PT_BOOL, ucp_Emoji }, - { 1031, PT_BOOL, ucp_Emoji_Component }, - { 1046, PT_BOOL, ucp_Emoji_Modifier }, - { 1060, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 1078, PT_BOOL, ucp_Emoji_Presentation }, - { 1096, PT_BOOL, ucp_Emoji_Presentation }, - { 1102, PT_SCX, ucp_Ethiopic }, - { 1107, PT_SCX, ucp_Ethiopic }, - { 1116, PT_BOOL, ucp_Extender }, - { 1120, PT_BOOL, ucp_Extended_Pictographic }, - { 1141, PT_BOOL, ucp_Extender }, - { 1150, PT_BOOL, ucp_Extended_Pictographic }, - { 1158, PT_SCX, ucp_Garay }, - { 1163, PT_SCX, ucp_Garay }, - { 1169, PT_SCX, ucp_Georgian }, - { 1174, PT_SCX, ucp_Georgian }, - { 1183, PT_SCX, ucp_Glagolitic }, - { 1188, PT_SCX, ucp_Glagolitic }, - { 1199, PT_SCX, ucp_Gunjala_Gondi }, - { 1204, PT_SCX, ucp_Masaram_Gondi }, - { 1209, PT_SCX, ucp_Gothic }, - { 1214, PT_SCX, ucp_Gothic }, - { 1221, PT_SCX, ucp_Grantha }, - { 1226, PT_SCX, ucp_Grantha }, - { 1234, PT_BOOL, ucp_Grapheme_Base }, - { 1247, PT_BOOL, ucp_Grapheme_Extend }, - { 1262, PT_BOOL, ucp_Grapheme_Link }, - { 1275, PT_BOOL, ucp_Grapheme_Base }, - { 1282, PT_SCX, ucp_Greek }, - { 1288, PT_SCX, ucp_Greek }, - { 1293, PT_BOOL, ucp_Grapheme_Extend }, - { 1299, PT_BOOL, ucp_Grapheme_Link }, - { 1306, PT_SCX, ucp_Gujarati }, - { 1315, PT_SCX, ucp_Gujarati }, - { 1320, PT_SCX, ucp_Gurung_Khema }, - { 1325, PT_SCX, ucp_Gunjala_Gondi }, - { 1338, PT_SCX, ucp_Gurmukhi }, - { 1347, PT_SCX, ucp_Gurmukhi }, - { 1352, PT_SCX, ucp_Gurung_Khema }, - { 1364, PT_SCX, ucp_Han }, - { 1368, PT_SCX, ucp_Hangul }, - { 1373, PT_SCX, ucp_Hangul }, - { 1380, PT_SCX, ucp_Han }, - { 1385, PT_SCX, ucp_Hanifi_Rohingya }, - { 1400, PT_SCX, ucp_Hanunoo }, - { 1405, PT_SCX, ucp_Hanunoo }, - { 1413, PT_SC, ucp_Hatran }, - { 1418, PT_SC, ucp_Hatran }, - { 1425, PT_SCX, ucp_Hebrew }, - { 1430, PT_SCX, ucp_Hebrew }, - { 1437, PT_BOOL, ucp_Hex_Digit }, - { 1441, PT_BOOL, ucp_Hex_Digit }, - { 1450, PT_SCX, ucp_Hiragana }, - { 1455, PT_SCX, ucp_Hiragana }, - { 1464, PT_SC, ucp_Anatolian_Hieroglyphs }, - { 1469, PT_SC, ucp_Pahawh_Hmong }, - { 1474, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 1479, PT_SCX, ucp_Old_Hungarian }, - { 1484, PT_BOOL, ucp_ID_Continue }, - { 1488, PT_BOOL, ucp_ID_Compat_Math_Continue }, - { 1509, PT_BOOL, ucp_ID_Compat_Math_Start }, - { 1527, PT_BOOL, ucp_ID_Continue }, - { 1538, PT_BOOL, ucp_Ideographic }, - { 1543, PT_BOOL, ucp_Ideographic }, - { 1555, PT_BOOL, ucp_ID_Start }, - { 1559, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1564, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1582, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1587, PT_BOOL, ucp_ID_Start }, - { 1595, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1614, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1619, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1636, PT_SC, ucp_Imperial_Aramaic }, - { 1652, PT_BOOL, ucp_InCB }, - { 1657, PT_SC, ucp_Inherited }, - { 1667, PT_SC, ucp_Inscriptional_Pahlavi }, - { 1688, PT_SC, ucp_Inscriptional_Parthian }, - { 1710, PT_SC, ucp_Old_Italic }, - { 1715, PT_SCX, ucp_Javanese }, - { 1720, PT_SCX, ucp_Javanese }, - { 1729, PT_BOOL, ucp_Join_Control }, - { 1735, PT_BOOL, ucp_Join_Control }, - { 1747, PT_SCX, ucp_Kaithi }, - { 1754, PT_SCX, ucp_Kayah_Li }, - { 1759, PT_SCX, ucp_Katakana }, - { 1764, PT_SCX, ucp_Kannada }, - { 1772, PT_SCX, ucp_Katakana }, - { 1781, PT_SC, ucp_Kawi }, - { 1786, PT_SCX, ucp_Kayah_Li }, - { 1794, PT_SC, ucp_Kharoshthi }, - { 1799, PT_SC, ucp_Kharoshthi }, - { 1810, PT_SC, ucp_Khitan_Small_Script }, - { 1828, PT_SC, ucp_Khmer }, - { 1834, PT_SC, ucp_Khmer }, - { 1839, PT_SCX, ucp_Khojki }, - { 1844, PT_SCX, ucp_Khojki }, - { 1851, PT_SCX, ucp_Khudawadi }, - { 1861, PT_SC, ucp_Kirat_Rai }, - { 1870, PT_SC, ucp_Khitan_Small_Script }, - { 1875, PT_SCX, ucp_Kannada }, - { 1880, PT_SC, ucp_Kirat_Rai }, - { 1885, PT_SCX, ucp_Kaithi }, - { 1890, PT_GC, ucp_L }, - { 1892, PT_LAMP, 0 }, - { 1895, PT_SC, ucp_Tai_Tham }, - { 1900, PT_SC, ucp_Lao }, - { 1904, PT_SC, ucp_Lao }, - { 1909, PT_SCX, ucp_Latin }, - { 1915, PT_SCX, ucp_Latin }, - { 1920, PT_LAMP, 0 }, - { 1923, PT_SC, ucp_Lepcha }, - { 1928, PT_SC, ucp_Lepcha }, - { 1935, PT_SCX, ucp_Limbu }, - { 1940, PT_SCX, ucp_Limbu }, - { 1946, PT_SCX, ucp_Linear_A }, - { 1951, PT_SCX, ucp_Linear_B }, - { 1956, PT_SCX, ucp_Linear_A }, - { 1964, PT_SCX, ucp_Linear_B }, - { 1972, PT_SCX, ucp_Lisu }, - { 1977, PT_PC, ucp_Ll }, - { 1980, PT_PC, ucp_Lm }, - { 1983, PT_PC, ucp_Lo }, - { 1986, PT_BOOL, ucp_Logical_Order_Exception }, - { 1990, PT_BOOL, ucp_Logical_Order_Exception }, - { 2012, PT_BOOL, ucp_Lowercase }, - { 2018, PT_BOOL, ucp_Lowercase }, - { 2028, PT_PC, ucp_Lt }, - { 2031, PT_PC, ucp_Lu }, - { 2034, PT_SCX, ucp_Lycian }, - { 2039, PT_SCX, ucp_Lycian }, - { 2046, PT_SCX, ucp_Lydian }, - { 2051, PT_SCX, ucp_Lydian }, - { 2058, PT_GC, ucp_M }, - { 2060, PT_SCX, ucp_Mahajani }, - { 2069, PT_SCX, ucp_Mahajani }, - { 2074, PT_SC, ucp_Makasar }, - { 2079, PT_SC, ucp_Makasar }, - { 2087, PT_SCX, ucp_Malayalam }, - { 2097, PT_SCX, ucp_Mandaic }, - { 2102, PT_SCX, ucp_Mandaic }, - { 2110, PT_SCX, ucp_Manichaean }, - { 2115, PT_SCX, ucp_Manichaean }, - { 2126, PT_SC, ucp_Marchen }, - { 2131, PT_SC, ucp_Marchen }, - { 2139, PT_SCX, ucp_Masaram_Gondi }, - { 2152, PT_BOOL, ucp_Math }, - { 2157, PT_PC, ucp_Mc }, - { 2160, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2164, PT_PC, ucp_Me }, - { 2167, PT_SC, ucp_Medefaidrin }, - { 2179, PT_SC, ucp_Medefaidrin }, - { 2184, PT_SC, ucp_Meetei_Mayek }, - { 2196, PT_SC, ucp_Mende_Kikakui }, - { 2201, PT_SC, ucp_Mende_Kikakui }, - { 2214, PT_SC, ucp_Meroitic_Cursive }, - { 2219, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2224, PT_SC, ucp_Meroitic_Cursive }, - { 2240, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2260, PT_SC, ucp_Miao }, - { 2265, PT_SCX, ucp_Malayalam }, - { 2270, PT_PC, ucp_Mn }, - { 2273, PT_SCX, ucp_Modi }, - { 2278, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2300, PT_SCX, ucp_Mongolian }, - { 2305, PT_SCX, ucp_Mongolian }, - { 2315, PT_SC, ucp_Mro }, - { 2319, PT_SC, ucp_Mro }, - { 2324, PT_SC, ucp_Meetei_Mayek }, - { 2329, PT_SCX, ucp_Multani }, - { 2334, PT_SCX, ucp_Multani }, - { 2342, PT_SCX, ucp_Myanmar }, - { 2350, PT_SCX, ucp_Myanmar }, - { 2355, PT_GC, ucp_N }, - { 2357, PT_SC, ucp_Nabataean }, - { 2367, PT_SC, ucp_Nag_Mundari }, - { 2372, PT_SC, ucp_Nag_Mundari }, - { 2383, PT_SCX, ucp_Nandinagari }, - { 2388, PT_SCX, ucp_Nandinagari }, - { 2400, PT_SC, ucp_Old_North_Arabian }, - { 2405, PT_SC, ucp_Nabataean }, - { 2410, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2416, PT_PC, ucp_Nd }, - { 2419, PT_SC, ucp_Newa }, - { 2424, PT_SC, ucp_New_Tai_Lue }, - { 2434, PT_SCX, ucp_Nko }, - { 2438, PT_SCX, ucp_Nko }, - { 2443, PT_PC, ucp_Nl }, - { 2446, PT_PC, ucp_No }, - { 2449, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2471, PT_SC, ucp_Nushu }, - { 2476, PT_SC, ucp_Nushu }, - { 2482, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 2503, PT_SC, ucp_Ogham }, - { 2508, PT_SC, ucp_Ogham }, - { 2514, PT_SC, ucp_Ol_Chiki }, - { 2522, PT_SC, ucp_Ol_Chiki }, - { 2527, PT_SCX, ucp_Old_Hungarian }, - { 2540, PT_SC, ucp_Old_Italic }, - { 2550, PT_SC, ucp_Old_North_Arabian }, - { 2566, PT_SCX, ucp_Old_Permic }, - { 2576, PT_SC, ucp_Old_Persian }, - { 2587, PT_SC, ucp_Old_Sogdian }, - { 2598, PT_SC, ucp_Old_South_Arabian }, - { 2614, PT_SCX, ucp_Old_Turkic }, - { 2624, PT_SCX, ucp_Old_Uyghur }, - { 2634, PT_SCX, ucp_Ol_Onal }, - { 2641, PT_SCX, ucp_Ol_Onal }, - { 2646, PT_SCX, ucp_Oriya }, - { 2652, PT_SCX, ucp_Old_Turkic }, - { 2657, PT_SCX, ucp_Oriya }, - { 2662, PT_SCX, ucp_Osage }, - { 2668, PT_SCX, ucp_Osage }, - { 2673, PT_SC, ucp_Osmanya }, - { 2678, PT_SC, ucp_Osmanya }, - { 2686, PT_SCX, ucp_Old_Uyghur }, - { 2691, PT_GC, ucp_P }, - { 2693, PT_SC, ucp_Pahawh_Hmong }, - { 2705, PT_SC, ucp_Palmyrene }, - { 2710, PT_SC, ucp_Palmyrene }, - { 2720, PT_BOOL, ucp_Pattern_Syntax }, - { 2727, PT_BOOL, ucp_Pattern_Syntax }, - { 2741, PT_BOOL, ucp_Pattern_White_Space }, - { 2759, PT_BOOL, ucp_Pattern_White_Space }, - { 2765, PT_SC, ucp_Pau_Cin_Hau }, - { 2770, PT_SC, ucp_Pau_Cin_Hau }, - { 2780, PT_PC, ucp_Pc }, - { 2783, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2787, PT_PC, ucp_Pd }, - { 2790, PT_PC, ucp_Pe }, - { 2793, PT_SCX, ucp_Old_Permic }, - { 2798, PT_PC, ucp_Pf }, - { 2801, PT_SCX, ucp_Phags_Pa }, - { 2806, PT_SCX, ucp_Phags_Pa }, - { 2814, PT_SC, ucp_Inscriptional_Pahlavi }, - { 2819, PT_SCX, ucp_Psalter_Pahlavi }, - { 2824, PT_SC, ucp_Phoenician }, - { 2829, PT_SC, ucp_Phoenician }, - { 2840, PT_PC, ucp_Pi }, - { 2843, PT_SC, ucp_Miao }, - { 2848, PT_PC, ucp_Po }, - { 2851, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2878, PT_SC, ucp_Inscriptional_Parthian }, - { 2883, PT_PC, ucp_Ps }, - { 2886, PT_SCX, ucp_Psalter_Pahlavi }, - { 2901, PT_SCX, ucp_Coptic }, - { 2906, PT_SC, ucp_Inherited }, - { 2911, PT_BOOL, ucp_Quotation_Mark }, - { 2917, PT_BOOL, ucp_Quotation_Mark }, - { 2931, PT_BOOL, ucp_Radical }, - { 2939, PT_BOOL, ucp_Regional_Indicator }, - { 2957, PT_SC, ucp_Rejang }, - { 2964, PT_BOOL, ucp_Regional_Indicator }, - { 2967, PT_SC, ucp_Rejang }, - { 2972, PT_SCX, ucp_Hanifi_Rohingya }, - { 2977, PT_SCX, ucp_Runic }, - { 2983, PT_SCX, ucp_Runic }, - { 2988, PT_GC, ucp_S }, - { 2990, PT_SCX, ucp_Samaritan }, - { 3000, PT_SCX, ucp_Samaritan }, - { 3005, PT_SC, ucp_Old_South_Arabian }, - { 3010, PT_SC, ucp_Saurashtra }, - { 3015, PT_SC, ucp_Saurashtra }, - { 3026, PT_PC, ucp_Sc }, - { 3029, PT_BOOL, ucp_Soft_Dotted }, - { 3032, PT_BOOL, ucp_Sentence_Terminal }, - { 3049, PT_SC, ucp_SignWriting }, - { 3054, PT_SCX, ucp_Sharada }, - { 3062, PT_SCX, ucp_Shavian }, - { 3070, PT_SCX, ucp_Shavian }, - { 3075, PT_SCX, ucp_Sharada }, - { 3080, PT_SC, ucp_Siddham }, - { 3085, PT_SC, ucp_Siddham }, - { 3093, PT_SC, ucp_SignWriting }, - { 3105, PT_SCX, ucp_Khudawadi }, - { 3110, PT_SCX, ucp_Sinhala }, - { 3115, PT_SCX, ucp_Sinhala }, - { 3123, PT_PC, ucp_Sk }, - { 3126, PT_PC, ucp_Sm }, - { 3129, PT_PC, ucp_So }, - { 3132, PT_BOOL, ucp_Soft_Dotted }, - { 3143, PT_SCX, ucp_Sogdian }, - { 3148, PT_SCX, ucp_Sogdian }, - { 3156, PT_SC, ucp_Old_Sogdian }, - { 3161, PT_SC, ucp_Sora_Sompeng }, - { 3166, PT_SC, ucp_Sora_Sompeng }, - { 3178, PT_SC, ucp_Soyombo }, - { 3183, PT_SC, ucp_Soyombo }, - { 3191, PT_BOOL, ucp_White_Space }, - { 3197, PT_BOOL, ucp_Sentence_Terminal }, - { 3203, PT_SC, ucp_Sundanese }, - { 3208, PT_SC, ucp_Sundanese }, - { 3218, PT_SCX, ucp_Sunuwar }, - { 3223, PT_SCX, ucp_Sunuwar }, - { 3231, PT_SCX, ucp_Syloti_Nagri }, - { 3236, PT_SCX, ucp_Syloti_Nagri }, - { 3248, PT_SCX, ucp_Syriac }, - { 3253, PT_SCX, ucp_Syriac }, - { 3260, PT_SCX, ucp_Tagalog }, - { 3268, PT_SCX, ucp_Tagbanwa }, - { 3273, PT_SCX, ucp_Tagbanwa }, - { 3282, PT_SCX, ucp_Tai_Le }, - { 3288, PT_SC, ucp_Tai_Tham }, - { 3296, PT_SC, ucp_Tai_Viet }, - { 3304, PT_SCX, ucp_Takri }, - { 3309, PT_SCX, ucp_Takri }, - { 3315, PT_SCX, ucp_Tai_Le }, - { 3320, PT_SC, ucp_New_Tai_Lue }, - { 3325, PT_SCX, ucp_Tamil }, - { 3331, PT_SCX, ucp_Tamil }, - { 3336, PT_SCX, ucp_Tangut }, - { 3341, PT_SC, ucp_Tangsa }, - { 3348, PT_SCX, ucp_Tangut }, - { 3355, PT_SC, ucp_Tai_Viet }, - { 3360, PT_SCX, ucp_Telugu }, - { 3365, PT_SCX, ucp_Telugu }, - { 3372, PT_BOOL, ucp_Terminal_Punctuation }, - { 3377, PT_BOOL, ucp_Terminal_Punctuation }, - { 3397, PT_SCX, ucp_Tifinagh }, - { 3402, PT_SCX, ucp_Tagalog }, - { 3407, PT_SCX, ucp_Thaana }, - { 3412, PT_SCX, ucp_Thaana }, - { 3419, PT_SCX, ucp_Thai }, - { 3424, PT_SCX, ucp_Tibetan }, - { 3432, PT_SCX, ucp_Tibetan }, - { 3437, PT_SCX, ucp_Tifinagh }, - { 3446, PT_SCX, ucp_Tirhuta }, - { 3451, PT_SCX, ucp_Tirhuta }, - { 3459, PT_SC, ucp_Tangsa }, - { 3464, PT_SCX, ucp_Todhri }, - { 3471, PT_SCX, ucp_Todhri }, - { 3476, PT_SCX, ucp_Toto }, - { 3481, PT_SCX, ucp_Tulu_Tigalari }, - { 3494, PT_SCX, ucp_Tulu_Tigalari }, - { 3499, PT_SC, ucp_Ugaritic }, - { 3504, PT_SC, ucp_Ugaritic }, - { 3513, PT_BOOL, ucp_Unified_Ideograph }, - { 3519, PT_BOOL, ucp_Unified_Ideograph }, - { 3536, PT_SC, ucp_Unknown }, - { 3544, PT_BOOL, ucp_Uppercase }, - { 3550, PT_BOOL, ucp_Uppercase }, - { 3560, PT_SC, ucp_Vai }, - { 3564, PT_SC, ucp_Vai }, - { 3569, PT_BOOL, ucp_Variation_Selector }, - { 3587, PT_SC, ucp_Vithkuqi }, - { 3592, PT_SC, ucp_Vithkuqi }, - { 3601, PT_BOOL, ucp_Variation_Selector }, - { 3604, PT_SC, ucp_Wancho }, - { 3611, PT_SC, ucp_Warang_Citi }, - { 3616, PT_SC, ucp_Warang_Citi }, - { 3627, PT_SC, ucp_Wancho }, - { 3632, PT_BOOL, ucp_White_Space }, - { 3643, PT_BOOL, ucp_White_Space }, - { 3650, PT_ALNUM, 0 }, - { 3654, PT_BOOL, ucp_XID_Continue }, - { 3659, PT_BOOL, ucp_XID_Continue }, - { 3671, PT_BOOL, ucp_XID_Start }, - { 3676, PT_BOOL, ucp_XID_Start }, - { 3685, PT_SC, ucp_Old_Persian }, - { 3690, PT_PXSPACE, 0 }, - { 3694, PT_SPACE, 0 }, - { 3698, PT_SC, ucp_Cuneiform }, - { 3703, PT_UCNC, 0 }, - { 3707, PT_WORD, 0 }, - { 3711, PT_SCX, ucp_Yezidi }, - { 3716, PT_SCX, ucp_Yezidi }, - { 3723, PT_SCX, ucp_Yi }, - { 3726, PT_SCX, ucp_Yi }, - { 3731, PT_GC, ucp_Z }, - { 3733, PT_SC, ucp_Zanabazar_Square }, - { 3749, PT_SC, ucp_Zanabazar_Square }, - { 3754, PT_SC, ucp_Inherited }, - { 3759, PT_PC, ucp_Zl }, - { 3762, PT_PC, ucp_Zp }, - { 3765, PT_PC, ucp_Zs }, - { 3768, PT_SC, ucp_Common }, - { 3773, PT_SC, ucp_Unknown } + { 195, PT_SC, ucp_Beria_Erfe }, + { 200, PT_SC, ucp_Beria_Erfe }, + { 210, PT_SC, ucp_Bhaiksuki }, + { 220, PT_SC, ucp_Bhaiksuki }, + { 225, PT_BIDICL, ucp_bidiAL }, + { 232, PT_BIDICL, ucp_bidiAN }, + { 239, PT_BIDICL, ucp_bidiB }, + { 245, PT_BIDICL, ucp_bidiBN }, + { 252, PT_BOOL, ucp_Bidi_Control }, + { 258, PT_BOOL, ucp_Bidi_Control }, + { 270, PT_BIDICL, ucp_bidiCS }, + { 277, PT_BIDICL, ucp_bidiEN }, + { 284, PT_BIDICL, ucp_bidiES }, + { 291, PT_BIDICL, ucp_bidiET }, + { 298, PT_BIDICL, ucp_bidiFSI }, + { 306, PT_BIDICL, ucp_bidiL }, + { 312, PT_BIDICL, ucp_bidiLRE }, + { 320, PT_BIDICL, ucp_bidiLRI }, + { 328, PT_BIDICL, ucp_bidiLRO }, + { 336, PT_BOOL, ucp_Bidi_Mirrored }, + { 342, PT_BOOL, ucp_Bidi_Mirrored }, + { 355, PT_BIDICL, ucp_bidiNSM }, + { 363, PT_BIDICL, ucp_bidiON }, + { 370, PT_BIDICL, ucp_bidiPDF }, + { 378, PT_BIDICL, ucp_bidiPDI }, + { 386, PT_BIDICL, ucp_bidiR }, + { 392, PT_BIDICL, ucp_bidiRLE }, + { 400, PT_BIDICL, ucp_bidiRLI }, + { 408, PT_BIDICL, ucp_bidiRLO }, + { 416, PT_BIDICL, ucp_bidiS }, + { 422, PT_BIDICL, ucp_bidiWS }, + { 429, PT_SCX, ucp_Bopomofo }, + { 434, PT_SCX, ucp_Bopomofo }, + { 443, PT_SC, ucp_Brahmi }, + { 448, PT_SC, ucp_Brahmi }, + { 455, PT_SC, ucp_Braille }, + { 460, PT_SC, ucp_Braille }, + { 468, PT_SCX, ucp_Buginese }, + { 473, PT_SCX, ucp_Buginese }, + { 482, PT_SCX, ucp_Buhid }, + { 487, PT_SCX, ucp_Buhid }, + { 493, PT_GC, ucp_C }, + { 495, PT_SCX, ucp_Chakma }, + { 500, PT_SC, ucp_Canadian_Aboriginal }, + { 519, PT_SC, ucp_Canadian_Aboriginal }, + { 524, PT_SCX, ucp_Carian }, + { 529, PT_SCX, ucp_Carian }, + { 536, PT_BOOL, ucp_Cased }, + { 542, PT_BOOL, ucp_Case_Ignorable }, + { 556, PT_SCX, ucp_Caucasian_Albanian }, + { 574, PT_PC, ucp_Cc }, + { 577, PT_PC, ucp_Cf }, + { 580, PT_SCX, ucp_Chakma }, + { 587, PT_SC, ucp_Cham }, + { 592, PT_BOOL, ucp_Changes_When_Casefolded }, + { 614, PT_BOOL, ucp_Changes_When_Casemapped }, + { 636, PT_BOOL, ucp_Changes_When_Lowercased }, + { 658, PT_BOOL, ucp_Changes_When_Titlecased }, + { 680, PT_BOOL, ucp_Changes_When_Uppercased }, + { 702, PT_SCX, ucp_Cherokee }, + { 707, PT_SCX, ucp_Cherokee }, + { 716, PT_SC, ucp_Chorasmian }, + { 727, PT_SC, ucp_Chorasmian }, + { 732, PT_BOOL, ucp_Case_Ignorable }, + { 735, PT_PC, ucp_Cn }, + { 738, PT_PC, ucp_Co }, + { 741, PT_SC, ucp_Common }, + { 748, PT_SCX, ucp_Coptic }, + { 753, PT_SCX, ucp_Coptic }, + { 760, PT_SCX, ucp_Cypro_Minoan }, + { 765, PT_SCX, ucp_Cypriot }, + { 770, PT_PC, ucp_Cs }, + { 773, PT_SC, ucp_Cuneiform }, + { 783, PT_BOOL, ucp_Changes_When_Casefolded }, + { 788, PT_BOOL, ucp_Changes_When_Casemapped }, + { 793, PT_BOOL, ucp_Changes_When_Lowercased }, + { 797, PT_BOOL, ucp_Changes_When_Titlecased }, + { 801, PT_BOOL, ucp_Changes_When_Uppercased }, + { 805, PT_SCX, ucp_Cypriot }, + { 813, PT_SCX, ucp_Cypro_Minoan }, + { 825, PT_SCX, ucp_Cyrillic }, + { 834, PT_SCX, ucp_Cyrillic }, + { 839, PT_BOOL, ucp_Dash }, + { 844, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 870, PT_BOOL, ucp_Deprecated }, + { 874, PT_BOOL, ucp_Deprecated }, + { 885, PT_SC, ucp_Deseret }, + { 893, PT_SCX, ucp_Devanagari }, + { 898, PT_SCX, ucp_Devanagari }, + { 909, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 912, PT_BOOL, ucp_Diacritic }, + { 916, PT_BOOL, ucp_Diacritic }, + { 926, PT_SC, ucp_Dives_Akuru }, + { 931, PT_SC, ucp_Dives_Akuru }, + { 942, PT_SCX, ucp_Dogra }, + { 947, PT_SCX, ucp_Dogra }, + { 953, PT_SC, ucp_Deseret }, + { 958, PT_SCX, ucp_Duployan }, + { 963, PT_SCX, ucp_Duployan }, + { 972, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 978, PT_BOOL, ucp_Emoji_Component }, + { 984, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 989, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 1009, PT_SCX, ucp_Elbasan }, + { 1014, PT_SCX, ucp_Elbasan }, + { 1022, PT_SC, ucp_Elymaic }, + { 1027, PT_SC, ucp_Elymaic }, + { 1035, PT_BOOL, ucp_Emoji_Modifier }, + { 1040, PT_BOOL, ucp_Emoji }, + { 1046, PT_BOOL, ucp_Emoji_Component }, + { 1061, PT_BOOL, ucp_Emoji_Modifier }, + { 1075, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 1093, PT_BOOL, ucp_Emoji_Presentation }, + { 1111, PT_BOOL, ucp_Emoji_Presentation }, + { 1117, PT_SCX, ucp_Ethiopic }, + { 1122, PT_SCX, ucp_Ethiopic }, + { 1131, PT_BOOL, ucp_Extender }, + { 1135, PT_BOOL, ucp_Extended_Pictographic }, + { 1156, PT_BOOL, ucp_Extender }, + { 1165, PT_BOOL, ucp_Extended_Pictographic }, + { 1173, PT_SCX, ucp_Garay }, + { 1178, PT_SCX, ucp_Garay }, + { 1184, PT_SCX, ucp_Georgian }, + { 1189, PT_SCX, ucp_Georgian }, + { 1198, PT_SCX, ucp_Glagolitic }, + { 1203, PT_SCX, ucp_Glagolitic }, + { 1214, PT_SCX, ucp_Gunjala_Gondi }, + { 1219, PT_SCX, ucp_Masaram_Gondi }, + { 1224, PT_SCX, ucp_Gothic }, + { 1229, PT_SCX, ucp_Gothic }, + { 1236, PT_SCX, ucp_Grantha }, + { 1241, PT_SCX, ucp_Grantha }, + { 1249, PT_BOOL, ucp_Grapheme_Base }, + { 1262, PT_BOOL, ucp_Grapheme_Extend }, + { 1277, PT_BOOL, ucp_Grapheme_Link }, + { 1290, PT_BOOL, ucp_Grapheme_Base }, + { 1297, PT_SCX, ucp_Greek }, + { 1303, PT_SCX, ucp_Greek }, + { 1308, PT_BOOL, ucp_Grapheme_Extend }, + { 1314, PT_BOOL, ucp_Grapheme_Link }, + { 1321, PT_SCX, ucp_Gujarati }, + { 1330, PT_SCX, ucp_Gujarati }, + { 1335, PT_SCX, ucp_Gurung_Khema }, + { 1340, PT_SCX, ucp_Gunjala_Gondi }, + { 1353, PT_SCX, ucp_Gurmukhi }, + { 1362, PT_SCX, ucp_Gurmukhi }, + { 1367, PT_SCX, ucp_Gurung_Khema }, + { 1379, PT_SCX, ucp_Han }, + { 1383, PT_SCX, ucp_Hangul }, + { 1388, PT_SCX, ucp_Hangul }, + { 1395, PT_SCX, ucp_Han }, + { 1400, PT_SCX, ucp_Hanifi_Rohingya }, + { 1415, PT_SCX, ucp_Hanunoo }, + { 1420, PT_SCX, ucp_Hanunoo }, + { 1428, PT_SC, ucp_Hatran }, + { 1433, PT_SC, ucp_Hatran }, + { 1440, PT_SCX, ucp_Hebrew }, + { 1445, PT_SCX, ucp_Hebrew }, + { 1452, PT_BOOL, ucp_Hex_Digit }, + { 1456, PT_BOOL, ucp_Hex_Digit }, + { 1465, PT_SCX, ucp_Hiragana }, + { 1470, PT_SCX, ucp_Hiragana }, + { 1479, PT_SC, ucp_Anatolian_Hieroglyphs }, + { 1484, PT_SC, ucp_Pahawh_Hmong }, + { 1489, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1494, PT_SCX, ucp_Old_Hungarian }, + { 1499, PT_BOOL, ucp_ID_Continue }, + { 1503, PT_BOOL, ucp_ID_Compat_Math_Continue }, + { 1524, PT_BOOL, ucp_ID_Compat_Math_Start }, + { 1542, PT_BOOL, ucp_ID_Continue }, + { 1553, PT_BOOL, ucp_Ideographic }, + { 1558, PT_BOOL, ucp_Ideographic }, + { 1570, PT_BOOL, ucp_ID_Start }, + { 1574, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1579, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1597, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1602, PT_BOOL, ucp_ID_Start }, + { 1610, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1629, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1634, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1651, PT_SC, ucp_Imperial_Aramaic }, + { 1667, PT_BOOL, ucp_InCB }, + { 1672, PT_SC, ucp_Inherited }, + { 1682, PT_SC, ucp_Inscriptional_Pahlavi }, + { 1703, PT_SC, ucp_Inscriptional_Parthian }, + { 1725, PT_SC, ucp_Old_Italic }, + { 1730, PT_SCX, ucp_Javanese }, + { 1735, PT_SCX, ucp_Javanese }, + { 1744, PT_BOOL, ucp_Join_Control }, + { 1750, PT_BOOL, ucp_Join_Control }, + { 1762, PT_SCX, ucp_Kaithi }, + { 1769, PT_SCX, ucp_Kayah_Li }, + { 1774, PT_SCX, ucp_Katakana }, + { 1779, PT_SCX, ucp_Kannada }, + { 1787, PT_SCX, ucp_Katakana }, + { 1796, PT_SC, ucp_Kawi }, + { 1801, PT_SCX, ucp_Kayah_Li }, + { 1809, PT_SC, ucp_Kharoshthi }, + { 1814, PT_SC, ucp_Kharoshthi }, + { 1825, PT_SC, ucp_Khitan_Small_Script }, + { 1843, PT_SC, ucp_Khmer }, + { 1849, PT_SC, ucp_Khmer }, + { 1854, PT_SCX, ucp_Khojki }, + { 1859, PT_SCX, ucp_Khojki }, + { 1866, PT_SCX, ucp_Khudawadi }, + { 1876, PT_SC, ucp_Kirat_Rai }, + { 1885, PT_SC, ucp_Khitan_Small_Script }, + { 1890, PT_SCX, ucp_Kannada }, + { 1895, PT_SC, ucp_Kirat_Rai }, + { 1900, PT_SCX, ucp_Kaithi }, + { 1905, PT_GC, ucp_L }, + { 1907, PT_LAMP, 0 }, + { 1910, PT_SC, ucp_Tai_Tham }, + { 1915, PT_SC, ucp_Lao }, + { 1919, PT_SC, ucp_Lao }, + { 1924, PT_SCX, ucp_Latin }, + { 1930, PT_SCX, ucp_Latin }, + { 1935, PT_LAMP, 0 }, + { 1938, PT_SC, ucp_Lepcha }, + { 1943, PT_SC, ucp_Lepcha }, + { 1950, PT_SCX, ucp_Limbu }, + { 1955, PT_SCX, ucp_Limbu }, + { 1961, PT_SCX, ucp_Linear_A }, + { 1966, PT_SCX, ucp_Linear_B }, + { 1971, PT_SCX, ucp_Linear_A }, + { 1979, PT_SCX, ucp_Linear_B }, + { 1987, PT_SCX, ucp_Lisu }, + { 1992, PT_PC, ucp_Ll }, + { 1995, PT_PC, ucp_Lm }, + { 1998, PT_PC, ucp_Lo }, + { 2001, PT_BOOL, ucp_Logical_Order_Exception }, + { 2005, PT_BOOL, ucp_Logical_Order_Exception }, + { 2027, PT_BOOL, ucp_Lowercase }, + { 2033, PT_BOOL, ucp_Lowercase }, + { 2043, PT_PC, ucp_Lt }, + { 2046, PT_PC, ucp_Lu }, + { 2049, PT_SCX, ucp_Lycian }, + { 2054, PT_SCX, ucp_Lycian }, + { 2061, PT_SCX, ucp_Lydian }, + { 2066, PT_SCX, ucp_Lydian }, + { 2073, PT_GC, ucp_M }, + { 2075, PT_SCX, ucp_Mahajani }, + { 2084, PT_SCX, ucp_Mahajani }, + { 2089, PT_SC, ucp_Makasar }, + { 2094, PT_SC, ucp_Makasar }, + { 2102, PT_SCX, ucp_Malayalam }, + { 2112, PT_SCX, ucp_Mandaic }, + { 2117, PT_SCX, ucp_Mandaic }, + { 2125, PT_SCX, ucp_Manichaean }, + { 2130, PT_SCX, ucp_Manichaean }, + { 2141, PT_SC, ucp_Marchen }, + { 2146, PT_SC, ucp_Marchen }, + { 2154, PT_SCX, ucp_Masaram_Gondi }, + { 2167, PT_BOOL, ucp_Math }, + { 2172, PT_PC, ucp_Mc }, + { 2175, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2179, PT_PC, ucp_Me }, + { 2182, PT_SC, ucp_Medefaidrin }, + { 2194, PT_SC, ucp_Medefaidrin }, + { 2199, PT_SC, ucp_Meetei_Mayek }, + { 2211, PT_SC, ucp_Mende_Kikakui }, + { 2216, PT_SC, ucp_Mende_Kikakui }, + { 2229, PT_SC, ucp_Meroitic_Cursive }, + { 2234, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2239, PT_SC, ucp_Meroitic_Cursive }, + { 2255, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2275, PT_SC, ucp_Miao }, + { 2280, PT_SCX, ucp_Malayalam }, + { 2285, PT_PC, ucp_Mn }, + { 2288, PT_SCX, ucp_Modi }, + { 2293, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2315, PT_SCX, ucp_Mongolian }, + { 2320, PT_SCX, ucp_Mongolian }, + { 2330, PT_SC, ucp_Mro }, + { 2334, PT_SC, ucp_Mro }, + { 2339, PT_SC, ucp_Meetei_Mayek }, + { 2344, PT_SCX, ucp_Multani }, + { 2349, PT_SCX, ucp_Multani }, + { 2357, PT_SCX, ucp_Myanmar }, + { 2365, PT_SCX, ucp_Myanmar }, + { 2370, PT_GC, ucp_N }, + { 2372, PT_SC, ucp_Nabataean }, + { 2382, PT_SC, ucp_Nag_Mundari }, + { 2387, PT_SC, ucp_Nag_Mundari }, + { 2398, PT_SCX, ucp_Nandinagari }, + { 2403, PT_SCX, ucp_Nandinagari }, + { 2415, PT_SC, ucp_Old_North_Arabian }, + { 2420, PT_SC, ucp_Nabataean }, + { 2425, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2431, PT_PC, ucp_Nd }, + { 2434, PT_SCX, ucp_Newa }, + { 2439, PT_SC, ucp_New_Tai_Lue }, + { 2449, PT_SCX, ucp_Nko }, + { 2453, PT_SCX, ucp_Nko }, + { 2458, PT_PC, ucp_Nl }, + { 2461, PT_PC, ucp_No }, + { 2464, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2486, PT_SC, ucp_Nushu }, + { 2491, PT_SC, ucp_Nushu }, + { 2497, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 2518, PT_SC, ucp_Ogham }, + { 2523, PT_SC, ucp_Ogham }, + { 2529, PT_SC, ucp_Ol_Chiki }, + { 2537, PT_SC, ucp_Ol_Chiki }, + { 2542, PT_SCX, ucp_Old_Hungarian }, + { 2555, PT_SC, ucp_Old_Italic }, + { 2565, PT_SC, ucp_Old_North_Arabian }, + { 2581, PT_SCX, ucp_Old_Permic }, + { 2591, PT_SC, ucp_Old_Persian }, + { 2602, PT_SC, ucp_Old_Sogdian }, + { 2613, PT_SC, ucp_Old_South_Arabian }, + { 2629, PT_SCX, ucp_Old_Turkic }, + { 2639, PT_SCX, ucp_Old_Uyghur }, + { 2649, PT_SCX, ucp_Ol_Onal }, + { 2656, PT_SCX, ucp_Ol_Onal }, + { 2661, PT_SCX, ucp_Oriya }, + { 2667, PT_SCX, ucp_Old_Turkic }, + { 2672, PT_SCX, ucp_Oriya }, + { 2677, PT_SCX, ucp_Osage }, + { 2683, PT_SCX, ucp_Osage }, + { 2688, PT_SC, ucp_Osmanya }, + { 2693, PT_SC, ucp_Osmanya }, + { 2701, PT_SCX, ucp_Old_Uyghur }, + { 2706, PT_GC, ucp_P }, + { 2708, PT_SC, ucp_Pahawh_Hmong }, + { 2720, PT_SC, ucp_Palmyrene }, + { 2725, PT_SC, ucp_Palmyrene }, + { 2735, PT_BOOL, ucp_Pattern_Syntax }, + { 2742, PT_BOOL, ucp_Pattern_Syntax }, + { 2756, PT_BOOL, ucp_Pattern_White_Space }, + { 2774, PT_BOOL, ucp_Pattern_White_Space }, + { 2780, PT_SC, ucp_Pau_Cin_Hau }, + { 2785, PT_SC, ucp_Pau_Cin_Hau }, + { 2795, PT_PC, ucp_Pc }, + { 2798, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2802, PT_PC, ucp_Pd }, + { 2805, PT_PC, ucp_Pe }, + { 2808, PT_SCX, ucp_Old_Permic }, + { 2813, PT_PC, ucp_Pf }, + { 2816, PT_SCX, ucp_Phags_Pa }, + { 2821, PT_SCX, ucp_Phags_Pa }, + { 2829, PT_SC, ucp_Inscriptional_Pahlavi }, + { 2834, PT_SCX, ucp_Psalter_Pahlavi }, + { 2839, PT_SC, ucp_Phoenician }, + { 2844, PT_SC, ucp_Phoenician }, + { 2855, PT_PC, ucp_Pi }, + { 2858, PT_SC, ucp_Miao }, + { 2863, PT_PC, ucp_Po }, + { 2866, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2893, PT_SC, ucp_Inscriptional_Parthian }, + { 2898, PT_PC, ucp_Ps }, + { 2901, PT_SCX, ucp_Psalter_Pahlavi }, + { 2916, PT_SCX, ucp_Coptic }, + { 2921, PT_SC, ucp_Inherited }, + { 2926, PT_BOOL, ucp_Quotation_Mark }, + { 2932, PT_BOOL, ucp_Quotation_Mark }, + { 2946, PT_BOOL, ucp_Radical }, + { 2954, PT_BOOL, ucp_Regional_Indicator }, + { 2972, PT_SC, ucp_Rejang }, + { 2979, PT_BOOL, ucp_Regional_Indicator }, + { 2982, PT_SC, ucp_Rejang }, + { 2987, PT_SCX, ucp_Hanifi_Rohingya }, + { 2992, PT_SCX, ucp_Runic }, + { 2998, PT_SCX, ucp_Runic }, + { 3003, PT_GC, ucp_S }, + { 3005, PT_SCX, ucp_Samaritan }, + { 3015, PT_SCX, ucp_Samaritan }, + { 3020, PT_SC, ucp_Old_South_Arabian }, + { 3025, PT_SC, ucp_Saurashtra }, + { 3030, PT_SC, ucp_Saurashtra }, + { 3041, PT_PC, ucp_Sc }, + { 3044, PT_BOOL, ucp_Soft_Dotted }, + { 3047, PT_BOOL, ucp_Sentence_Terminal }, + { 3064, PT_SC, ucp_SignWriting }, + { 3069, PT_SCX, ucp_Sharada }, + { 3077, PT_SCX, ucp_Shavian }, + { 3085, PT_SCX, ucp_Shavian }, + { 3090, PT_SCX, ucp_Sharada }, + { 3095, PT_SC, ucp_Siddham }, + { 3100, PT_SC, ucp_Siddham }, + { 3108, PT_SC, ucp_Sidetic }, + { 3116, PT_SC, ucp_Sidetic }, + { 3121, PT_SC, ucp_SignWriting }, + { 3133, PT_SCX, ucp_Khudawadi }, + { 3138, PT_SCX, ucp_Sinhala }, + { 3143, PT_SCX, ucp_Sinhala }, + { 3151, PT_PC, ucp_Sk }, + { 3154, PT_PC, ucp_Sm }, + { 3157, PT_PC, ucp_So }, + { 3160, PT_BOOL, ucp_Soft_Dotted }, + { 3171, PT_SCX, ucp_Sogdian }, + { 3176, PT_SCX, ucp_Sogdian }, + { 3184, PT_SC, ucp_Old_Sogdian }, + { 3189, PT_SC, ucp_Sora_Sompeng }, + { 3194, PT_SC, ucp_Sora_Sompeng }, + { 3206, PT_SC, ucp_Soyombo }, + { 3211, PT_SC, ucp_Soyombo }, + { 3219, PT_BOOL, ucp_White_Space }, + { 3225, PT_BOOL, ucp_Sentence_Terminal }, + { 3231, PT_SC, ucp_Sundanese }, + { 3236, PT_SC, ucp_Sundanese }, + { 3246, PT_SCX, ucp_Sunuwar }, + { 3251, PT_SCX, ucp_Sunuwar }, + { 3259, PT_SCX, ucp_Syloti_Nagri }, + { 3264, PT_SCX, ucp_Syloti_Nagri }, + { 3276, PT_SCX, ucp_Syriac }, + { 3281, PT_SCX, ucp_Syriac }, + { 3288, PT_SCX, ucp_Tagalog }, + { 3296, PT_SCX, ucp_Tagbanwa }, + { 3301, PT_SCX, ucp_Tagbanwa }, + { 3310, PT_SCX, ucp_Tai_Le }, + { 3316, PT_SC, ucp_Tai_Tham }, + { 3324, PT_SC, ucp_Tai_Viet }, + { 3332, PT_SC, ucp_Tai_Yo }, + { 3338, PT_SCX, ucp_Takri }, + { 3343, PT_SCX, ucp_Takri }, + { 3349, PT_SCX, ucp_Tai_Le }, + { 3354, PT_SC, ucp_New_Tai_Lue }, + { 3359, PT_SCX, ucp_Tamil }, + { 3365, PT_SCX, ucp_Tamil }, + { 3370, PT_SCX, ucp_Tangut }, + { 3375, PT_SC, ucp_Tangsa }, + { 3382, PT_SCX, ucp_Tangut }, + { 3389, PT_SC, ucp_Tai_Viet }, + { 3394, PT_SC, ucp_Tai_Yo }, + { 3399, PT_SCX, ucp_Telugu }, + { 3404, PT_SCX, ucp_Telugu }, + { 3411, PT_BOOL, ucp_Terminal_Punctuation }, + { 3416, PT_BOOL, ucp_Terminal_Punctuation }, + { 3436, PT_SCX, ucp_Tifinagh }, + { 3441, PT_SCX, ucp_Tagalog }, + { 3446, PT_SCX, ucp_Thaana }, + { 3451, PT_SCX, ucp_Thaana }, + { 3458, PT_SCX, ucp_Thai }, + { 3463, PT_SCX, ucp_Tibetan }, + { 3471, PT_SCX, ucp_Tibetan }, + { 3476, PT_SCX, ucp_Tifinagh }, + { 3485, PT_SCX, ucp_Tirhuta }, + { 3490, PT_SCX, ucp_Tirhuta }, + { 3498, PT_SC, ucp_Tangsa }, + { 3503, PT_SCX, ucp_Todhri }, + { 3510, PT_SCX, ucp_Todhri }, + { 3515, PT_SC, ucp_Tolong_Siki }, + { 3526, PT_SC, ucp_Tolong_Siki }, + { 3531, PT_SCX, ucp_Toto }, + { 3536, PT_SCX, ucp_Tulu_Tigalari }, + { 3549, PT_SCX, ucp_Tulu_Tigalari }, + { 3554, PT_SC, ucp_Ugaritic }, + { 3559, PT_SC, ucp_Ugaritic }, + { 3568, PT_BOOL, ucp_Unified_Ideograph }, + { 3574, PT_BOOL, ucp_Unified_Ideograph }, + { 3591, PT_SC, ucp_Unknown }, + { 3599, PT_BOOL, ucp_Uppercase }, + { 3605, PT_BOOL, ucp_Uppercase }, + { 3615, PT_SC, ucp_Vai }, + { 3619, PT_SC, ucp_Vai }, + { 3624, PT_BOOL, ucp_Variation_Selector }, + { 3642, PT_SC, ucp_Vithkuqi }, + { 3647, PT_SC, ucp_Vithkuqi }, + { 3656, PT_BOOL, ucp_Variation_Selector }, + { 3659, PT_SC, ucp_Wancho }, + { 3666, PT_SC, ucp_Warang_Citi }, + { 3671, PT_SC, ucp_Warang_Citi }, + { 3682, PT_SC, ucp_Wancho }, + { 3687, PT_BOOL, ucp_White_Space }, + { 3698, PT_BOOL, ucp_White_Space }, + { 3705, PT_ALNUM, 0 }, + { 3709, PT_BOOL, ucp_XID_Continue }, + { 3714, PT_BOOL, ucp_XID_Continue }, + { 3726, PT_BOOL, ucp_XID_Start }, + { 3731, PT_BOOL, ucp_XID_Start }, + { 3740, PT_SC, ucp_Old_Persian }, + { 3745, PT_PXSPACE, 0 }, + { 3749, PT_SPACE, 0 }, + { 3753, PT_SC, ucp_Cuneiform }, + { 3758, PT_UCNC, 0 }, + { 3762, PT_WORD, 0 }, + { 3766, PT_SCX, ucp_Yezidi }, + { 3771, PT_SCX, ucp_Yezidi }, + { 3778, PT_SCX, ucp_Yi }, + { 3781, PT_SCX, ucp_Yi }, + { 3786, PT_GC, ucp_Z }, + { 3788, PT_SC, ucp_Zanabazar_Square }, + { 3804, PT_SC, ucp_Zanabazar_Square }, + { 3809, PT_SC, ucp_Inherited }, + { 3814, PT_PC, ucp_Zl }, + { 3817, PT_PC, ucp_Zp }, + { 3820, PT_PC, ucp_Zs }, + { 3823, PT_SC, ucp_Common }, + { 3828, PT_SC, ucp_Unknown } }; const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); diff --git a/vendor/pcre2/src/pcre2posix.h b/vendor/pcre2/src/pcre2posix.h deleted file mode 100644 index 198612afcb..0000000000 --- a/vendor/pcre2/src/pcre2posix.h +++ /dev/null @@ -1,184 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* PCRE2 is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. This is -the public header file to be #included by applications that call PCRE2 via the -POSIX wrapper interface. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2023 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - -#ifndef PCRE2POSIX_H_IDEMPOTENT_GUARD -#define PCRE2POSIX_H_IDEMPOTENT_GUARD - -/* Have to include stdlib.h in order to ensure that size_t is defined. */ - -#include - -/* Allow for C++ users */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Options, mostly defined by POSIX, but with some extras. */ - -#define REG_ICASE 0x0001 /* Maps to PCRE2_CASELESS */ -#define REG_NEWLINE 0x0002 /* Maps to PCRE2_MULTILINE */ -#define REG_NOTBOL 0x0004 /* Maps to PCRE2_NOTBOL */ -#define REG_NOTEOL 0x0008 /* Maps to PCRE2_NOTEOL */ -#define REG_DOTALL 0x0010 /* NOT defined by POSIX; maps to PCRE2_DOTALL */ -#define REG_NOSUB 0x0020 /* Do not report what was matched */ -#define REG_UTF 0x0040 /* NOT defined by POSIX; maps to PCRE2_UTF */ -#define REG_STARTEND 0x0080 /* BSD feature: pass subject string by so,eo */ -#define REG_NOTEMPTY 0x0100 /* NOT defined by POSIX; maps to PCRE2_NOTEMPTY */ -#define REG_UNGREEDY 0x0200 /* NOT defined by POSIX; maps to PCRE2_UNGREEDY */ -#define REG_UCP 0x0400 /* NOT defined by POSIX; maps to PCRE2_UCP */ -#define REG_PEND 0x0800 /* GNU feature: pass end pattern by re_endp */ -#define REG_NOSPEC 0x1000 /* Maps to PCRE2_LITERAL */ - -/* This is not used by PCRE2, but by defining it we make it easier -to slot PCRE2 into existing programs that make POSIX calls. */ - -#define REG_EXTENDED 0 - -/* Error values. Not all these are relevant or used by the wrapper. */ - -enum { - REG_ASSERT = 1, /* internal error ? */ - REG_BADBR, /* invalid repeat counts in {} */ - REG_BADPAT, /* pattern error */ - REG_BADRPT, /* ? * + invalid */ - REG_EBRACE, /* unbalanced {} */ - REG_EBRACK, /* unbalanced [] */ - REG_ECOLLATE, /* collation error - not relevant */ - REG_ECTYPE, /* bad class */ - REG_EESCAPE, /* bad escape sequence */ - REG_EMPTY, /* empty expression */ - REG_EPAREN, /* unbalanced () */ - REG_ERANGE, /* bad range inside [] */ - REG_ESIZE, /* expression too big */ - REG_ESPACE, /* failed to get memory */ - REG_ESUBREG, /* bad back reference */ - REG_INVARG, /* bad argument */ - REG_NOMATCH /* match failed */ -}; - - -/* The structure representing a compiled regular expression. It is also used -for passing the pattern end pointer when REG_PEND is set. */ - -typedef struct { - void *re_pcre2_code; - void *re_match_data; - const char *re_endp; - size_t re_nsub; - size_t re_erroffset; - int re_cflags; -} regex_t; - -/* The structure in which a captured offset is returned. */ - -typedef int regoff_t; - -typedef struct { - regoff_t rm_so; - regoff_t rm_eo; -} regmatch_t; - -/* When an application links to a PCRE2 DLL in Windows, the symbols that are -imported have to be identified as such. When building PCRE2, the appropriate -export settings are needed, and are set in pcre2posix.c before including this -file. So, we don't change existing definitions of PCRE2POSIX_EXP_DECL. - -By default, we use the standard "extern" declarations. */ - -#ifndef PCRE2POSIX_EXP_DECL -# if defined(_WIN32) && defined(PCRE2POSIX_SHARED) -# define PCRE2POSIX_EXP_DECL extern __declspec(dllimport) -# elif defined __cplusplus -# define PCRE2POSIX_EXP_DECL extern "C" -# else -# define PCRE2POSIX_EXP_DECL extern -# endif -#endif - -/* When compiling with the MSVC compiler, it is sometimes necessary to include -a "calling convention" before exported function names. For example: - - void __cdecl function(....) - -might be needed. In order to make this easy, all the exported functions have -PCRE2_CALL_CONVENTION just before their names. - -PCRE2 normally uses the platform's standard calling convention, so this should -not be set unless you know you need it. */ - -#ifndef PCRE2_CALL_CONVENTION -#define PCRE2_CALL_CONVENTION -#endif - -/* The functions. The actual code is in functions with pcre2_xxx names for -uniqueness. POSIX names are provided as macros for API compatibility with POSIX -regex functions. It's done this way to ensure to they are always linked from -the PCRE2 library and not by accident from elsewhere (regex_t differs in size -elsewhere). */ - -PCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regcomp(regex_t *, const char *, int); -PCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regexec(const regex_t *, const char *, size_t, - regmatch_t *, int); -PCRE2POSIX_EXP_DECL size_t PCRE2_CALL_CONVENTION pcre2_regerror(int, const regex_t *, char *, size_t); -PCRE2POSIX_EXP_DECL void PCRE2_CALL_CONVENTION pcre2_regfree(regex_t *); - -#define regcomp pcre2_regcomp -#define regexec pcre2_regexec -#define regerror pcre2_regerror -#define regfree pcre2_regfree - -/* Debian had a patch that used different names. These are now here to save -them having to maintain their own patch, but are not documented by PCRE2. */ - -#define PCRE2regcomp pcre2_regcomp -#define PCRE2regexec pcre2_regexec -#define PCRE2regerror pcre2_regerror -#define PCRE2regfree pcre2_regfree - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PCRE2POSIX_H_IDEMPOTENT_GUARD */ - -/* End of pcre2posix.h */ diff --git a/vendor/pcre2/src/pcre2test_inc.h b/vendor/pcre2/src/pcre2test_inc.h deleted file mode 100644 index 8124e9ca6c..0000000000 --- a/vendor/pcre2/src/pcre2test_inc.h +++ /dev/null @@ -1,6349 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* PCRE is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2024 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - - -/* This module contains the mode-dependent code which is used by pcre2test.c. -It is #included in pcre2test.c at each supported code unit width, with -PCRE2_SUFFIX set appropriately, just like the functions that comprise the -library. */ - - -/* ------- Macros for hiding the bit width of this file's members ---------- */ - -#define pbuffer PCRE2_SUFFIX(pbuffer) -#define pbuffer_size G(pbuffer,_size) - -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 -#define utf_to_ord G(G(utf,PCRE2_CODE_UNIT_WIDTH),_to_ord) -#endif - -#define compiled_code PCRE2_SUFFIX(compiled_code_) -#define general_context PCRE2_SUFFIX(general_context_) -#define general_context_copy PCRE2_SUFFIX(general_context_copy_) -#define pat_context PCRE2_SUFFIX(pat_context_) -#define default_pat_context PCRE2_SUFFIX(default_pat_context_) -#define con_context PCRE2_SUFFIX(con_context_) -#define default_con_context PCRE2_SUFFIX(default_con_context_) -#define dat_context PCRE2_SUFFIX(dat_context_) -#define default_dat_context PCRE2_SUFFIX(default_dat_context_) -#define match_data PCRE2_SUFFIX(match_data_) -#define jit_stack PCRE2_SUFFIX(jit_stack_) -#define jit_stack_size PCRE2_SUFFIX(jit_stack_size_) -#define patstack PCRE2_SUFFIX(patstack_) -#define patstacknext PCRE2_SUFFIX(patstacknext_) -#define rep_in_buffer PCRE2_SUFFIX(rep_in_buffer_) -#define rep_in_buffer_size PCRE2_SUFFIX(rep_in_buffer_size_) -#define rep_out_buffer PCRE2_SUFFIX(rep_out_buffer_) -#define rep_out_buffer_size PCRE2_SUFFIX(rep_out_buffer_size_) - -#define jit_callback PCRE2_SUFFIX(jit_callback_) -#define pcre2_strcmp_c8 PCRE2_SUFFIX(pcre2_strcmp_c8_) -#define pcre2_strlen PCRE2_SUFFIX(pcre2_strlen_) -#define pchars PCRE2_SUFFIX(pchars_) -#define ptrunc PCRE2_SUFFIX(ptrunc_) -#define config_str PCRE2_SUFFIX(config_str_) -#define check_modifier PCRE2_SUFFIX(check_modifier_) -#define decode_modifiers PCRE2_SUFFIX(decode_modifiers_) -#define pattern_info PCRE2_SUFFIX(pattern_info_) -#define show_memory_info PCRE2_SUFFIX(show_memory_info_) -#define show_framesize PCRE2_SUFFIX(show_framesize_) -#define show_heapframes_size PCRE2_SUFFIX(show_heapframes_size_) -#define print_error_message_file PCRE2_SUFFIX(print_error_message_file_) -#define print_error_message PCRE2_SUFFIX(print_error_message_) -#define callout_enumerate_function PCRE2_SUFFIX(callout_enumerate_function_) -#define callout_enumerate_function_void PCRE2_SUFFIX(callout_enumerate_function_void_) -#define callout_enumerate_function_fail PCRE2_SUFFIX(callout_enumerate_function_fail_) -#define show_pattern_info PCRE2_SUFFIX(show_pattern_info_) -#define serial_error PCRE2_SUFFIX(serial_error_) -#define process_command PCRE2_SUFFIX(process_command_) -#define process_pattern PCRE2_SUFFIX(process_pattern_) -#define have_active_pattern PCRE2_SUFFIX(have_active_pattern_) -#define free_active_pattern PCRE2_SUFFIX(free_active_pattern_) -#define check_match_limit PCRE2_SUFFIX(check_match_limit_) -#define substitute_callout_function PCRE2_SUFFIX(substitute_callout_function_) -#define substitute_case_callout_function PCRE2_SUFFIX(substitute_case_callout_function_) -#define callout_function PCRE2_SUFFIX(callout_function_) -#define copy_and_get PCRE2_SUFFIX(copy_and_get_) -#define copy_substitute_string PCRE2_SUFFIX(copy_substitute_string_) -#define process_data PCRE2_SUFFIX(process_data_) -#define init_globals PCRE2_SUFFIX(init_globals_) -#define free_globals PCRE2_SUFFIX(free_globals_) -#define unittest PCRE2_SUFFIX(unittest_) - - -/* ---------------------- Mode-dependent variables ------------------------- */ - -static pcre2_code *compiled_code = NULL; -static pcre2_general_context *general_context = NULL, *general_context_copy = NULL; -static pcre2_compile_context *pat_context = NULL, *default_pat_context = NULL; -static pcre2_convert_context *con_context = NULL, *default_con_context = NULL; -static pcre2_match_context *dat_context = NULL, *default_dat_context = NULL; -static pcre2_match_data *match_data = NULL; - -static pcre2_jit_stack *jit_stack = NULL; -static size_t jit_stack_size = 0; - -static pcre2_code *patstack[PATSTACKSIZE]; -static int patstacknext = 0; - -static PCRE2_UCHAR *rep_in_buffer = NULL; -static size_t rep_in_buffer_size = REPLACE_MODSIZE; /* Code units */ -static PCRE2_UCHAR *rep_out_buffer = NULL; -static size_t rep_out_buffer_size = REPLACE_BUFFSIZE; /* Code units */ - - - -/************************************************* -* JIT memory callback * -*************************************************/ - -static pcre2_jit_stack* -jit_callback(void *arg) -{ -jit_was_used = TRUE; -return (pcre2_jit_stack *)arg; -} - - - -/************************************************* -* Compare zero-terminated PCRE2 & 8-bit strings * -*************************************************/ - -static int -pcre2_strcmp_c8(PCRE2_SPTR str1, const char *str2) -{ -PCRE2_UCHAR c1, c2; -while (*str1 != '\0' || *str2 != '\0') - { - c1 = *str1++; - c2 = *str2++; - if (c1 != c2) return ((c1 > c2) << 1) - 1; - } -return 0; -} - - - -/************************************************* -* Find the length of a PCRE2 string * -*************************************************/ - -static size_t -pcre2_strlen(PCRE2_SPTR str) -{ -size_t c = 0; -while (*str++ != 0) c++; -return c; -} - - - -/************************************************* -* Print character string * -*************************************************/ - -/* Must handle Unicode strings in UTF mode. Yields number of characters printed. -For printing *MARK strings, a negative length is given, indicating that the -length is in the first code unit. If handed a NULL file, this function just -counts chars without printing (because pchar() does that). */ - -static int pchars(int clr, PCRE2_SPTR p, ptrdiff_t length, BOOL utf, FILE *f) -{ -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 -PCRE2_SPTR end; -uint32_t c = 0; -int yield = 0; - -colour_begin(clr, f); - -if (length < 0) length = *p++; -end = p + length; -while (length-- > 0) - { - if (utf) - { - int rc = utf_to_ord(p, end, &c); - if (rc > 0 && rc <= length + 1) /* Mustn't run over the end */ - { - length -= rc - 1; - p += rc; - yield += pchar(c, utf, f); - continue; - } - } - c = *p++; - yield += pchar(c, utf, f); - } - -colour_end(f); -return yield; - -#else -int yield = 0; - -colour_begin(clr, f); - -if (length < 0) length = *p++; -while (length-- > 0) - { - uint32_t c = *p++; - yield += pchar(c, utf, f); - } - -colour_end(f); -return yield; - -#endif -} - - - -/************************************************* -* Print truncated character string * -*************************************************/ - -/* Must handle Unicode strings in UTF mode. Passed the total input string, and -the offset to print from/to. If left is true, prints up to the offset, -truncated; otherwise prints from the offset to the right, truncated. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -static void ptrunc_8(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; -size_t printed = 0; - -colour_begin(clr, f); - -if (left) - { - while (start > p && printed < 10) - { - printed++; - start--; - if (utf) - { while(start > p && (*start & 0xc0u) == 0x80u) start--; } - } - } -else - { - while (end < p + p_len && printed < 10) - { - printed++; - end++; - if (utf) - { while(end < p + p_len && (*end & 0xc0u) == 0x80u) end++; } - } - } - -if (left && start > p) fprintf(f, "..."); -for (; start < end; start++) fprintf(f, "%c", CHAR_OUTPUT(*start)); -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} - -#elif PCRE2_CODE_UNIT_WIDTH == 16 -static void ptrunc_16(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; -size_t printed = 0; - -colour_begin(clr, f); - -if (left) - { - while (start > p && printed < 10) - { - printed++; - start--; - if (utf) - { while(start > p && (*start & 0xfc00u) == 0xdc00u) start--; } - } - } -else - { - while (end < p + p_len && printed < 10) - { - printed++; - end++; - if (utf) - { while(end < p + p_len && (*end & 0xfc00u) == 0xdc00u) end++; } - } - } - -if (left && start > p) fprintf(f, "..."); -while (start < end) - { - uint32_t c; - int rc = utf16_to_ord(start, end, &c); - if (rc < 0) c = *start++; - else start += rc; - if (c > 0xff || (utf && c > 0x7f)) - { - uint8_t u8buff[6]; - int clen = ord_to_utf8(c, u8buff); - fprintf(f, "%.*s", clen, u8buff); - continue; - } - fputc((int)c, f); - } -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} - -#elif PCRE2_CODE_UNIT_WIDTH == 32 -static void ptrunc_32(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; - -colour_begin(clr, f); - -if (left) - { - start -= (offset > 10)? 10 : offset; - } -else - { - end += (p + p_len - end > 10)? 10 : p + p_len - end; - } - -if (left && start > p) fprintf(f, "..."); -while (start < end) - { - uint32_t c = *start++; - if (c > 0xff || (utf && c > 0x7f)) - { - uint8_t u8buff[6]; - int clen = ord_to_utf8(c, u8buff); - fprintf(f, "%.*s", clen, u8buff); - continue; - } - fputc((int)c, f); - } -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} -#endif - -#if PCRE2_CODE_UNIT_WIDTH == 16 -/************************************************* -* Convert string to 16-bit * -*************************************************/ - -/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using -the original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and -code values from 0 to 0x7fffffff. However, values greater than the later UTF -limit of 0x10ffff cause an error. In non-UTF mode the input is interpreted as -UTF-8 if the utf8_input modifier is set, but an error is generated for values -greater than 0xffff. - -If all the input bytes are ASCII, the space needed for a 16-bit string is -exactly double the 8-bit size. Otherwise, the size needed for a 16-bit string -is no more than double, because up to 0xffff uses no more than 3 bytes in UTF-8 -but possibly 4 in UTF-16. Higher values use 4 bytes in UTF-8 and up to 4 bytes -in UTF-16. The result is always left in pbuffer16. Impose a minimum size to -save repeated re-sizing. - -Note that this function does not object to surrogate values. This is -deliberate; it makes it possible to construct UTF-16 strings that are invalid, -for the purpose of testing that they are correctly faulted. - -Arguments: - p points to a byte string - utf true in UTF mode - lenptr points to number of bytes in the string (excluding trailing zero) - -Returns: 0 on success, with the length updated to the number of 16-bit - data items used (excluding the trailing zero) - OR -1 if a UTF-8 string is malformed - OR -2 if a value > 0x10ffff is encountered in UTF mode - OR -3 if a value > 0xffff is encountered when not in UTF mode -*/ - -static int -to16(uint8_t *p, int utf, PCRE2_SIZE *lenptr) -{ -uint16_t *pp; -PCRE2_SIZE len = *lenptr; - -if (pbuffer16_size < 2*len + 2) - { - if (pbuffer16 != NULL) free(pbuffer16); - pbuffer16_size = 2*len + 2; - if (pbuffer16_size < 4096) pbuffer16_size = 4096; - pbuffer16 = (uint16_t *)malloc(pbuffer16_size); - if (pbuffer16 == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer16\n", - pbuffer16_size); - exit(1); - } - } - -pp = pbuffer16; -if (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0) - { - for (; len > 0; len--) *pp++ = *p++; - } - -else while (len > 0) - { - uint32_t c; - const uint8_t *end = p + len; - int chlen = utf8_to_ord(p, end, &c); - if (chlen <= 0) return -1; - if (!utf && c > 0xffff) return -3; - if (c > 0x10ffff) return -2; - p += chlen; - len -= chlen; - if (c < 0x10000) *pp++ = c; else - { - c -= 0x10000; - *pp++ = 0xd800 | (c >> 10); - *pp++ = 0xdc00 | (c & 0x3ff); - } - } - -*pp = 0; -*lenptr = pp - pbuffer16; -return 0; -} -#endif /* PCRE2_CODE_UNIT_WIDTH == 16 */ - - - -#if PCRE2_CODE_UNIT_WIDTH == 32 -/************************************************* -* Convert string to 32-bit * -*************************************************/ - -/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using -the original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and -code values from 0 to 0x7fffffff. However, values greater than the later UTF -limit of 0x10ffff cause an error. - -In non-UTF mode the input is interpreted as UTF-8 if the utf8_input modifier -is set, and no limit is imposed. There is special interpretation of the 0xff -byte (which is illegal in UTF-8) in this case: it causes the top bit of the -next character to be set. This provides a way of generating 32-bit characters -greater than 0x7fffffff. - -If all the input bytes are ASCII, the space needed for a 32-bit string is -exactly four times the 8-bit size. Otherwise, the size needed for a 32-bit -string is no more than four times, because the number of characters must be -less than the number of bytes. The result is always left in pbuffer32. Impose a -minimum size to save repeated re-sizing. - -Note that this function does not object to surrogate values. This is -deliberate; it makes it possible to construct UTF-32 strings that are invalid, -for the purpose of testing that they are correctly faulted. - -Arguments: - p points to a byte string - utf true in UTF mode - lenptr points to number of bytes in the string (excluding trailing zero) - -Returns: 0 on success, with the length updated to the number of 32-bit - data items used (excluding the trailing zero) - OR -1 if a UTF-8 string is malformed - OR -2 if a value > 0x10ffff is encountered in UTF mode -*/ - -static int -to32(uint8_t *p, int utf, PCRE2_SIZE *lenptr) -{ -uint32_t *pp; -PCRE2_SIZE len = *lenptr; - -if (pbuffer32_size < 4*len + 4) - { - if (pbuffer32 != NULL) free(pbuffer32); - pbuffer32_size = 4*len + 4; - if (pbuffer32_size < 8192) pbuffer32_size = 8192; - pbuffer32 = (uint32_t *)malloc(pbuffer32_size); - if (pbuffer32 == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer32\n", - pbuffer32_size); - exit(1); - } - } - -pp = pbuffer32; -if (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0) - { - for (; len > 0; len--) *pp++ = *p++; - } - -else while (len > 0) - { - int chlen; - uint32_t c; - uint32_t topbit = 0; - const uint8_t *end = p + len; - if (!utf && *p == 0xff && len > 1) - { - topbit = 0x80000000u; - p++; - len--; - } - chlen = utf8_to_ord(p, end, &c); - if (chlen <= 0) return -1; - if (utf && c > 0x10ffff) return -2; - p += chlen; - len -= chlen; - *pp++ = c | topbit; - } - -*pp = 0; -*lenptr = pp - pbuffer32; -return 0; -} -#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */ - - - -/************************************************* -* Read a string from pcre2_config() * -*************************************************/ - -/* Read out a version string from pcre2_config(), transcoding it into an -8-bit buffer. - -Arguments: - what the item to read - where the 8-bit buffer to receive the string -*/ - -static void -config_str(uint32_t what, char *where) -{ -int r1, r2; -PCRE2_UCHAR buf[VERSION_SIZE]; - -r1 = pcre2_config(what, NULL); -r2 = pcre2_config(what, buf); -if (r1 < 0 || r1 != r2 || r1 >= VERSION_SIZE) - { - cfprintf(clr_test_error, stderr, "pcre2test: Error in pcre2_config(%d)\n", what); - exit(1); - } - -while (r1-- > 0) where[r1] = (char)buf[r1]; -} - - - -/************************************************* -* Check a modifier and find its field * -*************************************************/ - -/* This function is called when a modifier has been identified. We check that -it is allowed here and find the field that is to be changed. - -Arguments: - m the modifier list entry - ctx CTX_PAT => pattern context - CTX_POPPAT => pattern context for popped pattern - CTX_DEFPAT => default pattern context - CTX_DAT => data context - CTX_DEFDAT => default data context - pctl point to pattern control block - dctl point to data control block - c a single character or 0 - -Returns: a field pointer or NULL -*/ - -static void * -check_modifier(modstruct *m, int ctx, patctl *pctl, datctl *dctl, uint32_t c) -{ -void *field = NULL; -PCRE2_SIZE offset = m->offset; - -if (restrict_for_perl_test) switch(m->which) - { - case MOD_PNDP: - case MOD_PATP: - case MOD_DATP: - case MOD_PDP: - break; - - default: - cfprintf(clr_test_error, outfile, "** \"%s\" is not allowed in a Perl-compatible test\n", - m->name); - return NULL; - } - -switch (m->which) - { - case MOD_CTC: /* Compile context modifier */ - if (ctx == CTX_DEFPAT) field = default_pat_context; - else if (ctx == CTX_PAT) field = pat_context; - break; - - case MOD_CTM: /* Match context modifier */ - if (ctx == CTX_DEFDAT) field = default_dat_context; - else if (ctx == CTX_DAT) field = dat_context; - break; - - case MOD_DAT: /* Data line modifier */ - case MOD_DATP: /* Allowed for Perl test */ - if (dctl != NULL) field = dctl; - break; - - case MOD_PAT: /* Pattern modifier */ - case MOD_PATP: /* Allowed for Perl test */ - if (pctl != NULL) field = pctl; - break; - - case MOD_PD: /* Pattern or data line modifier */ - case MOD_PDP: /* Ditto, allowed for Perl test */ - case MOD_PND: /* Ditto, but not default pattern */ - case MOD_PNDP: /* Ditto, allowed for Perl test */ - if (dctl != NULL) field = dctl; - else if (pctl != NULL && (m->which == MOD_PD || m->which == MOD_PDP || - ctx != CTX_DEFPAT)) - field = pctl; - break; - } - -if (field == NULL) - { - if (c == 0) - cfprintf(clr_test_error, outfile, "** \"%s\" is not valid here\n", m->name); - else - cfprintf(clr_test_error, outfile, "** /%c is not valid here\n", c); - return NULL; - } - -return (char *)field + offset; -} - - - -/************************************************* -* Decode a modifier list * -*************************************************/ - -/* A pointer to a control block is NULL when called in cases when that block is -not relevant. They are never all relevant in one call. At least one of patctl -and datctl is NULL. The second argument specifies which context to use for -modifiers that apply to contexts. - -Arguments: - p point to modifier string - ctx CTX_PAT => pattern context - CTX_POPPAT => pattern context for popped pattern - CTX_DEFPAT => default pattern context - CTX_DAT => data context - CTX_DEFDAT => default data context - pctl point to pattern control block - dctl point to data control block - -Returns: TRUE if successful decode, FALSE otherwise -*/ - -static BOOL -decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl) -{ -uint8_t *ep, *pp; -long li; -unsigned long uli; -BOOL first = TRUE; - -for (;;) - { - void *field; - modstruct *m; - BOOL off = FALSE; - unsigned int i; - size_t len; - int index; - char *endptr; - - /* Skip white space and commas. */ - - while (isspace(*p) || *p == ',') p++; - if (*p == 0) break; - - /* Find the end of the item; lose trailing whitespace at end of line. */ - - for (ep = p; *ep != 0 && *ep != ','; ep++); - if (*ep == 0) - { - while (ep > p && isspace(ep[-1])) ep--; - *ep = 0; - } - - /* Remember if the first character is '-'. */ - - if (*p == '-') - { - off = TRUE; - p++; - } - - /* Find the length of a full-length modifier name, and scan for it. */ - - pp = p; - while (pp < ep && *pp != '=') pp++; - index = scan_modifiers(p, pp - p); - - /* If the first modifier is unrecognized, try to interpret it as a sequence - of single-character abbreviated modifiers. None of these modifiers have any - associated data. They just set options or control bits. */ - - if (index < 0) - { - uint32_t cc; - uint8_t *mp = p; - - if (!first) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier \"%.*s\"\n", (int)(ep-p), p); - if (ep - p == 1) - cfprintf(clr_test_error, outfile, "** Single-character modifiers must come first\n"); - return FALSE; - } - - first = FALSE; - - for (cc = *p; cc != ',' && cc != '\n' && cc != 0; cc = *(++p)) - { - for (i = 0; i < C1MODLISTCOUNT; i++) - if (cc == c1modlist[i].onechar) break; - - if (i >= C1MODLISTCOUNT) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier '%c' in modifier string " - "\"%.*s\"\n", *p, (int)(ep-mp), mp); - return FALSE; - } - - if (c1modlist[i].index >= 0) - { - index = c1modlist[i].index; - } - - else - { - index = scan_modifiers((const uint8_t *)(c1modlist[i].fullname), - strlen(c1modlist[i].fullname)); - if (index < 0) - { - cfprintf(clr_test_error, outfile, "** Internal error: single-character equivalent " - "modifier \"%s\" not found\n", c1modlist[i].fullname); - return FALSE; - } - c1modlist[i].index = index; /* Cache for next time */ - } - - field = check_modifier(modlist + index, ctx, pctl, dctl, *p); - if (field == NULL) return FALSE; - - /* /x is a special case; a second appearance changes PCRE2_EXTENDED to - PCRE2_EXTENDED_MORE. */ - - if (cc == 'x' && (*((uint32_t *)field) & PCRE2_EXTENDED) != 0) - { - *((uint32_t *)field) &= ~PCRE2_EXTENDED; - *((uint32_t *)field) |= PCRE2_EXTENDED_MORE; - } - else - *((uint32_t *)field) |= modlist[index].value; - } - - continue; /* With the next (fullname) modifier */ - } - - /* We have a match on a full-name modifier. Check for the existence of data - when needed. */ - - m = modlist + index; /* Save typing */ - if (m->type != MOD_CTL && m->type != MOD_OPT && m->type != MOD_OPTMZ && - (m->type != MOD_IND || *pp == '=')) - { - if (*pp++ != '=') - { - cfprintf(clr_test_error, outfile, "** '=' expected after \"%s\"\n", m->name); - return FALSE; - } - if (off) - { - cfprintf(clr_test_error, outfile, "** '-' is not valid for \"%s\"\n", m->name); - return FALSE; - } - } - - /* These on/off types have no data. */ - - else if (*pp != ',' && *pp != '\n' && *pp != ' ' && *pp != 0) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier '%.*s'\n", (int)(ep-p), p); - return FALSE; - } - - /* Set the data length for those types that have data. Then find the field - that is to be set. If check_modifier() returns NULL, it has already output an - error message. */ - - len = ep - pp; - field = check_modifier(m, ctx, pctl, dctl, 0); - if (field == NULL) return FALSE; - - /* Process according to data type. */ - - switch (m->type) - { - case MOD_CTL: - case MOD_OPT: - if (off) *((uint32_t *)field) &= ~m->value; - else *((uint32_t *)field) |= m->value; - break; - - case MOD_OPTMZ: - pcre2_set_optimize(field, m->value); - break; - - case MOD_BSR: - if (len == 7 && strncmpic(pp, (const uint8_t *)"default", 7) == 0) - { -#ifdef BSR_ANYCRLF - *((uint16_t *)field) = PCRE2_BSR_ANYCRLF; -#else - *((uint16_t *)field) = PCRE2_BSR_UNICODE; -#endif - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_BSR_SET; - else dctl->control2 &= ~CTL2_BSR_SET; - } - else - { - if (len == 7 && strncmpic(pp, (const uint8_t *)"anycrlf", 7) == 0) - *((uint16_t *)field) = PCRE2_BSR_ANYCRLF; - else if (len == 7 && strncmpic(pp, (const uint8_t *)"unicode", 7) == 0) - *((uint16_t *)field) = PCRE2_BSR_UNICODE; - else goto INVALID_VALUE; - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_BSR_SET; - else dctl->control2 |= CTL2_BSR_SET; - } - pp = ep; - break; - - case MOD_CHR: /* A single character */ - *((uint32_t *)field) = *pp++; - break; - - case MOD_CON: /* A convert type/options list */ - for (;; pp++) - { - uint8_t *colon = (uint8_t *)strchr((const char *)pp, ':'); - len = ((colon != NULL && colon < ep)? colon:ep) - pp; - for (i = 0; i < convertlistcount; i++) - { - if (strncmpic(pp, (const uint8_t *)convertlist[i].name, len) == 0) - { - if (*((uint32_t *)field) == CONVERT_UNSET) - *((uint32_t *)field) = convertlist[i].option; - else - *((uint32_t *)field) |= convertlist[i].option; - break; - } - } - if (i >= convertlistcount) goto INVALID_VALUE; - pp += len; - if (*pp != ':') break; - } - break; - - case MOD_IN2: /* One or two unsigned integers */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - ((uint32_t *)field)[0] = (uint32_t)uli; - if (*endptr == ':') - { - uli = strtoul((const char *)endptr+1, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - ((uint32_t *)field)[1] = (uint32_t)uli; - } - else ((uint32_t *)field)[1] = 0; - pp = (uint8_t *)endptr; - break; - - /* PCRE2_SIZE_MAX is usually SIZE_MAX, which may be greater, equal to, or - less than ULONG_MAX. So first test for overflowing the long int, and then - test for overflowing PCRE2_SIZE_MAX if it is smaller than ULONG_MAX. */ - - case MOD_SIZ: /* PCRE2_SIZE value */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (uli == ULONG_MAX) goto INVALID_VALUE; -#if ULONG_MAX > PCRE2_SIZE_MAX - if (uli > PCRE2_SIZE_MAX) goto INVALID_VALUE; -#endif - *((PCRE2_SIZE *)field) = (PCRE2_SIZE)uli; - pp = (uint8_t *)endptr; - break; - - case MOD_IND: /* Unsigned integer with default */ - if (len == 0) - { - *((uint32_t *)field) = (uint32_t)(m->value); - break; - } - PCRE2_FALLTHROUGH /* Fall through */ - - case MOD_INT: /* Unsigned integer */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - *((uint32_t *)field) = (uint32_t)uli; - pp = (uint8_t *)endptr; - break; - - case MOD_INS: /* Signed integer */ - if (!isdigit(*pp) && *pp != '-') goto INVALID_VALUE; - li = strtol((const char *)pp, &endptr, 10); - if (S32OVERFLOW(li)) goto INVALID_VALUE; - *((int32_t *)field) = (int32_t)li; - pp = (uint8_t *)endptr; - break; - - case MOD_NL: - for (i = 0; i < sizeof(newlines)/sizeof(char *); i++) - if (len == strlen(newlines[i]) && - strncmpic(pp, (const uint8_t *)newlines[i], len) == 0) break; - if (i >= sizeof(newlines)/sizeof(char *)) goto INVALID_VALUE; - if (i == 0) - { - pcre2_set_newline(field, NEWLINE_DEFAULT); - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_NL_SET; - else dctl->control2 &= ~CTL2_NL_SET; - } - else - { - pcre2_set_newline(field, i); - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_NL_SET; - else dctl->control2 |= CTL2_NL_SET; - } - pp = ep; - break; - - case MOD_NN: /* Name or (signed) number; may be several */ - if (isdigit(*pp) || *pp == '-') - { - int ct = MAXCPYGET - 1; - int32_t value; - li = strtol((const char *)pp, &endptr, 10); - if (S32OVERFLOW(li)) goto INVALID_VALUE; - value = (int32_t)li; - field = (char *)field - m->offset + m->value; /* Adjust field ptr */ - if (value >= 0) /* Add new number */ - { - while (*((int32_t *)field) >= 0 && ct-- > 0) /* Skip previous */ - field = (char *)field + sizeof(int32_t); - if (ct <= 0) - { - cfprintf(clr_test_error, outfile, "** Too many numeric \"%s\" modifiers\n", m->name); - return FALSE; - } - } - *((int32_t *)field) = value; - if (ct > 0) ((int32_t *)field)[1] = -1; - pp = (uint8_t *)endptr; - } - - /* Multiple strings are put end to end. */ - - else - { - char *nn = (char *)field; - if (len > 0) /* Add new name */ - { - if (len > MAX_NAME_SIZE) - { - cfprintf(clr_test_error, outfile, "** Group name in \"%s\" is too long\n", m->name); - return FALSE; - } - while (*nn != 0) nn += strlen(nn) + 1; - if (nn + len + 2 - (char *)field > LENCPYGET) - { - cfprintf(clr_test_error, outfile, "** Too many characters in named \"%s\" modifiers\n", - m->name); - return FALSE; - } - memcpy(nn, pp, len); - } - nn[len] = 0 ; - nn[len+1] = 0; - pp = ep; - } - break; - - case MOD_STR: - if (len + 1 > m->value) - { - cfprintf(clr_test_error, outfile, "** Overlong value for \"%s\" (max %d code units)\n", - m->name, m->value - 1); - return FALSE; - } - ((uint8_t *)field)[0] = len; - memcpy(((uint8_t *)field)+1, pp, len); - ((uint8_t *)field)[len+1] = 0; - pp = ep; - break; - } - - if (*pp != ',' && *pp != '\n' && *pp != ' ' && *pp != 0) - { - cfprintf(clr_test_error, outfile, "** Comma expected after modifier item \"%s\"\n", m->name); - return FALSE; - } - - p = pp; - - if (ctx == CTX_POPPAT && - (pctl->options != 0 || - pctl->tables_id != 0 || - pctl->locale[0] != MOD_STR_UNSET || - (pctl->control & NOTPOP_CONTROLS) != 0)) - { - cfprintf(clr_test_error, outfile, "** \"%s\" is not valid here\n", m->name); - return FALSE; - } - } - -return TRUE; - -INVALID_VALUE: -cfprintf(clr_test_error, outfile, "** Invalid value in \"%.*s\"\n", (int)(ep-p), p); -return FALSE; -} - - - -/************************************************* -* Get info from a pattern * -*************************************************/ - -/* A wrapped call to pcre2_pattern_info(), applied to the current compiled -pattern. - -Arguments: - what code for the required information - where where to put the answer - unsetok PCRE2_ERROR_UNSET is an "expected" result - -Returns: the return from pcre2_pattern_info() -*/ - -static int -pattern_info(int what, void *where, BOOL unsetok) -{ -int rc; -(void)pcre2_pattern_info(compiled_code, what, NULL); /* Exercise the code */ -rc = pcre2_pattern_info(compiled_code, what, where); -if (rc >= 0) return 0; -if (rc != PCRE2_ERROR_UNSET || !unsetok) - { - cfprintf(clr_api_error, outfile, "Error %d from " - "pcre2_pattern_info_" STR(PCRE2_CODE_UNIT_WIDTH) "(%d)\n", rc, what); - } -return rc; -} - - - -/************************************************* -* Show memory usage info for a pattern * -*************************************************/ - -static void -show_memory_info(void) -{ -uint32_t name_count, name_entry_size; -PCRE2_SIZE size, cblock_size, data_size; - -cblock_size = sizeof(pcre2_real_code); - -(void)pattern_info(PCRE2_INFO_SIZE, &size, FALSE); -(void)pattern_info(PCRE2_INFO_NAMECOUNT, &name_count, FALSE); -(void)pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &name_entry_size, FALSE); - -/* The uint32_t variables are cast before multiplying to avoid potential - integer overflow. */ -data_size = CU2BYTES((PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size); - -cfprintf(clr_profiling, outfile, "Memory allocation - code size : %" SIZ_FORM "\n", size - - cblock_size - data_size); -if (data_size != 0) - cfprintf(clr_profiling, outfile, "Memory allocation - data size : %" SIZ_FORM "\n", data_size); - -if (pat_patctl.jit != 0) - { - (void)pattern_info(PCRE2_INFO_JITSIZE, &size, FALSE); - cfprintf(clr_profiling, outfile, "Memory allocation - JIT code : %" SIZ_FORM "\n", size); - } -} - - - -/************************************************* -* Show frame size info for a pattern * -*************************************************/ - -static void -show_framesize(void) -{ -PCRE2_SIZE frame_size; -(void)pattern_info(PCRE2_INFO_FRAMESIZE, &frame_size, FALSE); -cfprintf(clr_profiling, outfile, "Frame size for pcre2_match(): %" SIZ_FORM "\n", frame_size); -} - - - -/************************************************* -* Show heapframes size info for a match_data * -*************************************************/ - -static void -show_heapframes_size(void) -{ -PCRE2_SIZE heapframes_size; -heapframes_size = pcre2_get_match_data_heapframes_size(match_data); -cfprintf(clr_profiling, outfile, "Heapframes size in match_data: %" SIZ_FORM "\n", - heapframes_size); -} - - - -/************************************************* -* Get and output an error message * -*************************************************/ - -static BOOL -print_error_message_file(FILE *file, int errorcode, const char *before, - const char *after, BOOL badcode_ok) -{ -int len; -PCRE2_UCHAR buf[128]; - -len = pcre2_get_error_message(errorcode, buf, sizeof(buf)/sizeof(*buf)); -if (len == PCRE2_ERROR_BADDATA && badcode_ok) - { - cfprintf(clr_api_error, file, "%sPCRE2_ERROR_BADDATA (unknown error number)%s", before, - after); - } -else if (len < 0) - { - cfprintf(clr_test_error, file, "\n** pcre2test internal error: cannot interpret error " - "number\n** Unexpected return (%d) from pcre2_get_error_message()\n", len); - } -else if ((unsigned)len != pcre2_strlen(buf)) - { - cfprintf(clr_test_error, file, "\n** pcre2test: unexpected length %d from pcre2_get_error_message()\n", len); - return FALSE; - } -else - { - cfprintf(clr_api_error, file, "%s", before); - pchars(clr_api_error, buf, len, FALSE, file); - cfprintf(clr_api_error, file, "%s", after); - } -return len >= 0; -} - -static BOOL -print_error_message(int errorcode, const char *before, const char *after) -{ -return print_error_message_file(outfile, errorcode, before, after, FALSE); -} - - -/************************************************* -* Callback function for callout enumeration * -*************************************************/ - -/* Testing function to log data inside callout enumeration callbacks. - -Argument: - cb pointer to enumerate block - callout_data user data - -Returns: 0 -*/ - -static int callout_enumerate_function(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -uint32_t i; -PCRE2_SPTR pattern_string = pbuffer; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -PCRE2_SIZE next_item_length = cb->next_item_length; - -(void)callout_data; /* Not currently displayed */ - -fprintf(outfile, "Callout "); -if (cb->callout_string != NULL) - { - uint32_t delimiter = cb->callout_string[-1]; - fprintf(outfile, "%c", CHAR_OUTPUT(delimiter)); - pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile); - for (i = 0; callout_start_delims[i] != 0; i++) - if (delimiter == callout_start_delims[i]) - { - delimiter = callout_end_delims[i]; - break; - } - fprintf(outfile, "%c ", CHAR_OUTPUT(delimiter)); - } -else fprintf(outfile, "%d ", cb->callout_number); - -if (next_item_length == 0 && pattern_string[cb->pattern_position] != 0) - next_item_length = 1; -pchars(clr_none, pattern_string+cb->pattern_position, next_item_length, utf, outfile); -fprintf(outfile, "\n"); - -return 0; -} - -static int callout_enumerate_function_void(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -(void)cb; -(void)callout_data; -return 0; -} - -static int callout_enumerate_function_fail(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -(void)cb; -return *(int *)callout_data; -} - - - -/************************************************* -* Show information about a pattern * -*************************************************/ - -/* This function is called after a pattern has been compiled if any of the -information-requesting controls have been set. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -show_pattern_info(void) -{ -int rc; -uint32_t compile_options, overall_options, extra_options; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; - -if ((pat_patctl.control & CTL_MEMORY) != 0) - show_memory_info(); - -if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) - show_framesize(); - -if ((pat_patctl.control & (CTL_BINCODE|CTL_FULLBINCODE)) != 0) - { - fprintf(outfile, "------------------------------------------------------------------\n"); - pcre2_printint(compiled_code, outfile, - (pat_patctl.control & CTL_FULLBINCODE) != 0); - } - -if ((pat_patctl.control & CTL_INFO) != 0) - { - PCRE2_SPTR nametable; - uint8_t *start_bits; - BOOL heap_limit_set, match_limit_set, depth_limit_set; - uint32_t backrefmax, bsr_convention, capture_count, first_ctype, first_cunit, - hasbackslashc, hascrorlf, jchanged, last_ctype, last_cunit, match_empty, - depth_limit, heap_limit, match_limit, minlength, nameentrysize, namecount, - newline_convention; - - /* These info requests may return PCRE2_ERROR_UNSET. */ - - switch(pattern_info(PCRE2_INFO_HEAPLIMIT, &heap_limit, TRUE)) - { - case 0: - heap_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - heap_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - switch(pattern_info(PCRE2_INFO_MATCHLIMIT, &match_limit, TRUE)) - { - case 0: - match_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - match_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - switch(pattern_info(PCRE2_INFO_DEPTHLIMIT, &depth_limit, TRUE)) - { - case 0: - depth_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - depth_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - /* These info requests should always succeed. */ - - if (pattern_info(PCRE2_INFO_BACKREFMAX, &backrefmax, FALSE) + - pattern_info(PCRE2_INFO_BSR, &bsr_convention, FALSE) + - pattern_info(PCRE2_INFO_CAPTURECOUNT, &capture_count, FALSE) + - pattern_info(PCRE2_INFO_FIRSTBITMAP, &start_bits, FALSE) + - pattern_info(PCRE2_INFO_FIRSTCODEUNIT, &first_cunit, FALSE) + - pattern_info(PCRE2_INFO_FIRSTCODETYPE, &first_ctype, FALSE) + - pattern_info(PCRE2_INFO_HASBACKSLASHC, &hasbackslashc, FALSE) + - pattern_info(PCRE2_INFO_HASCRORLF, &hascrorlf, FALSE) + - pattern_info(PCRE2_INFO_JCHANGED, &jchanged, FALSE) + - pattern_info(PCRE2_INFO_LASTCODEUNIT, &last_cunit, FALSE) + - pattern_info(PCRE2_INFO_LASTCODETYPE, &last_ctype, FALSE) + - pattern_info(PCRE2_INFO_MATCHEMPTY, &match_empty, FALSE) + - pattern_info(PCRE2_INFO_MINLENGTH, &minlength, FALSE) + - pattern_info(PCRE2_INFO_NAMECOUNT, &namecount, FALSE) + - pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &nameentrysize, FALSE) + - pattern_info(PCRE2_INFO_NAMETABLE, &nametable, FALSE) + - pattern_info(PCRE2_INFO_NEWLINE, &newline_convention, FALSE) - != 0) - return PR_ABEND; - - fprintf(outfile, "Capture group count = %d\n", capture_count); - - if (backrefmax > 0) - fprintf(outfile, "Max back reference = %d\n", backrefmax); - - if (maxlookbehind > 0) - fprintf(outfile, "Max lookbehind = %d\n", maxlookbehind); - - if (heap_limit_set) - fprintf(outfile, "Heap limit = %u\n", heap_limit); - - if (match_limit_set) - fprintf(outfile, "Match limit = %u\n", match_limit); - - if (depth_limit_set) - fprintf(outfile, "Depth limit = %u\n", depth_limit); - - if (namecount > 0) - { - fprintf(outfile, "Named capture groups:\n"); - for (; namecount > 0; namecount--) - { - size_t length = pcre2_strlen(nametable + IMM2_SIZE); - fprintf(outfile, " "); - - /* In UTF mode the name may be a UTF string containing non-ASCII - letters and digits. We must output it as a UTF-8 string. In non-UTF mode, - use the normal string printing functions, which use escapes for all - non-ASCII characters. */ - - if (utf) - { -#if PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SPTR nameptr = nametable + IMM2_SIZE; - while (*nameptr != 0) - { - uint8_t u8buff[6]; - int len = ord_to_utf8(*nameptr++, u8buff); - fprintf(outfile, "%.*s", len, u8buff); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - PCRE2_SPTR nameptr = nametable + IMM2_SIZE; - PCRE2_SPTR nameptr_end = nameptr + pcre2_strlen(nameptr); - while (*nameptr != 0) - { - int len; - uint8_t u8buff[6]; - uint32_t c; - int ord_rc = utf16_to_ord(nameptr, nameptr_end, &c); - if (ord_rc > 0) nameptr += ord_rc; - else c = *nameptr++; - len = ord_to_utf8(c, u8buff); - fprintf(outfile, "%.*s", len, u8buff); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 8 - fprintf(outfile, "%s", nametable + IMM2_SIZE); -#endif - } - else /* Not UTF mode */ - { - pchars(clr_none, nametable + IMM2_SIZE, length, FALSE, outfile); - } - - while (length++ < nameentrysize - IMM2_SIZE) putc(' ', outfile); - - fprintf(outfile, "%3d\n", GET2(nametable, 0)); - - nametable = nametable + nameentrysize; - } - } - - if (hascrorlf) fprintf(outfile, "Contains explicit CR or LF match\n"); - if (hasbackslashc) fprintf(outfile, "Contains \\C\n"); - if (match_empty) fprintf(outfile, "May match empty string\n"); - - pattern_info(PCRE2_INFO_ARGOPTIONS, &compile_options, FALSE); - pattern_info(PCRE2_INFO_ALLOPTIONS, &overall_options, FALSE); - pattern_info(PCRE2_INFO_EXTRAOPTIONS, &extra_options, FALSE); - - /* Remove UTF/UCP if they were there only because of forbid_utf. This saves - cluttering up the verification output of non-UTF test files. */ - - if ((pat_patctl.options & PCRE2_NEVER_UTF) == 0) - { - compile_options &= ~PCRE2_NEVER_UTF; - overall_options &= ~PCRE2_NEVER_UTF; - } - - if ((pat_patctl.options & PCRE2_NEVER_UCP) == 0) - { - compile_options &= ~PCRE2_NEVER_UCP; - overall_options &= ~PCRE2_NEVER_UCP; - } - - if ((compile_options|overall_options) != 0) - { - if (compile_options == overall_options) - show_compile_options(clr_none, compile_options, "Options:", "\n"); - else - { - show_compile_options(clr_none, compile_options, "Compile options:", "\n"); - show_compile_options(clr_none, overall_options, "Overall options:", "\n"); - } - } - - if (extra_options != 0) - show_compile_extra_options(clr_none, extra_options, "Extra options:", "\n"); - - if (compiled_code->optimization_flags != PCRE2_OPTIMIZATION_ALL) - show_optimize_flags(clr_none, compiled_code->optimization_flags, "Optimizations: ", "\n"); - - if (jchanged) fprintf(outfile, "Duplicate name status changes\n"); - - if ((pat_patctl.control2 & CTL2_BSR_SET) != 0 || - (compiled_code->flags & PCRE2_BSR_SET) != 0) - fprintf(outfile, "\\R matches %s\n", (bsr_convention == PCRE2_BSR_UNICODE)? - "any Unicode newline" : "CR, LF, or CRLF"); - - if ((compiled_code->flags & PCRE2_NL_SET) != 0) - { - switch (newline_convention) - { - case PCRE2_NEWLINE_CR: - fprintf(outfile, "Forced newline is CR\n"); - break; - - case PCRE2_NEWLINE_LF: - fprintf(outfile, "Forced newline is LF\n"); - break; - - case PCRE2_NEWLINE_CRLF: - fprintf(outfile, "Forced newline is CRLF\n"); - break; - - case PCRE2_NEWLINE_ANYCRLF: - fprintf(outfile, "Forced newline is CR, LF, or CRLF\n"); - break; - - case PCRE2_NEWLINE_ANY: - fprintf(outfile, "Forced newline is any Unicode newline\n"); - break; - - case PCRE2_NEWLINE_NUL: - fprintf(outfile, "Forced newline is NUL\n"); - break; - - default: - break; - } - } - - if (first_ctype == 2) - { - fprintf(outfile, "First code unit at start or follows newline\n"); - } - else if (first_ctype == 1) - { - const char *caseless = - ((compiled_code->flags & PCRE2_FIRSTCASELESS) == 0)? - "" : " (caseless)"; - if (first_cunit != 0xff && PRINTABLE(first_cunit)) - fprintf(outfile, "First code unit = \'%c\'%s\n", CHAR_OUTPUT(first_cunit), - caseless); - else - { - fprintf(outfile, "First code unit = "); - if (first_cunit == 0xff) - fprintf(outfile, "\\xff"); - else - pchar(first_cunit, FALSE, outfile); - fprintf(outfile, "%s\n", caseless); - } - } - else if (start_bits != NULL) - { - int input; - int c = 24; - fprintf(outfile, "Starting code units:"); - for (input = 0; input < 256; input++) - { - int i = CHAR_INPUT_HEX(input); - if ((start_bits[i/8] & (1u << (i&7))) != 0) - { - if (c > 75) - { - fprintf(outfile, "\n "); - c = 2; - } - if (PRINTABLE(i) && i != CHAR_SPACE) - { - fprintf(outfile, " %c", CHAR_OUTPUT(i)); - c += 2; - } - else - { - fprintf(outfile, " \\x%02x", CHAR_OUTPUT_HEX(i)); - c += 5; - } - } - } - fprintf(outfile, "\n"); - } - - if (last_ctype != 0) - { - const char *caseless = - ((compiled_code->flags & PCRE2_LASTCASELESS) == 0)? - "" : " (caseless)"; - if (PRINTABLE(last_cunit)) - fprintf(outfile, "Last code unit = \'%c\'%s\n", CHAR_OUTPUT(last_cunit), - caseless); - else - { - fprintf(outfile, "Last code unit = "); - pchar(last_cunit, FALSE, outfile); - fprintf(outfile, "%s\n", caseless); - } - } - - if ((compiled_code->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0) - fprintf(outfile, "Subject length lower bound = %d\n", minlength); - - if (pat_patctl.jit != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0) - { -#ifdef SUPPORT_JIT - if (compiled_code->executable_jit != NULL) - fprintf(outfile, "JIT compilation was successful\n"); - else - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (jitrc != 0 && !print_error_message(jitrc, " (", ")")) - return PR_ABEND; - fprintf(outfile, "\n"); - } -#else - cfprintf(clr_api_error, outfile, "JIT support is not available in this version of PCRE2\n"); -#endif - } - } - -rc = pcre2_callout_enumerate(compiled_code, - ((pat_patctl.control & CTL_CALLOUT_INFO) != 0)? callout_enumerate_function : - /* Exercise the callout enumeration code with a dummy callback to make sure - it works. */ - callout_enumerate_function_void, NULL); -if (rc != 0) - { - cfprintf(clr_api_error, outfile, "Callout enumerate failed: error %d: ", rc); - if (rc < 0 && !print_error_message(rc, "", "\n")) - return PR_ABEND; - return PR_SKIP; - } - -return PR_OK; -} - - - -/************************************************* -* Handle serialization error * -*************************************************/ - -/* Print an error message after a serialization failure. - -Arguments: - rc the error code - msg an initial message for what failed - -Returns: FALSE if print_error_message() fails -*/ - -static BOOL -serial_error(int rc, const char *msg) -{ -cfprintf(clr_api_error, outfile, "%s failed: error %d: ", msg, rc); -return print_error_message(rc, "", "\n"); -} - - - -/************************************************* -* Process command line * -*************************************************/ - -/* This function is called for lines beginning with # and a character that is -not ! or whitespace, when encountered between tests, which means that there is -no compiled pattern (compiled_code is NULL). The line is in buffer. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_command(void) -{ -FILE *f; -PCRE2_SIZE serial_size; -size_t i; -int rc, cmd, yield; -uint16_t first_listed_newline; -const char *cmdname; -size_t cmdlen; -uint8_t *argptr, *serial; -BOOL if_inverted; - -yield = PR_OK; -cmd = CMD_UNKNOWN; -cmdlen = 0; - -for (i = 0; i < cmdlistcount; i++) - { - cmdname = cmdlist[i].name; - cmdlen = strlen(cmdname); - if (strncmp((char *)(buffer+1), cmdname, cmdlen) == 0 && - (buffer[cmdlen+1] == 0 || isspace(buffer[cmdlen+1]))) - { - cmd = cmdlist[i].value; - break; - } - } - -if (preprocess_only && cmd != CMD_IF && cmd != CMD_ENDIF) - return PR_OK; - -argptr = buffer + cmdlen + 1; - -if (restrict_for_perl_test && cmd != CMD_PATTERN && cmd != CMD_SUBJECT && - cmd != CMD_IF && cmd != CMD_ENDIF) - { - cfprintf(clr_test_error, outfile, "** #%s is not allowed after #perltest\n", cmdname); - return PR_ABEND; - } - -switch(cmd) - { - case CMD_UNKNOWN: - cfprintf(clr_test_error, outfile, "** Unknown command: %s", buffer); - break; - - case CMD_FORBID_UTF: - forbid_utf = PCRE2_NEVER_UTF|PCRE2_NEVER_UCP; - break; - - case CMD_PERLTEST: - restrict_for_perl_test = TRUE; - break; - - /* Set default pattern modifiers */ - - case CMD_PATTERN: - (void)decode_modifiers(argptr, CTX_DEFPAT, &def_patctl, NULL); - if (def_patctl.jit == 0 && (def_patctl.control & CTL_JITVERIFY) != 0) - def_patctl.jit = JIT_DEFAULT; - break; - - /* Set default subject modifiers */ - - case CMD_SUBJECT: - (void)decode_modifiers(argptr, CTX_DEFDAT, NULL, &def_datctl); - break; - - /* Check the default newline, and if not one of those listed, set up the - first one to be forced. An empty list unsets. */ - - case CMD_NEWLINE_DEFAULT: - local_newline_default = 0; /* Unset */ - first_listed_newline = 0; - for (;;) - { - while (isspace(*argptr)) argptr++; - if (*argptr == 0) break; - for (uint16_t j = 1; j < sizeof(newlines)/sizeof(char *); j++) - { - size_t nlen = strlen(newlines[j]); - if (strncmpic(argptr, (const uint8_t *)newlines[j], nlen) == 0 && - isspace(argptr[nlen])) - { - if (j == NEWLINE_DEFAULT) return PR_OK; /* Default is valid */ - if (first_listed_newline == 0) first_listed_newline = j; - } - } - while (*argptr != 0 && !isspace(*argptr)) argptr++; - } - local_newline_default = first_listed_newline; - break; - - /* Pop or copy a compiled pattern off the stack. Modifiers that do not affect - the compiled pattern (e.g. to give information) are permitted. The default - pattern modifiers are ignored. */ - - case CMD_POP: - case CMD_POPCOPY: - if (patstacknext <= 0) - { - cfprintf(clr_test_error, outfile, "** Can't pop off an empty stack\n"); - return PR_SKIP; - } - patctl_zero(&pat_patctl); /* Completely unset */ - if (!decode_modifiers(argptr, CTX_POPPAT, &pat_patctl, NULL)) - return PR_SKIP; - - if (cmd == CMD_POP) - { - compiled_code = patstack[--patstacknext]; - } - else - { - compiled_code = pcre2_code_copy(patstack[patstacknext - 1]); - } - - if (pat_patctl.jit != 0) - { - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - } - - rc = show_pattern_info(); - if (rc != PR_OK) return rc; - break; - - /* Save the stack of compiled patterns to a file, then empty the stack. */ - - case CMD_SAVE: - if (patstacknext <= 0) - { - cfprintf(clr_test_error, outfile, "** No stacked patterns to save\n"); - return PR_OK; - } - - rc = open_file(argptr+1, BINARY_OUTPUT_MODE, &f, "#save"); - if (rc != PR_OK) return rc; - - rc = pcre2_serialize_encode((const pcre2_code **)patstack, patstacknext, - &serial, &serial_size, general_context); - if (rc < 0) - { - fclose(f); - if (!serial_error(rc, "Serialization")) return PR_ABEND; - break; - } - - /* Write the length at the start of the file to make it straightforward to - get the right memory when re-loading. This saves having to read the file size - in different operating systems. To allow for different endianness (even - though reloading with the opposite endianness does not work), write the - length byte-by-byte. */ - - for (i = 0; i < 4; i++) fputc((serial_size >> (i*8)) & 255, f); - if (fwrite(serial, 1, serial_size, f) != serial_size) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fwrite()\n"); - fclose(f); - return PR_ABEND; - } - - fclose(f); - pcre2_serialize_free(serial); - while(patstacknext > 0) - { - compiled_code = patstack[--patstacknext]; - pcre2_code_free(compiled_code); - } - compiled_code = NULL; - break; - - /* Load a set of compiled patterns from a file onto the stack */ - - case CMD_LOAD: - rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, "#load"); - if (rc != PR_OK) return rc; - - serial_size = 0; - for (i = 0; i < 4; i++) serial_size |= fgetc(f) << (i*8); - - serial = malloc(serial_size); - if (serial == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory (size %" SIZ_FORM ") for #load\n", - serial_size); - fclose(f); - return PR_ABEND; - } - - i = fread(serial, 1, serial_size, f); - fclose(f); - - if (i != serial_size) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fread()\n"); - yield = PR_ABEND; - } - else - { - rc = pcre2_serialize_get_number_of_codes(serial); - if (rc < 0) - { - if (!serial_error(rc, "Get number of codes")) yield = PR_ABEND; - } - else - { - if (rc + patstacknext > PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Not enough space on pattern stack for %d pattern%s\n", - rc, (rc == 1)? "" : "s"); - rc = PATSTACKSIZE - patstacknext; - cfprintf(clr_test_error, outfile, "** Decoding %d pattern%s\n", rc, - (rc == 1)? "" : "s"); - } - rc = pcre2_serialize_decode(patstack + patstacknext, rc, serial, - general_context); - if (rc < 0) - { - if (!serial_error(rc, "Deserialization")) yield = PR_ABEND; - } - else patstacknext += rc; - } - } - - free(serial); - break; - - /* Load a set of binary tables into tables3. */ - - case CMD_LOADTABLES: - rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, "#loadtables"); - if (rc != PR_OK) return rc; - - if (tables3 == NULL) - { - int r; - r = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, &loadtables_length); - if (r >= 0) tables3 = malloc(loadtables_length); - } - - if (tables3 == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed: malloc/config for #loadtables\n"); - yield = PR_ABEND; - } - else if (fread(tables3, 1, loadtables_length, f) != loadtables_length) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fread()\n"); - yield = PR_ABEND; - } - - fclose(f); - break; - - case CMD_IF: - if (inside_if) - { - cfprintf(clr_test_error, outfile, "** Nested #if not supported\n"); - return PR_ABEND; - } - - while (isspace(*argptr)) argptr++; - if_inverted = FALSE; - if (*argptr == '!') - { - argptr++; - if_inverted = TRUE; - } - while (isspace(*argptr)) argptr++; - for (i = 0; i < COPTLISTCOUNT; i++) - { - size_t optlen = strlen(coptlist[i].name); - const uint8_t *argptr_trail; - if (coptlist[i].type != CONF_FIX) - continue; - if (strncmp((const char*)argptr, coptlist[i].name, optlen) != 0) - continue; - argptr_trail = argptr + optlen; - while (isspace(*argptr_trail)) argptr_trail++; - if (*argptr_trail == 0 || *argptr_trail == '\n') - break; - } - if (i == COPTLISTCOUNT) - { - cfprintf(clr_test_error, outfile, "** Unknown condition: %s\n", buffer); - return PR_ABEND; - } - - /* Condition FALSE - skip this line and everything until #endif. */ - if ((coptlist[i].value != 0) == if_inverted) - yield = PR_ENDIF; - - inside_if = TRUE; - break; - - case CMD_ENDIF: - if (!inside_if) - { - cfprintf(clr_test_error, outfile, "** Unexpected #endif\n"); - return PR_ABEND; - } - inside_if = FALSE; - break; - } - -return yield; -} - - - -/************************************************* -* Process pattern line * -*************************************************/ - -/* This function is called when the input buffer contains the start of a -pattern. The first character is known to be a valid delimiter. The pattern is -read, modifiers are interpreted, and a suitable local context is set up for -this test. The pattern is then compiled. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_pattern(void) -{ -BOOL utf; -uint32_t k; -uint8_t *p = buffer; -unsigned int delimiter = *p++; -int rc, errorcode; -pcre2_compile_context *use_pat_context; -PCRE2_SPTR use_pbuffer; -uint32_t use_forbid_utf = forbid_utf; -PCRE2_SIZE patlen, full_patlen; -PCRE2_SIZE valgrind_access_length; -PCRE2_SIZE erroroffset; - -/* The perltest.sh script supports only / as a delimiter. */ - -if (restrict_for_perl_test && delimiter != '/') - { - cfprintf(clr_test_error, outfile, "** The only allowed delimiter after #perltest is '/'\n"); - return PR_ABEND; - } - -/* Initialize the context and pattern/data controls for this test from the -defaults. */ - -memcpy(pat_context, default_pat_context, sizeof(pcre2_compile_context)); -memcpy(&pat_patctl, &def_patctl, sizeof(patctl)); - -/* Find the end of the pattern, reading more lines if necessary. */ - -for(;;) - { - while (*p != 0) - { - if (*p == '\\' && p[1] != 0) p++; - else if (*p == delimiter) break; - p++; - } - if (*p != 0) break; - if ((p = extend_inputline(infile, p, " > ")) == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected EOF\n"); - return PR_ABEND; - } - if (!INTERACTIVE(infile)) cfprintf(clr_input, outfile, "%s", (char *)p); - } - -/* If the first character after the delimiter is backslash, make the pattern -end with backslash. This is purely to provide a way of testing for the error -message when a pattern ends with backslash. */ - -if (p[1] == '\\') *p++ = '\\'; - -/* Terminate the pattern at the delimiter, and compute the length. */ - -*p++ = 0; -patlen = p - buffer - 2; - -/* Look for modifiers and options after the final delimiter. */ - -if (!decode_modifiers(p, CTX_PAT, &pat_patctl, NULL)) return PR_SKIP; - -/* Note that the match_invalid_utf option also sets utf when passed to -pcre2_compile(). */ - -utf = (pat_patctl.options & (PCRE2_UTF|PCRE2_MATCH_INVALID_UTF)) != 0; - -/* The utf8_input modifier is not allowed in 8-bit mode, and is mutually -exclusive with the utf modifier. */ - -if ((pat_patctl.control & CTL_UTF8_INPUT) != 0) - { -#if PCRE2_CODE_UNIT_WIDTH == 8 - cfprintf(clr_test_error, outfile, "** The utf8_input modifier is not allowed in 8-bit mode\n"); - return PR_SKIP; -#else - if (utf) - { - cfprintf(clr_test_error, outfile, "** The utf and utf8_input modifiers are mutually exclusive\n"); - return PR_SKIP; - } -#endif - } - -/* The convert and posix modifiers are mutually exclusive. */ - -if (pat_patctl.convert_type != CONVERT_UNSET && - (pat_patctl.control & CTL_POSIX) != 0) - { - cfprintf(clr_test_error, outfile, "** The convert and posix modifiers are mutually exclusive\n"); - return PR_SKIP; - } - -/* Check for mutually exclusive control modifiers. At present, these are all in -the first control word. */ - -for (k = 0; k < sizeof(exclusive_pat_controls)/sizeof(uint32_t); k++) - { - uint32_t c = pat_patctl.control & exclusive_pat_controls[k]; - if (c != 0 && c != (c & (~c+1))) - { - show_controls(clr_test_error, c, 0, "** Not allowed together:"); - fprintf(outfile, "\n"); - return PR_SKIP; - } - } - -/* Assume full JIT compile for jitverify and/or jitfast if nothing else was -specified. */ - -if (pat_patctl.jit == 0 && - (pat_patctl.control & (CTL_JITVERIFY|CTL_JITFAST)) != 0) - pat_patctl.jit = JIT_DEFAULT; - -/* Now copy the pattern to pbuffer8 for use in 8-bit testing. Convert from hex -if requested (literal strings in quotes may be present within the hexadecimal -pairs). The result must necessarily be fewer characters so will always fit in -pbuffer8. */ - -if ((pat_patctl.control & CTL_HEXPAT) != 0) - { - uint8_t *pp, *pt; - uint32_t c, d; - - pt = pbuffer8; - for (pp = buffer + 1; *pp != 0; pp++) - { - if (isspace(*pp)) continue; - c = *pp++; - - /* Handle a literal substring */ - - if (c == '\'' || c == '"') - { - uint8_t *pq = pp; - for (;; pp++) - { - d = *pp; - if (d == 0) - { - cfprintf(clr_test_error, outfile, "** Missing closing quote in hex pattern: " - "opening quote is at offset %" PTR_FORM ".\n", pq - buffer - 2); - return PR_SKIP; - } - if (d == c) break; - *pt++ = d; - } - } - - /* Expect a hex pair */ - - else - { - if (!isxdigit(c)) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-hex-digit '%c' at offset %" - PTR_FORM " in hex pattern: quote missing?\n", c, pp - buffer - 2); - return PR_SKIP; - } - if (*pp == 0) - { - cfprintf(clr_test_error, outfile, "** Odd number of digits in hex pattern\n"); - return PR_SKIP; - } - d = *pp; - if (!isxdigit(d)) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-hex-digit '%c' at offset %" - PTR_FORM " in hex pattern: quote missing?\n", d, pp - buffer - 1); - return PR_SKIP; - } - c = toupper(c); - d = toupper(d); - c = isdigit(c)? (c - '0') : (c - 'A' + 10); - d = isdigit(d)? (d - '0') : (d - 'A' + 10); - *pt++ = CHAR_OUTPUT(CHAR_INPUT_HEX((c << 4) + d)); - } - } - *pt = 0; - patlen = pt - pbuffer8; - } - -/* If not a hex string, process for repetition expansion if requested. */ - -else if ((pat_patctl.control & CTL_EXPAND) != 0) - { - uint8_t *pp, *pt; - - pt = pbuffer8; - for (pp = buffer + 1; *pp != 0; pp++) - { - uint8_t *pc = pp; - uint32_t count = 1; - size_t length = 1; - - /* Check for replication syntax; if not found, the defaults just set will - prevail and one character will be copied. */ - - if (pp[0] == '\\' && pp[1] == '[') - { - uint8_t *pe; - for (pe = pp + 2; *pe != 0; pe++) - { - if (pe[0] == ']' && pe[1] == '{') - { - size_t clen = pe - pc - 2; - uint32_t i = 0; - unsigned long uli; - char *endptr; - - pe += 2; - uli = strtoul((const char *)pe, &endptr, 10); - if (U32OVERFLOW(uli)) - { - cfprintf(clr_test_error, outfile, "** Pattern repeat count too large\n"); - return PR_SKIP; - } - - i = (uint32_t)uli; - pe = (uint8_t *)endptr; - if (*pe == '}') - { - if (i == 0) - { - cfprintf(clr_test_error, outfile, "** Zero repeat not allowed\n"); - return PR_SKIP; - } - pc += 2; - count = i; - length = clen; - pp = pe; - break; - } - } - } - } - - /* Add to output. If the buffer is too small expand it. The function for - expanding buffers always keeps buffer and pbuffer8 in step as far as their - size goes. */ - - while (pt + count * length > pbuffer8 + pbuffer8_size) - { - size_t pc_offset = pc - buffer; - size_t pp_offset = pp - buffer; - size_t pt_offset = pt - pbuffer8; - expand_input_buffers(); - pc = buffer + pc_offset; - pp = buffer + pp_offset; - pt = pbuffer8 + pt_offset; - } - - for (; count > 0; count--) - { - memcpy(pt, pc, length); - pt += length; - } - } - - *pt = 0; - patlen = pt - pbuffer8; - - if ((pat_patctl.control & CTL_INFO) != 0) - fprintf(outfile, "Expanded: %s\n", pbuffer8); - } - -/* Neither hex nor expanded, just copy the input verbatim. */ - -else - { - strncpy((char *)pbuffer8, (char *)(buffer+1), patlen + 1); - } - -/* Sort out character tables */ - -if (pat_patctl.locale[0] != MOD_STR_UNSET) - { - if (pat_patctl.tables_id != 0) - { - cfprintf(clr_test_error, outfile, "** 'Locale' and 'tables' must not both be set\n"); - return PR_SKIP; - } - if (setlocale(LC_CTYPE, (const char *)pat_patctl.locale+1) == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to set locale \"%s\"\n", pat_patctl.locale+1); - return PR_SKIP; - } - if (strcmp((const char *)pat_patctl.locale+1, (const char *)locale_name) != 0) - { - strncpy((char *)locale_name, (char *)pat_patctl.locale + 1, sizeof(locale_name)); - locale_name[sizeof(locale_name) - 1] = '\0'; - if (locale_tables != NULL) - { - pcre2_maketables_free(general_context, locale_tables); - } - locale_tables = pcre2_maketables(general_context); - } - use_tables = locale_tables; - } - -else switch (pat_patctl.tables_id) - { - case 0: use_tables = NULL; break; - case 1: use_tables = tables1; break; - case 2: use_tables = tables2; break; - - case 3: - if (tables3 == NULL) - { - cfprintf(clr_test_error, outfile, "** 'Tables = 3' is invalid: binary tables have not " - "been loaded\n"); - return PR_SKIP; - } - use_tables = tables3; - break; - - default: - cfprintf(clr_test_error, outfile, "** 'Tables' must specify 0, 1, 2, or 3.\n"); - return PR_SKIP; - } - -pcre2_set_character_tables(pat_context, use_tables); - -/* Set up for the stackguard test. */ - -if (pat_patctl.stackguard_test != 0) - { - pcre2_set_compile_recursion_guard(pat_context, stack_guard, NULL); - } - -/* Handle compiling via the POSIX interface, which doesn't support the -timing, showing, or debugging options, nor the ability to pass over -local character tables. Neither does it have 16-bit or 32-bit support. */ - -if ((pat_patctl.control & CTL_POSIX) != 0) - { -#if PCRE2_CODE_UNIT_WIDTH != 8 - cfprintf(clr_test_error, outfile, "** The POSIX interface is available only in 8-bit mode\n"); - return PR_SKIP; - -#else - int cflags = 0; - const char *msg = "** Ignored with POSIX interface:"; - - /* Check for features that the POSIX interface does not support. */ - - if (pat_patctl.locale[0] != MOD_STR_UNSET) prmsg(&msg, "locale"); - if (pat_patctl.replacement[0] != MOD_STR_UNSET) prmsg(&msg, "replace"); - if (pat_patctl.tables_id != 0) prmsg(&msg, "tables"); - if (pat_patctl.stackguard_test != 0) prmsg(&msg, "stackguard"); - if (timeit > 0) prmsg(&msg, "timing"); - if (pat_patctl.jit != 0) prmsg(&msg, "JIT"); - - if ((pat_patctl.options & ~POSIX_SUPPORTED_COMPILE_OPTIONS) != 0) - { - show_compile_options( - clr_test_error, - pat_patctl.options & (uint32_t)(~POSIX_SUPPORTED_COMPILE_OPTIONS), - msg, ""); - msg = ""; - } - - if ((pat_context->extra_options & - (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS)) != 0) - { - show_compile_extra_options( - clr_test_error, - pat_context->extra_options & - (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS), - msg, ""); - msg = ""; - } - - if ((pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS)) != 0 || - (pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2)) != 0) - { - show_controls( - clr_test_error, - pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS), - pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2), - msg); - msg = ""; - - /* Remove ignored options so as not to get a repeated message for those - that are actually subject controls. */ - - pat_patctl.control &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS); - pat_patctl.control2 &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS2); - } - - if (local_newline_default != 0) prmsg(&msg, "#newline_default"); - if (pat_context->max_pattern_length != PCRE2_UNSET) - prmsg(&msg, "max_pattern_length"); - if (pat_context->max_pattern_compiled_length != PCRE2_UNSET) - prmsg(&msg, "max_pattern_compiled_length"); - if (pat_context->parens_nest_limit != PARENS_NEST_DEFAULT) - prmsg(&msg, "parens_nest_limit"); - - if (msg[0] == 0) fprintf(outfile, "\n"); - - /* Translate PCRE2 options to POSIX options and then compile. */ - - if (utf) cflags |= REG_UTF; - if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0) cflags |= REG_NOSUB; - if ((pat_patctl.options & PCRE2_UCP) != 0) cflags |= REG_UCP; - if ((pat_patctl.options & PCRE2_CASELESS) != 0) cflags |= REG_ICASE; - if ((pat_patctl.options & PCRE2_LITERAL) != 0) cflags |= REG_NOSPEC; - if ((pat_patctl.options & PCRE2_MULTILINE) != 0) cflags |= REG_NEWLINE; - if ((pat_patctl.options & PCRE2_DOTALL) != 0) cflags |= REG_DOTALL; - if ((pat_patctl.options & PCRE2_UNGREEDY) != 0) cflags |= REG_UNGREEDY; - - if ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) != 0) - { - preg.re_endp = (char *)pbuffer8 + patlen; - cflags |= REG_PEND; - } - -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, patlen); -#endif - - rc = regcomp(&preg, (char *)pbuffer8, cflags); - - /* Compiling failed */ - - if (rc != 0) - { - char *regbuffer; - size_t bsize, usize, strsize; - - preg.re_pcre2_code = NULL; /* In case something was left in there */ - preg.re_match_data = NULL; - - bsize = (pat_patctl.regerror_buffsize >= 0 && - (unsigned)pat_patctl.regerror_buffsize <= pbuffer8_size)? - (unsigned)pat_patctl.regerror_buffsize : pbuffer8_size; - regbuffer = (char *)pbuffer8 + (pbuffer8_size - bsize); - usize = regerror(rc, &preg, regbuffer, bsize); - strsize = ((usize > bsize)? bsize : usize) - 1; - - cfprintf(clr_api_error, outfile, "Failed: POSIX code %d: ", rc); - if (bsize > 0) pchars(clr_api_error, (PCRE2_SPTR8)regbuffer, strsize, utf, outfile); - fputs("\n", outfile); - if (usize > bsize) - { - cfprintf(clr_test_error, outfile, "** regerror() message truncated\n"); - } - if (bsize > 0 && strlen(regbuffer) != strsize) - { - cfprintf(clr_test_error, outfile, "** regerror() strlen incorrect\n"); - return PR_ABEND; - } - return PR_SKIP; - } - - /* Compiling succeeded. Check that the values in the preg block are sensible. - It can happen that pcre2test is accidentally linked with a different POSIX - library which succeeds, but of course puts different things into preg. In - this situation, calling regfree() may cause a segfault (or invalid free() in - valgrind), so ensure that preg.re_pcre2_code is NULL, which suppresses the - calling of regfree() on exit. */ - - if (preg.re_pcre2_code == NULL || - ((pcre2_real_code_8 *)preg.re_pcre2_code)->magic_number != MAGIC_NUMBER || - ((pcre2_real_code_8 *)preg.re_pcre2_code)->top_bracket != preg.re_nsub || - preg.re_match_data == NULL || - preg.re_cflags != cflags) - { - cfprintf(clr_test_error, outfile, - "** The regcomp() function returned zero (success), but the values set\n" - "** in the preg block are not valid for PCRE2. Check that pcre2test is\n" - "** linked with PCRE2's pcre2posix module (-lpcre2-posix) and not with\n" - "** some other POSIX regex library.\n**\n"); - preg.re_pcre2_code = NULL; - return PR_ABEND; - } - - return PR_OK; -#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */ - } - -/* Handle compiling via the native interface. Controls that act later are -ignored with "push". Replacements are locked out. */ - -if ((pat_patctl.control & (CTL_PUSH|CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0) - { - if (pat_patctl.replacement[0] != MOD_STR_UNSET) - { - cfprintf(clr_test_error, outfile, "** Replacement text is not supported with 'push'.\n"); - return PR_OK; - } - if ((pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS) != 0 || - (pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2) != 0) - { - show_controls(clr_test_error, pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS, - pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2, - "** Ignored when compiled pattern is stacked with 'push':"); - fprintf(outfile, "\n"); - } - if ((pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS) != 0 || - (pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2) != 0) - { - show_controls(clr_test_error, pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS, - pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2, - "** Applies only to compile when pattern is stacked with 'push':"); - fprintf(outfile, "\n"); - } - } - -/* Convert the input in non-8-bit modes. */ - -errorcode = 0; - -#if defined(EBCDIC) && !EBCDIC_IO -ascii_to_ebcdic_str(pbuffer8, patlen); -#endif - -#if PCRE2_CODE_UNIT_WIDTH != 8 -errorcode = G(to,PCRE2_CODE_UNIT_WIDTH)(pbuffer8, utf, &patlen); -switch(errorcode) - { - case -1: - cfprintf(clr_test_error, outfile, "** Failed: invalid UTF-8 string cannot be " - "converted to " STR(PCRE2_CODE_UNIT_WIDTH) "-bit string\n"); - return PR_SKIP; - - case -2: - cfprintf(clr_test_error, outfile, "** Failed: character value greater than 0x10ffff " - "cannot be converted to UTF\n"); - return PR_SKIP; - - case -3: - cfprintf(clr_test_error, outfile, "** Failed: character value greater than 0xffff " - "cannot be converted to 16-bit in non-UTF mode\n"); - return PR_SKIP; - - default: - break; - } -#endif - -/* When valgrind is supported, detect accesses to the 8-bit buffer now that we -have finished with it. */ - -#if defined SUPPORT_VALGRIND && PCRE2_CODE_UNIT_WIDTH != 8 -VALGRIND_MAKE_MEM_UNDEFINED(pbuffer8, pbuffer8_size); -#endif - -/* The pattern is now in pbuffer[8|16|32], with the length in code units in -patlen. If it is to be converted, copy the result back afterwards so that it -ends up back in the usual place. */ - -if (pat_patctl.convert_type != CONVERT_UNSET) - { - int convert_return = PR_OK; - uint32_t convert_options = pat_patctl.convert_type; - PCRE2_UCHAR *converted_pattern; - PCRE2_SIZE converted_length = JUNK_OFFSET; - BOOL zero_terminate; - - if (pat_patctl.convert_length != CONVERT_UNSET) - { - converted_length = pat_patctl.convert_length; - converted_pattern = malloc(converted_length? CU2BYTES(converted_length) : 1); - if (converted_pattern == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed: malloc failed for converted pattern\n"); - return PR_ABEND; - } - } - else converted_pattern = NULL; /* Let the library allocate */ - - if (utf) convert_options |= PCRE2_CONVERT_UTF; - if ((pat_patctl.options & PCRE2_NO_UTF_CHECK) != 0) - convert_options |= PCRE2_CONVERT_NO_UTF_CHECK; - - memcpy(con_context, default_con_context, sizeof(pcre2_convert_context)); - - if (pat_patctl.convert_glob_escape != 0) - { - uint32_t escape = (pat_patctl.convert_glob_escape == '0')? 0 : - pat_patctl.convert_glob_escape; - rc = pcre2_set_glob_escape(con_context, CHAR_INPUT(escape)); - if (rc != 0) - { - cfprintf(clr_test_error, outfile, "** Invalid glob escape '%c'\n", - pat_patctl.convert_glob_escape); - convert_return = PR_SKIP; - goto CONVERT_FINISH; - } - } - - if (pat_patctl.convert_glob_separator != 0) - { - uint32_t separator = pat_patctl.convert_glob_separator; - rc = pcre2_set_glob_separator(con_context, CHAR_INPUT(separator)); - if (rc != 0) - { - cfprintf(clr_test_error, outfile, "** Invalid glob separator '%c'\n", - pat_patctl.convert_glob_separator); - convert_return = PR_SKIP; - goto CONVERT_FINISH; - } - } - - /* Set up the input buffer in the same way as for pcre2_compile() below. */ - - zero_terminate = (pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0; - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_NOACCESS(pbuffer + CU2BYTES(patlen + zero_terminate), - pbuffer_size - CU2BYTES(patlen + zero_terminate)); -#endif - - if (zero_terminate) patlen = PCRE2_ZERO_TERMINATED; - use_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL; - - rc = pcre2_pattern_convert(use_pbuffer, patlen, convert_options, - &converted_pattern, &converted_length, con_context); - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(pbuffer, pbuffer_size); -#endif - - if (rc != 0) - { - cfprintf(clr_api_error, outfile, "** Pattern conversion error at offset %" SIZ_FORM ": ", - converted_length); - convert_return = print_error_message(rc, "", "\n")? PR_SKIP:PR_ABEND; - } - - /* Output the converted pattern, then copy it. */ - - else - { - pchars(clr_none, converted_pattern, converted_length, utf, outfile); - fprintf(outfile, "\n"); - - if (CU2BYTES(converted_length + 1) > pbuffer_size) - { - // TODO This seems... unfortunate? There must be some patterns that can - // expand when converted from glob to regex, but we aren't allowing for - // that here. Presumably we should expand the buffer rather than moan. - cfprintf(clr_test_error, outfile, "** Pattern conversion is too long for the buffer\n"); - convert_return = PR_SKIP; - } - else - { - memcpy(pbuffer, converted_pattern, CU2BYTES(converted_length + 1)); - patlen = converted_length; - } - } - - /* Free the converted pattern. */ - - CONVERT_FINISH: - if (pat_patctl.convert_length != CONVERT_UNSET) - free(converted_pattern); - else - pcre2_converted_pattern_free(converted_pattern); - - /* Return if conversion was unsuccessful. */ - - if (convert_return != PR_OK) return convert_return; - } - -/* By default we pass a zero-terminated pattern, but a length is passed if -"use_length" was specified or this is a hex pattern (which might contain binary -zeros). When valgrind is supported, arrange for the unused part of the buffer -to be marked as no-access. */ - -full_patlen = patlen; -valgrind_access_length = patlen; -if ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0) - { - patlen = PCRE2_ZERO_TERMINATED; - valgrind_access_length += 1; /* For the terminating zero */ - } - -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_NOACCESS(pbuffer + valgrind_access_length, - pbuffer_size - CU2BYTES(valgrind_access_length)); -#else /* Valgrind not supported */ -(void)valgrind_access_length; /* Avoid compiler warning */ -#endif - -/* If #newline_default has been used and the library was not compiled with an -appropriate default newline setting, local_newline_default will be non-zero. We -use this if there is no explicit newline modifier. */ - -if ((pat_patctl.control2 & CTL2_NL_SET) == 0 && local_newline_default != 0) - { - pcre2_set_newline(pat_context, local_newline_default); - } - -/* The null_context modifier is used to test calling pcre2_compile() with a -NULL context. */ - -use_pat_context = ((pat_patctl.control & CTL_NULLCONTEXT) != 0)? - NULL : pat_context; - -/* If PCRE2_LITERAL is set, set use_forbid_utf zero because PCRE2_NEVER_UTF -and PCRE2_NEVER_UCP are invalid with it. */ - -if ((pat_patctl.options & PCRE2_LITERAL) != 0) use_forbid_utf = 0; - -/* Set use_pbuffer to the input buffer or NULL as requested. */ - -use_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL; - -/* Compile many times when timing. */ - -if (timeit > 0) - { - int i; - clock_t time_taken = 0; - for (i = 0; i < timeit; i++) - { - clock_t start_time = clock(); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - time_taken += clock() - start_time; - if (compiled_code != NULL) - pcre2_code_free(compiled_code); - } - total_compile_time += time_taken; - cfprintf(clr_profiling, outfile, "Compile time %8.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit); - } - -/* A final compile that is used "for real". */ - -mallocs_called = 0; -compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context); - -/* For malloc testing, we repeat the compilation. */ - -if (malloc_testing) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - if (compiled_code != NULL) - pcre2_code_free(compiled_code); - - errorcode = 0; - erroroffset = 0; - mallocs_until_failure = i; - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context); - mallocs_until_failure = INT_MAX; - - if (i < target_mallocs && - !(compiled_code == NULL && errorcode == PCRE2_ERROR_HEAP_FAILED)) - { - cfprintf(clr_test_error, outfile, "** malloc() compile test did not fail as expected (%d)\n", - errorcode); - return PR_ABEND; - } - } - } - -/* If valgrind is supported, mark the pbuffer as accessible again. We leave the -pattern in the test-mode's buffer defined because it may be read from a callout -during matching. */ - -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_UNDEFINED(pbuffer + valgrind_access_length, - pbuffer_size - CU2BYTES(valgrind_access_length)); -#endif - -/* Call the JIT compiler if requested. When timing, or testing malloc failures, -we must free and recompile the pattern each time because that is the only way to -free the JIT compiled code. We know that compilation will always succeed. */ - -if (compiled_code != NULL && pat_patctl.jit != 0) - { - if (timeit > 0) - { - int i; - clock_t time_taken = 0; - - for (i = 0; i < timeit; i++) - { - clock_t start_time = clock(); - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - time_taken += clock() - start_time; - - pcre2_code_free(compiled_code); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - if (compiled_code == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected - pattern compilation not successful\n"); - return PR_ABEND; - } - - if (jitrc != 0) - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (!print_error_message(jitrc, " (", ")\n")) return PR_ABEND; - break; - } - } - total_jit_compile_time += time_taken; - if (jitrc == 0) - cfprintf(clr_profiling, outfile, "JIT compile %8.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit); - } - - mallocs_called = 0; - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - - /* For malloc testing, we repeat the compilation. */ - - if (malloc_testing) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - pcre2_code_free(compiled_code); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - if (compiled_code == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected - pattern compilation not successful\n"); - return PR_ABEND; - } - - mallocs_until_failure = i; - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - mallocs_until_failure = INT_MAX; - - if (i < target_mallocs && jitrc != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() JIT compile test did not fail as expected (%d)\n", - jitrc); - return PR_ABEND; - } - } - } - - /* Check whether JIT compilation failed; but continue with an error message - if not. */ - - if (jitrc != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0) - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (!print_error_message(jitrc, " (", ")\n")) return PR_ABEND; - } - } - -/* Compilation failed; go back for another re, skipping to blank line -if non-interactive. */ - -if (compiled_code == NULL) - { - int direction = error_direction(errorcode, erroroffset); - - cfprintf(clr_api_error, outfile, "Failed: error %d at offset %d: ", errorcode, - (int)erroroffset); - if (!print_error_message(errorcode, "", "\n")) return PR_ABEND; - - /* It's important that the erroroffset doesn't slice halfway through a UTF-8 - or UTF-16 character. We can verify this by checking that the input left of the - erroroffset is valid. Note that if the input is invalid (which is exercised in - some tests) then the offset will be positioned with the valid part to the left - of erroroffset. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 - if (utf) - { - uint32_t cc; - int n = 1; - for (PCRE2_UCHAR *q = pbuffer, *q_end = q + erroroffset; q < q_end && n > 0; q += n) - n = utf_to_ord(q, q_end, &cc); - if (n <= 0) - { - cfprintf(clr_test_error, outfile, "** Erroroffset %d splits a UTF character\n", (int)erroroffset); - return PR_ABEND; - } - } -#endif - - /* Print the surrounding context around the erroroffset. */ - - if (direction < 0) - { - cfprintf(clr_test_error, outfile, "** Error code %d not implemented in error_direction().\n", errorcode); - cfprintf(clr_test_error, outfile, " error_direction() should usually return '1' for newly-added errors,\n"); - cfprintf(clr_test_error, outfile, " and the offset should be just to the right of the bad character.\n"); - return PR_ABEND; - } - - else if (direction != 0) - { - cfprintf(clr_api_error, outfile, " here: "); - if (erroroffset > 0) - { - ptrunc(clr_input, pbuffer, full_patlen, erroroffset, TRUE, utf, outfile); - fprintf(outfile, " "); - } - cfprintf(clr_api_error, outfile, (direction == 1)? "|<--|" : (direction == 2)? "|-->|" : "|<-->|"); - if (erroroffset < full_patlen) - { - fprintf(outfile, " "); - ptrunc(clr_input, pbuffer, full_patlen, erroroffset, FALSE, utf, outfile); - } - fprintf(outfile, "\n"); - } - - else if (erroroffset != 0) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-zero erroroffset %d for error code %d\n", - (int)erroroffset, errorcode); - return PR_ABEND; - } - - return PR_SKIP; - } - -/* If forbid_utf is non-zero, we are running a non-UTF test. UTF and UCP are -locked out at compile time, but we must also check for occurrences of \P, \p, -and \X, which are only supported when Unicode is supported. */ - -if (forbid_utf != 0) - { - if ((compiled_code->flags & PCRE2_HASBKPORX) != 0) - { - cfprintf(clr_test_error, outfile, "** \\P, \\p, and \\X are not allowed after the " - "#forbid_utf command\n"); - return PR_SKIP; - } - } - -/* Remember the maximum lookbehind, for partial matching. */ - -if (pattern_info(PCRE2_INFO_MAXLOOKBEHIND, &maxlookbehind, FALSE) != 0) - return PR_ABEND; - -/* Remember the number of captures. */ - -if (pattern_info(PCRE2_INFO_CAPTURECOUNT, &maxcapcount, FALSE) < 0) - return PR_ABEND; - -/* If an explicit newline modifier was given, set the information flag in the -pattern so that it is preserved over push/pop. */ - -if ((pat_patctl.control2 & CTL2_NL_SET) != 0) - { - compiled_code->flags |= PCRE2_NL_SET; - } - -/* Output code size and other information if requested. */ - -rc = show_pattern_info(); -if (rc != PR_OK) return rc; - -/* The "push" control requests that the compiled pattern be remembered on a -stack. This is mainly for testing the serialization functionality. */ - -if ((pat_patctl.control & CTL_PUSH) != 0) - { - if (patstacknext >= PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Too many pushed patterns (max %d)\n", PATSTACKSIZE); - return PR_ABEND; - } - patstack[patstacknext++] = compiled_code; - compiled_code = NULL; - } - -/* The "pushcopy" and "pushtablescopy" controls are similar, but push a -copy of the pattern, the latter with a copy of its character tables. This tests -the pcre2_code_copy() and pcre2_code_copy_with_tables() functions. */ - -if ((pat_patctl.control & (CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0) - { - if (patstacknext >= PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Too many pushed patterns (max %d)\n", PATSTACKSIZE); - return PR_ABEND; - } - if ((pat_patctl.control & CTL_PUSHCOPY) != 0) - { - patstack[patstacknext++] = pcre2_code_copy(compiled_code); - } - else - { - patstack[patstacknext++] = pcre2_code_copy_with_tables(compiled_code); - } - } - -return PR_OK; -} - - - -/* Helper to test for an active pattern. */ - -static BOOL -have_active_pattern(void) -{ -return compiled_code != NULL; -} - - -/* Helper to free (and null-out) the active pattern. Safe to call even if there -is no active pattern. */ - -static void -free_active_pattern(void) -{ -pcre2_code_free(compiled_code); -compiled_code = NULL; -} - - - -/************************************************* -* Check heap, match or depth limit * -*************************************************/ - -/* This is used for DFA, normal, and JIT fast matching. For DFA matching it -should only be called with the third argument set to PCRE2_ERROR_DEPTHLIMIT. - -Arguments: - pp the subject string - ulen length of subject or PCRE2_ZERO_TERMINATED - errnumber defines which limit to test - msg string to include in final message - -Returns: the return from the final match function call -*/ - -static int -check_match_limit(PCRE2_SPTR pp, PCRE2_SIZE ulen, int errnumber, const char *msg) -{ -int capcount; -uint32_t min = 0; -uint32_t mid = 64; -uint32_t max = UINT32_MAX; -FILE *saved_outfile = outfile; - -pcre2_set_match_limit(dat_context, max); -pcre2_set_depth_limit(dat_context, max); -pcre2_set_heap_limit(dat_context, max); - -for (;;) - { - uint32_t stack_start = 0; - - /* If we are checking the heap limit, free any frames vector that is cached - in the match_data so we always start without one. */ - - if (errnumber == PCRE2_ERROR_HEAPLIMIT) - { - pcre2_set_heap_limit(dat_context, mid); - - match_data->memctl.free(match_data->heapframes, - match_data->memctl.memory_data); - match_data->heapframes = NULL; - match_data->heapframes_size = 0; - } - - /* No need to mess with the frames vector for match or depth limits. */ - - else if (errnumber == PCRE2_ERROR_MATCHLIMIT) - { - pcre2_set_match_limit(dat_context, mid); - } - else - { - pcre2_set_depth_limit(dat_context, mid); - } - - /* Do the appropriate match */ - - reset_callout_state(); - outfile = NULL; /* Suppress callout output during the repeated search */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - stack_start = DFA_START_RWS_SIZE/1024; - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, - dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - - else if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, dat_context); - - else - { - capcount = pcre2_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, dat_context); - } - - outfile = saved_outfile; - - if (capcount == errnumber) - { - if ((mid & 0x80000000u) != 0) - { - cfprintf(clr_test_error, outfile, "** Can't find minimum %s limit: check pattern for " - "restriction\n", msg); - break; - } - - min = mid; - mid = (mid == max - 1)? max : (max != UINT32_MAX)? (min + max)/2 : mid*2; - } - else if (capcount >= 0 || - capcount == PCRE2_ERROR_NOMATCH || - capcount == PCRE2_ERROR_PARTIAL) - { - /* If we've not hit the error with a heap limit less than the size of the - initial stack frame vector (for pcre2_match()) or the initial stack - workspace vector (for pcre2_dfa_match()), the heap is not being used, so - the minimum limit is zero; there's no need to go on. The other limits are - always greater than zero. */ - - if (errnumber == PCRE2_ERROR_HEAPLIMIT && mid < stack_start) - { - fprintf(outfile, "Minimum %s limit = 0\n", msg); - break; - } - if (mid == min + 1) - { - fprintf(outfile, "Minimum %s limit = %d\n", msg, mid); - break; - } - max = mid; - mid = (min + max)/2; - } - else break; /* Some other error */ - } - -return capcount; -} - - - -/************************************************* -* Substitute callout function * -*************************************************/ - -/* Called from pcre2_substitute() when the substitute_callout modifier is set. -Print out the data that is passed back. - -Arguments: - scb pointer to substitute callout block - data_ptr callout data - -Returns: nothing -*/ - -static int -substitute_callout_function(pcre2_substitute_callout_block *scb, - void *data_ptr) -{ -int yield = 0; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -(void)data_ptr; /* Not used */ - -if (outfile == NULL) goto YIELD; - -fprintf(outfile, "%2d(%d) Old %" SIZ_FORM " %" SIZ_FORM " \"", - scb->subscount, scb->oveccount, - scb->ovector[0], scb->ovector[1]); - -pchars(clr_none, scb->input + scb->ovector[0], scb->ovector[1] - scb->ovector[0], - utf, outfile); - -fprintf(outfile, "\" New %" SIZ_FORM " %" SIZ_FORM " \"", - scb->output_offsets[0], scb->output_offsets[1]); - -pchars(clr_none, scb->output + scb->output_offsets[0], - scb->output_offsets[1] - scb->output_offsets[0], utf, outfile); - -YIELD: - -if (scb->subscount == dat_datctl.substitute_stop) - { - yield = -1; - if (outfile != NULL) fprintf(outfile, " STOPPED"); - } -else if (scb->subscount == dat_datctl.substitute_skip) - { - yield = +1; - if (outfile != NULL) fprintf(outfile, " SKIPPED"); - } - -if (outfile != NULL) fprintf(outfile, "\"\n"); -return yield; -} - - - -/************************************************* -* Substitute case callout function * -*************************************************/ - -/* Called from pcre2_substitute() when the substitute_case_callout -modifier is set. The substitute callout block is not identical for all code unit -widths, so we have to duplicate the function for each supported width. - -Arguments: - input the input character - input_len the length of the input - output the output buffer - output_cap the output buffer capacity - to_case the case conversion type - data_ptr callout data (unused) - -Returns: the number of code units of the output -*/ - -static PCRE2_SIZE -substitute_case_callout_function( - PCRE2_SPTR input, PCRE2_SIZE input_len, - PCRE2_UCHAR *output, PCRE2_SIZE output_cap, - int to_case, void *data_ptr) -{ -PCRE2_UCHAR buf[16]; -PCRE2_SPTR input_copy; -PCRE2_SIZE written = 0; - -(void)data_ptr; /* Not used */ - -if (input_len > sizeof(buf)/sizeof(*buf)) - { - PCRE2_UCHAR *input_buf = malloc(CU2BYTES(input_len)); - if (input_buf == NULL) return ~(PCRE2_SIZE)0; - memcpy(input_buf, input, CU2BYTES(input_len)); - input_copy = input_buf; - } -else - { - memcpy(buf, input, CU2BYTES(input_len)); - input_copy = buf; - } - -for (PCRE2_SIZE i = 0; i < input_len; ) - { - int num_in = i + 1 < input_len ? 2 : 1; - uint32_t c1 = input_copy[i]; - uint32_t c2 = i + 1 < input_len ? input_copy[i + 1] : 0; - int num_read; - int num_write; - - if (!case_transform(to_case, num_in, &num_read, &num_write, &c1, &c2)) - { - written = ~(PCRE2_SIZE)0; - goto END; - } - - i += num_read; - if (to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST) - to_case = PCRE2_SUBSTITUTE_CASE_LOWER; - - if (written + num_write > output_cap) - { - written += num_write; - } - else - { - if (num_write > 0) output[written++] = c1; - if (num_write > 1) output[written++] = c2; - } - } - -END: -if (input_copy != buf) free((PCRE2_UCHAR *)input_copy); - -/* Let's be maximally cruel. The case callout is allowed to leave the output -buffer in any state at all if it overflows, so let's use random garbage. */ -if (written > output_cap) - memset(output, time(NULL) & 1 ? 0xcd : 0xdc, - CU2BYTES(output_cap)); - -return written; -} - - - -/************************************************* -* Callout function * -*************************************************/ - -/* Called from a PCRE2 library as a result of the (?C) item. We print out where -we are in the match (unless suppressed). Yield zero unless more callouts than -the fail count, or the callout data is not zero. The only differences in the -callout block for different code unit widths are that the pointers to the -subject, the most recent MARK, and a callout argument string point to strings -of the appropriate width. Casts can be used to deal with this. - -Arguments: - cb a pointer to a callout block - callout_data_ptr the provided callout data - -Returns: 0 or 1 or an error, as determined by settings -*/ - -static int -callout_function(pcre2_callout_block *cb, void *callout_data_ptr) -{ -FILE *f, *fdefault; -uint32_t i, pre_start, post_start, subject_length; -PCRE2_SIZE current_position; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -BOOL callout_capture = (dat_datctl.control & CTL_CALLOUT_CAPTURE) != 0; -BOOL callout_where = (dat_datctl.control2 & CTL2_CALLOUT_NO_WHERE) == 0; - -if (outfile == NULL) goto YIELD; - -/* The FILE f is used for echoing the subject string if it is non-NULL. This -happens only once in simple cases, but we want to repeat after any additional -output caused by CALLOUT_EXTRA. */ - -fdefault = (!first_callout && !callout_capture && cb->callout_string == NULL)? - NULL : outfile; - -if ((dat_datctl.control2 & CTL2_CALLOUT_EXTRA) != 0) - { - f = outfile; - switch (cb->callout_flags) - { - case PCRE2_CALLOUT_BACKTRACK: - fprintf(f, "Backtrack\n"); - break; - - case PCRE2_CALLOUT_STARTMATCH|PCRE2_CALLOUT_BACKTRACK: - fprintf(f, "Backtrack\nNo other matching paths\n"); - PCRE2_FALLTHROUGH /* Fall through */ - - case PCRE2_CALLOUT_STARTMATCH: - fprintf(f, "New match attempt\n"); - break; - - default: - f = fdefault; - break; - } - } -else f = fdefault; - -/* For a callout with a string argument, show the string first because there -isn't a tidy way to fit it in the rest of the data. */ - -if (cb->callout_string != NULL) - { - uint32_t delimiter = cb->callout_string[-1]; - fprintf(outfile, "Callout (%" SIZ_FORM "): %c", - cb->callout_string_offset, CHAR_OUTPUT(delimiter)); - pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile); - for (i = 0; callout_start_delims[i] != 0; i++) - if (delimiter == callout_start_delims[i]) - { - delimiter = callout_end_delims[i]; - break; - } - fprintf(outfile, "%c", CHAR_OUTPUT(delimiter)); - if (!callout_capture) fprintf(outfile, "\n"); - } - -/* Show captured strings if required */ - -if (callout_capture) - { - if (cb->callout_string == NULL) - fprintf(outfile, "Callout %d:", cb->callout_number); - fprintf(outfile, " last capture = %d\n", cb->capture_last); - for (i = 2; i < cb->capture_top * 2; i += 2) - { - fprintf(outfile, "%2d: ", i/2); - if (cb->offset_vector[i] == PCRE2_UNSET) - fprintf(outfile, ""); - else - { - pchars(clr_none, cb->subject + cb->offset_vector[i], - cb->offset_vector[i+1] - cb->offset_vector[i], utf, f); - } - fprintf(outfile, "\n"); - } - } - -/* Unless suppressed, re-print the subject in canonical form (with escapes for -non-printing characters), the first time, or if giving full details. On -subsequent calls in the same match, we use pchars() just to find the printed -lengths of the substrings. */ - -if (callout_where) - { - if (f != NULL) fprintf(f, "--->"); - - /* The subject before the match start. */ - - pre_start = pchars(clr_none, cb->subject, cb->start_match, utf, f); - - /* If a lookbehind is involved, the current position may be earlier than the - match start. If so, use the match start instead. */ - - current_position = (cb->current_position >= cb->start_match)? - cb->current_position : cb->start_match; - - /* The subject between the match start and the current position. */ - - post_start = pchars(clr_none, cb->subject + cb->start_match, - current_position - cb->start_match, utf, f); - - /* Print from the current position to the end. */ - - pchars(clr_none, cb->subject + current_position, cb->subject_length - current_position, - utf, f); - - /* Calculate the total subject printed length (no print). */ - - subject_length = pchars(clr_none, cb->subject, cb->subject_length, utf, NULL); - - if (f != NULL) fprintf(f, "\n"); - - /* For automatic callouts, show the pattern offset. Otherwise, for a - numerical callout whose number has not already been shown with captured - strings, show the number here. A callout with a string argument has been - displayed above. */ - - if (cb->callout_number == 255) - { - fprintf(outfile, "%+3d ", (int)cb->pattern_position); - if (cb->pattern_position > 99) fprintf(outfile, "\n "); - } - else - { - if (callout_capture || cb->callout_string != NULL) fprintf(outfile, " "); - else fprintf(outfile, "%3d ", cb->callout_number); - } - - /* Now show position indicators */ - - for (i = 0; i < pre_start; i++) fprintf(outfile, " "); - fprintf(outfile, "^"); - - if (post_start > 0) - { - for (i = 0; i < post_start - 1; i++) fprintf(outfile, " "); - fprintf(outfile, "^"); - } - - for (i = 0; i < subject_length - pre_start - post_start + 4; i++) - fprintf(outfile, " "); - - if (cb->next_item_length != 0) - { - pchars(clr_none, pbuffer + cb->pattern_position, cb->next_item_length, utf, outfile); - } - else - fprintf(outfile, "End of pattern"); - - fprintf(outfile, "\n"); - } - -/* Show any mark info */ - -if (cb->mark != last_callout_mark) - { - if (cb->mark == NULL) - fprintf(outfile, "Latest Mark: \n"); - else - { - fprintf(outfile, "Latest Mark: "); - pchars(clr_none, cb->mark - 1, -1, utf, outfile); - putc('\n', outfile); - } - } - -YIELD: - -/* Keep count */ - -first_callout = FALSE; -last_callout_mark = cb->mark; -callout_count++; - -/* Show callout data if that determines the return code */ - -if (callout_data_ptr != NULL) - { - int callout_data = *((int32_t *)callout_data_ptr); - if (callout_data != 0) - { - if (outfile != NULL) fprintf(outfile, "Callout data = %d\n", callout_data); - return callout_data; - } - } - -/* Otherwise, the callout_error and callout_fail settings provide the return -code. */ - -if (cb->callout_number == dat_datctl.cerror[0] && - callout_count >= dat_datctl.cerror[1]) - return PCRE2_ERROR_CALLOUT; - -if (cb->callout_number == dat_datctl.cfail[0] && - callout_count >= dat_datctl.cfail[1]) - return 1; - -return 0; -} - - - -/************************************************* -* Handle *MARK and copy/get tests * -*************************************************/ - -/* This function is called after complete and partial matches. It runs the -tests for substring extraction. - -Arguments: - utf TRUE for utf - capcount return from pcre2_match() - -Returns: FALSE if print_error_message() fails -*/ - -static BOOL -copy_and_get(BOOL utf, int capcount) -{ -int i; -uint8_t *nptr; - -/* Test copy strings by number */ - -for (i = 0; i < MAXCPYGET && dat_datctl.copy_numbers[i] >= 0; i++) - { - int rc, rc2; - PCRE2_SIZE length, length2; - PCRE2_UCHAR copybuffer[256]; - uint32_t n = (uint32_t)(dat_datctl.copy_numbers[i]); - length = sizeof(copybuffer)/sizeof(*copybuffer); - rc = pcre2_substring_copy_bynumber(match_data, n, copybuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Copy substring %d failed (%d): ", n, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, "%2dC ", n); - pchars(clr_none, copybuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ")\n", length); - } - rc2 = pcre2_substring_length_bynumber(match_data, n, &length2); - if (rc2 < 0) - { - cfprintf(clr_api_error, outfile, "Get substring %d length failed (%d): ", n, rc2); - if (!print_error_message(rc2, "", "\n")) return FALSE; - } - else if (rc >= 0 && length2 != length) - { - cfprintf(clr_test_error, outfile, "** Mismatched substring lengths: %" - SIZ_FORM " %" SIZ_FORM "\n", length, length2); - } - } - -/* Test copy strings by name */ - -nptr = dat_datctl.copy_names; -for (;;) - { - int rc, rc2; - int groupnumber; - PCRE2_SIZE length, length2; - PCRE2_UCHAR copybuffer[256]; - size_t namelen = strlen((const char *)nptr); -#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SIZE cnl = namelen; -#endif - if (namelen == 0) break; - -#if PCRE2_CODE_UNIT_WIDTH == 8 - strcpy((char *)pbuffer8, (char *)nptr); -#endif -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, namelen); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - (void)to16(nptr, utf, &cnl); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - (void)to32(nptr, utf, &cnl); -#endif - - groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer); - if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING) - cfprintf(clr_api_error, outfile, "Number not found for group \"%s\"\n", nptr); - - length = sizeof(copybuffer)/sizeof(*copybuffer); - rc = pcre2_substring_copy_byname(match_data, pbuffer, copybuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Copy substring \"%s\" failed (%d): ", nptr, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, " C "); - pchars(clr_none, copybuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr); - if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber); - else fprintf(outfile, " (non-unique)\n"); - } - rc2 = pcre2_substring_length_byname(match_data, pbuffer, &length2); - if (rc2 < 0) - { - cfprintf(clr_api_error, outfile, "Get substring \"%s\" length failed (%d): ", nptr, rc2); - if (!print_error_message(rc2, "", "\n")) return FALSE; - } - else if (rc >= 0 && length2 != length) - { - cfprintf(clr_test_error, outfile, "** Mismatched substring lengths: %" - SIZ_FORM " %" SIZ_FORM "\n", length, length2); - } - nptr += namelen + 1; - } - -/* Test get strings by number */ - -for (i = 0; i < MAXCPYGET && dat_datctl.get_numbers[i] >= 0; i++) - { - int rc; - PCRE2_SIZE length; - PCRE2_UCHAR *gotbuffer; - uint32_t n = (uint32_t)(dat_datctl.get_numbers[i]); - rc = pcre2_substring_get_bynumber(match_data, n, &gotbuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Get substring %d failed (%d): ", n, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, "%2dG ", n); - pchars(clr_none, gotbuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ")\n", length); - pcre2_substring_free(gotbuffer); - } - } - -/* Test get strings by name */ - -nptr = dat_datctl.get_names; -for (;;) - { - PCRE2_SIZE length; - PCRE2_UCHAR *gotbuffer; - int rc; - int groupnumber; - size_t namelen = strlen((const char *)nptr); -#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SIZE cnl = namelen; -#endif - if (namelen == 0) break; - -#if PCRE2_CODE_UNIT_WIDTH == 8 - strcpy((char *)pbuffer8, (char *)nptr); -#endif -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, namelen); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - (void)to16(nptr, utf, &cnl); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - (void)to32(nptr, utf, &cnl); -#endif - - groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer); - if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING) - cfprintf(clr_api_error, outfile, "Number not found for group \"%s\"\n", nptr); - - rc = pcre2_substring_get_byname(match_data, pbuffer, &gotbuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Get substring \"%s\" failed (%d): ", nptr, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, " G "); - pchars(clr_none, gotbuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr); - if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber); - else fprintf(outfile, " (non-unique)\n"); - pcre2_substring_free(gotbuffer); - } - nptr += namelen + 1; - } - -/* Test getting the complete list of captured strings. */ - -if ((dat_datctl.control & CTL_GETALL) != 0) - { - int rc; - PCRE2_UCHAR **stringlist; - PCRE2_SIZE *lengths; - rc = pcre2_substring_list_get(match_data, &stringlist, &lengths); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "get substring list failed (%d): ", rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - for (i = 0; i < capcount; i++) - { - fprintf(outfile, "%2dL ", i); - pchars(clr_none, stringlist[i], lengths[i], utf, outfile); - putc('\n', outfile); - } - if (stringlist[i] != NULL) - cfprintf(clr_test_error, outfile, "** string list not terminated by NULL\n"); - pcre2_substring_list_free(stringlist); - } - } - -return TRUE; -} - - - -/************************************************* -* Copy a substitution string * -*************************************************/ - -/* Copy one of the string arguments to pcre2_substitute() from its uint8_t -test input to the appropriate width buffer. -*/ - -static void -copy_substitute_string(BOOL utf, uint8_t *input, PCRE2_SIZE inlen, - PCRE2_UCHAR *output, PCRE2_SIZE *outlen) -{ -uint32_t c; -uint8_t *input_end = input + inlen; -PCRE2_UCHAR *output_start = output; -PCRE2_SIZE erroroffset; -BOOL badutf = FALSE; - -/* When copying the replacement string to a buffer of the appropriate width, no -escape processing is done. - -In UTF mode, check for an invalid UTF-8 input string, and if it is invalid, just -copy its code units without UTF interpretation. This provides a means of -checking that an invalid string is detected. Otherwise, UTF-8 can be used to -include wide characters in a replacement. */ - -if (utf) badutf = valid_utf(input, inlen, &erroroffset); - -/* Not UTF or invalid UTF-8: just copy the code units. */ - -if (!utf || badutf) - { - while (input < input_end) - { - c = *input++; -#if defined(EBCDIC) && !EBCDIC_IO - c = ascii_to_ebcdic(c); -#endif - *output++ = c; - } - } - -/* Valid UTF-8 replacement string */ - -else while (input < input_end) - { - c = *input++; - if (HASUTF8EXTRALEN(c)) { GETUTF8INC(c, input); } - -#if PCRE2_CODE_UNIT_WIDTH == 8 - output += ord_to_utf8(c, output); - -#elif PCRE2_CODE_UNIT_WIDTH == 16 - if (c >= 0x10000u) - { - c-= 0x10000u; - *output++ = 0xd800 | (c >> 10); - *output++ = 0xdc00 | (c & 0x3ff); - } - else *output++ = c; - -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *output++ = c; -#endif - } - -*output = 0; -*outlen = output - output_start; -} - - - -/************************************************* -* Process a data line * -*************************************************/ - -/* The line is in buffer; it will not be empty. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_data(void) -{ -PCRE2_SIZE ulen, arg_ulen; -uint32_t gmatched; -uint32_t c, k; -uint32_t g_notempty = 0; -uint8_t *p; /* Position within buffer (raw input line) */ -size_t len; -size_t needlen; /* Bytes, for sizing dbuffer */ -pcre2_match_context *use_dat_context; -BOOL utf; -BOOL subject_literal; - -PCRE2_SIZE *ovector; -PCRE2_SPTR ovecsave[2] = { NULL, NULL }; -uint32_t oveccount; - -PCRE2_UCHAR *q = NULL; /* Typed pointer within dbuffer */ -PCRE2_UCHAR *start_rep; /* Position within dbuffer; stashed value of q */ -PCRE2_UCHAR *pp; /* Subject pointer within dbuffer */ - -subject_literal = (pat_patctl.control2 & CTL2_SUBJECT_LITERAL) != 0; - -/* Copy the default context and data control blocks to the active ones. Then -copy from the pattern the controls that can be set in either the pattern or the -data. This allows them to be overridden in the data line. We do not do this for -options because those that are common apply separately to compiling and -matching. */ - -memcpy(dat_context, default_dat_context, sizeof(pcre2_match_context)); -memcpy(&dat_datctl, &def_datctl, sizeof(datctl)); -dat_datctl.control |= (pat_patctl.control & CTL_ALLPD); -dat_datctl.control2 |= (pat_patctl.control2 & CTL2_ALLPD); -dat_datctl.replacement[0] = pat_patctl.replacement[0]; -if (pat_patctl.replacement[0] != MOD_STR_UNSET) - memcpy(dat_datctl.replacement + 1, pat_patctl.replacement + 1, - pat_patctl.replacement[0] + 1); -if (dat_datctl.jitstack == 0) dat_datctl.jitstack = pat_patctl.jitstack; - -if (dat_datctl.substitute_skip == 0) - dat_datctl.substitute_skip = pat_patctl.substitute_skip; -if (dat_datctl.substitute_stop == 0) - dat_datctl.substitute_stop = pat_patctl.substitute_stop; - -/* Initialize for scanning the data line. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -utf = ((((pat_patctl.control & CTL_POSIX) != 0)? - ((pcre2_real_code *)preg.re_pcre2_code)->overall_options : - compiled_code->overall_options) & PCRE2_UTF) != 0; -#else -utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -#endif - -start_rep = NULL; -len = strlen((const char *)buffer); -while (len > 0 && isspace(buffer[len-1])) len--; -buffer[len] = 0; -p = buffer; -while (isspace(*p)) - { - p++; - len--; - } - -/* Check that the data is well-formed UTF-8 if we're in UTF mode. To create -invalid input to pcre2_match(), you must use \x?? or \x{} sequences. */ - -if (utf) - { - uint8_t *ptmp; - uint32_t cc; - int n = 1; - uint8_t *ptmp_end = p + len; - - for (ptmp = p; n > 0 && *ptmp; ptmp += n) - n = utf8_to_ord(ptmp, ptmp_end, &cc); - if (n <= 0) - { - cfprintf(clr_test_error, outfile, "** Failed: invalid UTF-8 string cannot be used as input " - "in UTF mode\n"); - return PR_OK; - } - } - -#ifdef SUPPORT_VALGRIND -/* Mark the dbuffer as addressable but undefined again. */ -if (dbuffer != NULL) - { - VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, dbuffer_size); - } -#endif - -/* Allocate a buffer to hold the data line; len+1 is an upper bound on -the number of code units that will be needed (though the buffer may have to be -extended if replication is involved). */ - -needlen = CU2BYTES(len+1); -if (dbuffer == NULL || needlen >= dbuffer_size) - { - while (needlen >= dbuffer_size) - { - if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2; - else dbuffer_size = needlen + 1; - } - dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size); - if (dbuffer == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: realloc(%" SIZ_FORM ") failed\n", dbuffer_size); - exit(1); - } - } -q = (PCRE2_UCHAR *)dbuffer; - -/* Scan the data line, interpreting data escapes, and put the result into a -buffer of the appropriate width. In UTF mode, input is always UTF-8; otherwise, -in 16- and 32-bit modes, it can be forced to UTF-8 by the utf8_input modifier. -*/ - -while ((c = *p++) != 0) - { - int i = 0; - size_t replen; /* Bytes, for sizing dbuffer */ - enum force_encoding encoding = FORCE_NONE; - - /* ] may mark the end of a replicated sequence */ - - if (c == ']' && start_rep != NULL) - { - long li; - char *endptr; - - if (*p++ != '{') - { - cfprintf(clr_test_error, outfile, "** Expected '{' after \\[....]\n"); - return PR_OK; - } - - li = strtol((const char *)p, &endptr, 10); - if (S32OVERFLOW(li)) - { - cfprintf(clr_test_error, outfile, "** Repeat count too large\n"); - return PR_OK; - } - i = (int)li; - - p = (uint8_t *)endptr; - if (*p++ != '}') - { - cfprintf(clr_test_error, outfile, "** Expected '}' after \\[...]{...\n"); - return PR_OK; - } - - if (i-- <= 0) - { - cfprintf(clr_test_error, outfile, "** Zero or negative repeat not allowed\n"); - return PR_OK; - } - - replen = (uint8_t *)q - (uint8_t *)start_rep; - if (i > 0 && replen > (SIZE_MAX - needlen) / i) - { - cfprintf(clr_test_error, outfile, "** Expanded content too large\n"); - return PR_OK; - } - needlen += replen * i; - - if (needlen >= dbuffer_size) - { - size_t qoffset = (uint8_t *)q - dbuffer; - size_t rep_offset = (uint8_t *)start_rep - dbuffer; - while (needlen >= dbuffer_size) - { - if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2; - else dbuffer_size = needlen + 1; - } - dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size); - if (dbuffer == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: realloc(%" SIZ_FORM ") failed\n", - dbuffer_size); - exit(1); - } - q = (PCRE2_UCHAR *)(dbuffer + qoffset); - start_rep = (PCRE2_UCHAR *)(dbuffer + rep_offset); - } - - while (i-- > 0) - { - memcpy(q, start_rep, replen); - q += BYTES2CU(replen); - } - - start_rep = NULL; - continue; - } - - /* Handle a non-escaped character. In non-UTF 32-bit mode with utf8_input - set, do the fudge for setting the top bit. */ - - if (c != '\\' || subject_literal) - { - uint32_t topbit = 0; -#if PCRE2_CODE_UNIT_WIDTH == 32 - if (c == 0xff && *p != 0) - { - topbit = 0x80000000; - c = *p++; - } -#endif - if ((utf || (pat_patctl.control & CTL_UTF8_INPUT) != 0) && - HASUTF8EXTRALEN(c)) - { - GETUTF8INC(c, p); - } - c |= topbit; - } - - /* Handle backslash escapes */ - - else switch ((c = *p++)) - { - case '\\': break; - case 'a': c = '\a'; break; - case 'b': c = '\b'; break; -#if defined(EBCDIC) && !EBCDIC_IO - /* \e is the odd one out since it's not defined in the C standard, - precisely because of EBCDIC (apparently EBCDIC 'ESC' character isn't - an exact match to Latin-1 'ESC', hence '\e' isn't necessarily - supported by EBCDIC compilers). */ - case 'e': c = '\x1b'; break; -#else - case 'e': c = CHAR_ESC; break; -#endif - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - c -= '0'; - while (i++ < 2 && *p >= '0' && *p < '8') - c = c * 8 + (*p++ - '0'); - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - - encoding = (utf && c > 255)? FORCE_UTF : FORCE_RAW; - break; - - case 'o': - if (*p == '{') - { - uint8_t *pt = p; - c = 0; - for (pt++; isdigit(*pt) && *pt < '8'; ++i, pt++) - { - if (c >= 0x20000000u) - { - cfprintf(clr_test_error, outfile, "** \\o{ escape too large\n"); - return PR_OK; - } - else c = c * 8 + (*pt - '0'); - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - if (i == 0 || *pt != '}') - { - cfprintf(clr_test_error, outfile, "** Malformed \\o{ escape\n"); - return PR_OK; - } - else p = pt + 1; - } - break; - - case 'x': - c = 0; - if (*p == '{') - { - uint8_t *pt = p; - - /* We used to have "while (isxdigit(*(++pt)))" here, but it fails - when isxdigit() is a macro that refers to its argument more than - once. This is banned by the C Standard, but apparently happens in at - least one macOS environment. */ - - for (pt++; isxdigit(*pt); pt++) - { - if (++i == 9) - { - cfprintf(clr_test_error, outfile, "** Too many hex digits in \\x{...} item; " - "using only the first eight.\n"); - while (isxdigit(*pt)) pt++; - break; - } - else c = c * 16 + (tolower(*pt) - (isdigit(*pt)? '0' : 'a' - 10)); - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - if (i == 0 || *pt != '}') - { - cfprintf(clr_test_error, outfile, "** Malformed \\x{ escape\n"); - return PR_OK; - } - else p = pt + 1; - } - else - { - /* \x without {} always defines just one byte in 8-bit mode. This - allows UTF-8 characters to be constructed byte by byte, and also allows - invalid UTF-8 sequences to be made. Just copy the byte in UTF-8 mode. - Otherwise, pass it down as data. */ - - while (i++ < 2 && isxdigit(*p)) - { - c = c * 16 + (tolower(*p) - (isdigit(*p)? '0' : 'a' - 10)); - p++; - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); -#if PCRE2_CODE_UNIT_WIDTH == 8 - if (utf) encoding = FORCE_RAW; -#endif - } - break; - - case 'N': -#ifndef EBCDIC - if (memcmp(p, "{U+", 3) == 0 && isxdigit(p[3])) - { - char *endptr; - unsigned long uli; - - p += 3; - errno = 0; - uli = strtoul((const char *)p, &endptr, 16); - if (errno == 0 && *endptr == '}' && uli <= UINT32_MAX) - { - c = (uint32_t)uli; - p = (uint8_t *)endptr + 1; - encoding = FORCE_UTF; - break; - } - } -#endif - cfprintf(clr_test_error, outfile, "** Malformed \\N{U+ escape\n"); - return PR_OK; - - case 0: /* \ followed by EOF allows for an empty line */ - p--; - continue; - - case '=': /* \= terminates the data, starts modifiers */ - goto ENDSTRING; - - case '[': /* \[ introduces a replicated character sequence */ - if (start_rep != NULL) - { - cfprintf(clr_test_error, outfile, "** Nested replication is not supported\n"); - return PR_OK; - } - start_rep = q; - continue; - - default: - if (isalnum(c)) - { - cfprintf(clr_test_error, outfile, "** Unrecognized escape sequence \"\\%c\"\n", c); - return PR_OK; - } - } - - /* We now have a character value in c that may be greater than 255. - Depending of how we got it, the encoding enum could be set to tell - us how to encode it, otherwise follow the utf modifier. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 - if (encoding == FORCE_RAW || !(utf || encoding == FORCE_UTF)) - { - if (c > 0xffu) - { - cfprintf(clr_test_error, outfile, "** Character \\x{%x} is greater than 255 " - "and UTF-8 mode is not enabled.\n", c); - cfprintf(clr_test_error, outfile, "** Truncation will probably give the wrong " - "result.\n"); - } - *q++ = (uint8_t)c; - } - else - { - if (c > 0x7fffffff) - { - cfprintf(clr_test_error, outfile, "** Character \\N{U+%x} is greater than 0x7fffffff " - "and therefore cannot be encoded as UTF-8\n", c); - return PR_OK; - } - else if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is greater than " - "0x%x and should not be encoded as UTF-8\n", - c, MAX_UTF_CODE_POINT); - q += ord_to_utf8(c, q); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - /* Unlike the 8-bit code, there are no forced raw suggestions for the - 16-bit mode, so assume raw unless utf is preferred */ - - if (!(encoding == FORCE_UTF || utf)) - { - if (c > 0xffffu) - { - cfprintf(clr_test_error, outfile, "** Character \\x{%x} is greater than 0xffff " - "and UTF-16 mode is not enabled.\n", c); - cfprintf(clr_test_error, outfile, "** Truncation will probably give the wrong " - "result.\n"); - } - *q++ = (uint16_t)c; - } - else - { - if (c > MAX_UTF_CODE_POINT) - { - cfprintf(clr_test_error, outfile, "** Failed: character \\N{U+%x} is greater than " - "0x%x and therefore cannot be encoded as UTF-16\n", - c, MAX_UTF_CODE_POINT); - return PR_OK; - } - else if (c >= 0x10000u) - { - c -= 0x10000u; - *q++ = 0xd800 | (c >> 10); - *q++ = 0xdc00 | (c & 0x3ff); - } - else - { - if (encoding == FORCE_UTF && 0xe000u > c && c >= 0xd800u) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is a surrogate " - "and should not be encoded as UTF-16\n", c); - *q++ = c; - } - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is greater than " - "0x%x and should not be encoded as UTF-32\n", - c, MAX_UTF_CODE_POINT); - *q++ = c; -#endif - } - -ENDSTRING: -*q = 0; -len = (uint8_t *)q - dbuffer; /* Length in bytes */ -ulen = BYTES2CU(len); /* Length in code units */ -arg_ulen = ulen; /* Value to use in match arg */ - -/* If the string was terminated by \= we must now interpret modifiers. */ - -if (p[-1] != 0 && !decode_modifiers(p, CTX_DAT, NULL, &dat_datctl)) - return PR_OK; - -/* Setting substitute_{skip,fail} implies a substitute callout. */ - -if (dat_datctl.substitute_skip != 0 || dat_datctl.substitute_stop != 0) - dat_datctl.control2 |= CTL2_SUBSTITUTE_CALLOUT; - -/* Check for mutually exclusive modifiers. At present, these are all in the -first control word. */ - -for (k = 0; k < sizeof(exclusive_dat_controls)/sizeof(uint32_t); k++) - { - c = dat_datctl.control & exclusive_dat_controls[k]; - if (c != 0 && c != (c & (~c+1))) - { - show_controls(clr_test_error, c, 0, "** Not allowed together:"); - fprintf(outfile, "\n"); - return PR_OK; - } - } - -if (dat_datctl.replacement[0] != MOD_STR_UNSET) - { - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0 && - (dat_datctl.control & CTL_NULLCONTEXT) != 0) - { - cfprintf(clr_test_error, outfile, "** Replacement callouts are not supported with null_context.\n"); - return PR_OK; - } - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0 && - (dat_datctl.control & CTL_NULLCONTEXT) != 0) - { - cfprintf(clr_test_error, outfile, "** Replacement case callouts are not supported with null_context.\n"); - return PR_OK; - } - - if ((dat_datctl.control & CTL_ALLCAPTURES) != 0) - cfprintf(clr_test_error, outfile, "** Ignored with replacement text: allcaptures\n"); - - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET && - (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0) - { - cfprintf(clr_test_error, outfile, "** substitute_subject requires substitute_matched.\n"); - return PR_OK; - } - } - -else - { - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET) - { - cfprintf(clr_test_error, outfile, "** substitute_subject requires replacement text.\n"); - return PR_OK; - } - } - -/* Warn for modifiers that are ignored for DFA. */ - -if ((dat_datctl.control & CTL_DFA) != 0) - { - if ((dat_datctl.control & CTL_ALLCAPTURES) != 0) - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: allcaptures\n"); - if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0) - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: heapframes_size\n"); - } - -/* We now have the subject in dbuffer, with len containing the byte length, and -ulen containing the code unit length, with a copy in arg_ulen for use in match -function arguments (this gets changed to PCRE2_ZERO_TERMINATED when the -zero_terminate modifier is present). - -Move the data to the end of the buffer so that a read over the end can be -caught by valgrind or other means. If we have explicit valgrind support, mark -the unused start of the buffer unaddressable. If we are using the POSIX -interface, or testing zero-termination, we must include the terminating zero in -the usable data. */ - -c = ((pat_patctl.control & CTL_POSIX) != 0 || - (dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? CU2BYTES(1) : 0; -pp = memmove(dbuffer + dbuffer_size - (len + c), dbuffer, len + c); -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_NOACCESS(dbuffer, dbuffer_size - (len + c)); -#endif - -#if defined(EBCDIC) && !EBCDIC_IO -ascii_to_ebcdic_str(pp, len); -#endif - -/* Now pp points to the subject string, but if null_subject was specified, set -it to NULL to test PCRE2's behaviour. */ - -if ((dat_datctl.control2 & CTL2_NULL_SUBJECT) != 0) pp = NULL; - -/* POSIX matching is only possible in 8-bit mode, and it does not support -timing or other fancy features. Some were checked at compile time, but we need -to check the match-time settings here. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -if ((pat_patctl.control & CTL_POSIX) != 0) - { - int rc; - int eflags = 0; - regmatch_t *pmatch = NULL; - regmatch_t startend_buf; - const char *msg = "** Ignored with POSIX interface:"; - - if (dat_datctl.cerror[0] != CFORE_UNSET || dat_datctl.cerror[1] != CFORE_UNSET) - prmsg(&msg, "callout_error"); - if (dat_datctl.cfail[0] != CFORE_UNSET || dat_datctl.cfail[1] != CFORE_UNSET) - prmsg(&msg, "callout_fail"); - if (dat_datctl.copy_numbers[0] >= 0 || dat_datctl.copy_names[0] != 0) - prmsg(&msg, "copy"); - if (dat_datctl.get_numbers[0] >= 0 || dat_datctl.get_names[0] != 0) - prmsg(&msg, "get"); - if (dat_datctl.jitstack != 0) prmsg(&msg, "jitstack"); - if (dat_datctl.offset != 0) prmsg(&msg, "offset"); - - if ((dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS) != 0) - { - cfprintf(clr_test_error, outfile, "%s", msg); - show_match_options(clr_test_error, dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS); - msg = ""; - } - - if ((dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS) != 0 || - (dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2) != 0) - { - show_controls(clr_test_error, dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS, - dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2, msg); - msg = ""; - } - - if (msg[0] == 0) fprintf(outfile, "\n"); - - if (dat_datctl.oveccount > 0) - { - pmatch = (regmatch_t *)malloc(sizeof(regmatch_t) * dat_datctl.oveccount); - if (pmatch == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory for recording matching " - "information (size set = %du)\n", dat_datctl.oveccount); - return PR_ABEND; - } - } - - if (dat_datctl.startend[0] != CFORE_UNSET) - { - if (pmatch == NULL) pmatch = &startend_buf; - pmatch[0].rm_so = (regoff_t)dat_datctl.startend[0]; - pmatch[0].rm_eo = (dat_datctl.startend[1] != 0)? - (regoff_t)dat_datctl.startend[1] : (regoff_t)len; - eflags |= REG_STARTEND; - } - - if ((dat_datctl.options & PCRE2_NOTBOL) != 0) eflags |= REG_NOTBOL; - if ((dat_datctl.options & PCRE2_NOTEOL) != 0) eflags |= REG_NOTEOL; - if ((dat_datctl.options & PCRE2_NOTEMPTY) != 0) eflags |= REG_NOTEMPTY; - - rc = regexec(&preg, (const char *)pp, dat_datctl.oveccount, pmatch, eflags); - if (rc != 0) - { - size_t usize = regerror(rc, &preg, (char *)pbuffer8, pbuffer8_size); - cfprintf(clr_api_error, outfile, "No match: POSIX code %d: ", rc); - pchars(clr_api_error, (PCRE2_SPTR8)pbuffer8, usize - 1, utf, outfile); - fputs("\n", outfile); - } - else if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0) - fprintf(outfile, "Matched with REG_NOSUB\n"); - else if (dat_datctl.oveccount == 0) - fprintf(outfile, "Matched without capture\n"); - else - { - size_t i, j; - size_t last_printed = (size_t)dat_datctl.oveccount; - for (i = 0; i < (size_t)dat_datctl.oveccount; i++) - { - if (pmatch[i].rm_so >= 0) - { - PCRE2_SIZE start = pmatch[i].rm_so; - PCRE2_SIZE end = pmatch[i].rm_eo; - for (j = last_printed + 1; j < i; j++) - fprintf(outfile, "%2d: \n", (int)j); - last_printed = i; - if (start > end) - { - start = pmatch[i].rm_eo; - end = pmatch[i].rm_so; - cfprintf(clr_api_error, outfile, "Start of matched string is beyond its end - " - "displaying from end to start.\n"); - } - fprintf(outfile, "%2d: ", (int)i); - pchars(clr_none, pp + start, end - start, utf, outfile); - fprintf(outfile, "\n"); - - if ((i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0) || - (dat_datctl.control & CTL_ALLAFTERTEXT) != 0) - { - fprintf(outfile, "%2d+ ", (int)i); - /* Note: don't use the start/end variables here because we want to - show the text from what is reported as the end. */ - pchars(clr_none, pp + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf, outfile); - fprintf(outfile, "\n"); - } - } - } - } - if (pmatch != &startend_buf) free(pmatch); - return PR_OK; - } -#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */ - - /* Handle matching via the native interface. Check for consistency of -modifiers. */ - -if (dat_datctl.startend[0] != CFORE_UNSET) - cfprintf(clr_test_error, outfile, "** \\=posix_startend ignored for non-POSIX matching\n"); - -/* ALLUSEDTEXT is not supported with JIT, but JIT is not used with DFA -matching, even if the JIT compiler was used. */ - -if ((dat_datctl.control & (CTL_ALLUSEDTEXT|CTL_DFA)) == CTL_ALLUSEDTEXT && - compiled_code->executable_jit != NULL) - { - cfprintf(clr_test_error, outfile, "** Showing all consulted text is not supported by JIT: ignored\n"); - dat_datctl.control &= ~CTL_ALLUSEDTEXT; - } - -/* Handle passing the subject as zero-terminated. */ - -if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - arg_ulen = PCRE2_ZERO_TERMINATED; - -/* The nullcontext modifier is used to test calling pcre2_[jit_]match() with a -NULL context. */ - -use_dat_context = ((dat_datctl.control & CTL_NULLCONTEXT) != 0)? - NULL : dat_context; - -/* Enable display of malloc/free if wanted. We can do this only if either the -pattern or the subject is processed with a context. */ - -show_memory = (dat_datctl.control & CTL_MEMORY) != 0; - -if (show_memory && - (pat_patctl.control & dat_datctl.control & CTL_NULLCONTEXT) != 0) - cfprintf(clr_test_error, outfile, "** \\=memory requires either a pattern or a subject " - "context: ignored\n"); - -/* Create and assign a JIT stack if requested. */ - -if (dat_datctl.jitstack != 0) - { - if (dat_datctl.jitstack != jit_stack_size) - { - pcre2_jit_stack_free(jit_stack); - jit_stack = pcre2_jit_stack_create(1, dat_datctl.jitstack * 1024, NULL); - jit_stack_size = dat_datctl.jitstack; - } - pcre2_jit_stack_assign(dat_context, jit_callback, jit_stack); - } - -/* Or de-assign */ - -else if (jit_stack != NULL) - { - pcre2_jit_stack_assign(dat_context, NULL, NULL); - pcre2_jit_stack_free(jit_stack); - jit_stack = NULL; - jit_stack_size = 0; - } - -/* When no JIT stack is assigned, we must ensure that there is a JIT callback -if we want to verify that JIT was actually used. */ - -if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_stack == NULL) - { - pcre2_jit_stack_assign(dat_context, jit_callback, NULL); - } - -/* Set up the match callout. The pattern remains in pbuffer8/16/32 after -compilation, for use by the callout. */ - -if ((dat_datctl.control & CTL_CALLOUT_NONE) == 0) - { - pcre2_set_callout(dat_context, callout_function, - (void *)(&dat_datctl.callout_data)); - } -else - { - pcre2_set_callout(dat_context, NULL, NULL); /* No callout */ - } - -/* Adjust match_data according to size of offsets required. A size of zero -causes a new match data block to be obtained that exactly fits the pattern. */ - -if (dat_datctl.oveccount == 0) - { - pcre2_match_data_free(match_data); - match_data = pcre2_match_data_create_from_pattern(compiled_code, - general_context); - max_oveccount = pcre2_get_ovector_count(match_data); - } -else if (dat_datctl.oveccount <= max_oveccount) - { - match_data->oveccount = dat_datctl.oveccount; - } -else - { - max_oveccount = dat_datctl.oveccount; - pcre2_match_data_free(match_data); - match_data = pcre2_match_data_create(max_oveccount, general_context); - } - -if (match_data == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory for recording matching " - "information (size requested: %d)\n", dat_datctl.oveccount); - max_oveccount = 0; - return PR_ABEND; - } - -ovector = match_data->ovector; -oveccount = pcre2_get_ovector_count(match_data); - -/* Helper to clear any cached heap frames from the match_data. */ - -#define CLEAR_HEAP_FRAMES() \ - do { \ - void *heapframes = (void *)(match_data->heapframes); \ - void *memory_data = match_data->memctl.memory_data; \ - match_data->memctl.free(heapframes, memory_data); \ - match_data->heapframes = NULL; \ - match_data->heapframes_size = 0; \ - } \ - while (0) - -/* Replacement processing is ignored for DFA matching. Allow this for -replacements with PCRE2_SUBSTITUTE_MATCHED, even though it won't work, in order -to exercise the error condition. */ - -if (dat_datctl.replacement[0] != MOD_STR_UNSET && - (dat_datctl.control & CTL_DFA) != 0 && - (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0) - { - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: replace\n"); - dat_datctl.replacement[0] = MOD_STR_UNSET; - } - -/* If a replacement string is provided, call pcre2_substitute() instead of or -after one of the matching functions. First we have to convert the replacement -string to the appropriate width. */ - -if (dat_datctl.replacement[0] != MOD_STR_UNSET) - { - int rc; - uint8_t *pr, *prend; - PCRE2_UCHAR sbuffer[SUBSTITUTE_SUBJECT_MODSIZE]; /* Staging, not seen by pcre2_substitute() */ - PCRE2_UCHAR *rbptr; - PCRE2_UCHAR *sbptr; - uint32_t xoptions; - uint32_t emoption; /* External match option */ - PCRE2_SIZE j, rlen, full_rlen, nsize, nsize_input, slen; - pcre2_match_data *smatch_data; - - /* Fill the ovector with junk to detect elements that do not get set - when they should be (relevant only when "allvector" is specified). */ - - for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET; - - if (timeitm) - cfprintf(clr_test_error, outfile, "** Timing is not supported with replace: ignored\n"); - - if ((dat_datctl.control & CTL_ALTGLOBAL) != 0) - cfprintf(clr_test_error, outfile, "** Altglobal is not supported with replace: ignored\n"); - - /* Check for a test that does substitution after an initial external match. - If this is set, we run the external match, but leave the interpretation of - its output to pcre2_substitute(). */ - - emoption = ((dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0)? 0 : - PCRE2_SUBSTITUTE_MATCHED; - - if (emoption != 0) - { - reset_callout_state(); - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - dfa_workspace[0] = -1; - (void)pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - else if ((pat_patctl.control & CTL_JITFAST) != 0) - { - (void)pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options, match_data, use_dat_context); - } - else - { - (void)pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options, match_data, use_dat_context); - } - } - - xoptions = emoption | - (((dat_datctl.control & CTL_GLOBAL) == 0)? 0 : - PCRE2_SUBSTITUTE_GLOBAL) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_EXTENDED) == 0)? 0 : - PCRE2_SUBSTITUTE_EXTENDED) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_LITERAL) == 0)? 0 : - PCRE2_SUBSTITUTE_LITERAL) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_OVERFLOW_LENGTH) == 0)? 0 : - PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_REPLACEMENT_ONLY) == 0)? 0 : - PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNKNOWN_UNSET) == 0)? 0 : - PCRE2_SUBSTITUTE_UNKNOWN_UNSET) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNSET_EMPTY) == 0)? 0 : - PCRE2_SUBSTITUTE_UNSET_EMPTY); - - pr = dat_datctl.replacement+1; - prend = pr + dat_datctl.replacement[0]; - - /* If the replacement starts with '[]' we interpret that as length - value for the replacement buffer. */ - - nsize = rep_out_buffer_size; - if (pr < prend && *pr == '[') - { - PCRE2_SIZE n = 0; - ++pr; - for (; pr < prend && (c = *pr) >= '0' && c <= '9'; ++pr) - n = n * 10 + (c - '0'); - if (pr >= prend || *pr != ']') - { - cfprintf(clr_test_error, outfile, "** Bad buffer size in replacement string\n"); - return PR_OK; - } - ++pr; - if (n > nsize) - { - cfprintf(clr_test_error, outfile, "** Replacement buffer setting (%" SIZ_FORM ") is too " - "large (max %" SIZ_FORM ")\n", n, nsize); - return PR_OK; - } - nsize = n; - } - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(rep_out_buffer, CU2BYTES(nsize)); - VALGRIND_MAKE_MEM_NOACCESS(rep_out_buffer + nsize, - CU2BYTES(rep_out_buffer_size - nsize)); -#endif - - /* Now copy the rest of the replacement string to the buffer. */ - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(rep_in_buffer, CU2BYTES(rep_in_buffer_size)); -#endif - - copy_substitute_string(utf, pr, prend-pr, rep_in_buffer, &rlen); - -#ifdef SUPPORT_VALGRIND - c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0; - VALGRIND_MAKE_MEM_NOACCESS(rep_in_buffer + rlen + c, - CU2BYTES(rep_in_buffer_size - rlen + c)); -#endif - - full_rlen = rlen; - if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - rlen = PCRE2_ZERO_TERMINATED; - rbptr = ((dat_datctl.control2 & CTL2_NULL_REPLACEMENT) == 0)? rep_in_buffer : NULL; - - /* If the substitute_subject modifier is set, then we will modify the - subject in between the call to pcre2_match and pcre2_substitute. */ - - sbptr = pp; - slen = arg_ulen; - - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET) - { - copy_substitute_string(utf, dat_datctl.substitute_subject+1, - dat_datctl.substitute_subject[0], sbuffer, &slen); - - /* The buffer pointed to by pp has exactly the correct length (butted up - against the end of the memory allocation) so it would be possible but - awkward to extend the subject. However, since pcre2_substitute() won't allow - changing the length of the subject, and also early-exits if the subject - pointer changes, we can test all the branches just by supporting shrinking - the subject. */ - if (slen > ulen) - { - cfprintf(clr_test_error, outfile, "** substitute_subject is longer than match subject buffer\n"); - return PR_OK; - } - - /* In the null-subject case, there's no need to copy. */ - if (pp != NULL) - { - memcpy(pp, sbuffer, CU2BYTES(slen)); - if (slen < ulen) ((PCRE2_UCHAR *)pp)[slen] = 0; - - /* If we shrank the subject, adjust the Valgrind readable area. */ -#ifdef SUPPORT_VALGRIND - c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0; - VALGRIND_MAKE_MEM_NOACCESS((uint8_t *)pp + CU2BYTES(slen+c), - (dbuffer + dbuffer_size) - ((uint8_t *)pp + CU2BYTES(slen+c))); -#endif - } - - if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - slen = PCRE2_ZERO_TERMINATED; - } - - /* Set up the required callouts and context, and call pcre2_substitute(). */ - - smatch_data = ((CTL2_NULL_SUBSTITUTE_MATCH_DATA & dat_datctl.control2) == 0)? - match_data : NULL; - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0) - { - pcre2_set_substitute_callout(dat_context, substitute_callout_function, NULL); - } - else - { - pcre2_set_substitute_callout(dat_context, NULL, NULL); /* No callout */ - } - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0) - { - pcre2_set_substitute_case_callout(dat_context, substitute_case_callout_function, NULL); - } - else - { - pcre2_set_substitute_case_callout(dat_context, NULL, NULL); /* No callout */ - } - - if (malloc_testing) CLEAR_HEAP_FRAMES(); - reset_callout_state(); - nsize_input = nsize; - rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset, - dat_datctl.options|xoptions, smatch_data, use_dat_context, - rbptr, rlen, rep_out_buffer, &nsize); - - /* For malloc testing, we repeat the substitution. */ - - if (malloc_testing && (dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) == 0) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - FILE *saved_outfile = outfile; - CLEAR_HEAP_FRAMES(); - reset_callout_state(); - mallocs_until_failure = i; - outfile = NULL; /* Suppress callout output during the malloc repetitions */ - nsize = nsize_input; - rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset, - dat_datctl.options|xoptions, smatch_data, use_dat_context, - rbptr, rlen, rep_out_buffer, &nsize); - mallocs_until_failure = INT_MAX; - outfile = saved_outfile; - - if (i < target_mallocs && rc != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() Substitution test did not fail as expected (%d)\n", - rc); - return PR_ABEND; - } - } - } - - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Failed: error %d", rc); - if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET) - cfprintf(clr_api_error, outfile, " at offset %ld in replacement", (long int)nsize); - cfprintf(clr_api_error, outfile, ": "); - if (!print_error_message(rc, "", "")) return PR_ABEND; - if (rc == PCRE2_ERROR_NOMEMORY && - (xoptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) != 0) - cfprintf(clr_api_error, outfile, ": %ld code units are needed", (long int)nsize); - - if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET) - { - cfprintf(clr_api_error, outfile, "\n here: "); - if (nsize > 0) - { - ptrunc(clr_input, rbptr, full_rlen, nsize, TRUE, utf, outfile); - fprintf(outfile, " "); - } - cfprintf(clr_api_error, outfile, "|<--|"); - if (nsize < full_rlen) - { - fprintf(outfile, " "); - ptrunc(clr_input, rbptr, full_rlen, nsize, FALSE, utf, outfile); - } - } - } - else - { - cfprintf(clr_api_error, outfile, "%2d: ", rc); - pchars(clr_api_error, rep_out_buffer, nsize, utf, outfile); - } - - fprintf(outfile, "\n"); - show_memory = FALSE; - - /* Show final ovector contents and resulting heapframe size if requested. */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - - if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 && - (dat_datctl.control & CTL_DFA) == 0) - show_heapframes_size(); - - return PR_OK; - } /* End of substitution handling */ - -/* When a replacement string is not provided, run a loop for global matching -with one of the basic matching functions. */ - -for (gmatched = 0;; gmatched++) - { - PCRE2_SIZE j; - int capcount; - - /* Fill the ovector with junk to detect elements that do not get set - when they should be. */ - - for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET; - - /* When matching is via pcre2_match(), we will detect the use of JIT via the - stack callback function. */ - - jit_was_used = (pat_patctl.control & CTL_JITFAST) != 0; - - /* Do timing if required. */ - - if (timeitm > 0) - { - int i; - clock_t start_time, time_taken; - FILE *saved_outfile = outfile; - - outfile = NULL; /* Suppress callout output during the timing repetitions */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - if ((dat_datctl.options & PCRE2_DFA_RESTART) != 0) - { - outfile = saved_outfile; - cfprintf(clr_test_error, outfile, "** Timing DFA restarts is not supported\n"); - return PR_ABEND; - } - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - } - - else if ((pat_patctl.control & CTL_JITFAST) != 0) - { - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_jit_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } - } - - else - { - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } - } - total_match_time += (time_taken = clock() - start_time); - - outfile = saved_outfile; - cfprintf(clr_profiling, outfile, "Match time %7.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeitm); - } - - /* Find the heap, match and depth limits if requested. The depth and heap - limits are not relevant for JIT. The return from check_match_limit() is the - return from the final call to pcre2_match() or pcre2_dfa_match(). */ - - if ((dat_datctl.control & (CTL_FINDLIMITS|CTL_FINDLIMITS_NOHEAP)) != 0) - { - if ((dat_datctl.control & CTL_FINDLIMITS_NOHEAP) == 0 && - (compiled_code->executable_jit == NULL || - (dat_datctl.options & PCRE2_NO_JIT) != 0)) - { - (void)check_match_limit(pp, arg_ulen, PCRE2_ERROR_HEAPLIMIT, "heap"); - } - - capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_MATCHLIMIT, - "match"); - - if (compiled_code->executable_jit == NULL || - (dat_datctl.options & PCRE2_NO_JIT) != 0 || - (dat_datctl.control & CTL_DFA) != 0) - { - capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_DEPTHLIMIT, - "depth"); - } - - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but offsets vector is too small to show all matches\n"); - capcount = dat_datctl.oveccount; - } - } - - /* Otherwise just run a single match. */ - - else - { - /* Run a single DFA or NFA match. */ - - if (malloc_testing) CLEAR_HEAP_FRAMES(); - reset_callout_state(); - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but offsets vector is too small to show all matches\n"); - capcount = dat_datctl.oveccount; - } - } - else - { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - else - capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but too many substrings\n"); - capcount = dat_datctl.oveccount; - } - } - - /* For malloc testing, we repeat the matching. */ - - if (malloc_testing && (dat_datctl.control & CTL_CALLOUT_NONE) != 0) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - FILE *saved_outfile = outfile; - - CLEAR_HEAP_FRAMES(); - reset_callout_state(); - - mallocs_until_failure = i; - outfile = NULL; /* Suppress callout output during the malloc repetitions */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - else - { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - else - capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - } - - mallocs_until_failure = INT_MAX; - outfile = saved_outfile; - - if (capcount == 0) - capcount = dat_datctl.oveccount; - - if (i < target_mallocs && capcount != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() match test did not fail as expected (%d)\n", - capcount); - return PR_ABEND; - } - } - } - } - - /* Verify that it's safe to call pcre2_next_match with rc < 0. */ - - if (capcount < 0 && (dat_datctl.control & CTL_ANYGLOB) != 0) - { - BOOL rc_nextmatch; - PCRE2_SIZE tmp_offset = 0xcd; - uint32_t tmp_options = 0xcd; - rc_nextmatch = pcre2_next_match(match_data, &tmp_offset, &tmp_options); - if (rc_nextmatch || tmp_offset != 0xcd || tmp_options != 0xcd) - { - cfprintf(clr_test_error, outfile, "** unexpected pcre2_next_match() for rc < 0\n"); - return PR_ABEND; - } - } - - /* The result of the match is now in capcount. First handle a successful - match. If pp was forced to be NULL (to test NULL handling) it will have been - treated as an empty string if the length was zero. So, re-create that for - outputting, preserving the invariant that pp is a valid pointer to a region - of length len followed by a null. */ - - if (capcount >= 0) - { - if (pp == NULL) - { -#ifdef SUPPORT_VALGRIND - /* Mark the start of dbuffer addressable again. */ - VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, CU2BYTES(1)); -#endif - pp = (PCRE2_UCHAR *)dbuffer; - *pp = 0; - } - - if ((unsigned)capcount > oveccount) /* Check for lunatic return value */ - { - cfprintf(clr_test_error, outfile, - "** PCRE2 error: returned count %d is too big for ovector count %d\n", - capcount, oveccount); - return PR_ABEND; - } - - /* If PCRE2_COPY_MATCHED_SUBJECT was set, check that things are as they - should be, but not for fast JIT, where it isn't supported. */ - - if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0 && - (pat_patctl.control & CTL_JITFAST) == 0) - { - if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: flag not set after copy_matched_subject\n"); - - if (match_data->subject == pp) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject has not copied\n"); - - if (memcmp(match_data->subject, pp, ulen) != 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject mismatch\n"); - } - - /* If this is not the first time round a global loop, check that the - returned string has advanced. - - There is one known case where this doesn't happen: when you have a - "badly-behaved" pattern which uses \K in a lookaround, and breaks the core - sanity rule that start_offset <= ovector[0] <= ovector[1]. An example would - be /(?<=\Ka)/g matching "aaa". - * first attempt, start_offset=0: ovector[0]=0, ovector[1]=1 - * second attempt, start_offset=1: ovector[0]=0, ovector[1]=1 - - You can see that even though we *always* ensure that start_offset advances, - this doesn't guarantee to avoid duplicate matches. - - The pcre2test behaviour is to return all the matches found, except in the - case where two adjacent matches are an exact duplicate. */ - - if (gmatched > 0 && - !(dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) && - pp + ovector[0] == ovecsave[0] && pp + ovector[1] == ovecsave[1]) - { - cfprintf(clr_api_error, outfile, "global repeat returned the same match as previous\n"); - goto NEXT_MATCH; - } - - /* Outside of this exceptional case, we check that either we have a - "badly-behaved" match (note that not all badly-behaved matches are caught - above, only *duplicate* ones); or else in the well-behaved case the match - must make progress. - - "Progress" is measured as ovector[1] strictly advancing, or, an empty match - after a non-empty match. */ - - if (gmatched > 0 && - (dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) && - !(pp + ovector[1] > ovecsave[1] || - (ovector[1] == ovector[0] && ovecsave[1] != ovecsave[0] && - pp + ovector[1] == ovecsave[1]))) - { - cfprintf(clr_test_error, outfile, - "** PCRE2 error: global repeat did not make progress\n"); - return PR_ABEND; - } - - ovecsave[0] = pp + ovector[0]; - ovecsave[1] = pp + ovector[1]; - - /* "allcaptures" requests showing of all captures in the pattern, to check - unset ones at the end. It may be set on the pattern or the data. Implement - by setting capcount to the maximum. This is not relevant for DFA matching, - so ignore it (warning given above). */ - - if ((dat_datctl.control & (CTL_ALLCAPTURES|CTL_DFA)) == CTL_ALLCAPTURES) - { - capcount = maxcapcount + 1; /* Allow for full match */ - if ((unsigned)capcount > oveccount) capcount = oveccount; - } - - /* "allvector" request showing the entire ovector. */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) capcount = oveccount; - - /* Output the captured substrings. Note that, for the matched string, - the use of \K in an assertion can make the start later than the end. */ - - for (int i = 0; i < 2*capcount; i += 2) - { - PCRE2_SIZE lleft, lmiddle, lright; - PCRE2_SIZE start = ovector[i]; - PCRE2_SIZE end = ovector[i+1]; - - if (start > end) - { - start = ovector[i+1]; - end = ovector[i]; - cfprintf(clr_api_error, outfile, "Start of matched string is beyond its end - " - "displaying from end to start.\n"); - } - - fprintf(outfile, "%2d: ", i/2); - - /* Check for an unset group */ - - if (start == PCRE2_UNSET && end == PCRE2_UNSET) - { - fprintf(outfile, "\n"); - continue; - } - - /* Check for silly offsets, in particular, values that have not been - set when they should have been. However, if we are past the end of the - captures for this pattern ("allvector" causes this), or if we are DFA - matching, it isn't an error if the entry is unchanged. */ - - if (start > ulen || end > ulen) - { - if (((dat_datctl.control & CTL_DFA) != 0 || - i >= (int)(2*maxcapcount + 2)) && - start == JUNK_OFFSET && end == JUNK_OFFSET) - fprintf(outfile, "\n"); - else - cfprintf(clr_test_error, outfile, "** ERROR: bad value(s) for offset(s): 0x%lx 0x%lx\n", - (unsigned long int)start, (unsigned long int)end); - continue; - } - - /* When JIT is not being used, ALLUSEDTEXT may be set. (It if is set with - JIT, it is disabled above, with a comment.) When the match is done by the - interpreter, leftchar and rightchar are available, and if ALLUSEDTEXT is - set, and if the leftmost consulted character is before the start of the - match or the rightmost consulted character is past the end of the match, - we want to show all consulted characters for the main matched string, and - indicate which were lookarounds. */ - - if (i == 0) - { - BOOL showallused; - PCRE2_SIZE leftchar, rightchar; - - if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0) - { - leftchar = match_data->leftchar; - rightchar = match_data->rightchar; - showallused = i == 0 && (leftchar < start || rightchar > end); - } - else showallused = FALSE; - - if (showallused) - { - lleft = pchars(clr_none, pp + leftchar, start - leftchar, utf, outfile); - lmiddle = pchars(clr_none, pp + start, end - start, utf, outfile); - lright = pchars(clr_none, pp + end, rightchar - end, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n "); - for (j = 0; j < lleft; j++) fprintf(outfile, "<"); - for (j = 0; j < lmiddle; j++) fprintf(outfile, " "); - for (j = 0; j < lright; j++) fprintf(outfile, ">"); - } - - /* When a pattern contains \K, the start of match position may be - different to the start of the matched string. When this is the case, - show it when requested. */ - - else if ((dat_datctl.control & CTL_STARTCHAR) != 0) - { - PCRE2_SIZE startchar; - startchar = pcre2_get_startchar(match_data); - lleft = pchars(clr_none, pp + startchar, start - startchar, utf, outfile); - pchars(clr_none, pp+start, end - start, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - if (startchar != start) - { - fprintf(outfile, "\n "); - for (j = 0; j < lleft; j++) fprintf(outfile, "^"); - } - } - - /* Otherwise, just show the matched string. */ - - else - { - pchars(clr_none, pp + start, end - start, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - } - } - - /* Not the main matched string. Just show it unadorned. */ - - else - { - pchars(clr_none, pp + start, end - start, utf, outfile); - } - - fprintf(outfile, "\n"); - - /* Note: don't use the start/end variables here because we want to - show the text from what is reported as the end. */ - - if ((dat_datctl.control & CTL_ALLAFTERTEXT) != 0 || - (i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0)) - { - fprintf(outfile, "%2d+ ", i/2); - pchars(clr_none, pp + ovector[i+1], ulen - ovector[i+1], utf, outfile); - fprintf(outfile, "\n"); - } - } - - /* Output (*MARK) data if requested */ - - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, "MK: "); - pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - fprintf(outfile, "\n"); - } - - /* Process copy/get strings */ - - if (!copy_and_get(utf, capcount)) return PR_ABEND; - - } /* End of handling a successful match */ - - /* There was a partial match. The value of ovector[0] is the bumpalong point, - that is, startchar, not any \K point that might have been passed. When JIT is - not in use, "allusedtext" may be set, in which case we indicate the leftmost - consulted character. */ - - else if (capcount == PCRE2_ERROR_PARTIAL) - { - PCRE2_SIZE leftchar; - int backlength; - int rubriclength = 0; - - if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0) - { - leftchar = match_data->leftchar; - } - else leftchar = ovector[0]; - - cfprintf(clr_api_error, outfile, "Partial match"); - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, ", mark="); - rubriclength = pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - rubriclength += 7; - } - fprintf(outfile, ": "); - rubriclength += 15; - - backlength = pchars(clr_input, pp + leftchar, ovector[0] - leftchar, utf, outfile); - pchars(clr_input, pp + ovector[0], ovector[1] - ovector[0], utf, outfile); - - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n"); - - if (backlength != 0) - { - for (int i = 0; i < rubriclength; i++) fprintf(outfile, " "); - for (int i = 0; i < backlength; i++) fprintf(outfile, "<"); - fprintf(outfile, "\n"); - } - - if (ulen != ovector[1]) - cfprintf(clr_test_error, outfile, "** ovector[1] is not equal to the subject length: " - "%ld != %ld\n", (unsigned long int)ovector[1], (unsigned long int)ulen); - - /* Process copy/get strings */ - - if (!copy_and_get(utf, 1)) return PR_ABEND; - - /* "allvector" outputs the entire vector */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - - break; /* Out of the /g loop */ - } /* End of handling partial match */ - - /* A "normal" match failure. There will be a negative error number in - capcount. */ - - else - { - switch(capcount) - { - case PCRE2_ERROR_NOMATCH: - if (gmatched == 0) - { - cfprintf(clr_api_error, outfile, "No match"); - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, ", mark = "); - pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - } - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n"); - - /* "allvector" outputs the entire vector */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - } - break; - - case PCRE2_ERROR_BADUTFOFFSET: - cfprintf(clr_api_error, outfile, "Error %d (bad UTF-" STR(PCRE2_CODE_UNIT_WIDTH) - " offset)\n", capcount); - break; - - default: - cfprintf(clr_api_error, outfile, "Failed: error %d: ", capcount); - if (!print_error_message(capcount, "", "")) return PR_ABEND; - if (capcount <= PCRE2_ERROR_UTF8_ERR1 && - capcount >= PCRE2_ERROR_UTF32_ERR2) - { - PCRE2_SIZE startchar; - startchar = pcre2_get_startchar(match_data); - cfprintf(clr_api_error, outfile, " at offset %" SIZ_FORM, startchar); - } - fprintf(outfile, "\n"); - break; - } - - break; /* Out of the /g loop */ - } /* End of failed match handling */ - - /* Control reaches here after a match. If we are not doing a global search, - we are done. Otherwise, we adjust the parameters for the next match and - continue the matching loop. */ - - NEXT_MATCH: - - if ((dat_datctl.control & CTL_ANYGLOB) == 0) - break; - else - { - PCRE2_SIZE new_start_offset = (PCRE2_SIZE)-1; - BOOL rc_nextmatch; - - /* Use pcre2_next_match() to safely advance. This guarantees that the start - offset will advance, except after an empty match, in which case it sets - the PCRE2_NOTEMPTY_ATSTART flag to ensure the next match does not return a - duplicate. */ - - rc_nextmatch = pcre2_next_match(match_data, &new_start_offset, &g_notempty); - if (!rc_nextmatch) break; /* Out of the /g loop */ - - /* For a normal global (/g) iteration, update the start offset, leaving - other parameters alone. */ - - if ((dat_datctl.control & CTL_GLOBAL) != 0) - { - dat_datctl.offset = new_start_offset; - } - - /* For altglobal, just update the pointer and length. */ - - else - { - pp += new_start_offset; - len -= CU2BYTES(new_start_offset); - ulen -= new_start_offset; - if (arg_ulen != PCRE2_ZERO_TERMINATED) arg_ulen -= new_start_offset; - } - } - } /* End of global loop */ - -/* All matching is done; show the resulting heapframe size if requested. */ - -if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 && - (dat_datctl.control & CTL_DFA) == 0) - show_heapframes_size(); - -show_memory = FALSE; -return PR_OK; -} - - - -/************************************************* -* Initialise the mode-dependent globals * -*************************************************/ - -/* Sets up the global variables used for the current test mode. */ - -static void -init_globals(void) -{ -general_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -general_context_copy = pcre2_general_context_copy(general_context); -default_pat_context = pcre2_compile_context_create(general_context); -pat_context = pcre2_compile_context_copy(default_pat_context); -default_dat_context = pcre2_match_context_create(general_context); -dat_context = pcre2_match_context_copy(default_dat_context); -default_con_context = pcre2_convert_context_create(general_context); -con_context = pcre2_convert_context_copy(default_con_context); -match_data = pcre2_match_data_create(max_oveccount, general_context); -rep_in_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_in_buffer_size); -rep_out_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_out_buffer_size); - -/* Set a default parentheses nest limit that is large enough to run the -standard tests (this also exercises the function). */ - -pcre2_set_parens_nest_limit(default_pat_context, PARENS_NEST_DEFAULT); -} - -/* Frees the global variables used for the current test mode. */ - -static void -free_globals(void) -{ -pcre2_maketables_free(general_context, locale_tables); -pcre2_match_data_free(match_data); -pcre2_code_free(compiled_code); - -while(patstacknext-- > 0) - { - compiled_code = patstack[patstacknext]; - pcre2_code_free(compiled_code); - } - -pcre2_jit_free_unused_memory(general_context); -if (jit_stack != NULL) - { - pcre2_jit_stack_free(jit_stack); - } - -pcre2_general_context_free(general_context); -pcre2_general_context_free(general_context_copy); -pcre2_compile_context_free(pat_context); -pcre2_compile_context_free(default_pat_context); -pcre2_match_context_free(dat_context); -pcre2_match_context_free(default_dat_context); -pcre2_convert_context_free(default_con_context); -pcre2_convert_context_free(con_context); -free(rep_in_buffer); -free(rep_out_buffer); -} - - - -/************************************************* -* Specific function tests * -*************************************************/ - -/* For tests exercising a mismatched bitmode, identify a suitable API. */ - -#if (defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + \ - defined(SUPPORT_PCRE2_32)) >= 2 - -#if defined(SUPPORT_PCRE2_8) && PCRE2_CODE_UNIT_WIDTH != 8 -#define BITOTHER 8 -#elif defined(SUPPORT_PCRE2_16) && PCRE2_CODE_UNIT_WIDTH != 16 -#define BITOTHER 16 -#elif defined(SUPPORT_PCRE2_32) && PCRE2_CODE_UNIT_WIDTH != 32 -#define BITOTHER 32 -#else -#error "One other bit width must be supported" -#endif - -#endif - -/* These are tests of the public API functions in PCRE2, which wouldn't -otherwise be covered by pcre2test. This usually implies they are error cases, -or edge cases that are hard to hit in the standard flow of compile-match or -compile-substitute. - -I think of them as perhaps more like unit tests, although they are still testing -the public API, rather than internal modules. - -Inside pcre2test, which can be dynamically linked to lib-pcreX.so, we don't -have access to any non-exported functions. */ - -static void -unittest(void) -{ -int rc; -uint32_t uval; -PCRE2_SIZE sizeval; -PCRE2_UCHAR *sptrval; -const char *failure = NULL; -pcre2_general_context *test_gen_context = NULL, *test_gen_context_copy = NULL; -pcre2_compile_context *test_pat_context = NULL, *test_pat_context_copy = NULL; -pcre2_match_context *test_dat_context = NULL, *test_dat_context_copy = NULL; -pcre2_convert_context *test_con_context = NULL, *test_con_context_copy = NULL; -pcre2_match_data *test_match_data = NULL; -pcre2_code *test_compiled_code = NULL; -PCRE2_UCHAR pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 }; -PCRE2_UCHAR callout_int_pattern[] = { - CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_RIGHT_PARENTHESIS, 0 }; -PCRE2_UCHAR callout_str_pattern[] = { - CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_QUOTATION_MARK, - CHAR_Z, CHAR_QUOTATION_MARK, CHAR_RIGHT_PARENTHESIS, 0 }; -PCRE2_UCHAR capture_pattern[] = { - CHAR_A, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_LESS_THAN_SIGN, - CHAR_N, CHAR_GREATER_THAN_SIGN, CHAR_DOT, CHAR_ASTERISK, - CHAR_RIGHT_PARENTHESIS, CHAR_Z, 0 }; -PCRE2_UCHAR subject_abcz[] = { - CHAR_A, CHAR_B, CHAR_C, CHAR_Z, 0 }; -PCRE2_UCHAR substitute_subject[6]; -PCRE2_UCHAR name_n[] = { CHAR_N, 0 }; -#ifdef BITOTHER -G(pcre2_code_,BITOTHER) *bitother_code = NULL; -G(PCRE2_,G(UCHAR,BITOTHER)) bitother_pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 }; -#endif -int errorcode; -PCRE2_SIZE erroroffset; -PCRE2_UCHAR errorbuffer[256]; -#if PCRE2_CODE_UNIT_WIDTH == 8 -char errorbuffer8[256]; -regex_t test_preg; -#endif -void *invalid_code = NULL; -const uint8_t *test_tables = NULL; -PCRE2_UCHAR copy_buf[64]; -PCRE2_UCHAR **stringlist; -PCRE2_SIZE *lengthslist; -PCRE2_UCHAR replace_buf[64]; -pcre2_code *subs_other_code = NULL; - -#if PCRE2_CODE_UNIT_WIDTH == 8 -memset(&test_preg, 0, sizeof(test_preg)); -#endif - -#if defined PCRE2_DEBUG && !defined NDEBUG -#define ASSERT(cond, msg) \ - do { \ - if (!(cond)) { failure = msg " at " __FILE__ ":" STR(__LINE__); goto EXIT; } \ - } while (0) -#else -#define ASSERT(cond, msg) \ - do { \ - if (!(cond)) { failure = msg; goto EXIT; } \ - } while (0) -#endif - -/* -------------------------- pcre2_config --------------------------------- */ - -rc = pcre2_config(PCRE2_CONFIG_BSR, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_COMPILED_WIDTHS, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_DEPTHLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_EFFECTIVE_LINKSIZE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_HEAPLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_JIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_LINKSIZE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_NEVER_BACKSLASH_C, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_NEWLINE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_PARENSLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_UNICODE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); - -#ifdef SUPPORT_JIT -rc = pcre2_config(PCRE2_CONFIG_JITTARGET, NULL); -ASSERT(rc > 0, "pcre2_config(NULL)"); -#endif -rc = pcre2_config(PCRE2_CONFIG_UNICODE_VERSION, NULL); -ASSERT(rc > 4, "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_VERSION, NULL); -ASSERT(rc > 4, "pcre2_config(NULL)"); - -rc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_MATCHLIMIT)"); - -rc = pcre2_config(999, NULL); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_config(bad option)"); - -rc = pcre2_config(999, &uval); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_config(bad option)"); - -rc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_STACKRECURSE)"); - -rc = pcre2_config(PCRE2_CONFIG_LINKSIZE, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_LINKSIZE)"); - -/* ------------------------ Context functions ------------------------------ */ - -test_gen_context = pcre2_general_context_create(NULL, NULL, NULL); -ASSERT(test_gen_context != NULL, "pcre2_general_context_create(null)"); -pcre2_general_context_free(test_gen_context); - -mallocs_until_failure = 0; -test_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -ASSERT(test_gen_context == NULL, "pcre2_general_context_create(malloc)"); - -mallocs_until_failure = 1; -test_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -ASSERT(test_gen_context != NULL, "pcre2_general_context_create(malloc)"); - -test_pat_context = pcre2_compile_context_create(test_gen_context); -ASSERT(test_pat_context == NULL, "pcre2_compile_context_create()"); -test_dat_context = pcre2_match_context_create(test_gen_context); -ASSERT(test_dat_context == NULL, "pcre2_match_context_create()"); -test_con_context = pcre2_convert_context_create(test_gen_context); -ASSERT(test_con_context == NULL, "pcre2_convert_context_create()"); - -test_pat_context = pcre2_compile_context_create(NULL); -ASSERT(test_pat_context != NULL, "pcre2_compile_context_create(null)"); -pcre2_compile_context_free(test_pat_context); -test_dat_context = pcre2_match_context_create(NULL); -ASSERT(test_dat_context != NULL, "pcre2_match_context_create(null)"); -pcre2_match_context_free(test_dat_context); -test_con_context = pcre2_convert_context_create(NULL); -ASSERT(test_con_context != NULL, "pcre2_convert_context_create(null)"); -pcre2_convert_context_free(test_con_context); - -mallocs_until_failure = INT_MAX; -test_pat_context = pcre2_compile_context_create(test_gen_context); -ASSERT(test_pat_context != NULL, "pcre2_compile_context_create()"); -test_dat_context = pcre2_match_context_create(test_gen_context); -ASSERT(test_dat_context != NULL, "pcre2_match_context_create()"); -test_con_context = pcre2_convert_context_create(test_gen_context); -ASSERT(test_con_context != NULL, "pcre2_convert_context_create()"); - -mallocs_until_failure = 0; -test_gen_context_copy = pcre2_general_context_copy(test_gen_context); -ASSERT(test_gen_context_copy == NULL, "pcre2_general_context_copy()"); -test_pat_context_copy = pcre2_compile_context_copy(test_pat_context); -ASSERT(test_pat_context_copy == NULL, "pcre2_compile_context_copy()"); -test_dat_context_copy = pcre2_match_context_copy(test_dat_context); -ASSERT(test_dat_context_copy == NULL, "pcre2_match_context_copy()"); -test_con_context_copy = pcre2_convert_context_copy(test_con_context); -ASSERT(test_con_context_copy == NULL, "pcre2_convert_context_copy()"); - -mallocs_until_failure = INT_MAX; -test_gen_context_copy = pcre2_general_context_copy(test_gen_context); -ASSERT(test_gen_context_copy != NULL, "pcre2_general_context_copy()"); -test_pat_context_copy = pcre2_compile_context_copy(test_pat_context); -ASSERT(test_pat_context_copy != NULL, "pcre2_compile_context_copy()"); -test_dat_context_copy = pcre2_match_context_copy(test_dat_context); -ASSERT(test_dat_context_copy != NULL, "pcre2_match_context_copy()"); -test_con_context_copy = pcre2_convert_context_copy(test_con_context); -ASSERT(test_con_context_copy != NULL, "pcre2_convert_context_copy()"); - -rc = pcre2_set_compile_extra_options(test_pat_context, 0); -ASSERT(rc == 0, "pcre2_set_compile_extra_options()"); - -rc = pcre2_set_max_pattern_length(test_pat_context, 10); -ASSERT(rc == 0, "pcre2_set_max_pattern_length()"); - -rc = pcre2_set_max_pattern_compiled_length(test_pat_context, 256); -ASSERT(rc == 0, "pcre2_set_max_pattern_compiled_length()"); - -rc = pcre2_set_max_varlookbehind(test_pat_context, 0); -ASSERT(rc == 0, "pcre2_set_max_varlookbehind()"); - -rc = pcre2_set_offset_limit(test_dat_context, 0); -ASSERT(rc == 0, "pcre2_set_offset_limit()"); - -rc = pcre2_set_bsr(test_pat_context, 999); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_bsr()"); - -rc = pcre2_set_newline(test_pat_context, 999); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_newline()"); - -rc = pcre2_set_recursion_limit(test_dat_context, 10); -ASSERT(rc == 0, "pcre2_set_recursion_limit()"); - -rc = pcre2_set_recursion_memory_management(test_dat_context, NULL, NULL, NULL); -ASSERT(rc == 0, "pcre2_set_recursion_memory_management()"); - -rc = pcre2_set_optimize(NULL, PCRE2_OPTIMIZATION_NONE); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_set_optimize(null)"); - -rc = pcre2_set_optimize(test_pat_context, PCRE2_AUTO_POSSESS - 1); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_set_optimize(bad option)"); - -rc = pcre2_set_optimize(test_pat_context, PCRE2_START_OPTIMIZE_OFF + 1); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_set_optimize(bad option)"); - -rc = pcre2_set_glob_escape(test_con_context, 0); -ASSERT(rc == 0, "pcre2_set_glob_escape(0)"); - -rc = pcre2_set_glob_escape(test_con_context, 1); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_glob_escape(1)"); - -rc = pcre2_set_glob_escape(test_con_context, 256); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_glob_escape(256)"); - -/* ----------------------- pcre2_compile ----------------------------------- */ - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, NULL, &erroroffset, test_pat_context); -ASSERT(test_compiled_code == NULL, "test pattern compilation"); - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, NULL, test_pat_context); -ASSERT(test_compiled_code == NULL && errorcode == PCRE2_ERROR_NULL_ERROROFFSET, "test pattern compilation"); - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, test_pat_context); -ASSERT(test_compiled_code != NULL && errorcode == 100 && erroroffset == 0, "test pattern compilation"); - -#ifdef BITOTHER -bitother_code = G(pcre2_compile_,BITOTHER)(bitother_pattern, - PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL); -ASSERT(bitother_code != NULL, "bitmode mismatch compile"); -#endif - -/* ---------------------- Match data functions ----------------------------- */ - -mallocs_until_failure = 0; -test_match_data = pcre2_match_data_create(10, test_gen_context); -ASSERT(test_match_data == NULL, "pcre2_match_data_create()"); - -test_match_data = pcre2_match_data_create(10, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 10, "pcre2_get_ovector_count()"); - -sizeval = pcre2_get_match_data_size(test_match_data); -ASSERT(sizeval >= 2, "pcre2_get_match_data_size()"); - -mallocs_until_failure = INT_MAX; - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create(0, test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 1, "pcre2_get_ovector_count()"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(NULL, NULL); -ASSERT(test_match_data == NULL, "pcre2_match_data_create_from_pattern(null)"); - -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 1, "pcre2_get_ovector_count()"); - -mallocs_until_failure = 0; -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, - test_gen_context); -ASSERT(test_match_data == NULL, "pcre2_match_data_create_from_pattern()"); - -mallocs_until_failure = INT_MAX; -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, - test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern()"); - -rc = pcre2_match(test_compiled_code, pattern, PCRE2_ZERO_TERMINATED, 0, - PCRE2_COPY_MATCHED_SUBJECT, test_match_data, NULL); -ASSERT(rc == 1, "pcre2_match()"); - -pcre2_match_data_free(test_match_data); -test_match_data = NULL; - -/* ----------------------- pcre2_pattern_info ------------------------------ */ - -rc = pcre2_pattern_info(NULL, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_pattern_info(null)"); - -rc = pcre2_pattern_info(test_compiled_code, 999, NULL); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_pattern_info(bad option)"); - -rc = pcre2_pattern_info(test_compiled_code, 999, &uval); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_pattern_info(bad option)"); - -invalid_code = malloc(1024); -ASSERT(invalid_code != NULL, "malloc()"); -memset(invalid_code, 0, 1024); -rc = pcre2_pattern_info(invalid_code, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_BADMAGIC, "pcre2_pattern_info(bad magic)"); - -#ifdef BITOTHER -rc = pcre2_pattern_info((pcre2_code *)bitother_code, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_BADMODE, "pcre2_pattern_info(bitmode mismatch)"); -#endif - -#ifdef SUPPORT_JIT -sizeval = 0xcdcdcdcd; -rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval); -ASSERT(rc == 0 && sizeval == 0, "pcre2_pattern_info(JIT)"); - -if (pcre2_jit_compile(test_compiled_code, PCRE2_JIT_COMPLETE) == 0) - { - rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval); - ASSERT(rc == 0 && sizeval > 0, "pcre2_pattern_info(JIT after compile)"); - } -#endif - -/* ----------------------- POSIX functions --------------------------------- */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 - -#if defined(EBCDIC) && !EBCDIC_IO -#define BUFFER_OUTPUT ebcdic_to_ascii_str((uint8_t *)errorbuffer8, sizeof(errorbuffer8)); -#else -#define BUFFER_OUTPUT -#endif - -rc = pcre2_regcomp(&test_preg, "abc", 0); -ASSERT(rc == 0, "pcre2_regcomp()"); - -rc = pcre2_regexec(&test_preg, "zabcz", 0, NULL, 0); -ASSERT(rc == 0, "pcre2_regexec(0)"); - -rc = pcre2_regexec(&test_preg, "zabcz", 0, NULL, REG_STARTEND); -ASSERT(rc == REG_INVARG, "pcre2_regexec(REG_STARTEND)"); - -memset(errorbuffer8, 0, sizeof(errorbuffer8)); -rc = regerror(REG_ASSERT, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, "regerror()"); - -rc = regerror(REG_NOMATCH, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, "regerror()"); - -rc = regerror(REG_ASSERT-1, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc == (int)strlen("unknown error code")+1 && strcmp(errorbuffer8, "unknown error code") == 0, "regerror(bad error code)"); - -rc = regerror(REG_NOMATCH+1, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc == (int)strlen("unknown error code")+1 && strcmp(errorbuffer8, "unknown error code") == 0, "regerror(bad error code)"); - -#undef BUFFER_OUTPUT - -#endif - -/* -------------------- pcre2_get_error_message ---------------------------- */ - -#if defined(EBCDIC) && !EBCDIC_IO -#define BUFFER_OUTPUT ebcdic_to_ascii_str(errorbuffer, sizeof(errorbuffer)); -#else -#define BUFFER_OUTPUT -#endif - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, NULL, 0); -ASSERT(rc == PCRE2_ERROR_NOMEMORY, "pcre2_get_error_message(null)"); - -memset(errorbuffer, 0, sizeof(errorbuffer)); -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 0); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 4); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, "bad") == 0, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 14); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, "bad data valu") == 0, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 15); -BUFFER_OUTPUT -ASSERT(rc == 14 && pcre2_strcmp_c8(errorbuffer, "bad data value") == 0, "pcre2_get_error_message(null)"); - -#undef BUFFER_OUTPUT - -/* ----------------------- pcre2_maketables -------------------------------- */ - -test_tables = pcre2_maketables(NULL); -ASSERT(test_tables != NULL, "pcre2_maketables(null)"); -pcre2_maketables_free(NULL, test_tables); - -test_tables = pcre2_maketables(test_gen_context); -ASSERT(test_tables != NULL, "pcre2_maketables()"); -pcre2_maketables_free(test_gen_context, test_tables); - -mallocs_until_failure = 0; -test_tables = pcre2_maketables(test_gen_context); -ASSERT(test_tables == NULL, "pcre2_maketables()"); - -mallocs_until_failure = INT_MAX; - -/* -------------------- pcre2_callout_enumerate ---------------------------- */ - -rc = pcre2_callout_enumerate(NULL, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_callout_enumerate(null)"); - -rc = pcre2_callout_enumerate(invalid_code, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_BADMAGIC, "pcre2_callout_enumerate(invalid)"); - -#ifdef BITOTHER -rc = pcre2_callout_enumerate((pcre2_code *)bitother_code, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_BADMODE, "pcre2_callout_enumerate(bitmode mismatch)"); -#endif - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(callout_int_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_void, &errorcode); -ASSERT(rc == 0, "pcre2_callout_enumerate(void)"); - -errorcode = -12; -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode); -ASSERT(rc == -12, "pcre2_callout_enumerate(fail)"); - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(callout_str_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -errorcode = -123; -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode); -ASSERT(rc == -123, "pcre2_callout_enumerate(fail)"); - -/* ---------------------- Substring functions ------------------------------ */ - -/* Must handle NULL without crashing. */ -pcre2_substring_free(NULL); -pcre2_substring_list_free(NULL); - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(capture_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern( - test_compiled_code, test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); - -rc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 0, - 0, test_match_data, NULL); -ASSERT(rc == 2, "pcre2_match()"); - -/* Test the functions with insufficient buffer size. It hardly seems worth -adding controls to the pcre2test input file format to exercise this case. */ - -sizeval = 2; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); -sizeval = 3; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); -sizeval = 4; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); - -sizeval = 2; -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, "pcre2_substring_copy_bynumber(small buffer)"); -sizeval = 3; -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_bynumber(small buffer)"); - -mallocs_until_failure = 0; - -sizeval = 0; -sptrval = NULL; -rc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, "pcre2_substring_get_byname(small buffer)"); - -sizeval = 0; -rc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, "pcre2_substring_get_bynumber(small buffer)"); - -mallocs_until_failure = INT_MAX; - -/* Test some unusual conditions, for which again it doesn't seem worth adding -pcre2test controls. */ - -sizeval = 0; -rc = pcre2_substring_length_bynumber(test_match_data, 1, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_length_bynumber()"); -rc = pcre2_substring_length_bynumber(test_match_data, 1, NULL); -ASSERT(rc == 0, "pcre2_substring_length_bynumber()"); - -sizeval = 0; -rc = pcre2_substring_length_byname(test_match_data, name_n, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_length_byname()"); -rc = pcre2_substring_length_byname(test_match_data, name_n, NULL); -ASSERT(rc == 0, "pcre2_substring_length_byname()"); - -/* Test pcre2_substring_list_get() with some NULL inputs. */ - -rc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist); -ASSERT(rc == 0 && stringlist != NULL && lengthslist != NULL, "pcre2_substring_list_get()"); -pcre2_substring_list_free(stringlist); - -stringlist = NULL; -rc = pcre2_substring_list_get(test_match_data, &stringlist, NULL); -ASSERT(rc == 0 && stringlist != NULL, "pcre2_substring_list_get()"); -pcre2_substring_list_free(stringlist); - -mallocs_until_failure = 0; - -stringlist = NULL; -rc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && stringlist == NULL, "pcre2_substring_list_get()"); - -mallocs_until_failure = INT_MAX; - -/* Test after an unsuccessful match. */ - -rc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 2, - 0, test_match_data, NULL); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_match()"); - -sizeval = 4; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_substring_copy_byname(no match)"); -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_substring_copy_bynumber(no match)"); -rc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, "pcre2_substring_get_byname(no match)"); -rc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, "pcre2_substring_get_bynumber(no match)"); - -/* ------------- pcre2_substitute with PCRE2_SUBSTITUTE_MATCHED ------------ */ - -/* There are some specific edge cases here that would be a pain to exercise via -the standard pcre2test modifiers. The documentation is clear that when you do -a match externally and pass it in with PCRE2_SUBSTITUTE_MATCHED, you must also -pass the same match options. Here we test what happens when you don't. */ - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -subs_other_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(subs_other_code != NULL, "test pattern compilation"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern( - test_compiled_code, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); - -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -rc = pcre2_match(test_compiled_code, substitute_subject, PCRE2_ZERO_TERMINATED, - 0, 0, test_match_data, NULL); -ASSERT(rc == 1, "pcre2_match()"); - -/* Baseline, should succeed */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == 1, "pcre2_substitute(baseline)"); - -/* Move the subject pointer, but keep the contents and length the same */ -memcpy(substitute_subject+1, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject+1, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, "pcre2_substitute(moved)"); - -/* Keep the subject pointer the same but extend its length */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -substitute_subject[4] = CHAR_Y; -substitute_subject[5] = 0; -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, "pcre2_substitute(extended)"); - -/* Change the offset */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 1, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSOFFSET, "pcre2_substitute(offset)"); - -/* Change the options */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED | PCRE2_NOTEMPTY, - test_match_data, NULL, NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSOPTIONS, "pcre2_substitute(options)"); - -/* Change the pattern */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(subs_other_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSPATTERN, "pcre2_substitute(pattern)"); - -/* ------------------------------------------------------------------------- */ - -#undef ASSERT -EXIT: - -mallocs_until_failure = INT_MAX; - -#if PCRE2_CODE_UNIT_WIDTH == 8 -pcre2_regfree(&test_preg); -#endif - -if (test_compiled_code != NULL) pcre2_code_free(test_compiled_code); -#ifdef BITOTHER -if (bitother_code != NULL) G(pcre2_code_free_,BITOTHER)(bitother_code); -#endif -if (subs_other_code != NULL) pcre2_code_free(subs_other_code); - -if (test_match_data != NULL) pcre2_match_data_free(test_match_data); - -if (test_con_context_copy != NULL) pcre2_convert_context_free(test_con_context_copy); -if (test_dat_context_copy != NULL) pcre2_match_context_free(test_dat_context_copy); -if (test_pat_context_copy != NULL) pcre2_compile_context_free(test_pat_context_copy); -if (test_gen_context_copy != NULL) pcre2_general_context_free(test_gen_context_copy); -if (test_con_context != NULL) pcre2_convert_context_free(test_con_context); -if (test_dat_context != NULL) pcre2_match_context_free(test_dat_context); -if (test_pat_context != NULL) pcre2_compile_context_free(test_pat_context); -if (test_gen_context != NULL) pcre2_general_context_free(test_gen_context); - -free(invalid_code); - -if (failure != NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: Unit test error in %s\n", failure); - exit(1); - } -} - -#undef BITOTHER - - -/* -------------------- Undo the macro definitions --------------------------*/ - -#undef pbuffer -#undef pbuffer_size - -#undef utf_to_ord - -#undef compiled_code -#undef general_context -#undef general_context_copy -#undef pat_context -#undef default_pat_context -#undef con_context -#undef default_con_context -#undef dat_context -#undef default_dat_context -#undef match_data -#undef jit_stack -#undef jit_stack_size -#undef patstack -#undef patstacknext -#undef rep_in_buffer -#undef rep_in_buffer_size -#undef rep_out_buffer -#undef rep_out_buffer_size - -#undef jit_callback -#undef pcre2_strcmp_c8 -#undef pcre2_strlen -#undef pchars -#undef ptrunc -#undef config_str -#undef check_modifier -#undef decode_modifiers -#undef pattern_info -#undef show_memory_info -#undef show_framesize -#undef show_heapframes_size -#undef print_error_message_file -#undef print_error_message -#undef callout_enumerate_function -#undef callout_enumerate_function_void -#undef callout_enumerate_function_fail -#undef show_pattern_info -#undef serial_error -#undef process_command -#undef process_pattern -#undef have_active_pattern -#undef free_active_pattern -#undef check_match_limit -#undef substitute_callout_function -#undef substitute_case_callout_function -#undef callout_function -#undef copy_and_get -#undef copy_substitute_string -#undef process_data -#undef init_globals -#undef free_globals -#undef unittest - - - -/* End of pcre2test_inc.h */