Bug 1610512 - Part 1: Update in-tree ICU to release 66.1. r=jwalden

Differential Revision: https://phabricator.services.mozilla.com/D66555

--HG--
extra : moz-landing-system : lando
This commit is contained in:
André Bargull 2020-03-19 01:09:56 +00:00
parent 724d0b9887
commit 5020091e8c
3039 changed files with 35665 additions and 23666 deletions

View file

@ -1,5 +1,7 @@
commit fd123bf023882f07bfacf51c39111be2f946d8f8 commit 5f681ecbc75898a6484217b322f3883b6d1b2049
Author: Steven R. Loomis <srloomis@us.ibm.com> Author: Jeff Genovy <29107334+jefgen@users.noreply.github.com>
Date: Wed Oct 2 10:25:22 2019 -0700 Date: Mon Mar 9 17:38:44 2020 -0700
ICU-20796 update C API Change Report ICU-20965 Remove VS2015 from CI builds, no longer supported by Azure Pipelines
(cherry-picked from f411b4197db5c86fb52cbd788c0646e513303828)

View file

@ -74,7 +74,7 @@
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<OutputFile>..\..\$(IcuBinOutputDir)\icuuc65d.dll</OutputFile> <OutputFile>..\..\$(IcuBinOutputDir)\icuuc66d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile> <ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary> <ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link> </Link>
@ -86,7 +86,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile> </ClCompile>
<Link> <Link>
<OutputFile>..\..\$(IcuBinOutputDir)\icuuc65.dll</OutputFile> <OutputFile>..\..\$(IcuBinOutputDir)\icuuc66.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile> <ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary> <ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link> </Link>

View file

@ -129,7 +129,7 @@
<Link> <Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;vcruntime.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>vccorlib.lib;msvcrt.lib;vcruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\$(IcuBinOutputDir)\icuuc65.dll</OutputFile> <OutputFile>..\..\$(IcuBinOutputDir)\icuuc66.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile> <ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary> <ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link> </Link>
@ -152,7 +152,7 @@
<Link> <Link>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;vcruntimed.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;vcruntimed.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\$(IcuBinOutputDir)\icuuc65d.dll</OutputFile> <OutputFile>..\..\$(IcuBinOutputDir)\icuuc66d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile> <ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary> <ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link> </Link>

View file

@ -1340,7 +1340,31 @@ Locale::getUnicodeKeywordValue(StringPiece keywordName,
void void
Locale::setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status) Locale::setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status)
{ {
uloc_setKeywordValue(keywordName, keywordValue, fullName, ULOC_FULLNAME_CAPACITY, &status); if (U_FAILURE(status)) {
return;
}
int32_t bufferLength = uprv_max((int32_t)(uprv_strlen(fullName) + 1), ULOC_FULLNAME_CAPACITY);
int32_t newLength = uloc_setKeywordValue(keywordName, keywordValue, fullName,
bufferLength, &status) + 1;
/* Handle the case the current buffer is not enough to hold the new id */
if (status == U_BUFFER_OVERFLOW_ERROR) {
U_ASSERT(newLength > bufferLength);
char* newFullName = (char *)uprv_malloc(newLength);
if (newFullName == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
uprv_strcpy(newFullName, fullName);
if (fullName != fullNameBuffer) {
// if full Name is already on the heap, need to free it.
uprv_free(fullName);
}
fullName = newFullName;
status = U_ZERO_ERROR;
uloc_setKeywordValue(keywordName, keywordValue, fullName, newLength, &status);
} else {
U_ASSERT(newLength <= bufferLength);
}
if (U_SUCCESS(status) && baseName == fullName) { if (U_SUCCESS(status) && baseName == fullName) {
// May have added the first keyword, meaning that the fullName is no longer also the baseName. // May have added the first keyword, meaning that the fullName is no longer also the baseName.
initBaseName(status); initBaseName(status);

File diff suppressed because it is too large Load diff

View file

@ -2088,6 +2088,13 @@ uint8_t Normalizer2Impl::getPreviousTrailCC(const uint8_t *start, const uint8_t
// minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance, // minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance,
// at least for ASCII & CJK. // at least for ASCII & CJK.
// Ticket 20907 - The optimizer in MSVC/Visual Studio versions below 16.4 has trouble with this
// function on Windows ARM64. As a work-around, we disable optimizations for this function.
// This work-around could/should be removed once the following versions of Visual Studio are no
// longer supported: All versions of VS2017, and versions of VS2019 below 16.4.
#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
#pragma optimize( "", off )
#endif
// Gets the FCD value from the regular normalization data. // Gets the FCD value from the regular normalization data.
uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const { uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
uint16_t norm16=getNorm16(c); uint16_t norm16=getNorm16(c);
@ -2121,6 +2128,9 @@ uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
} }
return norm16; return norm16;
} }
#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
#pragma optimize( "", on )
#endif
// Dual functionality: // Dual functionality:
// buffer!=NULL: normalize // buffer!=NULL: normalize

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -346,6 +346,13 @@ ubidi_writeReverse(const UChar *src, int32_t srcLength,
return u_terminateUChars(dest, destSize, destLength, pErrorCode); return u_terminateUChars(dest, destSize, destLength, pErrorCode);
} }
// Ticket 20907 - The optimizer in MSVC/Visual Studio versions below 16.4 has trouble with this
// function on Windows ARM64. As a work-around, we disable optimizations for this function.
// This work-around could/should be removed once the following versions of Visual Studio are no
// longer supported: All versions of VS2017, and versions of VS2019 below 16.4.
#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
#pragma optimize( "", off )
#endif
U_CAPI int32_t U_EXPORT2 U_CAPI int32_t U_EXPORT2
ubidi_writeReordered(UBiDi *pBiDi, ubidi_writeReordered(UBiDi *pBiDi,
UChar *dest, int32_t destSize, UChar *dest, int32_t destSize,
@ -638,3 +645,6 @@ ubidi_writeReordered(UBiDi *pBiDi,
return u_terminateUChars(saveDest, destCapacity, destCapacity-destSize, pErrorCode); return u_terminateUChars(saveDest, destCapacity, destCapacity-destSize, pErrorCode);
} }
#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
#pragma optimize( "", on )
#endif

View file

@ -11,36 +11,36 @@
#ifdef INCLUDED_FROM_UCASE_CPP #ifdef INCLUDED_FROM_UCASE_CPP
static const UVersionInfo ucase_props_dataVersion={0xc,1,0,0}; static const UVersionInfo ucase_props_dataVersion={0xd,0,0,0};
static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x6fea,0x5fb8,0x687,0x172,0,0,0,0,0,0,0,0,0,0,3}; static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x70ca,0x6098,0x687,0x172,0,0,0,0,0,0,0,0,0,0,3};
static const uint16_t ucase_props_trieIndex[12244]={ static const uint16_t ucase_props_trieIndex[12356]={
0x336,0x33e,0x346,0x34e,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3, 0x336,0x33e,0x346,0x34e,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3,
0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411,0x419,0x421,0x429,0x431, 0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411,0x419,0x421,0x429,0x431,
0x439,0x441,0x449,0x451,0x459,0x461,0x469,0x471,0x46d,0x475,0x47a,0x482,0x489,0x491,0x499,0x4a1, 0x439,0x441,0x449,0x451,0x459,0x461,0x469,0x471,0x46d,0x475,0x47a,0x482,0x489,0x491,0x499,0x4a1,
0x4a9,0x4b1,0x4b9,0x4c1,0x355,0x35d,0x4c6,0x4ce,0x4d3,0x4db,0x4e3,0x4eb,0x4ea,0x4f2,0x4f7,0x4ff, 0x4a9,0x4b1,0x4b9,0x4c1,0x355,0x35d,0x4c6,0x4ce,0x4d3,0x4db,0x4e3,0x4eb,0x4ea,0x4f2,0x4f7,0x4ff,
0x507,0x50e,0x512,0x355,0x355,0x336,0x522,0x51a,0x52a,0x52c,0x534,0x53c,0x540,0x541,0x549,0x551, 0x507,0x50e,0x512,0x355,0x355,0x355,0x519,0x521,0x529,0x52b,0x533,0x53b,0x53f,0x540,0x548,0x550,
0x559,0x541,0x561,0x566,0x559,0x541,0x56e,0x576,0x540,0x57e,0x586,0x58e,0x596,0x355,0x59e,0x355, 0x558,0x540,0x560,0x565,0x558,0x540,0x56d,0x575,0x53f,0x57d,0x585,0x58d,0x595,0x355,0x59d,0x355,
0x5a6,0x4ec,0x5ae,0x58e,0x540,0x57e,0x5b5,0x58e,0x5bd,0x5bf,0x549,0x58e,0x355,0x355,0x5c7,0x355, 0x5a5,0x4ec,0x5ad,0x58d,0x53f,0x57d,0x5b4,0x58d,0x5bc,0x5be,0x548,0x58d,0x53f,0x355,0x5c6,0x355,
0x355,0x5cd,0x5d4,0x355,0x355,0x5d8,0x5e0,0x355,0x5e4,0x5eb,0x355,0x5f2,0x5fa,0x601,0x609,0x355, 0x355,0x5cc,0x5d3,0x355,0x355,0x5d7,0x5df,0x355,0x5e3,0x5ea,0x355,0x5f1,0x5f9,0x600,0x608,0x355,
0x355,0x60e,0x616,0x61e,0x626,0x62e,0x635,0x63d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x60d,0x615,0x61d,0x625,0x62d,0x634,0x63c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x645,0x355,0x355,0x655,0x655,0x64d, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x644,0x355,0x355,0x654,0x654,0x64c,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x65d,0x65d,0x54d,0x54d,0x355,0x663,0x66b,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x65c,0x65c,0x54c,0x54c,0x355,0x662,0x66a,0x355,
0x673,0x355,0x67b,0x355,0x682,0x688,0x355,0x355,0x355,0x690,0x355,0x355,0x355,0x355,0x355,0x355, 0x672,0x355,0x67a,0x355,0x681,0x687,0x355,0x355,0x355,0x68f,0x355,0x355,0x355,0x355,0x355,0x355,
0x697,0x355,0x69e,0x6a6,0x355,0x6ae,0x355,0x355,0x57d,0x6b6,0x6be,0x6c4,0x5bd,0x6cc,0x355,0x6d3, 0x696,0x355,0x69d,0x6a5,0x355,0x6ad,0x6b5,0x355,0x57c,0x6b8,0x6c0,0x6c6,0x5bc,0x6ce,0x355,0x6d5,
0x355,0x6d8,0x355,0x6de,0x6e6,0x6ea,0x6f2,0x6fa,0x702,0x707,0x70a,0x712,0x722,0x71a,0x732,0x72a, 0x355,0x6da,0x355,0x6e0,0x6e8,0x6ec,0x6f4,0x6fc,0x704,0x709,0x70c,0x714,0x724,0x71c,0x734,0x72c,
0x37c,0x73a,0x37c,0x742,0x745,0x37c,0x74d,0x37c,0x755,0x75d,0x765,0x76d,0x775,0x77d,0x785,0x78d, 0x37c,0x73c,0x37c,0x744,0x747,0x37c,0x74f,0x37c,0x757,0x75f,0x767,0x76f,0x777,0x77f,0x787,0x78f,
0x795,0x79c,0x355,0x7a4,0x7ac,0x355,0x7b4,0x7bc,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x355,0x355,0x355, 0x797,0x79e,0x355,0x7a6,0x7ae,0x355,0x7b6,0x7be,0x7c6,0x7ce,0x7d6,0x7de,0x7e6,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x7e7,0x7ed,0x7f3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x7e9,0x7ef,0x7f5,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x7fb,0x800,0x804,0x80c,0x37c,0x37c,0x37c,0x814,0x81c,0x823,0x355,0x828,0x355,0x355,0x355,0x830, 0x7fd,0x802,0x806,0x80e,0x37c,0x37c,0x37c,0x816,0x81e,0x825,0x355,0x82a,0x355,0x355,0x355,0x832,
0x355,0x678,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x677,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x53f,0x838,0x355,0x355,0x83f,0x355,0x355,0x847,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x53e,0x83a,0x355,0x355,0x841,0x355,0x355,0x849,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
@ -96,12 +96,12 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x84f,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x851,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6de,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6e0,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x855,0x355,0x85d,0x862,0x86a,0x355,0x355,0x872,0x87a,0x882,0x37c,0x887,0x88f,0x895,0x89d,0x89f, 0x857,0x355,0x85f,0x864,0x86c,0x355,0x355,0x874,0x87c,0x884,0x37c,0x889,0x891,0x897,0x89f,0x8a2,
0x8a7,0x682,0x355,0x355,0x355,0x355,0x8ae,0x8b6,0x355,0x8be,0x8c5,0x355,0x52a,0x8ca,0x8d2,0x682, 0x8aa,0x8b1,0x355,0x355,0x355,0x355,0x8b8,0x8c0,0x355,0x8c8,0x8cf,0x355,0x529,0x8d4,0x8dc,0x681,
0x355,0x8d8,0x8e0,0x8e4,0x355,0x8ec,0x8f4,0x8fc,0x355,0x902,0x906,0x90e,0x91e,0x916,0x355,0x926, 0x355,0x8e2,0x8ea,0x8ee,0x355,0x8f6,0x8fe,0x906,0x355,0x90c,0x910,0x918,0x928,0x920,0x355,0x930,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
@ -141,9 +141,9 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x92e,0x355,0x355,0x355,0x355,0x936,0x5bd,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x938,0x355,0x355,0x355,0x355,0x940,0x5bc,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x93b,0x943,0x947,0x355,0x355,0x355,0x355,0x338,0x33e,0x94f,0x957,0x95e,0x4ec,0x355,0x355,0x966, 0x945,0x94d,0x951,0x355,0x355,0x355,0x355,0x338,0x33e,0x959,0x961,0x968,0x4ec,0x355,0x355,0x970,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0xd58,0xd58,0xd70,0xdb0,0xdf0,0xe2c,0xe6c,0xeac,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024,0x1064,0x10a4, 0xd58,0xd58,0xd70,0xdb0,0xdf0,0xe2c,0xe6c,0xeac,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024,0x1064,0x10a4,
@ -175,50 +175,50 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0xc96,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0xc96,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x96d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x975,0x355,0x355,0x355,0x978,0x355,0x355,0x355, 0x977,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6b5,0x355,0x355,0x355,0x97f,0x355,0x355,0x355,
0x355,0x980,0x986,0x98a,0x355,0x355,0x98e,0x992,0x998,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x987,0x98d,0x991,0x355,0x355,0x995,0x999,0x99f,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x9a0,0x9a4,0x355,0x355,0x355,0x355,0x355,0x9ac,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x9a7,0x9ab,0x355,0x355,0x355,0x355,0x355,0x9b3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x9b4,0x9b8,0x9c0,0x9c4,0x355,0x9cb,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x9bb,0x9bf,0x9c7,0x9cb,0x355,0x9d2,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9d2,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x9d8,0x355,0x355,0x355,0x355,0x9df,0x355,0x355,0x355,0x355,
0x355,0x540,0x9d7,0x9de,0x5be,0x5bd,0x9e2,0x53d,0x355,0x9ea,0x9f1,0x355,0x9f7,0x5bd,0x9fc,0xa04, 0x355,0x53f,0x9e4,0x9eb,0x5bd,0x5bc,0x9ef,0x53c,0x355,0x9f7,0x9fe,0x355,0xa04,0x5bc,0xa09,0xa11,
0x355,0x355,0xa09,0x355,0x355,0x355,0x355,0x338,0xa11,0x5bd,0x5bf,0xa19,0xa20,0x355,0x355,0x355, 0x355,0x355,0xa16,0x355,0x355,0x355,0x355,0x338,0xa1e,0x5bc,0x5be,0xa26,0xa2d,0x355,0x355,0x355,
0x355,0x355,0x9d7,0xa28,0x355,0x355,0xa30,0xa38,0x355,0x355,0x355,0x355,0x355,0x355,0xa3c,0xa44, 0x355,0x355,0x9e4,0xa35,0x355,0x355,0xa3d,0xa45,0x355,0x355,0x355,0x355,0x355,0x355,0xa49,0xa51,
0x355,0x355,0xa4c,0x4b0,0x355,0x355,0xa54,0x355,0x355,0xa5a,0xa62,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0xa59,0x4b0,0x355,0x355,0xa61,0x355,0x355,0xa67,0xa6f,0x355,0x355,0x355,0x355,0x355,
0x355,0xa67,0x355,0x355,0x355,0xa6f,0xa77,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xa7f,0x975, 0x355,0xa74,0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0xa8c,0xa94,0x355,0x355,0x355,0xa97,0x6b5,
0xa87,0xa8b,0xa93,0x355,0xa9a,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0xa9f,0xaa3,0xaab,0x355,0xab2,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0xaa1,0x355,0x355,0x936,0xaa9,0x355,0x355,0x355,0xaaf,0xab7,0x355,0xabb,0x355,0x355,0x355, 0x355,0xab9,0x355,0x355,0x940,0xac1,0x355,0x355,0x355,0xac7,0xacf,0x355,0xad3,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xac1,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xad9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xac7,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xadf,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xace,0x355,0xad4,0x57d,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xae6,0x355,0xaec,0x57c,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0xa6f,0xa77,0x355,0x355,0x355,0x355,0x355,0x355,0x678,0x355,0xada,0x355,0x355, 0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0x355,0x355,0x355,0x355,0x677,0x355,0xaf2,0x355,0x355,
0xae2,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0xafa,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0xae3,0x57d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0xaff,0x57c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0xaeb,0xaf3,0xaf9,0x355,0x355,0x355,0x355,0xb01,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0xb07,0xb0f,0xb15,0x355,0x355,0x355,0x355,0xb1d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0xb09,0xb11,0xb16,0xb1c,0xb24,0xb2c,0xb34,0xb0d,0xb3c,0xb44, 0x355,0x355,0x355,0x355,0x355,0x355,0xb25,0xb2d,0xb32,0xb38,0xb40,0xb48,0xb50,0xb29,0xb58,0xb60,
0xb4c,0xb53,0xb0e,0xb09,0xb11,0xb0c,0xb1c,0xb0f,0xb0a,0xb5b,0xb0d,0xb63,0xb6b,0xb73,0xb7a,0xb66, 0xb68,0xb6f,0xb2a,0xb25,0xb2d,0xb28,0xb38,0xb2b,0xb26,0xb77,0xb29,0xb7f,0xb87,0xb8f,0xb96,0xb82,
0xb6e,0xb76,0xb7d,0xb69,0xb85,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0xb8a,0xb92,0xb99,0xb85,0xba1,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x87a,0xb8d,0x87a,0xb94,0xb9b,0xba3,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x87c,0xba9,0x87c,0xbb0,0xbb7,0xbbf,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0xbab,0xbb3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xbb7,0x355, 0x355,0x355,0x355,0x355,0x355,0xbc7,0xbcf,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xbd3,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9c9,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9d0,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0xbbf,0x355,0xbc7,0xbcf,0xbd6,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0xbdb,0x355,0xbe3,0xbeb,0xbf2,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xb05, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xb21,
0xbde,0xbde,0xbe4,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0xbfa,0xbfa,0xc00,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x9ec,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x9f9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x540,0x87a,0x87a,0x87a,0x355,0x355,0x355,0x355,0x87a,0x87a, 0x355,0x355,0x355,0x355,0x355,0x355,0x53f,0x87c,0x87c,0x87c,0x355,0x355,0x355,0x355,0x87c,0x87c,
0x87a,0x87a,0x87a,0x87a,0x87a,0xbec,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x87c,0x87c,0x87c,0x87c,0x87c,0xc08,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355, 0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x335,0x335,0,0,0,0,0,0,0,0, 0x355,0x355,0x355,0x355,0x355,0x355,0x335,0x335,0,0,0,0,0,0,0,0,
@ -304,7 +304,7 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812, 0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0, 0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
0,4,0,0,0,0,0,0,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811, 0,4,0,0,0,0,0,4,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811, 0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0x1719,1,0,0,0, 0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0x1719,1,0,0,0,
0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64, 0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,
@ -342,352 +342,358 @@ static const uint16_t ucase_props_trieIndex[12244]={
0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44, 0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,
4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0, 4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x64,0x64,0x64,0,0,0,0,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44, 0,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44, 0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, 0x44,0x44,0x44,0x44,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44,
0,0,0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44, 0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0, 0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4,
4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44,
0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0,0,
0,4,4,4,4,4,4,4,4,0,0,0,0,0x64,0,0,
0,0x44,0x64,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,
0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,
0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x64,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0, 0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0,
0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0,
0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0,
0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0x44,0,0,4,4,0,0,0,0,0,0,0,0,0, 0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0,
0,0x64,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,4,0,0,0,0,4,4,0,0,4, 0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
4,0x64,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,0,0,0,4,0,0,
0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,
4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0, 0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x64,0,0,4,0,4,4,4,4,0,0,0, 0,0,0,0,4,0,0,0,0,0,4,4,4,0,4,4,
0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,4,0, 4,0x64,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0, 0,0,0,0,0,0,4,0,0,0,0,0,4,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, 4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, 0,0,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, 0,0,0x64,0,0,0,0,0,0,0,4,4,4,0,4,0,
0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4, 0,4,0,0,4,4,4,4,0x64,0x64,0x64,0,0,0,0,0,
4,0,4,4,4,0x64,0,0,0,0,0,0,0,0x64,0x64,0, 0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4,4,4,4,0x64,0x64,0x64,4,4,0,0,0,0,0,0,0,
0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0, 0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0,0, 0,0,0,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,4,4, 0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0x64,
4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0x64,0, 0,0,0,0,0,0x64,0x64,4,0x64,4,4,4,4,4,0x64,0x64,
0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0, 0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,4,4,4,4,4,4,4,4,4,4,4,0,4,4,4,
0,4,0,0,4,4,4,4,0x64,0x64,0x64,4,4,0,0,0,
0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x64,0,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0x64,0x64,4,0x64,4,4,4,
4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44,
0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,
0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0, 4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,4,4,4,0,4,4,4,4,4,0x64, 0,4,4,4,4,0,4,4,4,4,4,0x64,0,0x64,0x64,0,
0,0x64,0x64,0,0,4,4,0,0,0,0,0,0,0,0,0, 0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
4,4,0,0,0,0,4,4,4,0,0,0,0,0,0,0, 0,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,0, 0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,0,0,4,4,0, 0,0,0,0,0,0,4,0,0,4,4,0,0,0,0,0,
0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,0,0,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, 0,4,0,0,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, 0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0,0x179a,0,0,0,0, 0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0,0x179a,0,0,0,0,0,0x179a,0,0,
0,0x179a,0,0,0x17b9,0x17e9,0x1819,0x1849,0x1879,0x18a9,0x18d9,0x1909,0x1939,0x1969,0x1999,0x19c9, 0x17b9,0x17e9,0x1819,0x1849,0x1879,0x18a9,0x18d9,0x1909,0x1939,0x1969,0x1999,0x19c9,0x19f9,0x1a29,0x1a59,0x1a89,
0x19f9,0x1a29,0x1a59,0x1a89,0x1ab9,0x1ae9,0x1b19,0x1b49,0x1b79,0x1ba9,0x1bd9,0x1c09,0x1c39,0x1c69,0x1c99,0x1cc9, 0x1ab9,0x1ae9,0x1b19,0x1b49,0x1b79,0x1ba9,0x1bd9,0x1c09,0x1c39,0x1c69,0x1c99,0x1cc9,0x1cf9,0x1d29,0x1d59,0x1d89,
0x1cf9,0x1d29,0x1d59,0x1d89,0x1db9,0x1de9,0x1e19,0x1e49,0x1e79,0x1ea9,0x1ed9,0x1f09,0x1f39,0x1f69,0x1f99,0, 0x1db9,0x1de9,0x1e19,0x1e49,0x1e79,0x1ea9,0x1ed9,0x1f09,0x1f39,0x1f69,0x1f99,0,4,0x1fc9,0x1ff9,0x2029,
4,0x1fc9,0x1ff9,0x2029,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x44,0x44,0x44,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,
0x205a,0x205a,0x205a,0x205a,0x207a,0x207a,0x207a,0x207a,0x207a,0x207a,0,0,0x2099,0x20c9,0x20f9,0x2129, 0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
0x2159,0x2189,0,0,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, 0x207a,0x207a,0x207a,0x207a,0x207a,0x207a,0,0,0x2099,0x20c9,0x20f9,0x2129,0x2159,0x2189,0,0,
0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, 0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
0x205a,0x205a,0x205a,0x205a,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,4,0x64,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,0,4,4,4,4,4,4,4,0,0,0,0,0,0, 0,0,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,
0,0,4,0,0,4,4,4,4,4,4,4,4,4,0x64,4, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,
0,0,0,4,0,0,0,0,0,0x44,0,0,0,0,0,0, 4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,0,
0,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0, 0,4,4,4,4,4,4,4,4,4,0x64,4,0,0,0,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 0,0,0,0,0,0x44,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,4,4,4,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0, 0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,
0,0,0,4,4,0,0,0,0,0,0,0,0,0,4,0,
0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,
0x64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,0,4,4,4,4,
4,4,4,0,0x64,0,4,0,0,4,4,4,4,4,4,4,
4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0,0,0x64,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
0x44,0x64,4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x64,0,4,4,4,4,4,0,4,0,0,0,
0,0,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,
4,4,0x60,0x64,4,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,0,0,
0,4,0,4,4,4,0x60,0x60,0,0,0,0,0,0,0,0,
0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,
0x21b9,0x21e9,0x2219,0x2249,0x2279,0x22c9,0x2319,0x2349,0x2379,0,0,0,0,0,0,0,
0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,
0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0,0,0x23aa,0x23aa,0x23aa,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,
0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,
0,0,0,0,0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1,
1,1,1,1,1,1,1,1,5,0x23c9,1,1,1,0x23e9,1,1,
5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2409,1,
1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0,0x44,0x64,0x64,0x44,0x64,
0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,
0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x242a,0x2469,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x24a9,0x2529,0x25a9,0x2629,0x26a9,0x2729,1,1,0x275a,1,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,
0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,
0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x27a9,0x411,0x2829,0x411,
0x28d9,0x411,0x2989,0x411,0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,
0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,
0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x2a39,0x2aa9,0x2b19,0x2b89,
0x2bf9,0x2c69,0x2cd9,0x2d49,0x2dbb,0x2e2b,0x2e9b,0x2f0b,0x2f7b,0x2feb,0x305b,0x30cb,0x3139,0x31a9,0x3219,0x3289,
0x32f9,0x3369,0x33d9,0x3449,0x34bb,0x352b,0x359b,0x360b,0x367b,0x36eb,0x375b,0x37cb,0x3839,0x38a9,0x3919,0x3989,
0x39f9,0x3a69,0x3ad9,0x3b49,0x3bbb,0x3c2b,0x3c9b,0x3d0b,0x3d7b,0x3deb,0x3e5b,0x3ecb,0x411,0x411,0x3f39,0x3fb9,
0x4029,0,0x40a9,0x4129,0xfc12,0xfc12,0xdb12,0xdb12,0x41db,4,0x4249,4,4,4,0x4299,0x4319,
0x4389,0,0x4409,0x4489,0xd512,0xd512,0xd512,0xd512,0x453b,4,4,4,0x411,0x411,0x45a9,0x4659,
0,0,0x4729,0x47a9,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4859,0x4909,
0x49d9,0x391,0x4a59,0x4ad9,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b89,0x4c09,
0x4c79,0,0x4cf9,0x4d79,0xc012,0xc012,0xc112,0xc112,0x4e2b,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0,
0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4,
0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,4,
4,4,4,4,4,4,4,4,0,0x25,0,0,0,0,0,0,
0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,
0x64,0x64,0x64,0x44,0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,
0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,
0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0,
0,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e9a,0,
2,0,0x4eda,0x4f1a,2,2,0,1,2,2,0xe12,2,1,0,0,0,
0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1,
0x21,0x21,0,0,0,0,0xf211,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0,0,0,0x92,0xff91,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,
0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,0x92,0xff91,0x4f5a,0x4f7a,0x4f9a,0x4fb9,0x4fd9,0x92,
0xff91,0x92,0xff91,0x92,0xff91,0x4ffa,0x501a,0x503a,0x505a,1,0x92,0xff91,1,0x92,0xff91,1,
1,1,1,1,0x25,5,0x507a,0x507a,0x92,0xff91,0x92,0xff91,1,0,0,0,
0,0,0,0x92,0xff91,0x92,0xff91,0x44,0x44,0x44,0x92,0xff91,0,0,0,0,
0,0,0,0,0,0,0,0,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0,0x5099,0,0,0,0,
0,0x5099,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0,
0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4,
4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x50ba,0x50f9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,
4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,5,1,1,1,1,1,1,1,1,0x92,0xff91,0x92,
0xff91,0x513a,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92,
0xff91,0x515a,1,0,0x92,0xff91,0x92,0xff91,0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x517a,0x519a,0x51ba,0x51da,0x517a,1,0x51fa,0x521a,0x523a,0x525a,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91,
0xe812,0x527a,0x529a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0,
5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0,
0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x64,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
0,0,0,0,0,0,4,4,4,4,4,0x64,0x64,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,4,4,4,4,4,4,4,4,4,4,0,0x60,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x64,0,0,4,4,4,4,0,0,4,4,0,0,
0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,4,4,4,4,4,0,0,4,4,0,0,4,4,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,0x64,0,0,0x44,
0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0x52b9,1,1,1,1,1,1,1,4,5,5,5,5,
1,1,1,1,1,1,1,1,1,4,4,4,0,0,0,0,
0x52d9,0x5309,0x5339,0x5369,0x5399,0x53c9,0x53f9,0x5429,0x5459,0x5489,0x54b9,0x54e9,0x5519,0x5549,0x5579,0x55a9,
0x5bd9,0x5c09,0x5c39,0x5c69,0x5c99,0x5cc9,0x5cf9,0x5d29,0x5d59,0x5d89,0x5db9,0x5de9,0x5e19,0x5e49,0x5e79,0x5ea9,
0x5ed9,0x5f09,0x5f39,0x5f69,0x5f99,0x5fc9,0x5ff9,0x6029,0x6059,0x6089,0x60b9,0x60e9,0x6119,0x6149,0x6179,0x61a9,
0x55d9,0x5609,0x5639,0x5669,0x5699,0x56c9,0x56f9,0x5729,0x5759,0x5789,0x57b9,0x57e9,0x5819,0x5849,0x5879,0x58a9,
0x58d9,0x5909,0x5939,0x5969,0x5999,0x59c9,0x59f9,0x5a29,0x5a59,0x5a89,0x5ab9,0x5ae9,0x5b19,0x5b49,0x5b79,0x5ba9,
0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x61d9,0x6259,0x62d9,0x6359,0x6409,0x64b9,0x6559,0,0,0,0,0,0,0,0,0,
0,0,0,0x65f9,0x6679,0x66f9,0x6779,0x67f9,0,0,0,0,0,0,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0,
0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,
0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0,
0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,
0,0,4,0,4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,0,0,0,0,4,4,0,0,0,0,0,0,0, 0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x1412,0x1412,0x1412,0x1412,
0,0,4,0,0,0,0,0,0,0x64,0x44,0x64,0,0,0,0, 0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0,0,0,0,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,4,4,4,
0,4,4,0,0,0,0,0,4,0x64,4,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x44,0x64,0,0,4,0,0,0,0,0,0,0,0, 0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, 0,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,4,4,4,0,0x64,0,4,0,0,4,4,4, 0,0,0,0,0,0,0,0,0,0,0,0,0x2012,0x2012,0x2012,0x2012,
4,4,4,4,4,0,0,0,0,0,0,4,4,0x44,0x44,0x44, 0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,
0x44,0x44,0x44,0x44,0x44,0,0,0x64,0,0,0,0,0,0,0,4, 0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0,
0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64, 0,0,0,0,0,0,0,0,0,0,0,0,0xe011,0xe011,0xe011,0xe011,
0x64,0x64,0x64,0x44,0x44,0x64,4,0,0,0,0,0,0,0,0,0, 0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,4,4, 0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0,
4,4,4,0,4,0,0,0,0,0,4,0,0x60,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,4,4,4,4,0,0,4,4,0x60,0x64,4,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0x64,0,4,4,0,0,0,4,0,4,4,4,0x60,0x60,
0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
4,4,4,4,0,0,4,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,4,4,0,0,0x21b9,0x21e9,0x2219,0x2249,0x2279,0x22c9,0x2319,0x2349,
0x2379,0,0,0,0,0,0,0,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,
0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,
0x23aa,0x23aa,0x23aa,0,0,0x23aa,0x23aa,0x23aa,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,
0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,
0x64,0,0,0,0,0x64,0,0,0,0,0,0,0x44,0,0,0,
0x44,0x44,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,0x25,5,5,5,5,5,
5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,
5,0x23c9,1,1,1,0x23e9,1,1,5,5,5,5,0x25,5,5,5,
0x25,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,0x2409,1,1,1,1,1,1,1,0x21,1,
1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,
0x64,0x64,0,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x242a,0x2469,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x24a9,0x2529,0x25a9,0x2629,0x26a9,0x2729,
1,1,0x275a,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0,0,0x27a9,0x411,0x2829,0x411,0x28d9,0x411,0x2989,0x411,0,0xfc12,0,0xfc12,
0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,
0x3f11,0x3f11,0,0,0x2a39,0x2aa9,0x2b19,0x2b89,0x2bf9,0x2c69,0x2cd9,0x2d49,0x2dbb,0x2e2b,0x2e9b,0x2f0b,
0x2f7b,0x2feb,0x305b,0x30cb,0x3139,0x31a9,0x3219,0x3289,0x32f9,0x3369,0x33d9,0x3449,0x34bb,0x352b,0x359b,0x360b,
0x367b,0x36eb,0x375b,0x37cb,0x3839,0x38a9,0x3919,0x3989,0x39f9,0x3a69,0x3ad9,0x3b49,0x3bbb,0x3c2b,0x3c9b,0x3d0b,
0x3d7b,0x3deb,0x3e5b,0x3ecb,0x411,0x411,0x3f39,0x3fb9,0x4029,0,0x40a9,0x4129,0xfc12,0xfc12,0xdb12,0xdb12,
0x41db,4,0x4249,4,4,4,0x4299,0x4319,0x4389,0,0x4409,0x4489,0xd512,0xd512,0xd512,0xd512,
0x453b,4,4,4,0x411,0x411,0x45a9,0x4659,0,0,0x4729,0x47a9,0xfc12,0xfc12,0xce12,0xce12,
0,4,4,4,0x411,0x411,0x4859,0x4909,0x49d9,0x391,0x4a59,0x4ad9,0xfc12,0xfc12,0xc812,0xc812,
0xfc92,4,4,4,0,0,0x4b89,0x4c09,0x4c79,0,0x4cf9,0x4d79,0xc012,0xc012,0xc112,0xc112,
0x4e2b,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,0,0,0,0,0,0,0,0,4,4,0,0,
0,0,0,0,4,0,0,4,0,0,4,4,4,4,4,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,
0,0x25,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44,0x44,4,4,4,
4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,
0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,0,0,2,0,0,1,2,2,2,1,1,
2,2,2,1,0,2,0,0,0,2,2,2,2,2,0,0,
0,0,0,0,2,0,0x4e9a,0,2,0,0x4eda,0x4f1a,2,2,0,1,
2,2,0xe12,2,1,0,0,0,0,1,0,0,1,1,2,2,
0,0,0,0,0,2,1,1,0x21,0x21,0,0,0,0,0xf211,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
0,0,0,0x92,0xff91,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,
0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,
0x92,0xff91,0x4f5a,0x4f7a,0x4f9a,0x4fb9,0x4fd9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x4ffa,0x501a,0x503a,
0x505a,1,0x92,0xff91,1,0x92,0xff91,1,1,1,1,1,0x25,5,0x507a,0x507a,
0x92,0xff91,0x92,0xff91,1,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,0x44,
0x44,0x44,0x92,0xff91,0,0,0,0,0,0,0,0,0,0,0,0,
0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
0x5099,0x5099,0,0x5099,0,0,0,0,0,0x5099,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x60,0x60,
0,4,4,4,4,4,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0x64,0x64,4,4,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x50ba,0x50f9,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,4,4,4,0,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,1,1,1,
1,1,1,1,1,0x92,0xff91,0x92,0xff91,0x513a,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,4,4,4,0x92,0xff91,0x515a,1,0,0x92,0xff91,0x92,0xff91,
0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x517a,0x519a,
0x51ba,0x51da,0x517a,1,0x51fa,0x521a,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91,0xe812,0x527a,0x529a,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,5,5,1,0,0,0,0,0,0,0,4,0,
0,0,0x64,0,0,0,0,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x64,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,0,0,0,0,0,0,4,4,
4,4,4,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,4,4,
4,4,0,0,4,4,0,0,0x60,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,
0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,0,
0,0,0,4,0,0,0,0,0,0,0,0,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0,0x44,0x44,0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44,
0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
0,0,0,4,4,0,0x64,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,0x52b9,1,1,1,1,
1,1,1,4,5,5,5,5,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0x52d9,0x5309,0x5339,0x5369,0x5399,0x53c9,0x53f9,0x5429,
0x5459,0x5489,0x54b9,0x54e9,0x5519,0x5549,0x5579,0x55a9,0x5bd9,0x5c09,0x5c39,0x5c69,0x5c99,0x5cc9,0x5cf9,0x5d29,
0x5d59,0x5d89,0x5db9,0x5de9,0x5e19,0x5e49,0x5e79,0x5ea9,0x5ed9,0x5f09,0x5f39,0x5f69,0x5f99,0x5fc9,0x5ff9,0x6029,
0x6059,0x6089,0x60b9,0x60e9,0x6119,0x6149,0x6179,0x61a9,0x55d9,0x5609,0x5639,0x5669,0x5699,0x56c9,0x56f9,0x5729,
0x5759,0x5789,0x57b9,0x57e9,0x5819,0x5849,0x5879,0x58a9,0x58d9,0x5909,0x5939,0x5969,0x5999,0x59c9,0x59f9,0x5a29,
0x5a59,0x5a89,0x5ab9,0x5ae9,0x5b19,0x5b49,0x5b79,0x5ba9,0,0,0,0,0,4,0,0,
4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x61d9,0x6259,0x62d9,0x6359,0x6409,0x64b9,0x6559,0,
0,0,0,0,0,0,0,0,0,0,0,0x65f9,0x6679,0x66f9,0x6779,0x67f9,
0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, 0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, 0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,
0,4,0,0,0,0,0,0,0,0,0,0,0,0x1012,0x1012,0x1012, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012, 0,0,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,0,0,4,0,4,0xf011,0xf011,0xf011, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011, 0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0,0,0,0,0,0,0,0, 4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,0,0,0x64,0x64,0,0,4,0,0,0x44,0x44,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,0,4,4,4,4,4,4,0x64,0x64,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,
4,4,4,0,0x60,0,0,0,0,0,0,0,0,4,0x64,4,
4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,4,4,0,0,4,0x60,0x64,4,
0,0,0,0,0,0,4,0,0,0,0,4,4,4,4,4,
4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, 0,0,0,0,0,0x60,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,
0,0,0,0,0,0,0x64,4,4,0,0x64,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,4,4,4,4,4,0,4,0,
0,0,0,4,4,0,0x64,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0x64,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,
4,4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0, 4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412, 0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412, 0,4,0,0x64,0,0,0,0,0,0,0,0,0,0,0,4,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11, 0,4,0,0,4,4,4,4,4,4,0x60,0x64,0,0,0,0,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0,0,0,0,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,
0,4,4,4,0,4,4,0,0,0,0,0,4,0x64,4,0x44,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64, 0,0,0,0,0,0,0,0,0,4,4,4,0,0,4,4,
0,0,0,0,0,0x44,0x64,0,0,0,0,0,0,0,0,0, 4,4,0,4,4,4,4,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012, 4,4,4,4,4,4,4,4,0,0x64,0x64,0,0,0,0,0,
0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012, 0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
0x2012,0x2012,0x2012,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
0xe011,0xe011,0xe011,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,
0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,4,4,4,4,4,4,4,4,4,4,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,
0,0x64,0x64,0,0,4,0,0,0x44,0x44,0x44,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
0,4,4,4,4,4,4,0x64,0x64,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,0,
0x60,0,0,0,0,0,0,0,0,4,0x64,4,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,4,4,0,0,4,0x60,0x64,4,0,0,0,0,
0,0,4,0,0,0,0,4,4,4,4,4,4,0x64,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
0,0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,
0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,
0,0,0x64,4,4,0,0x64,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,4,4,4,4,4,0,4,0,0,0,0,4,
4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,4,4,4,4,0,0,0,0,0,0,4,4,0,0x64,
0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,4,4,4,4,4,4,4,0,0,4,0,0x64,
0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,
4,4,4,4,4,4,0x60,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,4,4,4,0,0,4,4,4,4,0,4,
4,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
4,4,4,4,0,0x64,0x64,0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012, 0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0xf011,0xf011,0xf011,0xf011,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011, 0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0,0,0, 0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,4,4,0x60,0x64,0,
0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,0,0,4,4,0,0,0,0,0,4,4,4, 4,4,4,4,0,0,4,4,0,0,0,0,0,4,4,4,
4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0, 4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
@ -712,7 +718,8 @@ static const uint16_t ucase_props_trieIndex[12244]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4, 0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,0,4,0,0,0,0, 4,4,4,4,4,4,4,4,4,4,0,4,4,0,0,0,
0,0,0,0,0,0,0,0,0x60,0x60,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,0x64,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,4,0x64,0,0,0,0,0,
0,0x60,0x60,0x64,0x64,0x64,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,4, 0,0x60,0x60,0x64,0x64,0x64,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,4,
@ -929,13 +936,13 @@ static const UCaseProps ucase_props_singleton={
ucase_props_trieIndex+3288, ucase_props_trieIndex+3288,
NULL, NULL,
3288, 3288,
8956, 9068,
0x188, 0x188,
0xd54, 0xd54,
0x0, 0x0,
0x0, 0x0,
0xe0800, 0xe0800,
0x2fd0, 0x3040,
NULL, 0, FALSE, FALSE, 0, NULL NULL, 0, FALSE, FALSE, 0, NULL
}, },
{ 4,0,0,0 } { 4,0,0,0 }

View file

@ -687,13 +687,13 @@ void toUpper(uint32_t options,
if (change) { if (change) {
ByteSinkUtil::appendTwoBytes(upper, sink); ByteSinkUtil::appendTwoBytes(upper, sink);
if ((data & HAS_EITHER_DIALYTIKA) != 0) { if ((data & HAS_EITHER_DIALYTIKA) != 0) {
sink.Append(u8"\u0308", 2); // restore or add a dialytika sink.Append(reinterpret_cast<const char*>(u8"\u0308"), 2); // restore or add a dialytika
} }
if (addTonos) { if (addTonos) {
sink.Append(u8"\u0301", 2); sink.Append(reinterpret_cast<const char*>(u8"\u0301"), 2);
} }
while (numYpogegrammeni > 0) { while (numYpogegrammeni > 0) {
sink.Append(u8"\u0399", 2); sink.Append(reinterpret_cast<const char*>(u8"\u0399"), 2);
--numYpogegrammeni; --numYpogegrammeni;
} }
} }

View file

@ -556,7 +556,6 @@ u_charAge(UChar32 c, UVersionInfo versionArray) {
U_CAPI UScriptCode U_EXPORT2 U_CAPI UScriptCode U_EXPORT2
uscript_getScript(UChar32 c, UErrorCode *pErrorCode) { uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
uint32_t scriptX;
if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
return USCRIPT_INVALID_CODE; return USCRIPT_INVALID_CODE;
} }
@ -564,48 +563,46 @@ uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return USCRIPT_INVALID_CODE; return USCRIPT_INVALID_CODE;
} }
scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
return (UScriptCode)scriptX; return (UScriptCode)codeOrIndex;
} else if(scriptX<UPROPS_SCRIPT_X_WITH_INHERITED) { } else if(scriptX<UPROPS_SCRIPT_X_WITH_INHERITED) {
return USCRIPT_COMMON; return USCRIPT_COMMON;
} else if(scriptX<UPROPS_SCRIPT_X_WITH_OTHER) { } else if(scriptX<UPROPS_SCRIPT_X_WITH_OTHER) {
return USCRIPT_INHERITED; return USCRIPT_INHERITED;
} else { } else {
return (UScriptCode)scriptExtensions[scriptX&UPROPS_SCRIPT_MASK]; return (UScriptCode)scriptExtensions[codeOrIndex];
} }
} }
U_CAPI UBool U_EXPORT2 U_CAPI UBool U_EXPORT2
uscript_hasScript(UChar32 c, UScriptCode sc) { uscript_hasScript(UChar32 c, UScriptCode sc) {
const uint16_t *scx;
uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
return sc==(UScriptCode)scriptX; return sc==(UScriptCode)codeOrIndex;
} }
scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK); const uint16_t *scx=scriptExtensions+codeOrIndex;
if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) { if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
scx=scriptExtensions+scx[1]; scx=scriptExtensions+scx[1];
} }
if(sc>=USCRIPT_CODE_LIMIT) { uint32_t sc32=sc;
if(sc32>0x7fff) {
/* Guard against bogus input that would make us go past the Script_Extensions terminator. */ /* Guard against bogus input that would make us go past the Script_Extensions terminator. */
return FALSE; return FALSE;
} }
while(sc>*scx) { while(sc32>*scx) {
++scx; ++scx;
} }
return sc==(*scx&0x7fff); return sc32==(*scx&0x7fff);
} }
U_CAPI int32_t U_EXPORT2 U_CAPI int32_t U_EXPORT2
uscript_getScriptExtensions(UChar32 c, uscript_getScriptExtensions(UChar32 c,
UScriptCode *scripts, int32_t capacity, UScriptCode *scripts, int32_t capacity,
UErrorCode *pErrorCode) { UErrorCode *pErrorCode) {
uint32_t scriptX;
int32_t length;
const uint16_t *scx;
uint16_t sx;
if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
return 0; return 0;
} }
@ -613,21 +610,23 @@ uscript_getScriptExtensions(UChar32 c,
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return 0; return 0;
} }
scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
if(capacity==0) { if(capacity==0) {
*pErrorCode=U_BUFFER_OVERFLOW_ERROR; *pErrorCode=U_BUFFER_OVERFLOW_ERROR;
} else { } else {
scripts[0]=(UScriptCode)scriptX; scripts[0]=(UScriptCode)codeOrIndex;
} }
return 1; return 1;
} }
scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK); const uint16_t *scx=scriptExtensions+codeOrIndex;
if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) { if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
scx=scriptExtensions+scx[1]; scx=scriptExtensions+scx[1];
} }
length=0; int32_t length=0;
uint16_t sx;
do { do {
sx=*scx++; sx=*scx++;
if(length<capacity) { if(length<capacity) {

File diff suppressed because it is too large Load diff

View file

@ -234,7 +234,7 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U
ptrdiff_t pointerAdjustment = aligned_p - p; ptrdiff_t pointerAdjustment = aligned_p - p;
if (bufferSizeNeeded + pointerAdjustment <= stackBufferSize) { if (bufferSizeNeeded + pointerAdjustment <= stackBufferSize) {
stackBuffer = reinterpret_cast<void *>(aligned_p); stackBuffer = reinterpret_cast<void *>(aligned_p);
stackBufferSize -= pointerAdjustment; stackBufferSize -= static_cast<int32_t>(pointerAdjustment);
} else { } else {
/* prevent using the stack buffer but keep the size > 0 so that we do not just preflight */ /* prevent using the stack buffer but keep the size > 0 so that we do not just preflight */
stackBufferSize = 1; stackBufferSize = 1;

View file

@ -766,6 +766,9 @@ uloc_getKeywordValue(const char* localeID,
char* buffer, int32_t bufferCapacity, char* buffer, int32_t bufferCapacity,
UErrorCode* status) UErrorCode* status)
{ {
if (buffer != nullptr) {
buffer[0] = '\0';
}
const char* startSearchHere = NULL; const char* startSearchHere = NULL;
const char* nextSeparator = NULL; const char* nextSeparator = NULL;
char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN];

View file

@ -60,7 +60,7 @@ U_CDECL_BEGIN
* @see u_getUnicodeVersion * @see u_getUnicodeVersion
* @stable ICU 2.0 * @stable ICU 2.0
*/ */
#define U_UNICODE_VERSION "12.1" #define U_UNICODE_VERSION "13.0"
/** /**
* \file * \file
@ -1788,6 +1788,25 @@ enum UBlockCode {
/** @stable ICU 64 */ /** @stable ICU 64 */
UBLOCK_WANCHO = 300, /*[1E2C0]*/ UBLOCK_WANCHO = 300, /*[1E2C0]*/
// New blocks in Unicode 13.0
/** @stable ICU 66 */
UBLOCK_CHORASMIAN = 301, /*[10FB0]*/
/** @stable ICU 66 */
UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G = 302, /*[30000]*/
/** @stable ICU 66 */
UBLOCK_DIVES_AKURU = 303, /*[11900]*/
/** @stable ICU 66 */
UBLOCK_KHITAN_SMALL_SCRIPT = 304, /*[18B00]*/
/** @stable ICU 66 */
UBLOCK_LISU_SUPPLEMENT = 305, /*[11FB0]*/
/** @stable ICU 66 */
UBLOCK_SYMBOLS_FOR_LEGACY_COMPUTING = 306, /*[1FB00]*/
/** @stable ICU 66 */
UBLOCK_TANGUT_SUPPLEMENT = 307, /*[18D00]*/
/** @stable ICU 66 */
UBLOCK_YEZIDI = 308, /*[10E80]*/
#ifndef U_HIDE_DEPRECATED_API #ifndef U_HIDE_DEPRECATED_API
/** /**
* One more than the highest normal UBlockCode value. * One more than the highest normal UBlockCode value.
@ -1795,7 +1814,7 @@ enum UBlockCode {
* *
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/ */
UBLOCK_COUNT = 301, UBLOCK_COUNT = 309,
#endif // U_HIDE_DEPRECATED_API #endif // U_HIDE_DEPRECATED_API
/** @stable ICU 2.0 */ /** @stable ICU 2.0 */
@ -2436,6 +2455,8 @@ typedef enum UIndicPositionalCategory {
U_INPC_TOP_AND_RIGHT, U_INPC_TOP_AND_RIGHT,
/** @stable ICU 63 */ /** @stable ICU 63 */
U_INPC_VISUAL_ORDER_LEFT, U_INPC_VISUAL_ORDER_LEFT,
/** @stable ICU 66 */
U_INPC_TOP_AND_BOTTOM_AND_LEFT,
} UIndicPositionalCategory; } UIndicPositionalCategory;
/** /**

View file

@ -192,13 +192,10 @@
#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource) #define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias) #define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem) #define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
#define res_getBinary U_ICU_ENTRY_POINT_RENAME(res_getBinary)
#define res_getBinaryNoTrace U_ICU_ENTRY_POINT_RENAME(res_getBinaryNoTrace) #define res_getBinaryNoTrace U_ICU_ENTRY_POINT_RENAME(res_getBinaryNoTrace)
#define res_getIntVector U_ICU_ENTRY_POINT_RENAME(res_getIntVector)
#define res_getIntVectorNoTrace U_ICU_ENTRY_POINT_RENAME(res_getIntVectorNoTrace) #define res_getIntVectorNoTrace U_ICU_ENTRY_POINT_RENAME(res_getIntVectorNoTrace)
#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType) #define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource) #define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
#define res_getString U_ICU_ENTRY_POINT_RENAME(res_getString)
#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace) #define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex) #define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey) #define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)

View file

@ -475,6 +475,15 @@ typedef enum UScriptCode {
/** @stable ICU 64 */ /** @stable ICU 64 */
USCRIPT_WANCHO = 188,/* Wcho */ USCRIPT_WANCHO = 188,/* Wcho */
/** @stable ICU 66 */
USCRIPT_CHORASMIAN = 189,/* Chrs */
/** @stable ICU 66 */
USCRIPT_DIVES_AKURU = 190,/* Diak */
/** @stable ICU 66 */
USCRIPT_KHITAN_SMALL_SCRIPT = 191,/* Kits */
/** @stable ICU 66 */
USCRIPT_YEZIDI = 192,/* Yezi */
#ifndef U_HIDE_DEPRECATED_API #ifndef U_HIDE_DEPRECATED_API
/** /**
* One more than the highest normal UScriptCode value. * One more than the highest normal UScriptCode value.
@ -482,7 +491,7 @@ typedef enum UScriptCode {
* *
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/ */
USCRIPT_CODE_LIMIT = 189 USCRIPT_CODE_LIMIT = 193
#endif // U_HIDE_DEPRECATED_API #endif // U_HIDE_DEPRECATED_API
} UScriptCode; } UScriptCode;

View file

@ -60,7 +60,7 @@
* This value will change in the subsequent releases of ICU * This value will change in the subsequent releases of ICU
* @stable ICU 2.4 * @stable ICU 2.4
*/ */
#define U_ICU_VERSION_MAJOR_NUM 65 #define U_ICU_VERSION_MAJOR_NUM 66
/** The current ICU minor version as an integer. /** The current ICU minor version as an integer.
* This value will change in the subsequent releases of ICU * This value will change in the subsequent releases of ICU
@ -86,7 +86,7 @@
* This value will change in the subsequent releases of ICU * This value will change in the subsequent releases of ICU
* @stable ICU 2.6 * @stable ICU 2.6
*/ */
#define U_ICU_VERSION_SUFFIX _65 #define U_ICU_VERSION_SUFFIX _66
/** /**
* \def U_DEF2_ICU_ENTRY_POINT_RENAME * \def U_DEF2_ICU_ENTRY_POINT_RENAME
@ -139,7 +139,7 @@
* This value will change in the subsequent releases of ICU * This value will change in the subsequent releases of ICU
* @stable ICU 2.4 * @stable ICU 2.4
*/ */
#define U_ICU_VERSION "65.1" #define U_ICU_VERSION "66.1"
/** /**
* The current ICU library major version number as a string, for library name suffixes. * The current ICU library major version number as a string, for library name suffixes.
@ -152,13 +152,13 @@
* *
* @stable ICU 2.6 * @stable ICU 2.6
*/ */
#define U_ICU_VERSION_SHORT "65" #define U_ICU_VERSION_SHORT "66"
#ifndef U_HIDE_INTERNAL_API #ifndef U_HIDE_INTERNAL_API
/** Data version in ICU4C. /** Data version in ICU4C.
* @internal ICU 4.4 Internal Use Only * @internal ICU 4.4 Internal Use Only
**/ **/
#define U_ICU_DATA_VERSION "65.1" #define U_ICU_DATA_VERSION "66.1"
#endif /* U_HIDE_INTERNAL_API */ #endif /* U_HIDE_INTERNAL_API */
/*=========================================================================== /*===========================================================================

View file

@ -480,6 +480,11 @@ static int32_t getScript(const IntProperty &/*prop*/, UChar32 c, UProperty /*whi
return (int32_t)uscript_getScript(c, &errorCode); return (int32_t)uscript_getScript(c, &errorCode);
} }
static int32_t scriptGetMaxValue(const IntProperty &/*prop*/, UProperty /*which*/) {
uint32_t scriptX=uprv_getMaxValues(0)&UPROPS_SCRIPT_X_MASK;
return uprops_mergeScriptCodeOrIndex(scriptX);
}
/* /*
* Map some of the Grapheme Cluster Break values to Hangul Syllable Types. * Map some of the Grapheme Cluster Break values to Hangul Syllable Types.
* Hangul_Syllable_Type is fully redundant with a subset of Grapheme_Cluster_Break. * Hangul_Syllable_Type is fully redundant with a subset of Grapheme_Cluster_Break.
@ -586,7 +591,7 @@ static const IntProperty intProps[UCHAR_INT_LIMIT-UCHAR_INT_START]={
{ UPROPS_SRC_BIDI, 0, 0, getJoiningType, biDiGetMaxValue }, { UPROPS_SRC_BIDI, 0, 0, getJoiningType, biDiGetMaxValue },
{ 2, UPROPS_LB_MASK, UPROPS_LB_SHIFT, defaultGetValue, defaultGetMaxValue }, { 2, UPROPS_LB_MASK, UPROPS_LB_SHIFT, defaultGetValue, defaultGetMaxValue },
{ UPROPS_SRC_CHAR, 0, (int32_t)U_NT_COUNT-1, getNumericType, getMaxValueFromShift }, { UPROPS_SRC_CHAR, 0, (int32_t)U_NT_COUNT-1, getNumericType, getMaxValueFromShift },
{ 0, UPROPS_SCRIPT_MASK, 0, getScript, defaultGetMaxValue }, { UPROPS_SRC_PROPSVEC, 0, 0, getScript, scriptGetMaxValue },
{ UPROPS_SRC_PROPSVEC, 0, (int32_t)U_HST_COUNT-1, getHangulSyllableType, getMaxValueFromShift }, { UPROPS_SRC_PROPSVEC, 0, (int32_t)U_HST_COUNT-1, getHangulSyllableType, getMaxValueFromShift },
// UCHAR_NFD_QUICK_CHECK: max=1=YES -- never "maybe", only "no" or "yes" // UCHAR_NFD_QUICK_CHECK: max=1=YES -- never "maybe", only "no" or "yes"
{ UPROPS_SRC_NFC, 0, (int32_t)UNORM_YES, getNormQuickCheck, getMaxValueFromShift }, { UPROPS_SRC_NFC, 0, (int32_t)UNORM_YES, getNormQuickCheck, getMaxValueFromShift },

View file

@ -121,12 +121,12 @@ enum {
* Properties in vector word 0 * Properties in vector word 0
* Bits * Bits
* 31..24 DerivedAge version major/minor one nibble each * 31..24 DerivedAge version major/minor one nibble each
* 23..22 3..1: Bits 7..0 = Script_Extensions index * 23..22 3..1: Bits 21..20 & 7..0 = Script_Extensions index
* 3: Script value from Script_Extensions * 3: Script value from Script_Extensions
* 2: Script=Inherited * 2: Script=Inherited
* 1: Script=Common * 1: Script=Common
* 0: Script=bits 7..0 * 0: Script=bits 21..20 & 7..0
* 21..20 reserved * 21..20 Bits 9..8 of the UScriptCode, or index to Script_Extensions
* 19..17 East Asian Width * 19..17 East Asian Width
* 16.. 8 UBlockCode * 16.. 8 UBlockCode
* 7.. 0 UScriptCode, or index to Script_Extensions * 7.. 0 UScriptCode, or index to Script_Extensions
@ -137,22 +137,43 @@ enum {
#define UPROPS_AGE_SHIFT 24 #define UPROPS_AGE_SHIFT 24
/* Script_Extensions: mask includes Script */ /* Script_Extensions: mask includes Script */
#define UPROPS_SCRIPT_X_MASK 0x00c000ff #define UPROPS_SCRIPT_X_MASK 0x00f000ff
#define UPROPS_SCRIPT_X_SHIFT 22 #define UPROPS_SCRIPT_X_SHIFT 22
// The UScriptCode or Script_Extensions index is split across two bit fields.
// (Starting with Unicode 13/ICU 66/2019 due to more varied Script_Extensions.)
// Shift the high bits right by 12 to assemble the full value.
#define UPROPS_SCRIPT_HIGH_MASK 0x00300000
#define UPROPS_SCRIPT_HIGH_SHIFT 12
#define UPROPS_MAX_SCRIPT 0x3ff
#define UPROPS_EA_MASK 0x000e0000 #define UPROPS_EA_MASK 0x000e0000
#define UPROPS_EA_SHIFT 17 #define UPROPS_EA_SHIFT 17
#define UPROPS_BLOCK_MASK 0x0001ff00 #define UPROPS_BLOCK_MASK 0x0001ff00
#define UPROPS_BLOCK_SHIFT 8 #define UPROPS_BLOCK_SHIFT 8
#define UPROPS_SCRIPT_MASK 0x000000ff #define UPROPS_SCRIPT_LOW_MASK 0x000000ff
/* UPROPS_SCRIPT_X_WITH_COMMON must be the lowest value that involves Script_Extensions. */ /* UPROPS_SCRIPT_X_WITH_COMMON must be the lowest value that involves Script_Extensions. */
#define UPROPS_SCRIPT_X_WITH_COMMON 0x400000 #define UPROPS_SCRIPT_X_WITH_COMMON 0x400000
#define UPROPS_SCRIPT_X_WITH_INHERITED 0x800000 #define UPROPS_SCRIPT_X_WITH_INHERITED 0x800000
#define UPROPS_SCRIPT_X_WITH_OTHER 0xc00000 #define UPROPS_SCRIPT_X_WITH_OTHER 0xc00000
#ifdef __cplusplus
namespace {
inline uint32_t uprops_mergeScriptCodeOrIndex(uint32_t scriptX) {
return
((scriptX & UPROPS_SCRIPT_HIGH_MASK) >> UPROPS_SCRIPT_HIGH_SHIFT) |
(scriptX & UPROPS_SCRIPT_LOW_MASK);
}
} // namespace
#endif // __cplusplus
/* /*
* Properties in vector word 1 * Properties in vector word 1
* Each bit encodes one binary property. * Each bit encodes one binary property.

View file

@ -233,6 +233,10 @@ const int32_t SCRIPT_PROPS[] = {
0x1E108 | LIMITED_USE, // Hmnp 0x1E108 | LIMITED_USE, // Hmnp
0x119CE | EXCLUSION, // Nand 0x119CE | EXCLUSION, // Nand
0x1E2E1 | LIMITED_USE, // Wcho 0x1E2E1 | LIMITED_USE, // Wcho
0x10FBF | EXCLUSION | RTL, // Chrs
0x1190C | EXCLUSION, // Diak
0x18C65 | EXCLUSION | LB_LETTERS, // Kits
0x10E88 | EXCLUSION | RTL, // Yezi
// End copy-paste from parsescriptmetadata.py // End copy-paste from parsescriptmetadata.py
}; };

View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for ICU 65.1. # Generated by GNU Autoconf 2.69 for ICU 66.1.
# #
# Report bugs to <http://icu-project.org/bugs>. # Report bugs to <http://icu-project.org/bugs>.
# #
@ -582,8 +582,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='ICU' PACKAGE_NAME='ICU'
PACKAGE_TARNAME='International Components for Unicode' PACKAGE_TARNAME='International Components for Unicode'
PACKAGE_VERSION='65.1' PACKAGE_VERSION='66.1'
PACKAGE_STRING='ICU 65.1' PACKAGE_STRING='ICU 66.1'
PACKAGE_BUGREPORT='http://icu-project.org/bugs' PACKAGE_BUGREPORT='http://icu-project.org/bugs'
PACKAGE_URL='http://icu-project.org' PACKAGE_URL='http://icu-project.org'
@ -1362,7 +1362,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures ICU 65.1 to adapt to many kinds of systems. \`configure' configures ICU 66.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1428,7 +1428,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of ICU 65.1:";; short | recursive ) echo "Configuration of ICU 66.1:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1566,7 +1566,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
ICU configure 65.1 ICU configure 66.1
generated by GNU Autoconf 2.69 generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
@ -2312,7 +2312,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by ICU $as_me 65.1, which was It was created by ICU $as_me 66.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@ -8538,7 +8538,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by ICU $as_me 65.1, which was This file was extended by ICU $as_me 66.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@ -8592,7 +8592,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
ICU config.status 65.1 ICU config.status 66.1
configured by $0, generated by GNU Autoconf 2.69, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View file

@ -6,7 +6,6 @@
from __future__ import print_function from __future__ import print_function
from icutools.databuilder import * from icutools.databuilder import *
from icutools.databuilder import locale_dependencies
from icutools.databuilder import utils from icutools.databuilder import utils
from icutools.databuilder.request_types import * from icutools.databuilder.request_types import *
@ -14,76 +13,69 @@ import os
import sys import sys
def generate(config, glob, common_vars): def generate(config, io, common_vars):
requests = [] requests = []
if len(glob("misc/*")) == 0: if len(io.glob("misc/*")) == 0:
print("Error: Cannot find data directory; please specify --src_dir", file=sys.stderr) print("Error: Cannot find data directory; please specify --src_dir", file=sys.stderr)
exit(1) exit(1)
requests += generate_cnvalias(config, glob, common_vars) requests += generate_cnvalias(config, io, common_vars)
requests += generate_ulayout(config, glob, common_vars) requests += generate_ulayout(config, io, common_vars)
requests += generate_confusables(config, glob, common_vars) requests += generate_confusables(config, io, common_vars)
requests += generate_conversion_mappings(config, glob, common_vars) requests += generate_conversion_mappings(config, io, common_vars)
requests += generate_brkitr_brk(config, glob, common_vars) requests += generate_brkitr_brk(config, io, common_vars)
requests += generate_stringprep(config, glob, common_vars) requests += generate_stringprep(config, io, common_vars)
requests += generate_brkitr_dictionaries(config, glob, common_vars) requests += generate_brkitr_dictionaries(config, io, common_vars)
requests += generate_normalization(config, glob, common_vars) requests += generate_normalization(config, io, common_vars)
requests += generate_coll_ucadata(config, glob, common_vars) requests += generate_coll_ucadata(config, io, common_vars)
requests += generate_full_unicore_data(config, glob, common_vars) requests += generate_full_unicore_data(config, io, common_vars)
requests += generate_unames(config, glob, common_vars) requests += generate_unames(config, io, common_vars)
requests += generate_misc(config, glob, common_vars) requests += generate_misc(config, io, common_vars)
requests += generate_curr_supplemental(config, glob, common_vars) requests += generate_curr_supplemental(config, io, common_vars)
requests += generate_translit(config, glob, common_vars) requests += generate_translit(config, io, common_vars)
# Res Tree Files # Res Tree Files
# (input dirname, output dirname, resfiles.mk path, mk version var, mk source var, use pool file, dep files) # (input dirname, output dirname, resfiles.mk path, mk version var, mk source var, use pool file, dep files)
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"locales", "locales",
None, None,
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"curr", "curr",
"curr", "curr",
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"lang", "lang",
"lang", "lang",
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"region", "region",
"region", "region",
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"zone", "zone",
"zone", "zone",
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"unit", "unit",
"unit", "unit",
"icu-locale-deprecates.xml",
config.use_pool_bundle, config.use_pool_bundle,
[]) [])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"coll", "coll",
"coll", "coll",
"icu-coll-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf # Never use pool bundle for coll, brkitr, or rbnf
False, False,
# Depends on timezoneTypes.res and keyTypeData.res. # Depends on timezoneTypes.res and keyTypeData.res.
@ -91,18 +83,16 @@ def generate(config, glob, common_vars):
# TODO: Bake keyTypeData.res into the common library? # TODO: Bake keyTypeData.res into the common library?
[DepTarget("coll_ucadata"), DepTarget("misc_res"), InFile("unidata/UCARules.txt")]) [DepTarget("coll_ucadata"), DepTarget("misc_res"), InFile("unidata/UCARules.txt")])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"brkitr", "brkitr",
"brkitr", "brkitr",
"icu-locale-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf # Never use pool bundle for coll, brkitr, or rbnf
False, False,
[DepTarget("brkitr_brk"), DepTarget("dictionaries")]) [DepTarget("brkitr_brk"), DepTarget("dictionaries")])
requests += generate_tree(config, glob, common_vars, requests += generate_tree(config, io, common_vars,
"rbnf", "rbnf",
"rbnf", "rbnf",
"icu-rbnf-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf # Never use pool bundle for coll, brkitr, or rbnf
False, False,
[]) [])
@ -119,7 +109,7 @@ def generate(config, glob, common_vars):
return requests return requests
def generate_cnvalias(config, glob, common_vars): def generate_cnvalias(config, io, common_vars):
# UConv Name Aliases # UConv Name Aliases
input_file = InFile("mappings/convrtrs.txt") input_file = InFile("mappings/convrtrs.txt")
output_file = OutFile("cnvalias.icu") output_file = OutFile("cnvalias.icu")
@ -138,7 +128,7 @@ def generate_cnvalias(config, glob, common_vars):
] ]
def generate_confusables(config, glob, common_vars): def generate_confusables(config, io, common_vars):
# CONFUSABLES # CONFUSABLES
txt1 = InFile("unidata/confusables.txt") txt1 = InFile("unidata/confusables.txt")
txt2 = InFile("unidata/confusablesWholeScript.txt") txt2 = InFile("unidata/confusablesWholeScript.txt")
@ -159,9 +149,9 @@ def generate_confusables(config, glob, common_vars):
] ]
def generate_conversion_mappings(config, glob, common_vars): def generate_conversion_mappings(config, io, common_vars):
# UConv Conversion Table Files # UConv Conversion Table Files
input_files = [InFile(filename) for filename in glob("mappings/*.ucm")] input_files = [InFile(filename) for filename in io.glob("mappings/*.ucm")]
output_files = [OutFile("%s.cnv" % v.filename[9:-4]) for v in input_files] output_files = [OutFile("%s.cnv" % v.filename[9:-4]) for v in input_files]
# TODO: handle BUILD_SPECIAL_CNV_FILES? Means to add --ignore-siso-check flag to makeconv # TODO: handle BUILD_SPECIAL_CNV_FILES? Means to add --ignore-siso-check flag to makeconv
return [ return [
@ -181,9 +171,9 @@ def generate_conversion_mappings(config, glob, common_vars):
] ]
def generate_brkitr_brk(config, glob, common_vars): def generate_brkitr_brk(config, io, common_vars):
# BRK Files # BRK Files
input_files = [InFile(filename) for filename in glob("brkitr/rules/*.txt")] input_files = [InFile(filename) for filename in io.glob("brkitr/rules/*.txt")]
output_files = [OutFile("brkitr/%s.brk" % v.filename[13:-4]) for v in input_files] output_files = [OutFile("brkitr/%s.brk" % v.filename[13:-4]) for v in input_files]
return [ return [
RepeatedExecutionRequest( RepeatedExecutionRequest(
@ -202,9 +192,9 @@ def generate_brkitr_brk(config, glob, common_vars):
] ]
def generate_stringprep(config, glob, common_vars): def generate_stringprep(config, io, common_vars):
# SPP FILES # SPP FILES
input_files = [InFile(filename) for filename in glob("sprep/*.txt")] input_files = [InFile(filename) for filename in io.glob("sprep/*.txt")]
output_files = [OutFile("%s.spp" % v.filename[6:-4]) for v in input_files] output_files = [OutFile("%s.spp" % v.filename[6:-4]) for v in input_files]
bundle_names = [v.filename[6:-4] for v in input_files] bundle_names = [v.filename[6:-4] for v in input_files]
return [ return [
@ -225,9 +215,9 @@ def generate_stringprep(config, glob, common_vars):
] ]
def generate_brkitr_dictionaries(config, glob, common_vars): def generate_brkitr_dictionaries(config, io, common_vars):
# Dict Files # Dict Files
input_files = [InFile(filename) for filename in glob("brkitr/dictionaries/*.txt")] input_files = [InFile(filename) for filename in io.glob("brkitr/dictionaries/*.txt")]
output_files = [OutFile("brkitr/%s.dict" % v.filename[20:-4]) for v in input_files] output_files = [OutFile("brkitr/%s.dict" % v.filename[20:-4]) for v in input_files]
extra_options_map = { extra_options_map = {
"brkitr/dictionaries/burmesedict.txt": "--bytes --transform offset-0x1000", "brkitr/dictionaries/burmesedict.txt": "--bytes --transform offset-0x1000",
@ -256,9 +246,9 @@ def generate_brkitr_dictionaries(config, glob, common_vars):
] ]
def generate_normalization(config, glob, common_vars): def generate_normalization(config, io, common_vars):
# NRM Files # NRM Files
input_files = [InFile(filename) for filename in glob("in/*.nrm")] input_files = [InFile(filename) for filename in io.glob("in/*.nrm")]
# nfc.nrm is pre-compiled into C++; see generate_full_unicore_data # nfc.nrm is pre-compiled into C++; see generate_full_unicore_data
input_files.remove(InFile("in/nfc.nrm")) input_files.remove(InFile("in/nfc.nrm"))
output_files = [OutFile(v.filename[3:]) for v in input_files] output_files = [OutFile(v.filename[3:]) for v in input_files]
@ -277,7 +267,7 @@ def generate_normalization(config, glob, common_vars):
] ]
def generate_coll_ucadata(config, glob, common_vars): def generate_coll_ucadata(config, io, common_vars):
# Collation Dependency File (ucadata.icu) # Collation Dependency File (ucadata.icu)
input_file = InFile("in/coll/ucadata-%s.icu" % config.coll_han_type) input_file = InFile("in/coll/ucadata-%s.icu" % config.coll_han_type)
output_file = OutFile("coll/ucadata.icu") output_file = OutFile("coll/ucadata.icu")
@ -295,7 +285,7 @@ def generate_coll_ucadata(config, glob, common_vars):
] ]
def generate_full_unicore_data(config, glob, common_vars): def generate_full_unicore_data(config, io, common_vars):
# The core Unicode properties files (pnames.icu, uprops.icu, ucase.icu, ubidi.icu) # The core Unicode properties files (pnames.icu, uprops.icu, ucase.icu, ubidi.icu)
# are hardcoded in the common DLL and therefore not included in the data package any more. # are hardcoded in the common DLL and therefore not included in the data package any more.
# They are not built by default but need to be built for ICU4J data, # They are not built by default but need to be built for ICU4J data,
@ -325,7 +315,7 @@ def generate_full_unicore_data(config, glob, common_vars):
] ]
def generate_unames(config, glob, common_vars): def generate_unames(config, io, common_vars):
# Unicode Character Names # Unicode Character Names
input_file = InFile("in/unames.icu") input_file = InFile("in/unames.icu")
output_file = OutFile("unames.icu") output_file = OutFile("unames.icu")
@ -343,7 +333,7 @@ def generate_unames(config, glob, common_vars):
] ]
def generate_ulayout(config, glob, common_vars): def generate_ulayout(config, io, common_vars):
# Unicode text layout properties # Unicode text layout properties
basename = "ulayout" basename = "ulayout"
input_file = InFile("in/%s.icu" % basename) input_file = InFile("in/%s.icu" % basename)
@ -362,9 +352,9 @@ def generate_ulayout(config, glob, common_vars):
] ]
def generate_misc(config, glob, common_vars): def generate_misc(config, io, common_vars):
# Misc Data Res Files # Misc Data Res Files
input_files = [InFile(filename) for filename in glob("misc/*.txt")] input_files = [InFile(filename) for filename in io.glob("misc/*.txt")]
input_basenames = [v.filename[5:] for v in input_files] input_basenames = [v.filename[5:] for v in input_files]
output_files = [OutFile("%s.res" % v[:-4]) for v in input_basenames] output_files = [OutFile("%s.res" % v[:-4]) for v in input_basenames]
return [ return [
@ -386,7 +376,7 @@ def generate_misc(config, glob, common_vars):
] ]
def generate_curr_supplemental(config, glob, common_vars): def generate_curr_supplemental(config, io, common_vars):
# Currency Supplemental Res File # Currency Supplemental Res File
input_file = InFile("curr/supplementalData.txt") input_file = InFile("curr/supplementalData.txt")
input_basename = "supplementalData.txt" input_basename = "supplementalData.txt"
@ -409,13 +399,13 @@ def generate_curr_supplemental(config, glob, common_vars):
] ]
def generate_translit(config, glob, common_vars): def generate_translit(config, io, common_vars):
input_files = [ input_files = [
InFile("translit/root.txt"), InFile("translit/root.txt"),
InFile("translit/en.txt"), InFile("translit/en.txt"),
InFile("translit/el.txt") InFile("translit/el.txt")
] ]
dep_files = set(InFile(filename) for filename in glob("translit/*.txt")) dep_files = set(InFile(filename) for filename in io.glob("translit/*.txt"))
dep_files -= set(input_files) dep_files -= set(input_files)
dep_files = list(sorted(dep_files)) dep_files = list(sorted(dep_files))
input_basenames = [v.filename[9:] for v in input_files] input_basenames = [v.filename[9:] for v in input_files]
@ -445,18 +435,17 @@ def generate_translit(config, glob, common_vars):
def generate_tree( def generate_tree(
config, config,
glob, io,
common_vars, common_vars,
sub_dir, sub_dir,
out_sub_dir, out_sub_dir,
xml_filename,
use_pool_bundle, use_pool_bundle,
dep_targets): dep_targets):
requests = [] requests = []
category = "%s_tree" % sub_dir category = "%s_tree" % sub_dir
out_prefix = "%s/" % out_sub_dir if out_sub_dir else "" out_prefix = "%s/" % out_sub_dir if out_sub_dir else ""
# TODO: Clean this up for curr # TODO: Clean this up for curr
input_files = [InFile(filename) for filename in glob("%s/*.txt" % sub_dir)] input_files = [InFile(filename) for filename in io.glob("%s/*.txt" % sub_dir)]
if sub_dir == "curr": if sub_dir == "curr":
input_files.remove(InFile("curr/supplementalData.txt")) input_files.remove(InFile("curr/supplementalData.txt"))
input_basenames = [v.filename[len(sub_dir)+1:] for v in input_files] input_basenames = [v.filename[len(sub_dir)+1:] for v in input_files]
@ -532,7 +521,11 @@ def generate_tree(
"root", "root",
]) ])
# Put alias locales in a separate structure; see ICU-20627 # Put alias locales in a separate structure; see ICU-20627
alias_locales = set(locale_dependencies.data["aliases"].keys()) dependency_data = io.read_locale_deps(sub_dir)
if "aliases" in dependency_data:
alias_locales = set(dependency_data["aliases"].keys())
else:
alias_locales = set()
alias_files = [] alias_files = []
installed_files = [] installed_files = []
for f in input_files: for f in input_files:
@ -541,7 +534,7 @@ def generate_tree(
continue continue
destination = alias_files if file_stem in alias_locales else installed_files destination = alias_files if file_stem in alias_locales else installed_files
destination.append(f) destination.append(f)
cldr_version = locale_dependencies.data["cldrVersion"] if sub_dir == "locales" else None cldr_version = dependency_data["cldrVersion"] if sub_dir == "locales" else None
index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format( index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format(
IN_SUB_DIR = sub_dir, IN_SUB_DIR = sub_dir,
**common_vars **common_vars

View file

@ -0,0 +1,6 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
{
"cldrVersion": "36.1"
}

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
de{ de{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"Port.", "Port.",

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
el{ el{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
sentence:process(dependency){"sent_el.brk"} sentence:process(dependency){"sent_el.brk"}
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en{ en{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"L.P.", "L.P.",

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en_US{ en_US{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en_US_POSIX{ en_US_POSIX{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
word:process(dependency){"word_POSIX.brk"} word:process(dependency){"word_POSIX.brk"}
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
es{ es{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"Rdos.", "Rdos.",

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fr{ fr{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"aux.", "aux.",

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
it{ it{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"N.B.", "N.B.",

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ja{ ja{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
line:process(dependency){"line_normal.brk"} line:process(dependency){"line_normal.brk"}
line_loose:process(dependency){"line_loose_cj.brk"} line_loose:process(dependency){"line_loose_cj.brk"}

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
pt{ pt{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"psicol.", "psicol.",

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
root{ root{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
grapheme:process(dependency){"char.brk"} grapheme:process(dependency){"char.brk"}
line:process(dependency){"line.brk"} line:process(dependency){"line.brk"}

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ru{ ru{
Version{"36"} Version{"36.1"}
exceptions{ exceptions{
SentenceBreak:array{ SentenceBreak:array{
"\u0440\u0443\u0431.", "\u0440\u0443\u0431.",

View file

@ -7,7 +7,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -69,6 +69,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -108,7 +115,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
# #
@ -211,7 +218,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -282,16 +289,13 @@ $HL $CM* ($HY | $BA) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22 # LB 22 Do not break before ellipses
($ALPlus | $HL) $CM* $IN; #
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL $LB20NonBreaks $CM* $IN;
$EX $CM* $IN; ^$CM+ $IN;
($ID | $EB | $EM) $CM* $IN;
$IN $CM* $IN;
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -337,15 +341,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -7,7 +7,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -70,6 +70,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -109,7 +116,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
# #
@ -212,7 +219,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -283,16 +290,13 @@ $HL $CM* ($HY | $BA) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22 # LB 22 Do not break before ellipses
($ALPlus | $HL) $CM* $IN; #
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL $LB20NonBreaks $CM* $IN;
$EX $CM* $IN; ^$CM+ $IN;
($ID | $EB | $EM) $CM* $IN;
$IN $CM* $IN;
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -338,15 +342,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -8,7 +8,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -76,6 +76,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -115,7 +122,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
# #
@ -218,7 +225,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -292,16 +299,14 @@ $HL $CM* ($HY | $BA) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22
($ALPlus | $HL) $CM* $IN; # LB 22 Do not break before ellipses
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL #
$EX $CM* $IN; [$LB20NonBreaks - $IN] $CM* $IN; # line_loose tailoring
($ID | $EB | $EM) $CM* $IN; ^$CM+ $IN;
# $IN $CM* $IN; # delete this rule for CSS loose
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -347,15 +352,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -7,7 +7,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -87,6 +87,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -126,7 +133,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $POX $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $POX $ALPlus];
# #
@ -229,7 +236,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -303,16 +310,14 @@ $HL $CM* ($HY | $BA | $BAX) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22
($ALPlus | $HL) $CM* $IN; # LB 22 Do not break before ellipses
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL #
$EX $CM* $IN; [$LB20NonBreaks - $IN] $CM* $IN; # line_loose tailoring
($ID | $EB | $EM) $CM* $IN; ^$CM+ $IN;
# $IN $CM* $IN; # delete this rule for CSS loose
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -362,15 +367,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -7,7 +7,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -71,6 +71,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -110,7 +117,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
# #
@ -213,7 +220,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -284,16 +291,13 @@ $HL $CM* ($HY | $BA) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22 # LB 22 Do not break before ellipses
($ALPlus | $HL) $CM* $IN; #
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL $LB20NonBreaks $CM* $IN;
$EX $CM* $IN; ^$CM+ $IN;
($ID | $EB | $EM) $CM* $IN;
$IN $CM* $IN;
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -339,15 +343,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -7,7 +7,7 @@
# #
# Line Breaking Rules # Line Breaking Rules
# Implement default line breaking as defined by # Implement default line breaking as defined by
# Unicode Standard Annex #14 Revision 42 for Unicode 12.0 # Unicode Standard Annex #14 Revision 44 for Unicode 13.0
# http://www.unicode.org/reports/tr14/, with the following modification: # http://www.unicode.org/reports/tr14/, with the following modification:
# #
# Boundaries between hyphens and following letters are suppressed when # Boundaries between hyphens and following letters are suppressed when
@ -75,6 +75,13 @@ $XX = [:LineBreak = Unknown:];
$ZW = [:LineBreak = ZWSpace:]; $ZW = [:LineBreak = ZWSpace:];
$ZWJ = [:LineBreak = ZWJ:]; $ZWJ = [:LineBreak = ZWJ:];
# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
# without a formal name. Because ICU rules require multiple uses of the expressions,
# give them a single definition with a name
$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
# list it in the numerous rules that use CM. # list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
@ -114,7 +121,7 @@ $CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs
# AL_FOLLOW set of chars that can unconditionally follow an AL # AL_FOLLOW set of chars that can unconditionally follow an AL
# Needed in rules where stand-alone $CM s are treated as AL. # Needed in rules where stand-alone $CM s are treated as AL.
# #
$AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus]; $AL_FOLLOW = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
# #
@ -217,7 +224,7 @@ $OP $CM* $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL
# See issue ICU-20303 # See issue ICU-20303
$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL]; $CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
$SP $IS / [^ $CanFollowIS $NU $CM]; $SP $IS / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM]; $SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
@ -291,16 +298,13 @@ $HL $CM* ($HY | $BA | $BAX) $CM* [^$CB]?;
# (break between HL and SY already disallowed by LB 13 above) # (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL; $SY $CM* $HL;
# LB 22 # LB 22 Do not break before ellipses
($ALPlus | $HL) $CM* $IN; #
^$CM+ $IN; # by rule 10, any otherwise unattached CM behaves as AL $LB20NonBreaks $CM* $IN;
$EX $CM* $IN; ^$CM+ $IN;
($ID | $EB | $EM) $CM* $IN;
$IN $CM* $IN;
$NU $CM* $IN;
# $LB 23 # LB 23
# #
($ALPlus | $HL) $CM* $NU; ($ALPlus | $HL) $CM* $NU;
^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL ^$CM+ $NU; # Rule 10, any otherwise unattached CM behaves as AL
@ -346,15 +350,15 @@ $PR $CM* ($JL | $JV | $JT | $H2 | $H3);
$IS $CM* ($ALPlus | $HL); $IS $CM* ($ALPlus | $HL);
# LB 30 # LB 30
($ALPlus | $HL | $NU) $CM* $OP; ($ALPlus | $HL | $NU) $CM* $OP30;
^$CM+ $OP; # The $CM+ is from rule 10, an unattached CM is treated as AL. ^$CM+ $OP30; # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU); $CP30 $CM* ($ALPlus | $HL | $NU);
# LB 30a Do not break between regional indicators. Break after pairs of them. # LB 30a Do not break between regional indicators. Break after pairs of them.
# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. # Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM.
$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; $RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; $RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' # note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
# because of the chain-out behavior difference. The rule must chain out only from the [set characters], # because of the chain-out behavior difference. The rule must chain out only from the [set characters],
# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # not from the preceding $RI or $CM, which it would be able to do if the set were optional.

View file

@ -27,10 +27,12 @@
# Character Class Definitions. # Character Class Definitions.
# #
$Han = [:Han:];
$CR = [\p{Word_Break = CR}]; $CR = [\p{Word_Break = CR}];
$LF = [\p{Word_Break = LF}]; $LF = [\p{Word_Break = LF}];
$Newline = [\p{Word_Break = Newline} ]; $Newline = [\p{Word_Break = Newline}];
$Extend = [\p{Word_Break = Extend}]; $Extend = [\p{Word_Break = Extend}-$Han];
$ZWJ = [\p{Word_Break = ZWJ}]; $ZWJ = [\p{Word_Break = ZWJ}];
$Regional_Indicator = [\p{Word_Break = Regional_Indicator}]; $Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
$Format = [\p{Word_Break = Format}]; $Format = [\p{Word_Break = Format}];
@ -42,12 +44,11 @@ $Double_Quote = [\p{Word_Break = Double_Quote}];
$MidNumLet = [\p{Word_Break = MidNumLet}]; $MidNumLet = [\p{Word_Break = MidNumLet}];
$MidLetter = [\p{Word_Break = MidLetter}]; $MidLetter = [\p{Word_Break = MidLetter}];
$MidNum = [\p{Word_Break = MidNum}]; $MidNum = [\p{Word_Break = MidNum}];
$Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079 $Numeric = [\p{Word_Break = Numeric}];
$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
$WSegSpace = [\p{Word_Break = WSegSpace}]; $WSegSpace = [\p{Word_Break = WSegSpace}];
$Extended_Pict = [\p{Extended_Pictographic}]; $Extended_Pict = [\p{Extended_Pictographic}];
$Han = [:Han:];
$Hiragana = [:Hiragana:]; $Hiragana = [:Hiragana:];
$Ideographic = [\p{Ideographic}]; $Ideographic = [\p{Ideographic}];

View file

@ -27,10 +27,12 @@
# Character Class Definitions. # Character Class Definitions.
# #
$Han = [:Han:];
$CR = [\p{Word_Break = CR}]; $CR = [\p{Word_Break = CR}];
$LF = [\p{Word_Break = LF}]; $LF = [\p{Word_Break = LF}];
$Newline = [\p{Word_Break = Newline} ]; $Newline = [\p{Word_Break = Newline}];
$Extend = [\p{Word_Break = Extend}]; $Extend = [\p{Word_Break = Extend}-$Han];
$ZWJ = [\p{Word_Break = ZWJ}]; $ZWJ = [\p{Word_Break = ZWJ}];
$Regional_Indicator = [\p{Word_Break = Regional_Indicator}]; $Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
$Format = [\p{Word_Break = Format}]; $Format = [\p{Word_Break = Format}];
@ -42,12 +44,11 @@ $Double_Quote = [\p{Word_Break = Double_Quote}];
$MidNumLet = [\p{Word_Break = MidNumLet} - [.]]; $MidNumLet = [\p{Word_Break = MidNumLet} - [.]];
$MidLetter = [\p{Word_Break = MidLetter} - [\:]]; $MidLetter = [\p{Word_Break = MidLetter} - [\:]];
$MidNum = [\p{Word_Break = MidNum} [.]]; $MidNum = [\p{Word_Break = MidNum} [.]];
$Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079 $Numeric = [\p{Word_Break = Numeric}];
$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
$WSegSpace = [\p{Word_Break = WSegSpace}]; $WSegSpace = [\p{Word_Break = WSegSpace}];
$Extended_Pict = [\p{Extended_Pictographic}]; $Extended_Pict = [\p{Extended_Pictographic}];
$Han = [:Han:];
$Hiragana = [:Hiragana:]; $Hiragana = [:Hiragana:];
$Ideographic = [\p{Ideographic}]; $Ideographic = [\p{Ideographic}];

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
zh{ zh{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
line:process(dependency){"line_cj.brk"} line:process(dependency){"line_cj.brk"}
line_loose:process(dependency){"line_loose_cj.brk"} line_loose:process(dependency){"line_loose_cj.brk"}

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant{ zh_Hant{
Version{"36"} Version{"36.1"}
boundaries{ boundaries{
line:process(dependency){"line_cj.brk"} line:process(dependency){"line_cj.brk"}
line_loose:process(dependency){"line_loose_cj.brk"} line_loose:process(dependency){"line_loose_cj.brk"}

View file

@ -0,0 +1,32 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
{
"cldrVersion": "36.1",
"aliases": {
"ars": "ar_SA",
"in": "id",
"in_ID": "id_ID",
"iw": "he",
"iw_IL": "he_IL",
"mo": "ro",
"no": "nb",
"no_NO": "nb_NO",
"pa_IN": "pa_Guru_IN",
"sh": "sr_Latn",
"sh_BA": "sr_Latn_BA",
"sh_CS": "sr_Latn_RS",
"sh_YU": "sr_Latn_RS",
"sr_BA": "sr_Cyrl_BA",
"sr_ME": "sr_Cyrl_ME",
"sr_RS": "sr_Cyrl_RS",
"yue": "zh_Hant",
"yue_CN": "yue_Hans_CN",
"yue_Hans": "zh_Hans",
"zh_CN": "zh_Hans_CN",
"zh_HK": "zh_Hant_HK",
"zh_MO": "zh_Hant_MO",
"zh_SG": "zh_Hans_SG",
"zh_TW": "zh_Hant_TW"
}
}

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
af{ af{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"&N<<<ʼn"} Sequence{"&N<<<ʼn"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
am{ am{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[reorder Ethi]"} Sequence{"[reorder Ethi]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ar{ ar{
Version{"36"} Version{"36.1"}
collations{ collations{
compat{ compat{
Sequence{ Sequence{
@ -9,7 +9,7 @@ ar{
"&ت<<ة<<<ﺔ<<<ﺓ" "&ت<<ة<<<ﺔ<<<ﺓ"
"&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ" "&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -397,7 +397,7 @@ ar{
"&ۓ‎=ﮰ‎=ﮱ" "&ۓ‎=ﮰ‎=ﮱ"
"&ۀ‎=ﮤ‎=ﮥ" "&ۀ‎=ﮤ‎=ﮥ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
as{ as{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -11,7 +11,7 @@ as{
"&[before 1]ত<ৎ=ত্\u200D" "&[before 1]ত<ৎ=ত্\u200D"
"&হ<ক্ষ" "&হ<ক্ষ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
az{ az{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
@ -9,7 +9,7 @@ az{
"[import az-u-co-standard]" "[import az-u-co-standard]"
"[reorder others]" "[reorder others]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -26,7 +26,7 @@ az{
"&H<x<<<X" "&H<x<<<X"
"&Z<w<<<W" "&Z<w<<<W"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
be{ be{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -9,7 +9,7 @@ be{
"&Е<ё<<<Ё" "&Е<ё<<<Ё"
"&у<ў<<<Ў" "&у<ў<<<Ў"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
bg{ bg{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[reorder Cyrl]"} Sequence{"[reorder Cyrl]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
bn{ bn{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -9,7 +9,7 @@ bn{
"[reorder Beng Deva Guru Gujr Orya Taml Telu Knda Mlym Sinh]" "[reorder Beng Deva Guru Gujr Orya Taml Telu Knda Mlym Sinh]"
"&ঔ<ং<ঃ<ঁ" "&ঔ<ং<ঃ<ঁ"
} }
Version{"36"} Version{"36.1"}
} }
traditional{ traditional{
Sequence{ Sequence{
@ -629,7 +629,7 @@ bn{
"&যৌ<<<য়ৌ" "&যৌ<<<য়ৌ"
"&য্<<<য়্" "&য্<<<য়্"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
bo{ bo{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,15 +1,15 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
bs{ bs{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{"[import hr-u-co-search]"} Sequence{"[import hr-u-co-search]"}
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{"[import hr]"} Sequence{"[import hr]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl{ bs_Cyrl{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[import sr]"} Sequence{"[import sr]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ca{ ca{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"&L<ŀ=l·<<<Ŀ=L·" "&L<ŀ=l·<<<Ŀ=L·"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ceb{ ceb{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"} Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
chr{ chr{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[reorder Cher]"} Sequence{"[reorder Cher]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
cs{ cs{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -11,7 +11,7 @@ cs{
"&S<š<<<Š" "&S<š<<<Š"
"&Z<ž<<<Ž" "&Z<ž<<<Ž"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
cy{ cy{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -14,7 +14,7 @@ cy{
"&R<rh<<<Rh<<<RH" "&R<rh<<<Rh<<<RH"
"&T<th<<<Th<<<TH" "&T<th<<<Th<<<TH"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
da{ da{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
@ -9,7 +9,7 @@ da{
"[import da-u-co-standard]" "[import da-u-co-standard]"
"[caseFirst off]" "[caseFirst off]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -21,7 +21,7 @@ da{
"&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<å<<<Å<<<aa<<<Aa<<<AA" "&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<å<<<Å<<<aa<<<Aa<<<AA"
"&oe<<œ<<<Œ" "&oe<<œ<<<Œ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
de{ de{
Version{"36"} Version{"36.1"}
collations{ collations{
phonebook{ phonebook{
Sequence{ Sequence{
@ -9,14 +9,14 @@ de{
"&OE<<ö<<<Ö" "&OE<<ö<<<Ö"
"&UE<<ü<<<Ü" "&UE<<ü<<<Ü"
} }
Version{"36"} Version{"36.1"}
} }
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"[import de-u-co-phonebk]" "[import de-u-co-phonebk]"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
de_AT{ de_AT{
Version{"36"} Version{"36.1"}
collations{ collations{
phonebook{ phonebook{
Sequence{ Sequence{
@ -10,7 +10,7 @@ de_AT{
"&u<ü<<<Ü" "&u<ü<<<Ü"
"&ss<ß<<<ẞ" "&ss<ß<<<ẞ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
dsb{ dsb{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -14,7 +14,7 @@ dsb{
"&S<š<<<Š<ś<<<Ś" "&S<š<<<Š<ś<<<Ś"
"&Z<ž<<<Ž<ź<<<Ź" "&Z<ž<<<Ž<ź<<<Ź"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
dz{ dz{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ee{ ee{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -17,7 +17,7 @@ ee{
"&T<ts<<<Ts<<<TS" "&T<ts<<<Ts<<<TS"
"&V<ʋ<<<Ʋ" "&V<ʋ<<<Ʋ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
el{ el{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
"[normalization on]" "[normalization on]"
"[reorder Grek]" "[reorder Grek]"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en{ en{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en_US{ en_US{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
en_US_POSIX{ en_US_POSIX{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
"&A<*'\u0020'-'/'<*0-'@'<*ABCDEFGHIJKLMNOPQRSTUVWXYZ<*'['-'`'<*abcdefghijklmnopqrstuvwxyz" "&A<*'\u0020'-'/'<*0-'@'<*ABCDEFGHIJKLMNOPQRSTUVWXYZ<*'['-'`'<*abcdefghijklmnopqrstuvwxyz"
"<*'{'-'\u007F'" "<*'{'-'\u007F'"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
eo{ eo{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -12,7 +12,7 @@ eo{
"&S<ŝ<<<Ŝ" "&S<ŝ<<<Ŝ"
"&U<ŭ<<<Ŭ" "&U<ŭ<<<Ŭ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,18 +1,18 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
es{ es{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"&N<ñ<<<Ñ" "&N<ñ<<<Ñ"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{"&N<ñ<<<Ñ"} Sequence{"&N<ñ<<<Ñ"}
Version{"36"} Version{"36.1"}
} }
traditional{ traditional{
Sequence{ Sequence{
@ -20,7 +20,7 @@ es{
"&C<ch<<<Ch<<<CH" "&C<ch<<<Ch<<<CH"
"&l<ll<<<Ll<<<LL" "&l<ll<<<Ll<<<LL"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
et{ et{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
"&[before 1]T<š<<<Š<z<<<Z<ž<<<Ž" "&[before 1]T<š<<<Š<z<<<Z<ž<<<Ž"
"&[before 1]X<õ<<<Õ<ä<<<Ä<ö<<<Ö<ü<<<Ü" "&[before 1]X<õ<<<Õ<ä<<<Ä<ö<<<Ö<ü<<<Ü"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fa{ fa{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -16,7 +16,7 @@ fa{
"&ۏ<ه<<ە<<ہ<<ة<<ۃ<<ۀ<<ھ" "&ۏ<ه<<ە<<ہ<<ة<<ۃ<<ۀ<<ھ"
"&ی<<*ىےيېۑۍێ" "&ی<<*ىےيېۑۍێ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fa_AF{ fa_AF{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[import ps]"} Sequence{"[import ps]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fi{ fi{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"[import fi-u-co-trad]" "[import fi-u-co-trad]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -20,7 +20,7 @@ fi{
"&Z\u0335<<ʒ<<<Ʒ" "&Z\u0335<<ʒ<<<Ʒ"
"&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø" "&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø"
} }
Version{"36"} Version{"36.1"}
} }
traditional{ traditional{
Sequence{ Sequence{
@ -31,7 +31,7 @@ fi{
"&Y<<ü<<<Ü<<ű<<<Ű" "&Y<<ü<<<Ü<<ű<<<Ű"
"&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø<<ő<<<Ő<<õ<<<Õ<<œ<<<Œ" "&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø<<ő<<<Ő<<õ<<<Õ<<œ<<<Œ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fil{ fil{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"} Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fo{ fo{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"[import fo-u-co-standard]" "[import fo-u-co-standard]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -18,7 +18,7 @@ fo{
"&Y<<ü<<<Ü<<ű<<<Ű" "&Y<<ü<<<Ü<<ű<<<Ű"
"&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<å<<<Å<<<aa<<<Aa<<<AA" "&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<å<<<Å<<<aa<<<Aa<<<AA"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fr{ fr{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,11 +1,11 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
fr_CA{ fr_CA{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{"[backwards 2]"} Sequence{"[backwards 2]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ga{ ga{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,15 +1,15 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
gl{ gl{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{"[import es-u-co-search]"} Sequence{"[import es-u-co-search]"}
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{"[import es]"} Sequence{"[import es]"}
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
gu{ gu{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -9,7 +9,7 @@ gu{
"[reorder Gujr Deva Beng Guru Orya Taml Telu Knda Mlym Sinh]" "[reorder Gujr Deva Beng Guru Orya Taml Telu Knda Mlym Sinh]"
"&ૐ<ં<<ઁ<" "&ૐ<ં<<ઁ<"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ha{ ha{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -12,7 +12,7 @@ ha{
"&T<ts<<<Ts<<<TS" "&T<ts<<<Ts<<<TS"
"&Y<ƴ<<<ʼy<<<''y<<<Ƴ<<<ʼY<<<''Y" "&Y<ƴ<<<ʼy<<<''y<<<Ƴ<<<ʼY<<<''Y"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
haw{ haw{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
"&a<e<<<E<i<<<I<o<<<O<u<<<U" "&a<e<<<E<i<<<I<o<<<O<u<<<U"
"&w<ʻ" "&w<ʻ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
he{ he{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
@ -11,7 +11,7 @@ he{
"&״" "&״"
"<<'\u0022'" "<<'\u0022'"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -20,7 +20,7 @@ he{
"&[before 2]''<<׳" "&[before 2]''<<׳"
"&[before 2]'\u0022'<<״" "&[before 2]'\u0022'<<״"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
hi{ hi{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -9,7 +9,7 @@ hi{
"[reorder Deva Beng Guru Gujr Orya Taml Telu Knda Mlym Sinh]" "[reorder Deva Beng Guru Gujr Orya Taml Telu Knda Mlym Sinh]"
"&ॐ<ं<<ँ<" "&ॐ<ं<<ँ<"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
hr{ hr{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
@ -9,7 +9,7 @@ hr{
"[import hr-u-co-standard]" "[import hr-u-co-standard]"
"[reorder others]" "[reorder others]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -21,7 +21,7 @@ hr{
"&S<š<<<Š" "&S<š<<<Š"
"&Z<ž<<<Ž" "&Z<ž<<<Ž"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
hsb{ hsb{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -13,7 +13,7 @@ hsb{
"&S<š<<<Š" "&S<š<<<Š"
"&Z<ž<<<Ž<ź<<<Ź" "&Z<ž<<<Ž<ź<<<Ź"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
hu{ hu{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -44,7 +44,7 @@ hu{
"&Zs<<<Zzs/zs" "&Zs<<<Zzs/zs"
"&ZS<<<ZZS/ZS" "&ZS<<<ZZS/ZS"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
hy{ hy{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
"[reorder Armn]" "[reorder Armn]"
"&ք<և<<<Եւ" "&ք<և<<<Եւ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
id{ id{
Version{"36"} Version{"36.1"}
} }

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
ig{ ig{
Version{"36"} Version{"36.1"}
collations{ collations{
standard{ standard{
Sequence{ Sequence{
@ -15,7 +15,7 @@ ig{
"&S<sh<<<Sh<<<SH" "&S<sh<<<Sh<<<SH"
"&U<ụ<<<Ụ" "&U<ụ<<<Ụ"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,14 +1,14 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
is{ is{
Version{"36"} Version{"36.1"}
collations{ collations{
search{ search{
Sequence{ Sequence{
"[import und-u-co-search]" "[import und-u-co-search]"
"[import is-u-co-standard]" "[import is-u-co-standard]"
} }
Version{"36"} Version{"36.1"}
} }
standard{ standard{
Sequence{ Sequence{
@ -21,7 +21,7 @@ is{
"&[before 1]z<ý<<<Ý" "&[before 1]z<ý<<<Ý"
"&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<ö<<<Ö<<ø<<<Ø<å<<<Å" "&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<ö<<<Ö<<ø<<<Ø<å<<<Å"
} }
Version{"36"} Version{"36.1"}
} }
} }
} }

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others. // © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License // License & terms of use: http://www.unicode.org/copyright.html#License
it{ it{
Version{"36"} Version{"36.1"}
} }

Some files were not shown because too many files have changed in this diff Show more