From: DongHun Kwak Date: Fri, 29 Sep 2017 02:44:41 +0000 (+0900) Subject: Imported Upstream version 59.1 X-Git-Tag: upstream/59.1^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F15%2F153615%2F1;p=platform%2Fupstream%2Ficu.git Imported Upstream version 59.1 Change-Id: I03408e3ee75325866aa0b6900c1a11e2c0514360 Signed-off-by: DongHun Kwak --- diff --git a/APIChangeReport.html b/APIChangeReport.html index 232f9b9..d56d69c 100644 --- a/APIChangeReport.html +++ b/APIChangeReport.html @@ -5,31 +5,31 @@ --> -ICU4C API Comparison: ICU 57 with ICU 58 +ICU4C API Comparison: ICU 58 (update #1: 58.2) with ICU 59 -

ICU4C API Comparison: ICU 57 with ICU 58

+

ICU4C API Comparison: ICU 58 (update #1: 58.2) with ICU 59

-

Removed from ICU 57

+

Removed from ICU 58

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileAPIICU 57ICU 58FileAPIICU 58ICU 59
bytestrie.hconst StringPiece& icu::BytesTrie::Iterator::getString()Stable
ICU 4.8
(missing)
+
measunit.hstatic MeasureUnit* icu::MeasureUnit::createEast(UErrorCode&)Draft
ICU 58
(missing)
bytestriebuilder.hBytesTrieBuilder& icu::BytesTrieBuilder::add(const StringPiece&, int32_t, UErrorCode&)Stable
ICU 4.8
(missing)
+
measunit.hstatic MeasureUnit* icu::MeasureUnit::createNorth(UErrorCode&)Draft
ICU 58
(missing)
compactdecimalformat.hUnicodeString& icu::CompactDecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)Internal(missing)
+
measunit.hstatic MeasureUnit* icu::MeasureUnit::createSouth(UErrorCode&)Draft
ICU 58
(missing)
decimfmt.hUnicodeString& icu::DecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)Stable(missing)
+
measunit.hstatic MeasureUnit* icu::MeasureUnit::createWest(UErrorCode&)Draft
ICU 58
(missing)
fmtable.hicu::Formattable::Formattable(const StringPiece&, UErrorCode&)Stable
ICU 4.4
(missing)
+
platform.h#define U_HAVE_RVALUE_REFERENCESInternal(missing)
fmtable.hvoid icu::Formattable::setDecimalNumber(const StringPiece&, UErrorCode&)Stable
ICU 4.4
(missing)
+
unistr.h#define U_STRING_CASE_MAPPER_DEFINEDInternal(missing)
idna.hvoid icu::IDNA::labelToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)Stable
ICU 4.6
(missing)
-
idna.hvoid icu::IDNA::labelToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)Stable
ICU 4.6
(missing)
-
idna.hvoid icu::IDNA::nameToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)Stable
ICU 4.6
(missing)
-
idna.hvoid icu::IDNA::nameToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)Stable
ICU 4.6
(missing)
-
LayoutEngine.hUClassID icu::LayoutEngine::getDynamicClassID()Deprecated
ICU 54
(missing)
-
LayoutEngine.hicu::LayoutEngine::~LayoutEngine()Deprecated
ICU 54
(missing)
-
LayoutEngine.hle_int32 icu::LayoutEngine::getGlyphCount()Deprecated
ICU 54
(missing)
-
LayoutEngine.hle_int32 icu::LayoutEngine::layoutChars(const LEUnicode chars[], le_int32, le_int32, le_int32, le_bool, float, float, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hstatic LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hstatic LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hstatic UClassID icu::LayoutEngine::getStaticClassID()Deprecated
ICU 54
(missing)
-
LayoutEngine.hstatic const le_int32 icu::LayoutEngine::kTypoFlagKernInternal(missing)
-
LayoutEngine.hstatic const le_int32 icu::LayoutEngine::kTypoFlagLigaInternal(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getGlyphPositions(float positions[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LayoutEngine.hvoid icu::LayoutEngine::reset()Deprecated
ICU 54
(missing)
-
LEFontInstance.hLEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32)Deprecated
ICU 54
(missing)
-
LEFontInstance.hLEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*)Deprecated
ICU 54
(missing)
-
LEFontInstance.hLEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*, le_bool)Deprecated
ICU 54
(missing)
-
LEFontInstance.hLEUnicode32 icu::LECharMapper::mapChar(LEUnicode32)Deprecated
ICU 54
(missing)
-
LEFontInstance.hUClassID icu::LEFontInstance::getDynamicClassID()Deprecated
ICU 54
(missing)
-
LEFontInstance.hconst LEFontInstance* icu::LEFontInstance::getSubFont(const LEUnicode chars[], le_int32*, le_int32, le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hconst void* icu::LEFontInstance::getFontTable(LETag, size_t&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::getScaleFactorX()Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::getScaleFactorY()Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::getXPixelsPerEm()Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::getYPixelsPerEm()Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::xPixelsToUnits(float)Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::xUnitsToPoints(float)Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::yPixelsToUnits(float)Deprecated
ICU 54
(missing)
-
LEFontInstance.hfloat icu::LEFontInstance::yUnitsToPoints(float)Deprecated
ICU 54
(missing)
-
LEFontInstance.hicu::LECharMapper::~LECharMapper()Deprecated
ICU 54
(missing)
-
LEFontInstance.hicu::LEFontInstance::~LEFontInstance()Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_bool icu::LEFontInstance::canDisplay(LEUnicode32)Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_bool icu::LEFontInstance::getGlyphPoint(LEGlyphID, le_int32, LEPoint&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_int32 icu::LEFontInstance::getAscent()Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_int32 icu::LEFontInstance::getDescent()Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_int32 icu::LEFontInstance::getLeading()Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_int32 icu::LEFontInstance::getLineHeight()Deprecated
ICU 54
(missing)
-
LEFontInstance.hle_int32 icu::LEFontInstance::getUnitsPerEM()Deprecated
ICU 54
(missing)
-
LEFontInstance.hstatic UClassID icu::LEFontInstance::getStaticClassID()Deprecated
ICU 54
(missing)
-
LEFontInstance.hstatic float icu::LEFontInstance::fixedToFloat(le_int32)Deprecated
ICU 54
(missing)
-
LEFontInstance.hstatic le_int32 icu::LEFontInstance::floatToFixed(float)Deprecated
ICU 54
(missing)
-
LEFontInstance.hvoid icu::LEFontInstance::getGlyphAdvance(LEGlyphID, LEPoint&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hvoid icu::LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32, le_int32, le_bool, const LECharMapper*, le_bool, LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hvoid icu::LEFontInstance::pixelsToUnits(LEPoint&, LEPoint&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hvoid icu::LEFontInstance::transformFunits(float, float, LEPoint&)Deprecated
ICU 54
(missing)
-
LEFontInstance.hvoid icu::LEFontInstance::unitsToPoints(LEPoint&, LEPoint&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hLEGlyphID icu::LEGlyphStorage::getGlyphID(le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hLEGlyphID& icu::LEGlyphStorage::operator[](le_int32)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hLEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hLEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hUClassID icu::LEGlyphStorage::getDynamicClassID()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hicu::LEGlyphStorage::LEGlyphStorage()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hicu::LEGlyphStorage::~LEGlyphStorage()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_int32 icu::LEGlyphStorage::allocateAuxData(LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_int32 icu::LEGlyphStorage::allocatePositions(LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_int32 icu::LEGlyphStorage::applyInsertions()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_int32 icu::LEGlyphStorage::getCharIndex(le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_int32 icu::LEGlyphStorage::getGlyphCount()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hle_uint32 icu::LEGlyphStorage::getAuxData(le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hstatic UClassID icu::LEGlyphStorage::getStaticClassID()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adjustPosition(le_int32, float, float, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptGlyphArray(LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptGlyphCount(LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptGlyphCount(le_int32)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::adoptPositionArray(LEGlyphStorage&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::allocateGlyphArray(le_int32, le_bool, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::moveGlyph(le_int32, le_int32, le_uint32)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::reset()Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::setAuxData(le_int32, le_uint32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::setCharIndex(le_int32, le_int32, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::setGlyphID(le_int32, LEGlyphID, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LEGlyphStorage.hvoid icu::LEGlyphStorage::setPosition(le_int32, float, float, LEErrorCode&)Deprecated
ICU 54
(missing)
-
LESwaps.h#define SWAPLDeprecated
ICU 54
(missing)
-
LESwaps.h#define SWAPWDeprecated
ICU 54
(missing)
-
LESwaps.hstatic le_uint16 icu::LESwaps::swapWord(le_uint16)Deprecated
ICU 54
(missing)
-
LESwaps.hstatic le_uint32 icu::LESwaps::swapLong(le_uint32)Deprecated
ICU 54
(missing)
-
LETypes.h#define LE_AFRC_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_ARRAY_COPYInternal(missing)
-
LETypes.h#define LE_ARRAY_SIZEInternal(missing)
-
LETypes.h#define LE_ASSERT_BAD_FONT(untagged)(missing)
-
LETypes.h#define LE_CHAR_FILTER_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_CLIENT_MASKDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_CLIENT_SHIFTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_CLIG_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_CSWH_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_DEBUG_BAD_FONTInternal(missing)
-
LETypes.h#define LE_DEFAULT_FEATURE_FLAG(untagged)(missing)
-
LETypes.h#define LE_DELETE_ARRAYInternal(missing)
-
LETypes.h#define LE_DLIG_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_FAILUREDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_FRAC_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_GET_CLIENTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_GET_GLYPHDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_GET_SUB_FONTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_GLYPH_MASKDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_GLYPH_SHIFTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_GROW_ARRAYInternal(missing)
-
LETypes.h#define LE_HLIG_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_Kerning_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_LIGA_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_Ligatures_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_MAKE_TAGDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_NALT_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_NEW_ARRAYInternal(missing)
-
LETypes.h#define LE_RANGE_CHECK(untagged)(missing)
-
LETypes.h#define LE_RLIG_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_RUBY_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SALT_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SET_CLIENTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SET_GLYPHDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SET_SUB_FONTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SMCP_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS01_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS02_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS03_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS04_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS05_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS06_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SS07_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_SUB_FONT_MASKDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SUB_FONT_SHIFTDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SUCCESSDeprecated
ICU 54
(missing)
-
LETypes.h#define LE_SWSH_FEATURE_FLAGInternal(missing)
-
LETypes.h#define LE_UINT32_MAX(untagged)(missing)
-
LETypes.h#define LE_UINTPTR_MAX(untagged)(missing)
-
LETypes.h#define LE_ZERO_FEATURE_FLAGInternal(missing)
-
LETypes.henum LEErrorCode::LE_FONT_FILE_NOT_FOUND_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_ILLEGAL_ARGUMENT_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_INDEX_OUT_OF_BOUNDS_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_INTERNAL_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_MEMORY_ALLOCATION_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_MISSING_FONT_TABLE_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_NO_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_NO_LAYOUT_ERRORDeprecated
ICU 54
(missing)
-
LETypes.henum LEErrorCode::LE_NO_SUBFONT_WARNINGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureENUMs::LE_AFRC_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_CHAR_FILTER_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_CLIG_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_CSWH_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_DLIG_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_FEATURE_ENUM_MAXInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_FRAC_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_HLIG_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_Kerning_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_LIGA_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_Ligatures_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_NALT_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_RLIG_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_RUBY_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SALT_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SMCP_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS01_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS02_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS03_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS04_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS05_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS06_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SS07_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_SWSH_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureENUMs::LE_ZERO_FEATURE_ENUMInternal(missing)
-
LETypes.henum LEFeatureTags::LE_AALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ABVF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ABVM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ABVS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_AFRC_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_AKHN_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_BLWF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_BLWM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_BLWS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_C2PC_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_C2SC_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CASE_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CCMP_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CJCT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CLIG_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CPSP_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CSWH_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_CURS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_DIST_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_DLIG_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_DNOM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_EXPT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FIN2_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FIN3_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FINA_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FRAC_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_FWID_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HALF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HALN_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HIST_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HKNA_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HLIG_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HNGL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_HWID_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_INIT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ISOL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ITAL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_JALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_JP78_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_JP83_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_JP90_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_KERN_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_LFBD_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_LIGA_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_LJMO_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_LNUM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_LOCL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MARK_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MED2_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MEDI_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MGRK_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MKMK_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_MSET_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_NALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_NLCK_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_NUKT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_NUMR_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ONUM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_OPBD_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ORDN_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ORNM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PCAP_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PNUM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PREF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PRES_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PSTF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PSTS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_PWID_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_QWID_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RAND_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RKRF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RLIG_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RPHF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RTBD_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RTLA_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_RUBY_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SINF_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SIZE_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SMCP_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SMPL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS01_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS02_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS03_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS04_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS05_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS06_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS07_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS08_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS09_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS10_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS11_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS12_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS13_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS14_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS15_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS16_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS17_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS18_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS19_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SS20_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SUBS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SUPS_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_SWSH_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TITL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TJMO_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TNAM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TNUM_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TRAD_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_TWID_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_UNIC_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VALT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VATU_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VERT_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VHAL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VJMO_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VKNA_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VKRN_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VPAL_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_VRT2_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LEFeatureTags::LE_ZERO_FEATURE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_ACNT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_AVAR_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_BASE_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_BDAT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_BHED_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_BLOC_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_BSLN_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_CFF__TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_CMAP_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_CVAR_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_CVT__TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_DSIG_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_EBDT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_EBLC_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_EBSC_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_FDSC_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_FEAT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_FMTX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_FPGM_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_FVAR_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GASP_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GDEF_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GLYF_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GPOS_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GSUB_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_GVAR_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_HDMX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_HEAD_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_HHEA_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_HMTX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_HSTY_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_JSTF_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_JUST_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_KERN_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_LCAR_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_LOCA_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_LTSH_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_MAXP_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_MORT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_MORX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_NAME_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_OPBD_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_OS_2_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_PCLT_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_POST_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_PREP_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_PROP_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_TRAK_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_VDMX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_VHEA_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_VMTX_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_VORG_TABLE_TAGDeprecated
ICU 54
(missing)
-
LETypes.henum LETableTags::LE_ZAPF_TABLE_TAGDeprecated
ICU 54
(missing)
-
numfmt.hUnicodeString& icu::NumberFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)Stable(missing)
-
unistr.hstatic UnicodeString icu::UnicodeString::fromUTF8(const StringPiece&)Stable
ICU 4.2
(missing)
-
utypes.h#define NULLStable
ICU 2.0
(missing)
-
-

-(jump back to top) -
- -

Deprecated or Obsoleted in ICU 58

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileAPIICU 57ICU 58
dtfmtsym.henum - icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNTStable
ICU 3.6
Deprecated
-ICU 58
dtfmtsym.henum - icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNTStable
ICU 3.6
Deprecated
-ICU 58
measfmt.henum UMeasureFormatWidth::UMEASFMT_WIDTH_COUNTStable
ICU 53
Deprecated
-ICU 58
reldatefmt.henum UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNTStable
ICU 53
Deprecated
-ICU 58
reldatefmt.henum UDateDirection::UDAT_DIRECTION_COUNTStable
ICU 53
Deprecated
-ICU 58
reldatefmt.henum UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNTStable
ICU 53
Deprecated
-ICU 58
tmunit.henum - icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNTStable
ICU 4.2
Deprecated
-ICU 58
ubidi.h#define U_BIDI_CLASS_DEFAULTStable
ICU 3.6
Deprecated
-ICU 58
ubidi.henum UBiDiReorderingMode::UBIDI_REORDER_COUNTStable
ICU 3.6
Deprecated
-ICU 58
ubrk.henum UBreakIteratorType::UBRK_COUNTStable
ICU 2.0
Deprecated
-ICU 58
ucal.henum UCalendarDateFields::UCAL_FIELD_COUNTStable
ICU 2.6
Deprecated
-ICU 58
uchar.henum UBidiPairedBracketType::U_BPT_COUNTStable
ICU 52
Deprecated
-ICU 58
uchar.henum UBlockCode::UBLOCK_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UCharDirection::U_CHAR_DIRECTION_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UCharNameChoice::U_CHAR_NAME_CHOICE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UDecompositionType::U_DT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UEastAsianWidth::U_EA_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UGraphemeClusterBreak::U_GCB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
uchar.henum UHangulSyllableType::U_HST_COUNTStable
ICU 2.6
Deprecated
-ICU 58
uchar.henum UJoiningGroup::U_JG_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UJoiningType::U_JT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum ULineBreak::U_LB_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UNumericType::U_NT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_BINARY_LIMITStable
ICU 2.1
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_DOUBLE_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_INT_LIMITStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_MASK_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_OTHER_PROPERTY_LIMITStable
ICU 4.6
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_STRING_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum USentenceBreak::U_SB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
uchar.henum UWordBreakValues::U_WB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
ucnv.henum UConverterUnicodeSet::UCNV_SET_COUNTStable
ICU 2.6
Deprecated
-ICU 58
ucol.henum UColAttribute::UCOL_ATTRIBUTE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
ucol.henum UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
ucol.henum UColBoundMode::UCOL_BOUND_VALUE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
ucol.henum UColReorderCode::UCOL_REORDER_CODE_LIMITStable
ICU 4.8
Deprecated
-ICU 58
ucurr.henum UCurrencyUsage::UCURR_USAGE_COUNTStable
ICU 54
Deprecated
-ICU 58
udat.henum UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNTStable
ICU 53
Deprecated
-ICU 58
udat.henum UDateFormatField::UDAT_FIELD_COUNTStable
ICU 3.0
Deprecated
-ICU 58
udata.henum UDataFileAccess::UDATA_FILE_ACCESS_COUNTStable
ICU 3.4
Deprecated
-ICU 58
udatpg.henum UDateTimePatternConflict::UDATPG_CONFLICT_COUNTStable
ICU 3.8
Deprecated
-ICU 58
udatpg.henum UDateTimePatternField::UDATPG_FIELD_COUNTStable
ICU 3.8
Deprecated
-ICU 58
uformattable.henum UFormattableType::UFMT_COUNTStable
ICU 52
Deprecated
-ICU 58
uloc.henum ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMITStable
ICU 2.1
Deprecated
-ICU 58
ulocdata.henum ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNTStable
ICU 3.4
Deprecated
-ICU 58
ulocdata.henum ULocaleDataExemplarSetType::ULOCDATA_ES_COUNTStable
ICU 3.4
Deprecated
-ICU 58
ulocdata.henum UMeasurementSystem::UMS_LIMITStable
ICU 2.8
Deprecated
-ICU 58
unum.henum UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNTStable
ICU 4.8
Deprecated
-ICU 58
unum.henum UNumberFormatFields::UNUM_FIELD_COUNTStable
ICU 49
Deprecated
-ICU 58
unum.henum UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNTStable
ICU 4.8
Deprecated
-ICU 58
unum.henum UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNTStable
ICU 2.0
Deprecated
-ICU 58
upluralrules.henum UPluralType::UPLURAL_TYPE_COUNTStable
ICU 50
Deprecated
-ICU 58
uregion.henum URegionType::URGN_LIMITStable
ICU 51
Deprecated
-ICU 58
ureldatefmt.henum UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNTStable
ICU 54
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_COUNTDraft
ICU 57
Deprecated
-ICU 58
ures.henum UResType::URES_LIMITStable
ICU 2.0
Deprecated
-ICU 58
uscript.henum UScriptCode::USCRIPT_CODE_LIMITStable
ICU 2.2
Deprecated
-ICU 58
usearch.henum USearchAttribute::USEARCH_ATTRIBUTE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
usearch.henum USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
uset.henum USetSpanCondition::USET_SPAN_CONDITION_COUNTStable
ICU 3.8
Deprecated
-ICU 58
uspoof.henum USpoofChecks::USPOOF_ANY_CASEStable
ICU 4.2
Deprecated
-ICU 58
utrace.henum UTraceFunctionNumber::UTRACE_COLLATION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
utrace.henum UTraceFunctionNumber::UTRACE_CONVERSION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
utrace.henum UTraceFunctionNumber::UTRACE_FUNCTION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
utypes.henum UErrorCode::U_BRK_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_ERROR_WARNING_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_FMT_PARSE_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_IDNA_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_PARSE_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_PLUGIN_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_REGEX_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utypes.henum UErrorCode::U_STANDARD_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
-

-(jump back to top) -
- -

Changed in ICU 58 (old, new)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
FileAPIICU 57ICU 58
compactdecimalformat.hUnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)Draft→Stable
ICU 56
decimfmt.hUnicodeString& icu::DecimalFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
decimfmt.hUnicodeString& icu::DecimalFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
decimfmt.hUnicodeString& icu::DecimalFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
dtfmtsym.henum - icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNTStable
ICU 3.6
Deprecated
-ICU 58
dtfmtsym.henum - icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNTStable
ICU 3.6
Deprecated
-ICU 58
dtptngen.hstatic UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
dtptngen.hstatic UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
fieldpos.henum icu::FieldPosition::(anonymous) {}(untagged)Stable
-ICU 2.0
fieldpos.henum icu::FieldPosition::(anonymous)::DONT_CARE(untagged)Stable
-ICU 2.0
filteredbrk.hBreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hUBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hUBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hicu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()Draft→Stable
ICU 56
filteredbrk.hstatic FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hstatic FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)Draft→Stable
ICU 56
localpointer.hicu::LocalArray< T >::LocalArray(T*, UErrorCode&)Draft→Stable
ICU 56
localpointer.hvoid icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)Draft→Stable
ICU 56
localpointer.hvoid icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPTDraft→Stable
ICU 56
localpointer.hvoid icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPTDraft→Stable
ICU 56
measfmt.henum UMeasureFormatWidth::UMEASFMT_WIDTH_COUNTStable
ICU 53
Deprecated
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)Draft→Stable
ICU 56
numfmt.hUnicodeString& icu::NumberFormat::format(const Formattable&, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
numfmt.hUnicodeString& icu::NumberFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
numfmt.hUnicodeString& icu::NumberFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
numfmt.hUnicodeString& icu::NumberFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)StableStable
-ICU 4.4
reldatefmt.henum UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNTStable
ICU 53
Deprecated
-ICU 58
reldatefmt.henum UDateDirection::UDAT_DIRECTION_COUNTStable
ICU 53
Deprecated
-ICU 58
reldatefmt.henum UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNTStable
ICU 53
Deprecated
-ICU 58
tmunit.henum - icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNTStable
ICU 4.2
Deprecated
-ICU 58
ubidi.h#define U_BIDI_CLASS_DEFAULTStable
ICU 3.6
Deprecated
-ICU 58
ubidi.henum UBiDiReorderingMode::UBIDI_REORDER_COUNTStable
ICU 3.6
Deprecated
-ICU 58
ubrk.henum UBreakIteratorType::UBRK_COUNTStable
ICU 2.0
Deprecated
-ICU 58
ucal.henum UCalendarDateFields::UCAL_FIELD_COUNTStable
ICU 2.6
Deprecated
-ICU 58
uchar.henum UBidiPairedBracketType::U_BPT_COUNTStable
ICU 52
Deprecated
-ICU 58
uchar.henum UBlockCode::UBLOCK_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UCharDirection::U_CHAR_DIRECTION_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UCharNameChoice::U_CHAR_NAME_CHOICE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UDecompositionType::U_DT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UEastAsianWidth::U_EA_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UGraphemeClusterBreak::U_GCB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
uchar.henum UGraphemeClusterBreak::U_GCB_PREPENDStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UGraphemeClusterBreak::U_GCB_REGIONAL_INDICATORStable
ICU 3.4
Stable
-ICU 50 -
-(changed)
uchar.henum UGraphemeClusterBreak::U_GCB_SPACING_MARKStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UHangulSyllableType::U_HST_COUNTStable
ICU 2.6
Deprecated
-ICU 58
uchar.henum UJoiningGroup::U_JG_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UJoiningType::U_JT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum ULineBreak::U_LB_CLOSE_PARENTHESISStable
ICU 2.2
Stable
-ICU 4.4 -
-(changed)
uchar.henum ULineBreak::U_LB_CONDITIONAL_JAPANESE_STARTERStable
ICU 2.2
Stable
-ICU 49 -
-(changed)
uchar.henum ULineBreak::U_LB_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum ULineBreak::U_LB_H2Stable
ICU 2.2
Stable
-ICU 3.4 -
-(changed)
uchar.henum ULineBreak::U_LB_H3Stable
ICU 2.2
Stable
-ICU 3.4 -
-(changed)
uchar.henum ULineBreak::U_LB_HEBREW_LETTERStable
ICU 2.2
Stable
-ICU 49 -
-(changed)
uchar.henum ULineBreak::U_LB_JLStable
ICU 2.2
Stable
-ICU 3.4 -
-(changed)
uchar.henum ULineBreak::U_LB_JTStable
ICU 2.2
Stable
-ICU 3.4 -
-(changed)
uchar.henum ULineBreak::U_LB_JVStable
ICU 2.2
Stable
-ICU 3.4 -
-(changed)
uchar.henum ULineBreak::U_LB_NEXT_LINEStable
ICU 2.2
Stable
-ICU 2.6 -
-(changed)
uchar.henum ULineBreak::U_LB_REGIONAL_INDICATORStable
ICU 2.2
Stable
-ICU 50 -
-(changed)
uchar.henum ULineBreak::U_LB_WORD_JOINERStable
ICU 2.2
Stable
-ICU 2.6 -
-(changed)
uchar.henum UNumericType::U_NT_COUNTStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_BINARY_LIMITStable
ICU 2.1
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_DOUBLE_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_INT_LIMITStable
ICU 2.2
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_MASK_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_OTHER_PROPERTY_LIMITStable
ICU 4.6
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_STRING_LIMITStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
uchar.henum USentenceBreak::U_SB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
uchar.henum UWordBreakValues::U_WB_COUNTStable
ICU 3.4
Deprecated
-ICU 58
uchar.henum UWordBreakValues::U_WB_CRStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UWordBreakValues::U_WB_DOUBLE_QUOTEStable
ICU 3.4
Stable
-ICU 52 -
-(changed)
uchar.henum UWordBreakValues::U_WB_EXTENDStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UWordBreakValues::U_WB_HEBREW_LETTERStable
ICU 3.4
Stable
-ICU 52 -
-(changed)
uchar.henum UWordBreakValues::U_WB_LFStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UWordBreakValues::U_WB_MIDNUMLETStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UWordBreakValues::U_WB_NEWLINEStable
ICU 3.4
Stable
-ICU 4.0 -
-(changed)
uchar.henum UWordBreakValues::U_WB_REGIONAL_INDICATORStable
ICU 3.4
Stable
-ICU 50 -
-(changed)
+

+(jump back to top) +
+ +

Deprecated or Obsoleted in ICU 59

+ + + + + - + - - - - + - - +
FileAPIICU 58ICU 59
uchar.henum UWordBreakValues::U_WB_SINGLE_QUOTEStable
ICU 3.4
Stable
-ICU 52 -
-(changed)
utmscale.henum UDateTimeScale::UDTS_MAX_SCALEStable
ICU 3.2
Deprecated
+ICU 59
ucnv.henum UConverterUnicodeSet::UCNV_SET_COUNTStable
ICU 2.6
Deprecated
-ICU 58
ucol.henum UColAttribute::UCOL_ATTRIBUTE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
utmscale.henum UTimeScaleValue::UTSV_MAX_SCALE_VALUEStable
ICU 3.2
Deprecated
+ICU 59
ucol.henum UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
+

+(jump back to top) +
+ +

Changed in ICU 59 (old, new)

+ + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
FileAPIICU 58ICU 59
ucol.henum UColBoundMode::UCOL_BOUND_VALUE_COUNTStable
ICU 2.0
Deprecated
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createGallonImperial(UErrorCode&)Draft→Stable
ICU 57
ucol.henum UColReorderCode::UCOL_REORDER_CODE_LIMITStable
ICU 4.8
Deprecated
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilePerGallonImperial(UErrorCode&)Draft→Stable
ICU 57
ucurr.henum UCurrencyUsage::UCURR_USAGE_COUNTStable
ICU 54
Deprecated
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilligramPerDeciliter(UErrorCode&)Draft→Stable
ICU 57
udat.henum UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNTStable
ICU 53
Deprecated
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMillimolePerLiter(UErrorCode&)Draft→Stable
ICU 57
udat.henum UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCHDraft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createPartPerMillion(UErrorCode&)Draft→Stable
ICU 57
udat.henum UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCHDraft→Stable
ICU 56
reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::format(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
udat.henum UDateFormatField::UDAT_FIELD_COUNTStable
ICU 3.0
Deprecated
-ICU 58
reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::formatNumeric(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
udata.henum UDataFileAccess::UDATA_FILE_ACCESS_COUNTStable
ICU 3.4
Deprecated
-ICU 58
simpleformatter.hSimpleFormatter& icu::SimpleFormatter::operator=(const SimpleFormatter&)Draft→Stable
ICU 57
udatpg.henum UDateTimePatternConflict::UDATPG_CONFLICT_COUNTStable
ICU 3.8
Deprecated
-ICU 58
simpleformatter.hUBool icu::SimpleFormatter::applyPattern(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
udatpg.henum UDateTimePatternField::UDATPG_FIELD_COUNTStable
ICU 3.8
Deprecated
-ICU 58
simpleformatter.hUBool icu::SimpleFormatter::applyPatternMinMaxArguments(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft→Stable
ICU 57
uformattable.henum UFormattableType::UFMT_COUNTStable
ICU 52
Deprecated
-ICU 58
simpleformatter.hUnicodeString icu::SimpleFormatter::getTextWithNoArguments()Draft→Stable
ICU 57
uloc.henum ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMITStable
ICU 2.1
Deprecated
-ICU 58
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
ulocdata.henum ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNTStable
ICU 3.4
Deprecated
-ICU 58
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
ulocdata.henum ULocaleDataExemplarSetType::ULOCDATA_ES_COUNTStable
ICU 3.4
Deprecated
-ICU 58
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
ulocdata.henum UMeasurementSystem::UMS_LIMITStable
ICU 2.8
Deprecated
-ICU 58
simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndAppend(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft→Stable
ICU 57
unistr.h#define UNISTR_OBJECT_SIZEDraft→Stable
ICU 56
simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndReplace(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft→Stable
ICU 57
unistr.hvoid icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPTDraft→Stable
ICU 56
simpleformatter.hicu::SimpleFormatter::SimpleFormatter()Draft→Stable
ICU 57
unum.henum UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNTStable
ICU 4.8
Deprecated
-ICU 58
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const SimpleFormatter&)Draft→Stable
ICU 57
unum.henum UNumberFormatFields::UNUM_FIELD_COUNTStable
ICU 49
Deprecated
-ICU 58
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_CURRENCY_STANDARDDraft→Stable
ICU 56
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONGDraft→Stable
ICU 56
simpleformatter.hicu::SimpleFormatter::~SimpleFormatter()Draft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORTDraft→Stable
ICU 56
simpleformatter.hint32_t icu::SimpleFormatter::getArgumentLimit()Draft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNTStable
ICU 4.8
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_EMOJI_MODIFIER_BASEDraft→Stable
ICU 57
unum.henum UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNTStable
ICU 2.0
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_EMOJI_MODIFIERDraft→Stable
ICU 57
upluralrules.henum UPluralType::UPLURAL_TYPE_COUNTStable
ICU 50
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_EMOJI_PRESENTATIONDraft→Stable
ICU 57
uregion.henum URegionType::URGN_LIMITStable
ICU 51
Deprecated
-ICU 58
uchar.henum UProperty::UCHAR_EMOJIDraft→Stable
ICU 57
ureldatefmt.henum UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNTStable
ICU 54
Deprecated
-ICU 58
udat.henum UDateFormatField::UDAT_AM_PM_MIDNIGHT_NOON_FIELDDraft→Stable
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_COUNTDraft
ICU 57
Deprecated
-ICU 58
ureldatefmt.hURelativeDateTimeFormatter* ureldatefmt_open(const char*, UNumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode*)Draft→Stable
ICU 57
ures.henum UResType::URES_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_DAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_CODE_LIMITStable
ICU 2.2
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_FRIDAYDraft→Stable
ICU 57
usearch.henum USearchAttribute::USEARCH_ATTRIBUTE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_HOURDraft→Stable
ICU 57
usearch.henum USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNTStable
ICU 2.4
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MINUTEDraft→Stable
ICU 57
uset.henum USetSpanCondition::USET_SPAN_CONDITION_COUNTStable
ICU 3.8
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONDAYDraft→Stable
ICU 57
uspoof.henum USpoofChecks::USPOOF_ANY_CASEStable
ICU 4.2
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONTHDraft→Stable
ICU 57
uspoof.hint32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)Deprecated
ICU 51
Stable
-ICU 4.2 -
-(changed)
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_QUARTERDraft→Stable
ICU 57
uspoof.hint32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)Deprecated
ICU 51
Stable
-ICU 4.2 -
-(changed)
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SATURDAYDraft→Stable
ICU 57
utrace.henum UTraceFunctionNumber::UTRACE_COLLATION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SECONDDraft→Stable
ICU 57
utrace.henum UTraceFunctionNumber::UTRACE_CONVERSION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SUNDAYDraft→Stable
ICU 57
utrace.henum UTraceFunctionNumber::UTRACE_FUNCTION_LIMITStable
ICU 2.8
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_THURSDAYDraft→Stable
ICU 57
utypes.h#define NULLDeprecated
ICU 54
Stable
-ICU 2.0 -
-(changed)
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_TUESDAYDraft→Stable
ICU 57
utypes.henum UErrorCode::U_BRK_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEDNESDAYDraft→Stable
ICU 57
utypes.henum UErrorCode::U_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEEKDraft→Stable
ICU 57
utypes.henum UErrorCode::U_ERROR_WARNING_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_YEARDraft→Stable
ICU 57
utypes.henum UErrorCode::U_FMT_PARSE_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.hint32_t ureldatefmt_combineDateAndTime(const URelativeDateTimeFormatter*, const UChar*, int32_t, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
utypes.henum UErrorCode::U_IDNA_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.hint32_t ureldatefmt_format(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
utypes.henum UErrorCode::U_PARSE_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.hint32_t ureldatefmt_formatNumeric(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
utypes.henum UErrorCode::U_PLUGIN_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
ureldatefmt.hvoid ureldatefmt_close(URelativeDateTimeFormatter*)Draft→Stable
ICU 57
utypes.henum UErrorCode::U_REGEX_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utmscale.henum UDateTimeScale::UDTS_MAX_SCALEStable
ICU 3.2
Deprecated
+ICU 59
utypes.henum UErrorCode::U_STANDARD_ERROR_LIMITStable
ICU 2.0
Deprecated
-ICU 58
utmscale.henum UTimeScaleValue::UTSV_MAX_SCALE_VALUEStable
ICU 3.2
Deprecated
+ICU 59

(jump back to top)
-

Promoted to stable in ICU 58

+

Promoted to stable in ICU 59

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
FileAPIICU 57ICU 58FileAPIICU 58ICU 59
bytestrie.hStringPiece icu::BytesTrie::Iterator::getString()(missing)Stable
-ICU 4.8
bytestriebuilder.hBytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)(missing)Stable
-ICU 4.8
compactdecimalformat.hUnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)Draft→Stable
ICU 56
decimfmt.hUnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)(missing)Stable
-ICU 4.4
dtptngen.hstatic UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
dtptngen.hstatic UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
fieldpos.henum icu::FieldPosition::(anonymous) {}(untagged)Stable
-ICU 2.0
fieldpos.henum icu::FieldPosition::(anonymous)::DONT_CARE(untagged)Stable
-ICU 2.0
filteredbrk.hBreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hUBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hUBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hicu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()Draft→Stable
ICU 56
filteredbrk.hstatic FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)Draft→Stable
ICU 56
filteredbrk.hstatic FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)Draft→Stable
ICU 56
fmtable.hicu::Formattable::Formattable(StringPiece, UErrorCode&)(missing)Stable
-ICU 4.4
fmtable.hvoid icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)(missing)Stable
-ICU 4.4
idna.hvoid icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
localpointer.hicu::LocalArray< T >::LocalArray(T*, UErrorCode&)Draft→Stable
ICU 56
localpointer.hvoid icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)Draft→Stable
ICU 56
localpointer.hvoid icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPTDraft→Stable
ICU 56
localpointer.hvoid icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPTDraft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)Draft→Stable
ICU 56
localpointer.hLocalArray<T>& icu::LocalArray< T >::operator=(LocalArray< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)Draft→Stable
ICU 56
localpointer.hLocalPointer<T>& icu::LocalPointer< T >::operator=(LocalPointer< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)Draft→Stable
ICU 56
localpointer.hicu::LocalArray< T >::LocalArray(LocalArray< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)Draft→Stable
ICU 56
localpointer.hicu::LocalPointer< T >::LocalPointer(LocalPointer< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createGallonImperial(UErrorCode&)Draft→Stable
ICU 57
measunit.hstatic MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)Draft→Stable
ICU 56
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilePerGallonImperial(UErrorCode&)Draft→Stable
ICU 57
numfmt.hUnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)(missing)Stable
-ICU 4.4
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilligramPerDeciliter(UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_ADLAM(missing)Stable
-ICU 58
(Born Stable)measunit.hstatic MeasureUnit* icu::MeasureUnit::createMillimolePerLiter(UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_BHAIKSUKI(missing)Stable
-ICU 58
(Born Stable)measunit.hstatic MeasureUnit* icu::MeasureUnit::createPartPerMillion(UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C(missing)Stable
-ICU 58
(Born Stable)reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::format(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT(missing)Stable
-ICU 58
(Born Stable)reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::formatNumeric(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hSimpleFormatter& icu::SimpleFormatter::operator=(const SimpleFormatter&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_MARCHEN(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUBool icu::SimpleFormatter::applyPattern(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUBool icu::SimpleFormatter::applyPatternMinMaxArguments(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_NEWA(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString icu::SimpleFormatter::getTextWithNoArguments()Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_OSAGE(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_TANGUT_COMPONENTS(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UBlockCode::UBLOCK_TANGUT(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UGraphemeClusterBreak::U_GCB_E_BASE_GAZ(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndAppend(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UGraphemeClusterBreak::U_GCB_E_BASE(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndReplace(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UGraphemeClusterBreak::U_GCB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hicu::SimpleFormatter::SimpleFormatter()Draft→Stable
ICU 57
uchar.henum UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const SimpleFormatter&)Draft→Stable
ICU 57
uchar.henum UGraphemeClusterBreak::U_GCB_ZWJ(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UJoiningGroup::U_JG_AFRICAN_FEH(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft→Stable
ICU 57
uchar.henum UJoiningGroup::U_JG_AFRICAN_NOON(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hicu::SimpleFormatter::~SimpleFormatter()Draft→Stable
ICU 57
uchar.henum UJoiningGroup::U_JG_AFRICAN_QAF(missing)Stable
-ICU 58
(Born Stable)simpleformatter.hint32_t icu::SimpleFormatter::getArgumentLimit()Draft→Stable
ICU 57
uchar.henum ULineBreak::U_LB_E_BASE(missing)Stable
-ICU 58
(Born Stable)uchar.henum UProperty::UCHAR_EMOJI_MODIFIER_BASEDraft→Stable
ICU 57
uchar.henum ULineBreak::U_LB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)uchar.henum UProperty::UCHAR_EMOJI_MODIFIERDraft→Stable
ICU 57
uchar.henum ULineBreak::U_LB_ZWJ(missing)Stable
-ICU 58
(Born Stable)uchar.henum UProperty::UCHAR_EMOJI_PRESENTATIONDraft→Stable
ICU 57
uchar.henum UWordBreakValues::U_WB_E_BASE_GAZ(missing)Stable
-ICU 58
(Born Stable)uchar.henum UProperty::UCHAR_EMOJIDraft→Stable
ICU 57
uchar.henum UWordBreakValues::U_WB_E_BASE(missing)Stable
-ICU 58
(Born Stable)udat.henum UDateFormatField::UDAT_AM_PM_MIDNIGHT_NOON_FIELDDraft→Stable
ICU 57
uchar.henum UWordBreakValues::U_WB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)unistr.hUnicodeString& icu::UnicodeString::operator=(UnicodeString&&) U_NOEXCEPT(missing)Stable
+ICU 56
uchar.henum UWordBreakValues::U_WB_GLUE_AFTER_ZWJ(missing)Stable
-ICU 58
(Born Stable)unistr.hicu::UnicodeString::UnicodeString(UnicodeString&&) U_NOEXCEPT(missing)Stable
+ICU 56
uchar.henum UWordBreakValues::U_WB_ZWJ(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.hURelativeDateTimeFormatter* ureldatefmt_open(const char*, UNumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode*)Draft→Stable
ICU 57
udat.henum UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCHDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_DAYDraft→Stable
ICU 57
udat.henum UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCHDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_FRIDAYDraft→Stable
ICU 57
unistr.h#define UNISTR_OBJECT_SIZEDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_HOURDraft→Stable
ICU 57
unistr.hstatic UnicodeString icu::UnicodeString::fromUTF8(StringPiece)(missing)Stable
-ICU 4.2
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MINUTEDraft→Stable
ICU 57
unistr.hvoid icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPTDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONDAYDraft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_CURRENCY_STANDARDDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONTHDraft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONGDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_QUARTERDraft→Stable
ICU 57
unum.henum UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORTDraft→Stable
ICU 56
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SATURDAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_ADLAM(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SECONDDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_BHAIKSUKI(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SUNDAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_THURSDAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_JAMO(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_TUESDAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_MARCHEN(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEDNESDAYDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_NEWA(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEEKDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_OSAGE(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_YEARDraft→Stable
ICU 57
uscript.henum UScriptCode::USCRIPT_SYMBOLS_EMOJI(missing)Stable
-ICU 58
(Born Stable)ureldatefmt.hint32_t ureldatefmt_combineDateAndTime(const URelativeDateTimeFormatter*, const UChar*, int32_t, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
uspoof.hint32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)Deprecated
ICU 51
Stable
-ICU 4.2 -
-(changed)
ureldatefmt.hint32_t ureldatefmt_format(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
uspoof.hint32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)Deprecated
ICU 51
Stable
-ICU 4.2 -
-(changed)
ureldatefmt.hint32_t ureldatefmt_formatNumeric(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft→Stable
ICU 57
utypes.h#define NULLDeprecated
ICU 54
Stable
-ICU 2.0 -
-(changed)
ureldatefmt.hvoid ureldatefmt_close(URelativeDateTimeFormatter*)Draft→Stable
ICU 57

(jump back to top)
-

Added in ICU 58

+

Added in ICU 59

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
FileAPIICU 57ICU 58FileAPIICU 58ICU 59
bytestrie.hStringPiece icu::BytesTrie::Iterator::getString()(missing)Stable
-ICU 4.8
bytestriebuilder.hBytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)(missing)Stable
-ICU 4.8
compactdecimalformat.hUnicodeString& icu::CompactDecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)(missing)Internal
-
decimfmt.hUnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)(missing)Stable
-ICU 4.4
fmtable.hicu::Formattable::Formattable(StringPiece, UErrorCode&)(missing)Stable
-ICU 4.4
fmtable.hvoid icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)(missing)Stable
-ICU 4.4
idna.hvoid icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
idna.hvoid icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)(missing)Stable
-ICU 4.6
measfmt.hUnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)(missing)Draft
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createEast(UErrorCode&)(missing)Draft
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createNorth(UErrorCode&)(missing)Draft
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createSouth(UErrorCode&)(missing)Draft
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createWest(UErrorCode&)(missing)Draft
-ICU 58
numfmt.hUnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)(missing)Stable
-ICU 4.4
tznames.hvoid icu::TimeZoneNames::getDisplayNames(const UnicodeString&, const UTimeZoneNameType types[], int32_t, UDate, UnicodeString dest[], UErrorCode&)(missing)Internal
-
casemap.hstatic int32_t icu::CaseMap::fold(uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
tznames.hvoid icu::TimeZoneNames::loadAllDisplayNames(UErrorCode&)(missing)Internal
-
casemap.hstatic int32_t icu::CaseMap::toLower(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.hUBiDiTransform* ubiditransform_open(UErrorCode*)(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::toTitle(const char*, uint32_t, BreakIterator*, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.henum UBiDiMirroring::UBIDI_MIRRORING_OFF(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::toUpper(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.henum UBiDiMirroring::UBIDI_MIRRORING_ON(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::utf8Fold(uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.henum UBiDiOrder::UBIDI_LOGICAL(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::utf8ToLower(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.henum UBiDiOrder::UBIDI_VISUAL(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::utf8ToTitle(const char*, uint32_t, BreakIterator*, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.huint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)(missing)Draft
-ICU 58
casemap.hstatic int32_t icu::CaseMap::utf8ToUpper(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)(missing)Draft
+ICU 59
ubiditransform.hvoid ubiditransform_close(UBiDiTransform*)(missing)Draft
-ICU 58
char16ptr.hchar16_t* icu::Char16Ptr::get()(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_ADLAM(missing)Stable
-ICU 58
(Born Stable)char16ptr.hconst char16_t* icu::ConstChar16Ptr::get()(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_BHAIKSUKI(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::Char16Ptr(char16_t*)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::Char16Ptr(std::nullptr_t)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::Char16Ptr(uint16_t*)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::Char16Ptr(wchar_t*)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_MARCHEN(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::operator char16_t* ()(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::Char16Ptr::~Char16Ptr()(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_NEWA(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::ConstChar16Ptr(const char16_t*)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_OSAGE(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_TANGUT_COMPONENTS(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::ConstChar16Ptr(const uint16_t*)(missing)Draft
+ICU 59
uchar.henum UBlockCode::UBLOCK_TANGUT(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::ConstChar16Ptr(const wchar_t*)(missing)Draft
+ICU 59
uchar.henum UGraphemeClusterBreak::U_GCB_E_BASE_GAZ(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::operator const char16_t* ()(missing)Draft
+ICU 59
uchar.henum UGraphemeClusterBreak::U_GCB_E_BASE(missing)Stable
-ICU 58
(Born Stable)char16ptr.hicu::ConstChar16Ptr::~ConstChar16Ptr()(missing)Draft
+ICU 59
uchar.henum UGraphemeClusterBreak::U_GCB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)edits.hIterator icu::Edits::getCoarseChangesIterator()(missing)Draft
+ICU 59
uchar.henum UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ(missing)Stable
-ICU 58
(Born Stable)edits.hIterator icu::Edits::getCoarseIterator()(missing)Draft
+ICU 59
uchar.henum UGraphemeClusterBreak::U_GCB_ZWJ(missing)Stable
-ICU 58
(Born Stable)edits.hIterator icu::Edits::getFineChangesIterator()(missing)Draft
+ICU 59
uchar.henum UJoiningGroup::U_JG_AFRICAN_FEH(missing)Stable
-ICU 58
(Born Stable)edits.hIterator icu::Edits::getFineIterator()(missing)Draft
+ICU 59
uchar.henum UJoiningGroup::U_JG_AFRICAN_NOON(missing)Stable
-ICU 58
(Born Stable)edits.hUBool icu::Edits::copyErrorTo(UErrorCode&)(missing)Draft
+ICU 59
uchar.henum UJoiningGroup::U_JG_AFRICAN_QAF(missing)Stable
-ICU 58
(Born Stable)edits.hUBool icu::Edits::hasChanges()(missing)Draft
+ICU 59
uchar.henum ULineBreak::U_LB_E_BASE(missing)Stable
-ICU 58
(Born Stable)edits.hicu::Edits::Edits()(missing)Draft
+ICU 59
uchar.henum ULineBreak::U_LB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)edits.hicu::Edits::~Edits()(missing)Draft
+ICU 59
uchar.henum ULineBreak::U_LB_ZWJ(missing)Stable
-ICU 58
(Born Stable)edits.hint32_t icu::Edits::lengthDelta()(missing)Draft
+ICU 59
uchar.henum UWordBreakValues::U_WB_E_BASE_GAZ(missing)Stable
-ICU 58
(Born Stable)edits.hvoid icu::Edits::addReplace(int32_t, int32_t)(missing)Draft
+ICU 59
uchar.henum UWordBreakValues::U_WB_E_BASE(missing)Stable
-ICU 58
(Born Stable)edits.hvoid icu::Edits::addUnchanged(int32_t)(missing)Draft
+ICU 59
uchar.henum UWordBreakValues::U_WB_E_MODIFIER(missing)Stable
-ICU 58
(Born Stable)edits.hvoid icu::Edits::reset()(missing)Draft
+ICU 59
uchar.henum UWordBreakValues::U_WB_GLUE_AFTER_ZWJ(missing)Stable
-ICU 58
(Born Stable)localpointer.hLocalArray<T>& icu::LocalArray< T >::operator=(LocalArray< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
uchar.henum UWordBreakValues::U_WB_ZWJ(missing)Stable
-ICU 58
(Born Stable)localpointer.hLocalPointer<T>& icu::LocalPointer< T >::operator=(LocalPointer< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
udisplaycontext.henum UDisplayContext::UDISPCTX_NO_SUBSTITUTE(missing)Draft
-ICU 58
localpointer.hicu::LocalArray< T >::LocalArray(LocalArray< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
udisplaycontext.henum UDisplayContext::UDISPCTX_SUBSTITUTE(missing)Draft
-ICU 58
localpointer.hicu::LocalPointer< T >::LocalPointer(LocalPointer< T >&&) U_NOEXCEPT(missing)Stable
+ICU 56
udisplaycontext.henum UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING(missing)Draft
-ICU 58
measunit.hstatic MeasureUnit* icu::MeasureUnit::createPoint(UErrorCode&)(missing)Draft
+ICU 59
unistr.hstatic UnicodeString icu::UnicodeString::fromUTF8(StringPiece)(missing)Stable
-ICU 4.2
platform.h#define U_PLATFORM_HAS_WINUWP_API(missing)Internal
+
uscript.henum UScriptCode::USCRIPT_ADLAM(missing)Stable
-ICU 58
(Born Stable)plurrule.hUnicodeString icu::PluralRules::select(const Formattable&, const NumberFormat&, UErrorCode&)(missing)Internal
+ICU 59
uscript.henum UScriptCode::USCRIPT_BHAIKSUKI(missing)Stable
-ICU 58
(Born Stable)ubrk.hUBreakIterator* ubrk_openBinaryRules(const uint8_t*, int32_t, const UChar*, int32_t, UErrorCode*)(missing)Draft
+ICU 59
uscript.henum UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO(missing)Stable
-ICU 58
(Born Stable)ubrk.hint32_t ubrk_getBinaryRules(UBreakIterator*, uint8_t*, int32_t, UErrorCode*)(missing)Draft
+ICU 59
uscript.henum UScriptCode::USCRIPT_JAMO(missing)Stable
-ICU 58
(Born Stable)ucasemap.h#define UCASEMAP_OMIT_UNCHANGED_TEXT(missing)Draft
+ICU 59
uscript.henum UScriptCode::USCRIPT_MARCHEN(missing)Stable
-ICU 58
(Born Stable)umachine.h#define U_CHAR16_IS_TYPEDEF(missing)Internal
+
uscript.henum UScriptCode::USCRIPT_NEWA(missing)Stable
-ICU 58
(Born Stable)unistr.hUNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const uint16_t*)(missing)Draft
+ICU 59
uscript.henum UScriptCode::USCRIPT_OSAGE(missing)Stable
-ICU 58
(Born Stable)unistr.hUNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const wchar_t*)(missing)Draft
+ICU 59
uscript.henum UScriptCode::USCRIPT_SYMBOLS_EMOJI(missing)Stable
-ICU 58
(Born Stable)unistr.hUnicodeString& icu::UnicodeString::operator=(UnicodeString&&) U_NOEXCEPT(missing)Stable
+ICU 56
uspoof.hURestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(UnicodeString&&) U_NOEXCEPT(missing)Stable
+ICU 56
uspoof.hUSpoofCheckResult* uspoof_openCheckResult(UErrorCode*)(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(const std::nullptr_t)(missing)Draft
+ICU 59
uspoof.hU_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer,,)(missing) -
- -
-(untagged)
unistr.hicu::UnicodeString::UnicodeString(const std::nullptr_t, int32_t)(missing)Draft
+ICU 59
uspoof.hU_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(const uint16_t*, int32_t)(missing)Draft
+ICU 59
uspoof.hconst USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(const wchar_t*, int32_t)(missing)Draft
+ICU 59
uspoof.henum URestrictionLevel::USPOOF_UNDEFINED_RESTRICTIVE(missing)Internal
-
unistr.hicu::UnicodeString::UnicodeString(std::nullptr_t, int32_t, int32_t)(missing)Draft
+ICU 59
uspoof.henum USpoofChecks::USPOOF_CONFUSABLE(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(uint16_t*, int32_t, int32_t)(missing)Draft
+ICU 59
uspoof.hint32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
unistr.hicu::UnicodeString::UnicodeString(wchar_t*, int32_t, int32_t)(missing)Draft
+ICU 59
uspoof.hint32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
unum.hint32_t unum_formatDoubleForFields(const UNumberFormat*, double, UChar*, int32_t, UFieldPositionIterator*, UErrorCode*)(missing)Draft
+ICU 59
uspoof.hint32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)(missing)Draft
-ICU 58
upluralrules.hUEnumeration* uplrules_getKeywords(const UPluralRules*, UErrorCode*)(missing)Draft
+ICU 59
uspoof.hvoid uspoof_closeCheckResult(USpoofCheckResult*)(missing)Draft
-ICU 58
upluralrules.hint32_t uplrules_selectWithFormat(const UPluralRules*, double, const UNumberFormat*, UChar*, int32_t, UErrorCode*)(missing)Internal
+ICU 59

(jump back to top)
-

Other existing drafts in ICU 58

+

Other existing drafts in ICU 59

- + @@ -3032,88 +695,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + @@ -3122,64 +737,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - - - - +
FileAPIICU 57ICU 58FileAPIICU 58ICU 59
localpointer.hLocalPointer<T>& icu::LocalPointer< T >::moveFrom(LocalPointer< T >&) U_NOEXCEPTDraft
ICU 56
measfmt.hvoid icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&)Draft
ICU 53
measunit.hstatic MeasureUnit* icu::MeasureUnit::createGallonImperial(UErrorCode&)Draft
ICU 57
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilePerGallonImperial(UErrorCode&)Draft
ICU 57
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMilligramPerDeciliter(UErrorCode&)Draft
ICU 57
measunit.hstatic MeasureUnit* icu::MeasureUnit::createMillimolePerLiter(UErrorCode&)Draft
ICU 57
measunit.hstatic MeasureUnit* icu::MeasureUnit::createPartPerMillion(UErrorCode&)Draft
ICU 57
reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::format(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft
ICU 57
reldatefmt.hUnicodeString& icu::RelativeDateTimeFormatter::formatNumeric(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)Draft
ICU 57
simpleformatter.hSimpleFormatter& icu::SimpleFormatter::operator=(const SimpleFormatter&)Draft
ICU 57
simpleformatter.hUBool icu::SimpleFormatter::applyPattern(const UnicodeString&, UErrorCode&)Draft
ICU 57
simpleformatter.hUBool icu::SimpleFormatter::applyPatternMinMaxArguments(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft
ICU 57
simpleformatter.hUnicodeString icu::SimpleFormatter::getTextWithNoArguments()Draft
ICU 57
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, UnicodeString&, UErrorCode&)Draft
ICU 57
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft
ICU 57
simpleformatter.hUnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)Draft
ICU 57
simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndAppend(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft
ICU 57
simpleformatter.hUnicodeString& icu::SimpleFormatter::formatAndReplace(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)Draft
ICU 57
measfmt.hUnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)Draft
ICU 58
simpleformatter.hicu::SimpleFormatter::SimpleFormatter()Draft
ICU 57
measfmt.hvoid icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&)Draft
ICU 53
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const SimpleFormatter&)Draft
ICU 57
ubiditransform.hUBiDiTransform* ubiditransform_open(UErrorCode*)Draft
ICU 58
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, UErrorCode&)Draft
ICU 57
ubiditransform.henum UBiDiMirroring::UBIDI_MIRRORING_OFFDraft
ICU 58
simpleformatter.hicu::SimpleFormatter::SimpleFormatter(const UnicodeString&, int32_t, int32_t, UErrorCode&)Draft
ICU 57
ubiditransform.henum UBiDiMirroring::UBIDI_MIRRORING_ONDraft
ICU 58
simpleformatter.hicu::SimpleFormatter::~SimpleFormatter()Draft
ICU 57
ubiditransform.henum UBiDiOrder::UBIDI_LOGICALDraft
ICU 58
simpleformatter.hint32_t icu::SimpleFormatter::getArgumentLimit()Draft
ICU 57
ubiditransform.henum UBiDiOrder::UBIDI_VISUALDraft
ICU 58
uchar.henum UProperty::UCHAR_EMOJI_MODIFIER_BASEDraft
ICU 57
ubiditransform.huint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)Draft
ICU 58
uchar.henum UProperty::UCHAR_EMOJI_MODIFIERDraft
ICU 57
ubiditransform.hvoid ubiditransform_close(UBiDiTransform*)Draft
ICU 58
uchar.henum UProperty::UCHAR_EMOJI_PRESENTATIONDraft
ICU 57
udisplaycontext.henum UDisplayContext::UDISPCTX_NO_SUBSTITUTEDraft
ICU 58
uchar.henum UProperty::UCHAR_EMOJIDraft
ICU 57
udisplaycontext.henum UDisplayContext::UDISPCTX_SUBSTITUTEDraft
ICU 58
udat.henum UDateFormatField::UDAT_AM_PM_MIDNIGHT_NOON_FIELDDraft
ICU 57
udisplaycontext.henum UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLINGDraft
ICU 58
unistr.hUnicodeString& icu::UnicodeString::moveFrom(UnicodeString&) U_NOEXCEPTDraft
ICU 56
uregex.henum URegexpFlag::UREGEX_CANON_EQDraft
ICU 2.4
ureldatefmt.hURelativeDateTimeFormatter* ureldatefmt_open(const char*, UNumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode*)Draft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_DAYDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_FRIDAYDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_HOURDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MINUTEDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONDAYDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_MONTHDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_QUARTERDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SATURDAYDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SECONDDraft
ICU 57
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_SUNDAYDraft
ICU 57
uspoof.hURestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_THURSDAYDraft
ICU 57
uspoof.hUSpoofCheckResult* uspoof_openCheckResult(UErrorCode*)Draft
ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_TUESDAYDraft
ICU 57
uspoof.hU_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEDNESDAYDraft
ICU 57
uspoof.hconst USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_WEEKDraft
ICU 57
uspoof.henum USpoofChecks::USPOOF_CONFUSABLEDraft
ICU 58
ureldatefmt.henum URelativeDateTimeUnit::UDAT_REL_UNIT_YEARDraft
ICU 57
uspoof.hint32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.hint32_t ureldatefmt_combineDateAndTime(const URelativeDateTimeFormatter*, const UChar*, int32_t, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)Draft
ICU 57
uspoof.hint32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.hint32_t ureldatefmt_format(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft
ICU 57
uspoof.hint32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)Draft
ICU 58
ureldatefmt.hint32_t ureldatefmt_formatNumeric(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)Draft
ICU 57
ureldatefmt.hvoid ureldatefmt_close(URelativeDateTimeFormatter*)Draft
ICU 57
uspoof.hvoid uspoof_closeCheckResult(USpoofCheckResult*)Draft
ICU 58
@@ -3197,7 +779,7 @@ (jump back to top)

-Contents generated by StableAPI tool on Thu Sep 22 11:14:21 PDT 2016
Copyright (C) 2016, International Business Machines Corporation, All Rights Reserved.
+Contents generated by StableAPI tool on Wed Apr 05 23:17:58 UTC 2017
Copyright (C) 2017, International Business Machines Corporation, All Rights Reserved.

diff --git a/LICENSE b/LICENSE index 90be7cd..c5295da 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) -Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Copyright © 1991-2017 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html Permission is hereby granted, free of charge, to any person obtaining diff --git a/as_is/bomlist.txt b/as_is/bomlist.txt index ed27920..fd770ee 100644 --- a/as_is/bomlist.txt +++ b/as_is/bomlist.txt @@ -130,436 +130,12 @@ icu/source/io/io.vcxproj icu/source/io/io.vcxproj.filters icu/source/data/makedata.vcxproj.filters icu/source/data/makedata.vcxproj -icu/source/data/unit/fil_PH.txt -icu/source/data/unit/kok.txt -icu/source/data/unit/zh_Hans_HK.txt -icu/source/data/unit/ga.txt -icu/source/data/unit/br.txt -icu/source/data/unit/en_VC.txt -icu/source/data/unit/en_BS.txt -icu/source/data/unit/sr_Latn_YU.txt -icu/source/data/unit/th_TH_TRADITIONAL.txt -icu/source/data/unit/en_CM.txt -icu/source/data/unit/te.txt -icu/source/data/unit/ee.txt -icu/source/data/unit/sr_Latn_RS.txt -icu/source/data/unit/zu.txt -icu/source/data/unit/nb_NO.txt -icu/source/data/unit/ebu.txt -icu/source/data/unit/luo.txt -icu/source/data/unit/en_VG.txt -icu/source/data/unit/ksh.txt -icu/source/data/unit/en_UG.txt -icu/source/data/unit/es_CO.txt -icu/source/data/unit/en_SS.txt -icu/source/data/unit/dua.txt -icu/source/data/unit/kam.txt -icu/source/data/unit/en_SX.txt -icu/source/data/unit/th.txt -icu/source/data/unit/en_MT.txt -icu/source/data/unit/no_NO_NY.txt -icu/source/data/unit/mua.txt -icu/source/data/unit/kl.txt -icu/source/data/unit/es_BR.txt -icu/source/data/unit/hr.txt -icu/source/data/unit/en_GI.txt -icu/source/data/unit/mas.txt -icu/source/data/unit/lg.txt -icu/source/data/unit/eo.txt -icu/source/data/unit/sk.txt -icu/source/data/unit/yo.txt -icu/source/data/unit/pa_IN.txt -icu/source/data/unit/sr_XK.txt -icu/source/data/unit/sh_BA.txt -icu/source/data/unit/es_PR.txt -icu/source/data/unit/sr_Latn_CS.txt -icu/source/data/unit/en_NA.txt -icu/source/data/unit/tzm.txt -icu/source/data/unit/ca.txt -icu/source/data/unit/ru.txt -icu/source/data/unit/is.txt -icu/source/data/unit/twq.txt -icu/source/data/unit/si.txt -icu/source/data/unit/chr.txt -icu/source/data/unit/bez.txt -icu/source/data/unit/en_KE.txt -icu/source/data/unit/pt_CH.txt -icu/source/data/unit/zh_Hant_HK.txt -icu/source/data/unit/en_ZA.txt -icu/source/data/unit/en_JE.txt -icu/source/data/unit/en_TC.txt -icu/source/data/unit/in_ID.txt -icu/source/data/unit/jmc.txt -icu/source/data/unit/zh_Hant_MO.txt -icu/source/data/unit/hu.txt -icu/source/data/unit/pa_Arab_PK.txt -icu/source/data/unit/pa.txt -icu/source/data/unit/en_NH.txt -icu/source/data/unit/uz_Arab.txt -icu/source/data/unit/zh_Hant.txt -icu/source/data/unit/en_TK.txt -icu/source/data/unit/qu.txt -icu/source/data/unit/sr_BA.txt -icu/source/data/unit/in.txt -icu/source/data/unit/en_PW.txt -icu/source/data/unit/dyo.txt -icu/source/data/unit/be.txt -icu/source/data/unit/sr_Cyrl_RS.txt -icu/source/data/unit/gsw.txt -icu/source/data/unit/en_MO.txt -icu/source/data/unit/id.txt -icu/source/data/unit/shi.txt -icu/source/data/unit/ak.txt -icu/source/data/unit/yav.txt -icu/source/data/unit/shi_Latn.txt -icu/source/data/unit/es_VE.txt -icu/source/data/unit/sbp.txt -icu/source/data/unit/iw_IL.txt -icu/source/data/unit/uz_AF.txt -icu/source/data/unit/es_UY.txt -icu/source/data/unit/ti.txt -icu/source/data/unit/xog.txt -icu/source/data/unit/guz.txt -icu/source/data/unit/shi_Tfng.txt -icu/source/data/unit/sah.txt -icu/source/data/unit/mo.txt -icu/source/data/unit/es_EC.txt -icu/source/data/unit/pt_GQ.txt -icu/source/data/unit/en_AG.txt -icu/source/data/unit/fr.txt -icu/source/data/unit/gv.txt -icu/source/data/unit/es_PY.txt -icu/source/data/unit/th_TH.txt -icu/source/data/unit/az.txt -icu/source/data/unit/bs_Latn.txt -icu/source/data/unit/en_SG.txt -icu/source/data/unit/sr_Cyrl_XK.txt -icu/source/data/unit/sv.txt -icu/source/data/unit/so.txt -icu/source/data/unit/en_DG.txt -icu/source/data/unit/mgh.txt -icu/source/data/unit/gd.txt -icu/source/data/unit/en_DK.txt -icu/source/data/unit/en_ZW.txt -icu/source/data/unit/en_SL.txt -icu/source/data/unit/it.txt -icu/source/data/unit/luy.txt -icu/source/data/unit/sw.txt -icu/source/data/unit/ar.txt -icu/source/data/unit/fur.txt -icu/source/data/unit/en_MG.txt -icu/source/data/unit/rwk.txt -icu/source/data/unit/es_US.txt -icu/source/data/unit/naq.txt -icu/source/data/unit/de_CH.txt -icu/source/data/unit/sn.txt -icu/source/data/unit/en_NR.txt -icu/source/data/unit/mk.txt -icu/source/data/unit/cgg.txt -icu/source/data/unit/lrc.txt -icu/source/data/unit/sr_Cyrl_BA.txt -icu/source/data/unit/kw.txt -icu/source/data/unit/zh_Hans.txt -icu/source/data/unit/sh_YU.txt -icu/source/data/unit/en_001.txt -icu/source/data/unit/en_MS.txt -icu/source/data/unit/ast.txt -icu/source/data/unit/pa_Guru_IN.txt -icu/source/data/unit/ka.txt -icu/source/data/unit/wae.txt -icu/source/data/unit/lt.txt -icu/source/data/unit/en_NF.txt -icu/source/data/unit/ig.txt -icu/source/data/unit/es_PE.txt -icu/source/data/unit/kea.txt -icu/source/data/unit/uz.txt -icu/source/data/unit/uz_Latn.txt -icu/source/data/unit/en_CA.txt -icu/source/data/unit/uz_Latn_UZ.txt -icu/source/data/unit/pl.txt -icu/source/data/unit/sr_Latn_BA.txt -icu/source/data/unit/en_KI.txt -icu/source/data/unit/uz_Cyrl.txt -icu/source/data/unit/en_MY.txt -icu/source/data/unit/fr_HT.txt -icu/source/data/unit/sh_CS.txt -icu/source/data/unit/rw.txt -icu/source/data/unit/en_PN.txt -icu/source/data/unit/ja.txt -icu/source/data/unit/brx.txt -icu/source/data/unit/de.txt -icu/source/data/unit/en_BZ.txt -icu/source/data/unit/cs.txt -icu/source/data/unit/mr.txt -icu/source/data/unit/en_ZM.txt -icu/source/data/unit/es_NI.txt -icu/source/data/unit/en_CX.txt -icu/source/data/unit/en_BB.txt -icu/source/data/unit/en_SZ.txt -icu/source/data/unit/saq.txt -icu/source/data/unit/en_DM.txt -icu/source/data/unit/bem.txt -icu/source/data/unit/en_IL.txt -icu/source/data/unit/ii.txt -icu/source/data/unit/vi.txt -icu/source/data/unit/zh_TW.txt -icu/source/data/unit/no_NO.txt -icu/source/data/unit/kab.txt -icu/source/data/unit/yue.txt -icu/source/data/unit/en_DE.txt -icu/source/data/unit/kk.txt -icu/source/data/unit/tr.txt -icu/source/data/unit/en_CK.txt -icu/source/data/unit/shi_MA.txt -icu/source/data/unit/fil.txt -icu/source/data/unit/zgh.txt -icu/source/data/unit/en.txt -icu/source/data/unit/en_KN.txt -icu/source/data/unit/en_MW.txt -icu/source/data/unit/my.txt -icu/source/data/unit/pt_PT.txt -icu/source/data/unit/bs.txt -icu/source/data/unit/sv_FI.txt -icu/source/data/unit/en_GY.txt -icu/source/data/unit/fr_CA.txt -icu/source/data/unit/sr_Cyrl_YU.txt -icu/source/data/unit/pt_LU.txt -icu/source/data/unit/fi.txt -icu/source/data/unit/en_IE.txt -icu/source/data/unit/sr.txt -icu/source/data/unit/vai_LR.txt -icu/source/data/unit/bg.txt -icu/source/data/unit/bs_Cyrl.txt -icu/source/data/unit/ky.txt -icu/source/data/unit/sr_CS.txt -icu/source/data/unit/nyn.txt -icu/source/data/unit/sr_ME.txt -icu/source/data/unit/en_PK.txt -icu/source/data/unit/af.txt -icu/source/data/unit/mer.txt -icu/source/data/unit/nl.txt -icu/source/data/unit/en_IN.txt -icu/source/data/unit/en_NL.txt -icu/source/data/unit/ne.txt -icu/source/data/unit/sr_YU.txt -icu/source/data/unit/nus.txt -icu/source/data/unit/gu.txt -icu/source/data/unit/am.txt -icu/source/data/unit/vai_Vaii_LR.txt -icu/source/data/unit/en_HK.txt -icu/source/data/unit/kn.txt -icu/source/data/unit/es_SV.txt -icu/source/data/unit/et.txt -icu/source/data/unit/pa_Arab.txt -icu/source/data/unit/az_AZ.txt -icu/source/data/unit/mn.txt -icu/source/data/unit/en_TT.txt -icu/source/data/unit/en_NU.txt -icu/source/data/unit/es.txt -icu/source/data/unit/da.txt -icu/source/data/unit/en_SH.txt -icu/source/data/unit/en_CC.txt -icu/source/data/unit/ug.txt -icu/source/data/unit/en_GB.txt -icu/source/data/unit/pt_AO.txt -icu/source/data/unit/es_BO.txt -icu/source/data/unit/or.txt -icu/source/data/unit/nb.txt -icu/source/data/unit/lag.txt -icu/source/data/unit/es_GT.txt -icu/source/data/unit/sr_RS.txt -icu/source/data/unit/en_AU.txt -icu/source/data/unit/zh_Hans_SG.txt -icu/source/data/unit/vai_Vaii.txt -icu/source/data/unit/sr_Cyrl.txt -icu/source/data/unit/pa_PK.txt -icu/source/data/unit/bn.txt -icu/source/data/unit/cy.txt -icu/source/data/unit/es_DO.txt -icu/source/data/unit/fy.txt -icu/source/data/unit/en_VU.txt -icu/source/data/unit/en_ER.txt -icu/source/data/unit/sq.txt -icu/source/data/unit/lv.txt -icu/source/data/unit/to.txt -icu/source/data/unit/bas.txt -icu/source/data/unit/ur.txt -icu/source/data/unit/ro_MD.txt -icu/source/data/unit/ksf.txt -icu/source/data/unit/se.txt -icu/source/data/unit/om.txt -icu/source/data/unit/rm.txt -icu/source/data/unit/en_IM.txt -icu/source/data/unit/kde.txt -icu/source/data/unit/zh_CN.txt -icu/source/data/unit/es_CU.txt -icu/source/data/unit/en_GG.txt -icu/source/data/unit/en_RW.txt -icu/source/data/unit/ro.txt -icu/source/data/unit/nmg.txt -icu/source/data/unit/dz.txt -icu/source/data/unit/en_AT.txt -icu/source/data/unit/en_SB.txt -icu/source/data/unit/pa_Guru.txt -icu/source/data/unit/en_FJ.txt -icu/source/data/unit/es_PA.txt -icu/source/data/unit/asa.txt -icu/source/data/unit/ff.txt -icu/source/data/unit/zh_Hans_CN.txt -icu/source/data/unit/root.txt -icu/source/data/unit/en_BM.txt -icu/source/data/unit/en_WS.txt -icu/source/data/unit/ja_JP_TRADITIONAL.txt -icu/source/data/unit/en_FI.txt -icu/source/data/unit/ewo.txt -icu/source/data/unit/pt_GW.txt -icu/source/data/unit/ln.txt -icu/source/data/unit/zh_HK.txt -icu/source/data/unit/jgo.txt -icu/source/data/unit/dje.txt -icu/source/data/unit/en_BW.txt -icu/source/data/unit/es_CR.txt -icu/source/data/unit/pt_CV.txt -icu/source/data/unit/es_419.txt -icu/source/data/unit/ms.txt -icu/source/data/unit/ja_JP.txt -icu/source/data/unit/fa.txt -icu/source/data/unit/en_KY.txt -icu/source/data/unit/en_CH.txt -icu/source/data/unit/en_PG.txt -icu/source/data/unit/he_IL.txt -icu/source/data/unit/mg.txt -icu/source/data/unit/as.txt -icu/source/data/unit/smn.txt -icu/source/data/unit/bs_BA.txt -icu/source/data/unit/lo.txt -icu/source/data/unit/en_AI.txt -icu/source/data/unit/sg.txt -icu/source/data/unit/he.txt -icu/source/data/unit/es_MX.txt -icu/source/data/unit/no.txt -icu/source/data/unit/bo.txt -icu/source/data/unit/ml.txt -icu/source/data/unit/gl.txt -icu/source/data/unit/ps.txt -icu/source/data/unit/en_JM.txt -icu/source/data/unit/teo.txt -icu/source/data/unit/en_LC.txt -icu/source/data/unit/nds.txt -icu/source/data/unit/sr_Cyrl_CS.txt -icu/source/data/unit/agq.txt -icu/source/data/unit/pt.txt -icu/source/data/unit/es_CL.txt -icu/source/data/unit/bs_Latn_BA.txt -icu/source/data/unit/bm.txt -icu/source/data/unit/nn.txt -icu/source/data/unit/nnh.txt -icu/source/data/unit/zh.txt -icu/source/data/unit/dav.txt -icu/source/data/unit/ha.txt -icu/source/data/unit/tl_PH.txt -icu/source/data/unit/sh.txt -icu/source/data/unit/tl.txt -icu/source/data/unit/khq.txt -icu/source/data/unit/lkt.txt -icu/source/data/unit/ks.txt -icu/source/data/unit/pt_ST.txt -icu/source/data/unit/en_SI.txt -icu/source/data/unit/uk.txt -icu/source/data/unit/ta.txt -icu/source/data/unit/fo.txt -icu/source/data/unit/shi_Tfng_MA.txt -icu/source/data/unit/os.txt -icu/source/data/unit/ur_IN.txt -icu/source/data/unit/lb.txt -icu/source/data/unit/es_HN.txt -icu/source/data/unit/hsb.txt -icu/source/data/unit/en_GH.txt -icu/source/data/unit/zh_Hans_MO.txt -icu/source/data/unit/az_Latn_AZ.txt -icu/source/data/unit/en_TZ.txt -icu/source/data/unit/mzn.txt -icu/source/data/unit/zh_SG.txt -icu/source/data/unit/en_150.txt -icu/source/data/unit/lu.txt -icu/source/data/unit/el.txt -icu/source/data/unit/en_CY.txt -icu/source/data/unit/uz_Arab_AF.txt -icu/source/data/unit/kln.txt -icu/source/data/unit/seh.txt -icu/source/data/unit/mt.txt -icu/source/data/unit/ckb.txt -icu/source/data/unit/km.txt -icu/source/data/unit/ksb.txt -icu/source/data/unit/en_MU.txt -icu/source/data/unit/vai_Latn.txt -icu/source/data/unit/en_SD.txt -icu/source/data/unit/en_NG.txt -icu/source/data/unit/en_FM.txt -icu/source/data/unit/sr_Latn_ME.txt -icu/source/data/unit/haw.txt -icu/source/data/unit/yi.txt -icu/source/data/unit/en_LR.txt -icu/source/data/unit/vun.txt -icu/source/data/unit/en_FK.txt -icu/source/data/unit/az_Cyrl.txt -icu/source/data/unit/mfe.txt -icu/source/data/unit/zh_Hant_TW.txt -icu/source/data/unit/es_AR.txt -icu/source/data/unit/en_PH.txt -icu/source/data/unit/pt_MZ.txt -icu/source/data/unit/hy.txt -icu/source/data/unit/dsb.txt -icu/source/data/unit/en_GD.txt -icu/source/data/unit/en_SE.txt -icu/source/data/unit/ki.txt -icu/source/data/unit/ko.txt -icu/source/data/unit/en_NZ.txt -icu/source/data/unit/iw.txt -icu/source/data/unit/rn.txt -icu/source/data/unit/en_BE.txt -icu/source/data/unit/en_RH.txt -icu/source/data/unit/hi.txt -icu/source/data/unit/en_TO.txt -icu/source/data/unit/id_ID.txt -icu/source/data/unit/nd.txt -icu/source/data/unit/pt_TL.txt -icu/source/data/unit/vai.txt -icu/source/data/unit/mgo.txt -icu/source/data/unit/en_LS.txt -icu/source/data/unit/ses.txt -icu/source/data/unit/nn_NO.txt -icu/source/data/unit/eu.txt -icu/source/data/unit/en_SC.txt -icu/source/data/unit/zh_MO.txt -icu/source/data/unit/sl.txt -icu/source/data/unit/sr_Latn.txt -icu/source/data/unit/ce.txt -icu/source/data/unit/en_IO.txt -icu/source/data/unit/en_GM.txt -icu/source/data/unit/en_TV.txt -icu/source/data/unit/rof.txt -icu/source/data/unit/kkj.txt -icu/source/data/unit/pt_MO.txt -icu/source/data/unit/az_Latn.txt -icu/source/data/unit/uz_UZ.txt +icu/source/data/makedata_uwp.vcxproj icu/source/data/unidata/confusablesWholeScript.txt icu/source/data/unidata/FractionalUCA.txt icu/source/data/unidata/confusables.txt icu/source/data/unidata/changes.txt icu/source/data/unidata/UCARules.txt -icu/source/data/misc/windowsZones.txt -icu/source/data/misc/keyTypeData.txt -icu/source/data/misc/supplementalData.txt -icu/source/data/misc/dayPeriods.txt -icu/source/data/misc/metaZones.txt -icu/source/data/misc/likelySubtags.txt -icu/source/data/misc/numberingSystems.txt -icu/source/data/misc/metadata.txt -icu/source/data/misc/currencyNumericCodes.txt -icu/source/data/misc/genderList.txt -icu/source/data/misc/timezoneTypes.txt -icu/source/data/misc/plurals.txt icu/source/tools/gensprep/gensprep.vcxproj icu/source/tools/gensprep/gensprep.vcxproj.filters icu/source/tools/genbrk/genbrk.vcxproj.filters @@ -599,8 +175,10 @@ icu/source/stubdata/stubdata.vcxproj.filters icu/source/stubdata/stubdata.vcxproj icu/source/i18n/i18n.vcxproj icu/source/i18n/i18n.vcxproj.filters +icu/source/i18n/i18n_uwp.vcxproj icu/source/common/common.vcxproj.filters icu/source/common/common.vcxproj +icu/source/common/common_uwp.vcxproj icu/source/extra/uconv/uconv.vcxproj.filters icu/source/extra/uconv/uconv.vcxproj icu/source/extra/uconv/resources/fr.txt diff --git a/license.html b/license.html index 25591ce..2484672 100644 --- a/license.html +++ b/license.html @@ -11,8 +11,8 @@ The ICU license is now in plain text format, see LICENSE. Update links and software appropriately.

- Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html - Copyright (c) 1995-2016 International Business Machines Corporation and others + © 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html + © 1995-2016 International Business Machines Corporation and others diff --git a/packaging/rpm/icu.spec b/packaging/rpm/icu.spec deleted file mode 100644 index 2edb595..0000000 --- a/packaging/rpm/icu.spec +++ /dev/null @@ -1,230 +0,0 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html -# Copyright (C) 2000-2005, International Business Machines -# Corporation and others. All Rights Reserved. -# -# RPM specification file for ICU. -# -# Neal Probert is the current maintainer. -# Yves Arrouye is the original author. - -# This file can be freely redistributed under the same license as ICU. - -Name: icu -Version: 3.4 -Release: 1 -Requires: libicu34 >= %{version} -Summary: International Components for Unicode -Packager: Ian Holsman (CNET Networks) -Copyright: X License -Group: System Environment/Libraries -Source: icu-%{version}.tgz -BuildRoot: /var/tmp/%{name}-%{version} -%description -ICU is a set of C and C++ libraries that provides robust and full-featured -Unicode and locale support. The library provides calendar support, conversions -for many character sets, language sensitive collation, date -and time formatting, support for many locales, message catalogs -and resources, message formatting, normalization, number and currency -formatting, time zones support, transliteration, word, line and -sentence breaking, etc. - -This package contains the Unicode character database and derived -properties, along with converters and time zones data. - -This package contains the runtime libraries for ICU. It does -not contain any of the data files needed at runtime and present in the -`icu' and `icu-locales` packages. - -%package -n libicu34 -Summary: International Components for Unicode (libraries) -Group: Development/Libraries -%description -n libicu34 -ICU is a set of C and C++ libraries that provides robust and full-featured -Unicode support. This package contains the runtime libraries for ICU. It does -not contain any of the data files needed at runtime and present in the -`icu' and `icu-locales` packages. - -%package -n libicu-devel -Summary: International Components for Unicode (development files) -Group: Development/Libraries -Requires: libicu34 = %{version} -%description -n libicu-devel -ICU is a set of C and C++ libraries that provides robust and full-featured -Unicode support. This package contains the development files for ICU. - -%package locales -Summary: Locale data for ICU -Group: System Environment/Libraries -Requires: libicu34 >= %{version} -%description locales -The locale data are used by ICU to provide localization (l10n), -internationalization (i18n) and timezone support to ICU applications. -This package also contains break data for various languages, -and transliteration data. - -%post -# Adjust the current ICU link in /usr/lib/icu - -icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1` -cd /usr/lib/icu -rm -f /usr/lib/icu/current -if test x"$icucurrent" != x -then - ln -s "$icucurrent" current -fi - -#ICU_DATA=/usr/share/icu/%{version} -#export ICU_DATA - -%preun -# Adjust the current ICU link in /usr/lib/icu - -icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1` -cd /usr/lib/icu -rm -f /usr/lib/icu/current -if test x"$icucurrent" != x -then - ln -s "$icucurrent" current -fi - -%post -n libicu34 -ldconfig - -# Adjust the current ICU link in /usr/lib/icu - -icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1` -cd /usr/lib/icu -rm -f /usr/lib/icu/current -if test x"$icucurrent" != x -then - ln -s "$icucurrent" current -fi - -%preun -n libicu34 -# Adjust the current ICU link in /usr/lib/icu - -icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1` -cd /usr/lib/icu -rm -f /usr/lib/icu/current -if test x"$icucurrent" != x -then - ln -s "$icucurrent" current -fi - -%prep -%setup -q -n icu - -%build -cd source -chmod a+x ./configure -CFLAGS="-O3" CXXFLAGS="-O" ./configure --prefix=/usr --sysconfdir=/etc --with-data-packaging=files --enable-shared --enable-static --disable-samples -echo 'CPPFLAGS += -DICU_DATA_DIR=\"/usr/share/icu/%{version}\"' >> icudefs.mk -make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" - -%install -rm -rf $RPM_BUILD_ROOT -cd source -make install DESTDIR=$RPM_BUILD_ROOT - -%files -%defattr(-,root,root) -%doc readme.html -%doc license.html -/usr/share/icu/%{version}/license.html -/usr/share/icu/%{version}/icudt34l/*.cnv -/usr/share/icu/%{version}/icudt34l/*.icu -/usr/share/icu/%{version}/icudt34l/*.spp - -/usr/bin/derb -/usr/bin/genbrk -/usr/bin/gencnval -/usr/bin/genrb -/usr/bin/icu-config -/usr/bin/makeconv -/usr/bin/pkgdata -/usr/bin/uconv - -/usr/sbin/decmn -/usr/sbin/genccode -/usr/sbin/gencmn -/usr/sbin/gensprep -/usr/sbin/genuca -/usr/sbin/icuswap -/usr/share/icu/%{version}/mkinstalldirs - -/usr/man/man1/derb.1.* -/usr/man/man1/gencnval.1.* -/usr/man/man1/genrb.1.* -/usr/man/man1/icu-config.1.* -/usr/man/man1/makeconv.1.* -/usr/man/man1/pkgdata.1.* -/usr/man/man1/uconv.1.* -/usr/man/man8/decmn.8.* -/usr/man/man8/genccode.8.* -/usr/man/man8/gencmn.8.* -/usr/man/man8/gensprep.8.* -/usr/man/man8/genuca.8.* - -%files -n icu-locales -/usr/share/icu/%{version}/icudt34l/*.brk -/usr/share/icu/%{version}/icudt34l/*.res -/usr/share/icu/%{version}/icudt34l/coll/*.res -/usr/share/icu/%{version}/icudt34l/rbnf/*.res -/usr/share/icu/%{version}/icudt34l/translit/*.res - -%files -n libicu34 -%doc license.html -/usr/lib/libicui18n.so.34 -/usr/lib/libicui18n.so.34.0 -/usr/lib/libicutu.so.34 -/usr/lib/libicutu.so.34.0 -/usr/lib/libicuuc.so.34 -/usr/lib/libicuuc.so.34.0 -/usr/lib/libicudata.so.34 -/usr/lib/libicudata.so.34.0 -/usr/lib/libicuio.so.34 -/usr/lib/libicuio.so.34.0 -/usr/lib/libiculx.so.34 -/usr/lib/libiculx.so.34.0 -/usr/lib/libicule.so.34 -/usr/lib/libicule.so.34.0 - -%files -n libicu-devel -%doc readme.html -%doc license.html -/usr/lib/libicui18n.so -/usr/lib/libsicui18n.a -/usr/lib/libicuuc.so -/usr/lib/libsicuuc.a -/usr/lib/libicutu.so -/usr/lib/libsicutu.a -/usr/lib/libicuio.so -/usr/lib/libsicuio.a -/usr/lib/libicudata.so -/usr/lib/libsicudata.a -/usr/lib/libicule.so -/usr/lib/libsicule.a -/usr/lib/libiculx.so -/usr/lib/libsiculx.a -/usr/include/unicode/*.h -/usr/include/layout/*.h -/usr/lib/icu/%{version}/Makefile.inc -/usr/lib/icu/Makefile.inc -/usr/share/icu/%{version}/config -/usr/share/doc/icu-%{version}/* - -%changelog -* Mon Jun 07 2004 Alexei Dets -- update to 3.0 -* Tue Aug 16 2003 Steven Loomis -- update to 2.6.1 - include license -* Thu Jun 05 2003 Steven Loomis -- Update to 2.6 -* Fri Dec 27 2002 Steven Loomis -- Update to 2.4 spec -* Fri Sep 27 2002 Steven Loomis -- minor updates to 2.2 spec. Rpath is off by default, don't pass it as an option. -* Mon Sep 16 2002 Ian Holsman -- update to icu 2.2 - diff --git a/readme.html b/readme.html index 6327fed..a497674 100644 --- a/readme.html +++ b/readme.html @@ -3,7 +3,7 @@ - ReadMe for ICU 58.2 + ReadMe for ICU 59.1 @@ -44,7 +44,7 @@

This is a release candidate version of ICU4C. It is not recommended for production use.

-

Last updated: 2016-Dec-8
+

Last updated: 2017-Apr-12
Copyright © 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html
Copyright © 1997-2016 International Business Machines Corporation and others. @@ -59,9 +59,7 @@

  • Getting Started
  • -
  • What Is New In This release?
  • - -
  • Changes in recent previous releases
  • +
  • What Is New In This Release?
  • How To Download the Source Code
  • @@ -230,148 +228,24 @@

    Important: Please make sure you understand the Copyright and License Information.

    - -

    What is new in this - release?

    - -

    New License

    -

    This is the first release of ICU since the project - joined - the Unicode Consortium. The license has changed to the - Unicode license - (which is similar to the ICU 1.8.1-57 license).

    - -

    Layout Engine Removed

    -

    The LayoutEngine was deprecated in ICU 54 and has now been removed. - see the - User's Guide for more details and migration recommendations. -

    -

    - Note that the ParagraphLayout (layoutex) library is not deprecated. - There is a new option, --enable-layoutex which will build - the ParagraphLayout library using HarfBuzz - instead of ICU as the layout engine. See - the users' guide for more information about how to build. -

    -

    - The options --disable-layout - or --with-layout=false are being retained for - compatibility, but have no effect. -

    + "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information.

    -

    Changes in CLDR 30 data

    -
      -
    • For some combinations of numbering system (arab, arabext, latn) and/or locale - (ar, fa, he), there were changes to the bidirectional control characters used - with certain symbols (percent, minus, plus), and changes to number patterns - (currency and/or percent, including addition of bidirectional control - characters in some cases).
    • -
    • The bidirectional controls used for such purposes now include U+061C ARABIC - LETTER MARK (ALM), which requires use of the bidirectional algorithm from - Unicode 6.3 or later.
    • -
    • The time separator for Norwegian locales (nb, nn) was changed to be ‘:’ - throughout.
    • -
    • For more information on CLDR 30 changes, see - CLDR 30 download - page.
    • -
    -

    Windows build changes

    -

    Windows builds using Visual Studio now require Visual Studio 2015; otherwise you can - use cygwin or similar to build for Windows.

    +

    What Is New In This Release?

    -

    API Changes

    -

    See the API Change Report for a complete - list of APIs added, removed, or changed in this release.

    +

    See the ICU 59 download page + for an overview of this release, important changes, new features, bug fixes, known issues, + changes to supported platforms and build environments, + and migration issues for existing applications migrating from previous ICU releases.

    - -

    Full release notes and the latest updates

    -

    The previous list concentrates on changes that affect existing - applications migrating from previous ICU releases. - For more news about this release, as well as late-breaking news, see the - ICU download page.

    +

    See the API Change Report for a complete list of + APIs added, removed, or changed in this release.

    -

    Upcoming changes

    -

    Please note the following changes planned for an upcoming ICU4C release (likely ICU 59):

    -
      -
    • Compiler support for C++11 will be required.
    • -
    • Support for Windows XP will be removed.
    • -
    - -

    Changes in recent - previous releases

    - - -

    ICU 57: Changes related to new CLDR data and specifications

    -
      -
    • Time formats may include the new day period characters b, B, and - these may produced in response to the new skeleton character C used - with DateTimePatternGenerator.
    • -
    • In day period rules, the use of "after" has been deprecated.
    • -
    • The measurement unit "proportion-karat" has been renamed to - "concentr-karat".
    • -
    +

    For + changes in previous releases, see the + main ICU download page + with its version-specific subpages.

    - -

    ICU 56: COLON withdrawn as date/time pattern character

    -

    In ICU 55, COLON was introduced as a date/time pattern character - to be replaced by the value of the timeSeparator for the number - system being used; a corresponding new UDateFormatField - UDAT_TIME_SEPARATOR_FIELD was added. Use of COLON caused some - backwards compatibility problems, so it is being withdrawn as a - pattern character. However, UDAT_TIME_SEPARATOR_FIELD remains - as does the mechanism for replacing a pattern character with the - value of the timeSeparator; a new pattern character may be - assigned in the future.

    - -

    ICU 56: ICU Plugins are disabled by default

    -

    ICU Plugins are now disabled by default. They may be enabled - with the configure option - --enable-plugins or by means of - #define UCONFIG_ENABLE_PLUGINS. -

    - -

    ICU 55: Deprecations in PluralRules (plurrule.h)

    -

    The following PluralRules methods never had an implementation - but were inadvertently marked @stable; they have now been - deprecated. [#10759]

    -
      -
    • double icu::PluralRules::getUniqueKeywordValue(const UnicodeString&)
    • -
    • int32_t icu::PluralRules::getAllKeywordValues(const UnicodeString&, double*, int32_t, UErrorCode&)
    • -
    - -

    ICU 55: Deprecate uidna.h functions for IDNA2003 support

    -

    The IDNA2003 API has been deprecated; use the API for IDNA2008 / UTS #46 instead via - uidna_openUTS46() or class IDNA [#8477]. - This applies to the following:

    -
      -
    • enum value UIDNA_ALLOW_UNASSIGNED
    • -
    • uidna_IDNToASCII
    • -
    • uidna_IDNToUnicode
    • -
    • uidna_compare
    • -
    • uidna_toASCII
    • -
    • uidna_toUnicode
    • -
    - -

    ICU 54: Deprecation of Collation Short Strings

    -

    The collation short naming scheme and its API functions are deprecated. - Use ucol_open() with language tag collation keywords instead (see Collation API Details). For example, ucol_open("de-u-co-phonebk-ka-shifted", &errorCode) - for German Phonebook order with "ignore punctuation" mode.

    - -

    ICU 54: Deprecation of UCOL_TAILORINGS_VERSION

    -

    This was originally intended to be the version of collation tailorings, - but that information is actually in the tailorings data and this - constant has always been (and now will continue to be) 1.

    - - -

    ICU 53: Deprecation of TimeUnitFormat

    -

    The TimeUnitFormat and its methods were actually deprecated in ICU 53 and the - class as a whole was tagged as deprecated in that release, but the status tags for - the individual methods did not correctly indicate the deprecated status; they - do as of ICU 54. Use the MeasureFormat class and its methods instead.

    - -

    How To Download the Source Code

    @@ -505,12 +379,31 @@
  • brkitr/ Data files for character, word, sentence, title casing and line boundary analysis.
  • +
  • coll/ Data for collation tailorings. The makefile + colfiles.mk contains the list of resource bundle files.
  • +
  • locales/ These .txt files contain ICU language and culture-specific localization data. Two special bundles are root, which is the fallback data and parent of other bundles, and index, which contains a list of installed bundles. The makefile resfiles.mk contains the list of resource bundle - files.
  • + files. Some of the locale data is split out into the type-specific + directories curr, lang, region, unit, and zone, described below. + +
  • curr/ Locale data for currency symbols and names (including + plural forms), with its own makefile resfiles.mk.
  • + +
  • lang/ Locale data for names of languages, scripts, and locale + key names and values, with its own makefile resfiles.mk.
  • + +
  • region/ Locale data for names of regions, with its own + makefile resfiles.mk.
  • + +
  • unit/ Locale data for measurement unit patterns and names, + with its own makefile resfiles.mk.
  • + +
  • zone/ Locale data for time zone names, with its own + makefile resfiles.mk.
  • mappings/ Here are the code page converter tables. These .ucm files contain mappings to and from Unicode. These are compiled @@ -532,9 +425,9 @@ information.
  • misc/ The misc directory contains other data files which - did not fit into the above categories. Currently it only contains - time zone information, and a name preperation file for IDNA.
  • + did not fit into the above categories, including time zone + information, region-specific data, and other data derived from CLDR + supplemental data.
  • out/ This directory contains the assembled memory mapped files.
  • @@ -779,7 +672,7 @@ source file tree clean and have build output files written to a different location. This is called an "out-of-source build". Simply invoke the configure script from the target location: -
    ~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
    +
    ~/icu$ svn export http://source.icu-project.org/repos/icu/trunk/icu4c
     ~/icu$ mkdir trunk-dev
     ~/icu$ cd trunk-dev
     ~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
    @@ -851,7 +744,9 @@
         
    • Microsoft Windows
    • -
    • Microsoft Visual C++ (see the ICU download page for the currently compatible version)
    • +
    • Microsoft Visual C++ (part of Visual Studio) (see the ICU download page for the currently compatible version)
    • + +
    • Optional: A version of the Windows 10 SDK (if you want to build the UWP projects)

    Cygwin is required if using a version of MSVC other than the one compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)

    @@ -874,6 +769,11 @@ "#HowToBuildWindowsCommandLine">command line note below if you want to build from the command line instead. +
  • You may need to re-target the UWP projects to the version of the SDK that you have installed. In Visual Studio you can + right-click on the UWP projects and select the option 'Retarget SDK Version'. Note: You do not need to have a copy of + the Windows 10 SDK installed in order to build the non-UWP projects in Visual Studio. If the SDK is not installed then the + UWP projects will simply not be loaded.
  • +
  • Set the active platform to "Win32" or "x64" (See Windows platform note below) and configuration to "Debug" or "Release" (See Windows configuration note below).
  • @@ -932,9 +832,11 @@ "HowToBuildWindowsCommandLine">Using MSDEV At The Command Line Note: You can build ICU from the command line. Assuming that you have properly installed Microsoft Visual C++ to support command line - execution, you can run the following command, 'devenv.com - <ICU>\source\allinone\allinone.sln /build "Win32|Release"'. You can also - use Cygwin with this compiler to build ICU, and you can refer to the 'devenv.com <ICU>\source\allinone\allinone.sln /build "Release|Win32"'. + Or to build the 64-bit Release version from the command line: + 'devenv.com <ICU>\source\allinone\allinone.sln /build "Release|x64"'. +
    You can also use Cygwin with this compiler to build ICU, and you can refer to the
    How To Build And Install On Windows with Cygwin section for more details.

    @@ -981,7 +883,7 @@
    • Microsoft Windows
    • -
    • Microsoft Visual C++ (when gcc isn't used).
    • +
    • Microsoft Visual C++ (from Visual Studio 2015 or newer, when gcc isn't used).
    • Cygwin with the following installed: @@ -1016,11 +918,11 @@ Visual C++ compiler will not work with a bash command prompt.
    • If the computer isn't set up to use Visual C++ from the command line, - you need to run vcvars32.bat.
      For example:
      "C:\Program Files\Microsoft - Visual Studio 8\VC\bin\vcvars32.bat" can be used for 32-bit builds - or
      "C:\Program Files (x86)\Microsoft Visual Studio - 8\VC\bin\amd64\vcvarsamd64.bat" can be used for 64-bit builds on - Windows x64.
    • + you need to run vcvars32.bat.
      For example:
      + "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat" + can be used for 32-bit builds or
      + "C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.bat" + can be used for 64-bit builds on Windows x64.
    • Unzip the icu-XXXX.zip file into any convenient location. Using command line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use @@ -1229,9 +1131,9 @@ configure option.
    • The latest versions of z/OS use XPLINK + href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm">XPLINK version (C128) of the C++ standard library by default. You may see an + href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm">an error when running with XPLINK disabled. To avoid this error, set the following environment variable or similar: @@ -1405,7 +1307,7 @@ cd ../../..
  • Test ICU.
    gmake check
    (The QIBM_MULTI_THREADED=Y flag will be automatically applied to intltest - you can look at the + "https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzahw/rzahwceeco.htm"> iSeries Information Center for more details regarding the running of multiple threads on IBM i.)
  • @@ -1657,7 +1559,7 @@ gnumake

    In order to avoid synchronization and threading issues, developers are suggested to strictly follow the compiling and linking guidelines for multithreaded applications, specified in the following - document from Sun Microsystems. Most notably, pay strict attention to the + SUn Solaris document available from Oracle. Most notably, pay strict attention to the following statements from Sun:

    @@ -1671,10 +1573,15 @@ gnumake

    Failure to do this may cause spurious lock conflicts, recursive mutex failure, and deadlock.

    -

    Source: "Solaris Multithreaded Programming Guide, Compiling and - Debugging", Sun Microsystems, Inc., Apr 2004
    +

    Source: "Multithreaded Programming Guide, Compiling and + Debugging", Sun Microsystems, 2002
    + https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html

    + +

    Note, a version of that chapter from a 2008 document update covering both Solaris 9 + and Solaris 10 is available here:
    http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view

    + "http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html">http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html

    Windows Platform

    diff --git a/source/Doxyfile.in b/source/Doxyfile.in index fde6125..df543e8 100644 --- a/source/Doxyfile.in +++ b/source/Doxyfile.in @@ -194,7 +194,7 @@ EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_HAVE_STD_STRING=1 U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL= UCONFIG_ENABLE_PLUGINS=1 +PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE=override U_FINAL=final UCONFIG_ENABLE_PLUGINS=1 U_CHAR16_IS_TYPEDEF=0 U_CPLUSPLUS_VERSION=11 U_HAVE_RVALUE_REFERENCES=1 U_WCHAR_IS_UTF16 EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- diff --git a/source/Makefile.in b/source/Makefile.in index bd5b117..f4bab77 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -140,6 +140,10 @@ $(LIBDIR) $(BINDIR): ## Recursive targets all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR) +ifneq ($(NEED_ESCAPING),) + @echo "building tools/escapesrc (Needed for this platform with NEED_ESCAPING)" + @(cd tools/escapesrc && $(MAKE) RECURSIVE=YES $$local_target) || exit +endif @dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \ @@ -323,9 +327,10 @@ $(top_builddir)/config/icu-config: $(top_builddir)/Makefile $(top_srcdir)/config -$(RMV) $@ $(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@ chmod u+w $@ + @echo "# Following from icu/icu4c/source/config/Makefile.inc" >> $@ + LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@ @echo "# Following from @platform_make_fragment@" >> $@ - LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@ - LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@ + LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@ cat $(top_srcdir)/config/icu-config-bottom >> $@ chmod u-w $@ diff --git a/source/allinone/allinone.sln b/source/allinone/allinone.sln index fdaaea9..88a0d19 100644 --- a/source/allinone/allinone.sln +++ b/source/allinone/allinone.sln @@ -1,5 +1,7 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}" @@ -61,268 +63,354 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuinfo", "..\tools\icuinfo EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata_uwp", "..\data\makedata_uwp.vcxproj", "{B1D53358-37BD-48BC-B27C-68BAF1E78508}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n_uwp", "..\i18n\i18n_uwp.vcxproj", "{6786C051-383B-47E0-9E82-B8B994E06A25}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_uwp", "..\common\common_uwp.vcxproj", "{C10CF34B-3F79-430E-AD38-5A32DC0589C2}" +EndProject Global - GlobalSection(SubversionScc) = preSolution - Svn-Managed = True - Manager = AnkhSVN - Subversion Support for Visual Studio - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|ARM = Release|ARM Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|ARM.ActiveCfg = Debug|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64 + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|ARM.ActiveCfg = Release|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64 {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64 + {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|ARM.ActiveCfg = Debug|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64 + {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|ARM.ActiveCfg = Release|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64 {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64 + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|ARM.ActiveCfg = Debug|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64 + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|ARM.ActiveCfg = Release|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64 {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64 + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|ARM.ActiveCfg = Debug|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64 + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|ARM.ActiveCfg = Release|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64 + {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|ARM.ActiveCfg = Debug|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64 + {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|ARM.ActiveCfg = Release|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64 {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64 + {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|ARM.ActiveCfg = Debug|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64 + {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|ARM.ActiveCfg = Release|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64 + {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|ARM.ActiveCfg = Debug|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64 + {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|ARM.ActiveCfg = Release|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64 {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64 + {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|ARM.ActiveCfg = Debug|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64 + {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|ARM.ActiveCfg = Release|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64 {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64 + {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|ARM.ActiveCfg = Debug|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64 + {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|ARM.ActiveCfg = Release|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64 {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64 + {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|ARM.ActiveCfg = Debug|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64 + {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|ARM.ActiveCfg = Release|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64 {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64 + {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|ARM.ActiveCfg = Debug|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64 + {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|ARM.ActiveCfg = Release|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64 {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64 + {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|ARM.ActiveCfg = Debug|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64 + {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|ARM.ActiveCfg = Release|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64 {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64 + {0178B127-6269-407D-B112-93877BB62776}.Debug|ARM.ActiveCfg = Debug|Win32 {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32 {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32 {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64 {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64 + {0178B127-6269-407D-B112-93877BB62776}.Release|ARM.ActiveCfg = Release|Win32 {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32 {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32 {0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64 {0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64 + {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|ARM.ActiveCfg = Debug|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64 {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64 + {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|ARM.ActiveCfg = Release|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32 {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64 {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64 - {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32 - {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32 - {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64 - {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64 - {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32 - {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32 - {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64 - {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64 - {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64 + {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|ARM.ActiveCfg = Debug|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64 + {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|ARM.ActiveCfg = Release|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64 {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64 + {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|ARM.ActiveCfg = Debug|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64 + {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|ARM.ActiveCfg = Release|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64 {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64 + {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|ARM.ActiveCfg = Debug|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64 + {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|ARM.ActiveCfg = Release|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64 {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64 + {203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.ActiveCfg = Debug|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64 {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64 + {203EC78A-0531-43F0-A636-285439BDE025}.Release|ARM.ActiveCfg = Release|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32 {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64 {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64 + {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|ARM.ActiveCfg = Debug|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64 {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64 + {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|ARM.ActiveCfg = Release|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32 {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64 {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64 + {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|ARM.ActiveCfg = Debug|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64 + {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|ARM.ActiveCfg = Release|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64 {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64 + {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|ARM.ActiveCfg = Debug|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64 + {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|ARM.ActiveCfg = Release|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64 {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64 + {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|ARM.ActiveCfg = Debug|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64 + {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|ARM.ActiveCfg = Release|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64 + {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|ARM.ActiveCfg = Debug|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64 + {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|ARM.ActiveCfg = Release|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|ARM.ActiveCfg = Debug|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|ARM.ActiveCfg = Release|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64 {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|ARM.ActiveCfg = Debug|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|ARM.ActiveCfg = Release|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64 {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64 + {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|ARM.ActiveCfg = Debug|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64 + {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|ARM.ActiveCfg = Release|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64 {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64 + {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|ARM.ActiveCfg = Debug|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.ActiveCfg = Debug|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.Build.0 = Debug|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.ActiveCfg = Debug|x64 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.Build.0 = Debug|x64 + {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|ARM.ActiveCfg = Release|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.ActiveCfg = Release|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.Build.0 = Release|Win32 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.ActiveCfg = Release|x64 {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.Build.0 = Release|x64 + {E7611F49-F088-4175-9446-6111444E72C8}.Debug|ARM.ActiveCfg = Debug|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.ActiveCfg = Debug|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.Build.0 = Debug|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.ActiveCfg = Debug|x64 {E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.Build.0 = Debug|x64 + {E7611F49-F088-4175-9446-6111444E72C8}.Release|ARM.ActiveCfg = Release|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.ActiveCfg = Release|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.Build.0 = Release|Win32 {E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.ActiveCfg = Release|x64 {E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.Build.0 = Release|x64 + {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|ARM.ActiveCfg = Debug|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.ActiveCfg = Debug|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.Build.0 = Debug|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.ActiveCfg = Debug|x64 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.Build.0 = Debug|x64 + {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|ARM.ActiveCfg = Release|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.ActiveCfg = Release|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.Build.0 = Release|Win32 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.ActiveCfg = Release|x64 {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.Build.0 = Release|x64 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.ActiveCfg = Debug|ARM + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.Build.0 = Debug|ARM + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.ActiveCfg = Debug|Win32 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.Build.0 = Debug|Win32 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.ActiveCfg = Debug|x64 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.Build.0 = Debug|x64 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.ActiveCfg = Release|ARM + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.Build.0 = Release|ARM + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.ActiveCfg = Release|Win32 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.Build.0 = Release|Win32 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.ActiveCfg = Release|x64 + {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.Build.0 = Release|x64 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.ActiveCfg = Debug|ARM + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.Build.0 = Debug|ARM + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.ActiveCfg = Debug|Win32 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.Build.0 = Debug|Win32 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.ActiveCfg = Debug|x64 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.Build.0 = Debug|x64 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.ActiveCfg = Release|ARM + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.Build.0 = Release|ARM + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.ActiveCfg = Release|Win32 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.Build.0 = Release|Win32 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.ActiveCfg = Release|x64 + {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.Build.0 = Release|x64 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.ActiveCfg = Debug|ARM + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.Build.0 = Debug|ARM + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.ActiveCfg = Debug|Win32 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.Build.0 = Debug|Win32 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.ActiveCfg = Debug|x64 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.Build.0 = Debug|x64 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.ActiveCfg = Release|ARM + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.Build.0 = Release|ARM + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.ActiveCfg = Release|Win32 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.Build.0 = Release|Win32 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.ActiveCfg = Release|x64 + {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(SubversionScc) = preSolution + Svn-Managed = True + Manager = AnkhSVN - Subversion Support for Visual Studio + EndGlobalSection EndGlobal diff --git a/source/allinone/icucheck.bat b/source/allinone/icucheck.bat index f8331a0..119bc99 100644 --- a/source/allinone/icucheck.bat +++ b/source/allinone/icucheck.bat @@ -1,131 +1,131 @@ -@echo off -REM Copyright (C) 2016 and later: Unicode, Inc. and others. -REM License & terms of use: http://www.unicode.org/copyright.html -REM ******************************************************************** -REM * COPYRIGHT: -REM * Copyright (c) 2010-2014, International Business Machines Corporation -REM * and others. All Rights Reserved. -REM ******************************************************************** - -set ICU_ARCH=%1 -set ICU_DBRL=%2 - -if "%1" == "" ( -echo Usage: %0 "x86 or x64" "Debug or Release" -exit /b 1 -) - -if "%2" == "" ( -echo Usage: %0 %1 "Debug or Release" -exit /b 1 -) - -set ICU_OPATH=%PATH% - -set ICU_ICUDIR="%~dp0"\..\.. - -if "%ICU_ARCH%" == "x64" ( -set ICU_BINDIR=%~dp0\..\..\bin64 -) else ( -set ICU_BINDIR=%~dp0\..\..\bin -) - -set PATH=%ICU_BINDIR%;%PATH% - -echo testing ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL% -pushd %ICU_ICUDIR% - -@rem factor these out -set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe -set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe -set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe -set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe -set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe - -set ICUFAILED= -set ICURUN= -set ICUFAILCNT=0 - -@echo on - -@set THT=icuinfo -@echo ==== %THT% ========================================================================= -%ICUINFO_CMD% %ICUINFO_OPTS% - -@IF NOT ERRORLEVEL 1 GOTO OK_%THT% -@set ICUFAILED=%ICUFAILED% %THT% -@set ICUFAILCNT=1 -:OK_icuinfo -@set ICURUN=%ICURUN% %THT% - -@set THT=intltest -@echo ==== %THT% ========================================================================= -@cd %ICU_ICUDIR%\source\test\intltest -%INTLTEST_CMD% %INTLTEST_OPTS% - -@IF NOT ERRORLEVEL 1 GOTO OK_%THT% -@set ICUFAILED=%ICUFAILED% %THT% -@set ICUFAILCNT=1 -:OK_intltest -@set ICURUN=%ICURUN% %THT% - -@set THT=iotest -@echo ==== %THT% ========================================================================= -@cd %ICU_ICUDIR%\source\test\iotest -%IOTEST_CMD% %IOTEST_OPTS% - -@IF NOT ERRORLEVEL 1 GOTO OK_%THT% -@set ICUFAILED=%ICUFAILED% %THT% -@set ICUFAILCNT=1 -:OK_IOTEST -@set ICURUN=%ICURUN% %THT% - -@set THT=cintltst -@echo ==== %THT% ========================================================================= -@cd %ICU_ICUDIR%\source\test\cintltst -%CINTLTST_CMD% %CINTLTST_OPTS% - -@IF NOT ERRORLEVEL 1 GOTO OK_%THT% -@set ICUFAILED=%ICUFAILED% %THT% -@set ICUFAILCNT=1 -:OK_cintltst -@set ICURUN=%ICURUN% %THT% - -@REM (Layout is deprecated - this would require HarfBuzz) -@REM @set THT=letest -@REM @echo ==== %THT% ========================================================================= -@REM @cd %ICU_ICUDIR%\source\test\letest -@REM %LETST_CMD% %LETEST_OPTS% - -@REM @IF NOT ERRORLEVEL 1 GOTO OK_%THT% -@REM @set ICUFAILED=%ICUFAILED% %THT% -@REM @set ICUFAILCNT=1 -@REM :OK_letest -@REM @set ICURUN=%ICURUN% %THT% - -@echo off - -REM clean up -set PATH=%ICU_OPATH% -REM unset ICU_OPATH -popd - -@REM done - -echo - -echo - -echo - -echo ============================================================ -echo Summary: ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL% -echo - -echo Tests Run : %ICURUN% - -if %ICUFAILCNT% == 0 ( - echo " - All Passed!" - exit /b 0 -) -echo Failing Tests: %ICUFAILED% -echo - -echo FAILED! - -exit /b 1 +@echo off +REM Copyright (C) 2016 and later: Unicode, Inc. and others. +REM License & terms of use: http://www.unicode.org/copyright.html +REM ******************************************************************** +REM * COPYRIGHT: +REM * Copyright (c) 2010-2014, International Business Machines Corporation +REM * and others. All Rights Reserved. +REM ******************************************************************** + +set ICU_ARCH=%1 +set ICU_DBRL=%2 + +if "%1" == "" ( +echo Usage: %0 "x86 or x64" "Debug or Release" +exit /b 1 +) + +if "%2" == "" ( +echo Usage: %0 %1 "Debug or Release" +exit /b 1 +) + +set ICU_OPATH=%PATH% + +set ICU_ICUDIR="%~dp0"\..\.. + +if "%ICU_ARCH%" == "x64" ( +set ICU_BINDIR=%~dp0\..\..\bin64 +) else ( +set ICU_BINDIR=%~dp0\..\..\bin +) + +set PATH=%ICU_BINDIR%;%PATH% + +echo testing ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL% +pushd %ICU_ICUDIR% + +@rem factor these out +set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe +set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe +set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe +set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe +set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe + +set ICUFAILED= +set ICURUN= +set ICUFAILCNT=0 + +@echo on + +@set THT=icuinfo +@echo ==== %THT% ========================================================================= +%ICUINFO_CMD% %ICUINFO_OPTS% + +@IF NOT ERRORLEVEL 1 GOTO OK_%THT% +@set ICUFAILED=%ICUFAILED% %THT% +@set ICUFAILCNT=1 +:OK_icuinfo +@set ICURUN=%ICURUN% %THT% + +@set THT=intltest +@echo ==== %THT% ========================================================================= +@cd %ICU_ICUDIR%\source\test\intltest +%INTLTEST_CMD% %INTLTEST_OPTS% + +@IF NOT ERRORLEVEL 1 GOTO OK_%THT% +@set ICUFAILED=%ICUFAILED% %THT% +@set ICUFAILCNT=1 +:OK_intltest +@set ICURUN=%ICURUN% %THT% + +@set THT=iotest +@echo ==== %THT% ========================================================================= +@cd %ICU_ICUDIR%\source\test\iotest +%IOTEST_CMD% %IOTEST_OPTS% + +@IF NOT ERRORLEVEL 1 GOTO OK_%THT% +@set ICUFAILED=%ICUFAILED% %THT% +@set ICUFAILCNT=1 +:OK_IOTEST +@set ICURUN=%ICURUN% %THT% + +@set THT=cintltst +@echo ==== %THT% ========================================================================= +@cd %ICU_ICUDIR%\source\test\cintltst +%CINTLTST_CMD% %CINTLTST_OPTS% + +@IF NOT ERRORLEVEL 1 GOTO OK_%THT% +@set ICUFAILED=%ICUFAILED% %THT% +@set ICUFAILCNT=1 +:OK_cintltst +@set ICURUN=%ICURUN% %THT% + +@REM (Layout is deprecated - this would require HarfBuzz) +@REM @set THT=letest +@REM @echo ==== %THT% ========================================================================= +@REM @cd %ICU_ICUDIR%\source\test\letest +@REM %LETST_CMD% %LETEST_OPTS% + +@REM @IF NOT ERRORLEVEL 1 GOTO OK_%THT% +@REM @set ICUFAILED=%ICUFAILED% %THT% +@REM @set ICUFAILCNT=1 +@REM :OK_letest +@REM @set ICURUN=%ICURUN% %THT% + +@echo off + +REM clean up +set PATH=%ICU_OPATH% +REM unset ICU_OPATH +popd + +@REM done + +echo - +echo - +echo - +echo ============================================================ +echo Summary: ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL% +echo - +echo Tests Run : %ICURUN% + +if %ICUFAILCNT% == 0 ( + echo " - All Passed!" + exit /b 0 +) +echo Failing Tests: %ICUFAILED% +echo - +echo FAILED! + +exit /b 1 diff --git a/source/common/Makefile.in b/source/common/Makefile.in index 59ffb73..10fa8de 100644 --- a/source/common/Makefile.in +++ b/source/common/Makefile.in @@ -94,6 +94,7 @@ stringtriebuilder.o bytestriebuilder.o \ bytestrie.o bytestrieiterator.o \ ucharstrie.o ucharstriebuilder.o ucharstrieiterator.o \ dictionarydata.o \ +edits.o \ appendable.o ustr_cnv.o unistr_cnv.o unistr.o unistr_case.o unistr_props.o \ utf_impl.o ustring.o ustrcase.o ucasemap.o ucasemap_titlecase_brkiter.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o utext.o \ unistr_case_locale.o ustrcase_locale.o unistr_titlecase_brkiter.o ustr_titlecase_brkiter.o \ diff --git a/source/common/appendable.cpp b/source/common/appendable.cpp index 1a597b5..fca3c1e 100644 --- a/source/common/appendable.cpp +++ b/source/common/appendable.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: appendable.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/bmpset.cpp b/source/common/bmpset.cpp index ebcd0d2..08f9bed 100644 --- a/source/common/bmpset.cpp +++ b/source/common/bmpset.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: bmpset.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/bmpset.h b/source/common/bmpset.h index 8975cd6..87375d2 100644 --- a/source/common/bmpset.h +++ b/source/common/bmpset.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: bmpset.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/brkeng.cpp b/source/common/brkeng.cpp index cf14483..a590060 100644 --- a/source/common/brkeng.cpp +++ b/source/common/brkeng.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************************ diff --git a/source/common/brkeng.h b/source/common/brkeng.h index 163cbbe..0335d11 100644 --- a/source/common/brkeng.h +++ b/source/common/brkeng.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ************************************************************************************ diff --git a/source/common/brkiter.cpp b/source/common/brkiter.cpp index 029ec5e..f8e4d98 100644 --- a/source/common/brkiter.cpp +++ b/source/common/brkiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/bytestream.cpp b/source/common/bytestream.cpp index 5a5c2e4..bfd7bde 100644 --- a/source/common/bytestream.cpp +++ b/source/common/bytestream.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2011, International Business Machines // Corporation and others. All Rights Reserved. diff --git a/source/common/bytestrie.cpp b/source/common/bytestrie.cpp index 093cd8d..c4d498c 100644 --- a/source/common/bytestrie.cpp +++ b/source/common/bytestrie.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: bytestrie.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/bytestriebuilder.cpp b/source/common/bytestriebuilder.cpp index 913d85a..581505e 100644 --- a/source/common/bytestriebuilder.cpp +++ b/source/common/bytestriebuilder.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: bytestriebuilder.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/bytestrieiterator.cpp b/source/common/bytestrieiterator.cpp index 4d04247..e64961a 100644 --- a/source/common/bytestrieiterator.cpp +++ b/source/common/bytestrieiterator.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: bytestrieiterator.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/caniter.cpp b/source/common/caniter.cpp index 2479350..aee9f4e 100644 --- a/source/common/caniter.cpp +++ b/source/common/caniter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** @@ -311,12 +311,12 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros // see what the permutations of the characters before and after this one are //Hashtable *subpermute = permute(source.substring(0,i) + source.substring(i + UTF16.getCharCount(cp))); - permute(subPermuteString.replace(i, U16_LENGTH(cp), NULL, 0), skipZeros, &subpermute, status); + permute(subPermuteString.remove(i, U16_LENGTH(cp)), skipZeros, &subpermute, status); /* Test for buffer overflows */ if(U_FAILURE(status)) { return; } - // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents + // The upper remove is destructive. The question is do we have to make a copy, or we don't care about the contents // of source at this point. // prefix this character to all of them diff --git a/source/common/chariter.cpp b/source/common/chariter.cpp index 625ac49..887119a 100644 --- a/source/common/chariter.cpp +++ b/source/common/chariter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/charstr.cpp b/source/common/charstr.cpp index c792181..8bacd20 100644 --- a/source/common/charstr.cpp +++ b/source/common/charstr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: charstr.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -15,6 +15,7 @@ */ #include "unicode/utypes.h" +#include "unicode/putil.h" #include "charstr.h" #include "cmemory.h" #include "cstring.h" diff --git a/source/common/charstr.h b/source/common/charstr.h index 9758c5c..3cfdf6a 100644 --- a/source/common/charstr.h +++ b/source/common/charstr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/cmemory.c b/source/common/cmemory.c deleted file mode 100644 index b40994a..0000000 --- a/source/common/cmemory.c +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2002-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* File cmemory.c ICU Heap allocation. -* All ICU heap allocation, both for C and C++ new of ICU -* class types, comes through these functions. -* -* If you have a need to replace ICU allocation, this is the -* place to do it. -* -* Note that uprv_malloc(0) returns a non-NULL pointer, and -* that a subsequent free of that pointer value is a NOP. -* -****************************************************************************** -*/ -#include "unicode/uclean.h" -#include "cmemory.h" -#include "putilimp.h" -#include "uassert.h" -#include - -/* uprv_malloc(0) returns a pointer to this read-only data. */ -static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0}; - -/* Function Pointers for user-supplied heap functions */ -static const void *pContext; -static UMemAllocFn *pAlloc; -static UMemReallocFn *pRealloc; -static UMemFreeFn *pFree; - -#if U_DEBUG && defined(UPRV_MALLOC_COUNT) -#include -static int n=0; -static long b=0; -#endif - -#if U_DEBUG - -static char gValidMemorySink = 0; - -U_CAPI void uprv_checkValidMemory(const void *p, size_t n) { - /* - * Access the memory to ensure that it's all valid. - * Load and save a computed value to try to ensure that the compiler - * does not throw away the whole loop. - * A thread analyzer might complain about un-mutexed access to gValidMemorySink - * which is true but harmless because no one ever uses the value in gValidMemorySink. - */ - const char *s = (const char *)p; - char c = gValidMemorySink; - size_t i; - U_ASSERT(p != NULL); - for(i = 0; i < n; ++i) { - c ^= s[i]; - } - gValidMemorySink = c; -} - -#endif /* U_DEBUG */ - -U_CAPI void * U_EXPORT2 -uprv_malloc(size_t s) { -#if U_DEBUG && defined(UPRV_MALLOC_COUNT) -#if 1 - putchar('>'); - fflush(stdout); -#else - fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr); -#endif -#endif - if (s > 0) { - if (pAlloc) { - return (*pAlloc)(pContext, s); - } else { - return uprv_default_malloc(s); - } - } else { - return (void *)zeroMem; - } -} - -U_CAPI void * U_EXPORT2 -uprv_realloc(void * buffer, size_t size) { -#if U_DEBUG && defined(UPRV_MALLOC_COUNT) - putchar('~'); - fflush(stdout); -#endif - if (buffer == zeroMem) { - return uprv_malloc(size); - } else if (size == 0) { - if (pFree) { - (*pFree)(pContext, buffer); - } else { - uprv_default_free(buffer); - } - return (void *)zeroMem; - } else { - if (pRealloc) { - return (*pRealloc)(pContext, buffer, size); - } else { - return uprv_default_realloc(buffer, size); - } - } -} - -U_CAPI void U_EXPORT2 -uprv_free(void *buffer) { -#if U_DEBUG && defined(UPRV_MALLOC_COUNT) - putchar('<'); - fflush(stdout); -#endif - if (buffer != zeroMem) { - if (pFree) { - (*pFree)(pContext, buffer); - } else { - uprv_default_free(buffer); - } - } -} - -U_CAPI void * U_EXPORT2 -uprv_calloc(size_t num, size_t size) { - void *mem = NULL; - size *= num; - mem = uprv_malloc(size); - if (mem) { - uprv_memset(mem, 0, size); - } - return mem; -} - -U_CAPI void U_EXPORT2 -u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status) -{ - if (U_FAILURE(*status)) { - return; - } - if (a==NULL || r==NULL || f==NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - pContext = context; - pAlloc = a; - pRealloc = r; - pFree = f; -} - - -U_CFUNC UBool cmemory_cleanup(void) { - pContext = NULL; - pAlloc = NULL; - pRealloc = NULL; - pFree = NULL; - return TRUE; -} diff --git a/source/common/cmemory.h b/source/common/cmemory.h index a1211bd..665a822 100644 --- a/source/common/cmemory.h +++ b/source/common/cmemory.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/common.vcxproj b/source/common/common.vcxproj index e6c9acf..33ef60e 100644 --- a/source/common/common.vcxproj +++ b/source/common/common.vcxproj @@ -102,13 +102,14 @@ .\x86\Release/ Level3 true + /utf-8 %(AdditionalOptions) NDEBUG;%(PreprocessorDefinitions) 0x0409 - ..\..\bin\icuuc58.dll + ..\..\bin\icuuc59.dll true .\..\..\lib\icuuc.pdb true @@ -143,13 +144,14 @@ Level3 true EditAndContinue + /utf-8 %(AdditionalOptions) _DEBUG;%(PreprocessorDefinitions) 0x0409 - ..\..\bin\icuuc58d.dll + ..\..\bin\icuuc59d.dll true true .\..\..\lib\icuucd.pdb @@ -181,13 +183,14 @@ .\x64\Release/ Level3 true + /utf-8 %(AdditionalOptions) NDEBUG;%(PreprocessorDefinitions) 0x0409 - ..\..\bin64\icuuc58.dll + ..\..\bin64\icuuc59.dll true .\..\..\lib64\icuuc.pdb true @@ -220,13 +223,14 @@ Level3 true ProgramDatabase + /utf-8 %(AdditionalOptions) _DEBUG;%(PreprocessorDefinitions) 0x0409 - ..\..\bin64\icuuc58d.dll + ..\..\bin64\icuuc59d.dll true true .\..\..\lib64\icuucd.pdb @@ -237,11 +241,11 @@ - - - - - + + + + + @@ -271,12 +275,12 @@ ..\i18n;%(AdditionalIncludeDirectories) ..\i18n;%(AdditionalIncludeDirectories) - - - - + + + + - + @@ -286,8 +290,8 @@ - - + + false false false @@ -299,59 +303,59 @@ false false - + false false false false - - - + + + false false false false - + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - + - + false - + - - + + false - + false false false @@ -360,7 +364,7 @@ - + @@ -380,10 +384,10 @@ - + - - + + @@ -405,7 +409,7 @@ - + false @@ -417,8 +421,8 @@ - - + + @@ -446,9 +450,10 @@ - + - + + @@ -460,7 +465,7 @@ - + @@ -476,7 +481,7 @@ - + @@ -1514,6 +1519,34 @@ ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + + + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode @@ -1532,6 +1565,20 @@ + + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode + + ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode @@ -1616,6 +1663,7 @@ ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) + copy "%(FullPath)" ..\..\include\unicode @@ -1856,4 +1904,4 @@ - \ No newline at end of file + diff --git a/source/common/common.vcxproj.filters b/source/common/common.vcxproj.filters index 56e8c12..0542a8b 100644 --- a/source/common/common.vcxproj.filters +++ b/source/common/common.vcxproj.filters @@ -49,16 +49,16 @@ - + bidi - + bidi - + bidi - + bidi @@ -106,22 +106,22 @@ collections - + collections - + collections - + collections - + collections collections - + collections @@ -154,31 +154,31 @@ configuration - + configuration - + configuration configuration - + configuration configuration - + configuration - + configuration - + configuration - + conversion @@ -187,13 +187,13 @@ conversion - + conversion - + conversion - + conversion @@ -202,49 +202,49 @@ conversion - + conversion - + conversion - + conversion - + conversion - + conversion - + conversion conversion - + conversion - + conversion - + conversion - + conversion conversion - + conversion conversion - + data & memory @@ -253,22 +253,22 @@ data & memory - + data & memory data & memory - + data & memory - + data & memory data & memory - + data & memory @@ -289,7 +289,7 @@ formatting - + formatting @@ -334,16 +334,16 @@ locales & resources - + locales & resources locales & resources - + locales & resources - + locales & resources @@ -391,7 +391,7 @@ properties & sets - + properties & sets @@ -418,10 +418,10 @@ properties & sets - + properties & sets - + properties & sets @@ -469,13 +469,16 @@ strings - + strings strings - + + strings + + strings @@ -493,7 +496,7 @@ strings - + strings @@ -541,7 +544,7 @@ strings - + strings @@ -568,7 +571,7 @@ break iteration - + conversion @@ -595,7 +598,7 @@ registration - + bidi @@ -870,6 +873,9 @@ strings + + strings + strings @@ -1096,9 +1102,18 @@ strings + + strings + + + strings + strings + + strings + strings @@ -1181,4 +1196,4 @@ collections - \ No newline at end of file + diff --git a/source/common/cpputils.h b/source/common/cpputils.h index 57af69a..307e570 100644 --- a/source/common/cpputils.h +++ b/source/common/cpputils.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: cpputils.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 */ diff --git a/source/common/cstr.cpp b/source/common/cstr.cpp index a0006df..24654f8 100644 --- a/source/common/cstr.cpp +++ b/source/common/cstr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/cstr.h b/source/common/cstr.h index 93b2e54..c33f487 100644 --- a/source/common/cstr.h +++ b/source/common/cstr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/cstring.c b/source/common/cstring.c deleted file mode 100644 index eb6e021..0000000 --- a/source/common/cstring.c +++ /dev/null @@ -1,341 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* File CSTRING.C -* -* @author Helena Shih -* -* Modification History: -* -* Date Name Description -* 6/18/98 hshih Created -* 09/08/98 stephen Added include for ctype, for Mac Port -* 11/15/99 helena Integrated S/390 IEEE changes. -****************************************************************************** -*/ - - - -#include -#include -#include "unicode/utypes.h" -#include "cmemory.h" -#include "cstring.h" -#include "uassert.h" - -/* - * We hardcode case conversion for invariant characters to match our expectation - * and the compiler execution charset. - * This prevents problems on systems - * - with non-default casing behavior, like Turkish system locales where - * tolower('I') maps to dotless i and toupper('i') maps to dotted I - * - where there are no lowercase Latin characters at all, or using different - * codes (some old EBCDIC codepages) - * - * This works because the compiler usually runs on a platform where the execution - * charset includes all of the invariant characters at their expected - * code positions, so that the char * string literals in ICU code match - * the char literals here. - * - * Note that the set of lowercase Latin letters is discontiguous in EBCDIC - * and the set of uppercase Latin letters is discontiguous as well. - */ - -U_CAPI UBool U_EXPORT2 -uprv_isASCIILetter(char c) { -#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY - return - ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') || - ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z'); -#else - return ('a'<=c && c<='z') || ('A'<=c && c<='Z'); -#endif -} - -U_CAPI char U_EXPORT2 -uprv_toupper(char c) { -#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY - if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) { - c=(char)(c+('A'-'a')); - } -#else - if('a'<=c && c<='z') { - c=(char)(c+('A'-'a')); - } -#endif - return c; -} - - -#if 0 -/* - * Commented out because cstring.h defines uprv_tolower() to be - * the same as either uprv_asciitolower() or uprv_ebcdictolower() - * to reduce the amount of code to cover with tests. - * - * Note that this uprv_tolower() definition is likely to work for most - * charset families, not just ASCII and EBCDIC, because its #else branch - * is written generically. - */ -U_CAPI char U_EXPORT2 -uprv_tolower(char c) { -#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY - if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) { - c=(char)(c+('a'-'A')); - } -#else - if('A'<=c && c<='Z') { - c=(char)(c+('a'-'A')); - } -#endif - return c; -} -#endif - -U_CAPI char U_EXPORT2 -uprv_asciitolower(char c) { - if(0x41<=c && c<=0x5a) { - c=(char)(c+0x20); - } - return c; -} - -U_CAPI char U_EXPORT2 -uprv_ebcdictolower(char c) { - if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) || - (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) || - (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9) - ) { - c=(char)(c-0x40); - } - return c; -} - - -U_CAPI char* U_EXPORT2 -T_CString_toLowerCase(char* str) -{ - char* origPtr = str; - - if (str) { - do - *str = (char)uprv_tolower(*str); - while (*(str++)); - } - - return origPtr; -} - -U_CAPI char* U_EXPORT2 -T_CString_toUpperCase(char* str) -{ - char* origPtr = str; - - if (str) { - do - *str = (char)uprv_toupper(*str); - while (*(str++)); - } - - return origPtr; -} - -/* - * Takes a int32_t and fills in a char* string with that number "radix"-based. - * Does not handle negative values (makes an empty string for them). - * Writes at most 12 chars ("-2147483647" plus NUL). - * Returns the length of the string (not including the NUL). - */ -U_CAPI int32_t U_EXPORT2 -T_CString_integerToString(char* buffer, int32_t v, int32_t radix) -{ - char tbuf[30]; - int32_t tbx = sizeof(tbuf); - uint8_t digit; - int32_t length = 0; - uint32_t uval; - - U_ASSERT(radix>=2 && radix<=16); - uval = (uint32_t) v; - if(v<0 && radix == 10) { - /* Only in base 10 do we conside numbers to be signed. */ - uval = (uint32_t)(-v); - buffer[length++] = '-'; - } - - tbx = sizeof(tbuf)-1; - tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */ - do { - digit = (uint8_t)(uval % radix); - tbuf[--tbx] = (char)(T_CString_itosOffset(digit)); - uval = uval / radix; - } while (uval != 0); - - /* copy converted number into user buffer */ - uprv_strcpy(buffer+length, tbuf+tbx); - length += sizeof(tbuf) - tbx -1; - return length; -} - - - -/* - * Takes a int64_t and fills in a char* string with that number "radix"-based. - * Writes at most 21: chars ("-9223372036854775807" plus NUL). - * Returns the length of the string, not including the terminating NULL. - */ -U_CAPI int32_t U_EXPORT2 -T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix) -{ - char tbuf[30]; - int32_t tbx = sizeof(tbuf); - uint8_t digit; - int32_t length = 0; - uint64_t uval; - - U_ASSERT(radix>=2 && radix<=16); - uval = (uint64_t) v; - if(v<0 && radix == 10) { - /* Only in base 10 do we conside numbers to be signed. */ - uval = (uint64_t)(-v); - buffer[length++] = '-'; - } - - tbx = sizeof(tbuf)-1; - tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */ - do { - digit = (uint8_t)(uval % radix); - tbuf[--tbx] = (char)(T_CString_itosOffset(digit)); - uval = uval / radix; - } while (uval != 0); - - /* copy converted number into user buffer */ - uprv_strcpy(buffer+length, tbuf+tbx); - length += sizeof(tbuf) - tbx -1; - return length; -} - - -U_CAPI int32_t U_EXPORT2 -T_CString_stringToInteger(const char *integerString, int32_t radix) -{ - char *end; - return uprv_strtoul(integerString, &end, radix); - -} - -U_CAPI int U_EXPORT2 -uprv_stricmp(const char *str1, const char *str2) { - if(str1==NULL) { - if(str2==NULL) { - return 0; - } else { - return -1; - } - } else if(str2==NULL) { - return 1; - } else { - /* compare non-NULL strings lexically with lowercase */ - int rc; - unsigned char c1, c2; - - for(;;) { - c1=(unsigned char)*str1; - c2=(unsigned char)*str2; - if(c1==0) { - if(c2==0) { - return 0; - } else { - return -1; - } - } else if(c2==0) { - return 1; - } else { - /* compare non-zero characters with lowercase */ - rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2); - if(rc!=0) { - return rc; - } - } - ++str1; - ++str2; - } - } -} - -U_CAPI int U_EXPORT2 -uprv_strnicmp(const char *str1, const char *str2, uint32_t n) { - if(str1==NULL) { - if(str2==NULL) { - return 0; - } else { - return -1; - } - } else if(str2==NULL) { - return 1; - } else { - /* compare non-NULL strings lexically with lowercase */ - int rc; - unsigned char c1, c2; - - for(; n--;) { - c1=(unsigned char)*str1; - c2=(unsigned char)*str2; - if(c1==0) { - if(c2==0) { - return 0; - } else { - return -1; - } - } else if(c2==0) { - return 1; - } else { - /* compare non-zero characters with lowercase */ - rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2); - if(rc!=0) { - return rc; - } - } - ++str1; - ++str2; - } - } - - return 0; -} - -U_CAPI char* U_EXPORT2 -uprv_strdup(const char *src) { - size_t len = uprv_strlen(src) + 1; - char *dup = (char *) uprv_malloc(len); - - if (dup) { - uprv_memcpy(dup, src, len); - } - - return dup; -} - -U_CAPI char* U_EXPORT2 -uprv_strndup(const char *src, int32_t n) { - char *dup; - - if(n < 0) { - dup = uprv_strdup(src); - } else { - dup = (char*)uprv_malloc(n+1); - if (dup) { - uprv_memcpy(dup, src, n); - dup[n] = 0; - } - } - - return dup; -} diff --git a/source/common/cstring.h b/source/common/cstring.h index 238cb31..2232efc 100644 --- a/source/common/cstring.h +++ b/source/common/cstring.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/cwchar.c b/source/common/cwchar.c deleted file mode 100644 index 4c469ce..0000000 --- a/source/common/cwchar.c +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2001, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: cwchar.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2001may25 -* created by: Markus W. Scherer -*/ - -#include "unicode/utypes.h" - -#if !U_HAVE_WCSCPY - -#include "cwchar.h" - -U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) { - wchar_t *start=dst; - while(*dst!=0) { - ++dst; - } - while((*dst=*src)!=0) { - ++dst; - ++src; - } - return start; -} - -U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) { - wchar_t *start=dst; - while((*dst=*src)!=0) { - ++dst; - ++src; - } - return start; -} - -U_CAPI size_t uprv_wcslen(const wchar_t *src) { - const wchar_t *start=src; - while(*src!=0) { - ++src; - } - return src-start; -} - -#endif - diff --git a/source/common/cwchar.h b/source/common/cwchar.h index c8c3497..8fd041a 100644 --- a/source/common/cwchar.h +++ b/source/common/cwchar.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: cwchar.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/dictbe.cpp b/source/common/dictbe.cpp index 924f09b..8ee76ef 100644 --- a/source/common/dictbe.cpp +++ b/source/common/dictbe.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* @@ -1385,12 +1385,25 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, // Now that we're done, convert positions in t_boundary[] (indices in // the normalized input string) back to indices in the original input UText // while reversing t_boundary and pushing values to foundBreaks. + int32_t prevCPPos = -1; + int32_t prevUTextPos = -1; for (int32_t i = numBreaks-1; i >= 0; i--) { int32_t cpPos = t_boundary.elementAti(i); + U_ASSERT(cpPos > prevCPPos); int32_t utextPos = inputMap.isValid() ? inputMap->elementAti(cpPos) : cpPos + rangeStart; - // Boundaries are added to foundBreaks output in ascending order. - U_ASSERT(foundBreaks.size() == 0 ||foundBreaks.peeki() < utextPos); - foundBreaks.push(utextPos, status); + U_ASSERT(utextPos >= prevUTextPos); + if (utextPos > prevUTextPos) { + // Boundaries are added to foundBreaks output in ascending order. + U_ASSERT(foundBreaks.size() == 0 || foundBreaks.peeki() < utextPos); + foundBreaks.push(utextPos, status); + } else { + // Normalization expanded the input text, the dictionary found a boundary + // within the expansion, giving two boundaries with the same index in the + // original text. Ignore the second. See ticket #12918. + --numBreaks; + } + prevCPPos = cpPos; + prevUTextPos = utextPos; } // inString goes out of scope diff --git a/source/common/dictbe.h b/source/common/dictbe.h index 9390e92..242f475 100644 --- a/source/common/dictbe.h +++ b/source/common/dictbe.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/dictionarydata.cpp b/source/common/dictionarydata.cpp index 00f6636..6e2dbee 100644 --- a/source/common/dictionarydata.cpp +++ b/source/common/dictionarydata.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/dictionarydata.h b/source/common/dictionarydata.h index 6f8852c..73b7d67 100644 --- a/source/common/dictionarydata.h +++ b/source/common/dictionarydata.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/dtintrv.cpp b/source/common/dtintrv.cpp index f3313d5..80bb5d6 100644 --- a/source/common/dtintrv.cpp +++ b/source/common/dtintrv.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /******************************************************************************* * Copyright (C) 2008, International Business Machines Corporation and diff --git a/source/common/errorcode.cpp b/source/common/errorcode.cpp index bc7807d..e7ac43b 100644 --- a/source/common/errorcode.cpp +++ b/source/common/errorcode.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: errorcode.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/filteredbrk.cpp b/source/common/filteredbrk.cpp index acba959..1ab1ca6 100644 --- a/source/common/filteredbrk.cpp +++ b/source/common/filteredbrk.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -702,4 +702,4 @@ FilteredBreakIteratorBuilder::createInstance(UErrorCode& status) { U_NAMESPACE_END -#endif //#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING && !UCONFIG_NO_FILTERED_BREAK_ITERATION +#endif //#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION diff --git a/source/common/filterednormalizer2.cpp b/source/common/filterednormalizer2.cpp index fb6e831..28e5f6c 100644 --- a/source/common/filterednormalizer2.cpp +++ b/source/common/filterednormalizer2.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: filterednormalizer2.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/hash.h b/source/common/hash.h index ac7d22f..b411a43 100644 --- a/source/common/hash.h +++ b/source/common/hash.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/icudataver.c b/source/common/icudataver.c deleted file mode 100644 index 681a187..0000000 --- a/source/common/icudataver.c +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2009-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -*/ - -#include "unicode/utypes.h" -#include "unicode/icudataver.h" -#include "unicode/ures.h" -#include "uresimp.h" /* for ures_getVersionByKey */ - -U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) { - UResourceBundle *icudatares = NULL; - - if (U_FAILURE(*status)) { - return; - } - - if (dataVersionFillin != NULL) { - icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status); - if (U_SUCCESS(*status)) { - ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status); - } - ures_close(icudatares); - } -} diff --git a/source/common/icuplug.cpp b/source/common/icuplug.cpp index ec889f7..c6439cc 100644 --- a/source/common/icuplug.cpp +++ b/source/common/icuplug.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/icuplugimp.h b/source/common/icuplugimp.h index acbbcaf..3cad8f8 100644 --- a/source/common/icuplugimp.h +++ b/source/common/icuplugimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/listformatter.cpp b/source/common/listformatter.cpp index 9225c22..d105654 100644 --- a/source/common/listformatter.cpp +++ b/source/common/listformatter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: listformatter.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -25,6 +25,7 @@ #include "charstr.h" #include "ucln_cmn.h" #include "uresimp.h" +#include "resource.h" U_NAMESPACE_BEGIN @@ -78,17 +79,6 @@ uprv_deleteListFormatInternal(void *obj) { U_CDECL_END -static ListFormatInternal* loadListFormatInternal( - const Locale& locale, - const char* style, - UErrorCode& errorCode); - -static void getStringByKey( - const UResourceBundle* rb, - const char* key, - UnicodeString& result, - UErrorCode& errorCode); - ListFormatter::ListFormatter(const ListFormatter& other) : owned(other.owned), data(other.data) { if (other.owned != NULL) { @@ -171,30 +161,107 @@ const ListFormatInternal* ListFormatter::getListFormatInternal( return result; } -static ListFormatInternal* loadListFormatInternal( +static const UChar solidus = 0x2F; +static const UChar aliasPrefix[] = { 0x6C,0x69,0x73,0x74,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2F }; // "listPattern/" +enum { + kAliasPrefixLen = UPRV_LENGTHOF(aliasPrefix), + kStyleLenMax = 24 // longest currently is 14 +}; + +struct ListFormatter::ListPatternsSink : public ResourceSink { + UnicodeString two, start, middle, end; +#if ((U_PLATFORM == U_PF_AIX) || (U_PLATFORM == U_PF_OS390)) && (U_CPLUSPLUS_VERSION < 11) + char aliasedStyle[kStyleLenMax+1]; + ListPatternsSink() { + uprv_memset(aliasedStyle, 0, kStyleLenMax+1); + } +#else + char aliasedStyle[kStyleLenMax+1] = {0}; + + ListPatternsSink() {} +#endif + virtual ~ListPatternsSink(); + + void setAliasedStyle(UnicodeString alias) { + int32_t startIndex = alias.indexOf(aliasPrefix, kAliasPrefixLen, 0); + if (startIndex < 0) { + return; + } + startIndex += kAliasPrefixLen; + int32_t endIndex = alias.indexOf(solidus, startIndex); + if (endIndex < 0) { + endIndex = alias.length(); + } + alias.extract(startIndex, endIndex-startIndex, aliasedStyle, kStyleLenMax+1, US_INV); + aliasedStyle[kStyleLenMax] = 0; + } + + void handleValueForPattern(ResourceValue &value, UnicodeString &pattern, UErrorCode &errorCode) { + if (pattern.isEmpty()) { + if (value.getType() == URES_ALIAS) { + if (aliasedStyle[0] == 0) { + setAliasedStyle(value.getAliasUnicodeString(errorCode)); + } + } else { + pattern = value.getUnicodeString(errorCode); + } + } + } + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + aliasedStyle[0] = 0; + if (value.getType() == URES_ALIAS) { + setAliasedStyle(value.getAliasUnicodeString(errorCode)); + return; + } + ResourceTable listPatterns = value.getTable(errorCode); + for (int i = 0; U_SUCCESS(errorCode) && listPatterns.getKeyAndValue(i, key, value); ++i) { + if (uprv_strcmp(key, "2") == 0) { + handleValueForPattern(value, two, errorCode); + } else if (uprv_strcmp(key, "end") == 0) { + handleValueForPattern(value, end, errorCode); + } else if (uprv_strcmp(key, "middle") == 0) { + handleValueForPattern(value, middle, errorCode); + } else if (uprv_strcmp(key, "start") == 0) { + handleValueForPattern(value, start, errorCode); + } + } + } +}; + +// Virtual destructors must be defined out of line. +ListFormatter::ListPatternsSink::~ListPatternsSink() {} + +ListFormatInternal* ListFormatter::loadListFormatInternal( const Locale& locale, const char * style, UErrorCode& errorCode) { UResourceBundle* rb = ures_open(NULL, locale.getName(), &errorCode); - if (U_FAILURE(errorCode)) { - ures_close(rb); - return NULL; - } rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode); - rb = ures_getByKeyWithFallback(rb, style, rb, &errorCode); - if (U_FAILURE(errorCode)) { ures_close(rb); return NULL; } - UnicodeString two, start, middle, end; - getStringByKey(rb, "2", two, errorCode); - getStringByKey(rb, "start", start, errorCode); - getStringByKey(rb, "middle", middle, errorCode); - getStringByKey(rb, "end", end, errorCode); + ListFormatter::ListPatternsSink sink; + char currentStyle[kStyleLenMax+1]; + uprv_strncpy(currentStyle, style, kStyleLenMax); + currentStyle[kStyleLenMax] = 0; + + for (;;) { + ures_getAllItemsWithFallback(rb, currentStyle, sink, errorCode); + if (U_FAILURE(errorCode) || sink.aliasedStyle[0] == 0 || uprv_strcmp(currentStyle, sink.aliasedStyle) == 0) { + break; + } + uprv_strcpy(currentStyle, sink.aliasedStyle); + } ures_close(rb); if (U_FAILURE(errorCode)) { return NULL; } - ListFormatInternal* result = new ListFormatInternal(two, start, middle, end, errorCode); + if (sink.two.isEmpty() || sink.start.isEmpty() || sink.middle.isEmpty() || sink.end.isEmpty()) { + errorCode = U_MISSING_RESOURCE_ERROR; + return NULL; + } + ListFormatInternal* result = new ListFormatInternal(sink.two, sink.start, sink.middle, sink.end, errorCode); if (result == NULL) { errorCode = U_MEMORY_ALLOCATION_ERROR; return NULL; @@ -206,15 +273,6 @@ static ListFormatInternal* loadListFormatInternal( return result; } -static void getStringByKey(const UResourceBundle* rb, const char* key, UnicodeString& result, UErrorCode& errorCode) { - int32_t len; - const UChar* ustr = ures_getStringByKeyWithFallback(rb, key, &len, &errorCode); - if (U_FAILURE(errorCode)) { - return; - } - result.setTo(ustr, len); -} - ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) { Locale locale; // The default locale. return createInstance(locale, errorCode); diff --git a/source/common/loadednormalizer2impl.cpp b/source/common/loadednormalizer2impl.cpp index bd61818..bd37b95 100644 --- a/source/common/loadednormalizer2impl.cpp +++ b/source/common/loadednormalizer2impl.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -232,6 +232,7 @@ Normalizer2::getInstance(const char *packageName, } } if(allModes==NULL) { + ucln_common_registerCleanup(UCLN_COMMON_LOADED_NORMALIZER2, uprv_loaded_normalizer2_cleanup); LocalPointer localAllModes( Norm2AllModes::createInstance(packageName, name, errorCode)); if(U_SUCCESS(errorCode)) { diff --git a/source/common/localsvc.h b/source/common/localsvc.h index 6b0624f..60d447c 100644 --- a/source/common/localsvc.h +++ b/source/common/localsvc.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** diff --git a/source/common/locavailable.cpp b/source/common/locavailable.cpp index 6016fde..f054db3 100644 --- a/source/common/locavailable.cpp +++ b/source/common/locavailable.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: locavailable.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/locbased.cpp b/source/common/locbased.cpp index f2f56ad..ff378b4 100644 --- a/source/common/locbased.cpp +++ b/source/common/locbased.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/locbased.h b/source/common/locbased.h index ab8628b..06133be 100644 --- a/source/common/locbased.h +++ b/source/common/locbased.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/locdispnames.cpp b/source/common/locdispnames.cpp index d60920c..1aa3ca7 100644 --- a/source/common/locdispnames.cpp +++ b/source/common/locdispnames.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: locdispnames.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/locdspnm.cpp b/source/common/locdspnm.cpp index a17478c..39934dc 100644 --- a/source/common/locdspnm.cpp +++ b/source/common/locdspnm.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -13,6 +13,7 @@ #include "unicode/locdspnm.h" #include "unicode/simpleformatter.h" +#include "unicode/ucasemap.h" #include "unicode/ures.h" #include "unicode/udisplaycontext.h" #include "unicode/brkiter.h" diff --git a/source/common/locid.cpp b/source/common/locid.cpp index d2781db..36508ac 100644 --- a/source/common/locid.cpp +++ b/source/common/locid.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -33,6 +33,7 @@ #include "unicode/locid.h" +#include "unicode/strenum.h" #include "unicode/uloc.h" #include "putilimp.h" #include "mutex.h" diff --git a/source/common/loclikely.cpp b/source/common/loclikely.cpp index c13b37e..cdd6f78 100644 --- a/source/common/loclikely.cpp +++ b/source/common/loclikely.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: loclikely.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -22,6 +22,7 @@ #include "unicode/utypes.h" #include "unicode/locid.h" #include "unicode/putil.h" +#include "unicode/uchar.h" #include "unicode/uloc.h" #include "unicode/ures.h" #include "unicode/uscript.h" diff --git a/source/common/locmap.c b/source/common/locmap.c deleted file mode 100644 index 1e28bd7..0000000 --- a/source/common/locmap.c +++ /dev/null @@ -1,1175 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ********************************************************************** - * Copyright (C) 1996-2016, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - * - * Provides functionality for mapping between - * LCID and Posix IDs or ICU locale to codepage - * - * Note: All classes and code in this file are - * intended for internal use only. - * - * Methods of interest: - * unsigned long convertToLCID(const char*); - * const char* convertToPosix(unsigned long); - * - * Kathleen Wilson, 4/30/96 - * - * Date Name Description - * 3/11/97 aliu Fixed off-by-one bug in assignment operator. Added - * setId() method and safety check against - * MAX_ID_LENGTH. - * 04/23/99 stephen Added C wrapper for convertToPosix. - * 09/18/00 george Removed the memory leaks. - * 08/23/01 george Convert to C - */ - -#include "locmap.h" -#include "cstring.h" -#include "cmemory.h" - -#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500) -/* - * TODO: It seems like we should widen this to - * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW) - * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin) - * but those use gcc and won't have defined(_MSC_VER). - * We might need to #include some Windows header and test for some version macro from there. - * Or call some Windows function and see what it returns. - */ -#define USE_WINDOWS_LOCALE_API -#endif - -#ifdef USE_WINDOWS_LOCALE_API -#include -#include -#endif - -/* - * Note: - * The mapping from Win32 locale ID numbers to POSIX locale strings should - * be the faster one. - * - * Many LCID values come from winnt.h - * Some also come from http://www.microsoft.com/globaldev/reference/lcid-all.mspx - */ - -/* -//////////////////////////////////////////////// -// -// Internal Classes for LCID <--> POSIX Mapping -// -///////////////////////////////////////////////// -*/ - -typedef struct ILcidPosixElement -{ - const uint32_t hostID; - const char * const posixID; -} ILcidPosixElement; - -typedef struct ILcidPosixMap -{ - const uint32_t numRegions; - const struct ILcidPosixElement* const regionMaps; -} ILcidPosixMap; - - -/* -///////////////////////////////////////////////// -// -// Easy macros to make the LCID <--> POSIX Mapping -// -///////////////////////////////////////////////// -*/ - -/** - * The standard one language/one country mapping for LCID. - * The first element must be the language, and the following - * elements are the language with the country. - * @param hostID LCID in host format such as 0x044d - * @param languageID posix ID of just the language such as 'de' - * @param posixID posix ID of the language_TERRITORY such as 'de_CH' - */ -#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \ -static const ILcidPosixElement locmap_ ## languageID [] = { \ - {LANGUAGE_LCID(hostID), #languageID}, /* parent locale */ \ - {hostID, #posixID}, \ -}; - -/** - * Define a subtable by ID - * @param id the POSIX ID, either a language or language_TERRITORY - */ -#define ILCID_POSIX_SUBTABLE(id) \ -static const ILcidPosixElement locmap_ ## id [] = - - -/** - * Create the map for the posixID. This macro supposes that the language string - * name is the same as the global variable name, and that the first element - * in the ILcidPosixElement is just the language. - * @param _posixID the full POSIX ID for this entry. - */ -#define ILCID_POSIX_MAP(_posixID) \ - {UPRV_LENGTHOF(locmap_ ## _posixID), locmap_ ## _posixID} - -/* -//////////////////////////////////////////// -// -// Create the table of LCID to POSIX Mapping -// None of it should be dynamically created. -// -// Keep static locale variables inside the function so that -// it can be created properly during static init. -// -// Note: This table should be updated periodically. Check the National Lanaguage Support API Reference Website. -// Microsoft is moving away from LCID in favor of locale name as of Vista. This table needs to be -// maintained for support of older Windows version. -// Update: Windows 7 (091130) -// -// Note: Microsoft assign a different LCID if a locale has a sorting variant. POSIX IDs below may contain -// @collation=XXX, but no other keywords are allowed (at least for now). When uprv_convertToLCID() is -// called from uloc_getLCID(), keywords other than collation are already removed. If we really need -// to support other keywords in this mapping data, we must update the implementation. -//////////////////////////////////////////// -*/ - -ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA) - -ILCID_POSIX_SUBTABLE(ar) { - {0x01, "ar"}, - {0x3801, "ar_AE"}, - {0x3c01, "ar_BH"}, - {0x1401, "ar_DZ"}, - {0x0c01, "ar_EG"}, - {0x0801, "ar_IQ"}, - {0x2c01, "ar_JO"}, - {0x3401, "ar_KW"}, - {0x3001, "ar_LB"}, - {0x1001, "ar_LY"}, - {0x1801, "ar_MA"}, - {0x1801, "ar_MO"}, - {0x2001, "ar_OM"}, - {0x4001, "ar_QA"}, - {0x0401, "ar_SA"}, - {0x2801, "ar_SY"}, - {0x1c01, "ar_TN"}, - {0x2401, "ar_YE"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET) -ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL) - -ILCID_POSIX_SUBTABLE(az) { - {0x2c, "az"}, - {0x082c, "az_Cyrl_AZ"}, /* Cyrillic based */ - {0x742c, "az_Cyrl"}, /* Cyrillic based */ - {0x042c, "az_Latn_AZ"}, /* Latin based */ - {0x782c, "az_Latn"}, /* Latin based */ - {0x042c, "az_AZ"} /* Latin based */ -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU) -ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY) - -/*ILCID_POSIX_SUBTABLE(ber) { - {0x5f, "ber"}, - {0x045f, "ber_Arab_DZ"}, - {0x045f, "ber_Arab"}, - {0x085f, "ber_Latn_DZ"}, - {0x085f, "ber_Latn"} -};*/ - -ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG) - -ILCID_POSIX_ELEMENT_ARRAY(0x0466, bin, bin_NG) - -ILCID_POSIX_SUBTABLE(bn) { - {0x45, "bn"}, - {0x0845, "bn_BD"}, - {0x0445, "bn_IN"} -}; - -ILCID_POSIX_SUBTABLE(bo) { - {0x51, "bo"}, - {0x0851, "bo_BT"}, - {0x0451, "bo_CN"}, - {0x0c51, "dz_BT"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR) - -ILCID_POSIX_SUBTABLE(ca) { - {0x03, "ca"}, - {0x0403, "ca_ES"}, - {0x0803, "ca_ES_VALENCIA"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR) -ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US) - -ILCID_POSIX_SUBTABLE(ckb) { - {0x92, "ckb"}, - {0x7c92, "ckb_Arab"}, - {0x0492, "ckb_Arab_IQ"} -}; - -/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */ -ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ) - -ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB) -ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK) - -ILCID_POSIX_SUBTABLE(de) { - {0x07, "de"}, - {0x0c07, "de_AT"}, - {0x0807, "de_CH"}, - {0x0407, "de_DE"}, - {0x1407, "de_LI"}, - {0x1007, "de_LU"}, - {0x10407,"de_DE@collation=phonebook"}, /*This is really de_DE_PHONEBOOK on Windows*/ - {0x10407,"de@collation=phonebook"} /*This is really de_DE_PHONEBOOK on Windows*/ -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV) -ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR) - -ILCID_POSIX_SUBTABLE(en) { - {0x09, "en"}, - {0x0c09, "en_AU"}, - {0x2809, "en_BZ"}, - {0x1009, "en_CA"}, - {0x0809, "en_GB"}, - {0x3c09, "en_HK"}, - {0x3809, "en_ID"}, - {0x1809, "en_IE"}, - {0x4009, "en_IN"}, - {0x2009, "en_JM"}, - {0x4409, "en_MY"}, - {0x1409, "en_NZ"}, - {0x3409, "en_PH"}, - {0x4809, "en_SG"}, - {0x2C09, "en_TT"}, - {0x0409, "en_US"}, - {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */ - {0x2409, "en_VI"}, /* Virgin Islands AKA Caribbean Islands (en_CB). */ - {0x1c09, "en_ZA"}, - {0x3009, "en_ZW"}, - {0x2409, "en_029"}, - {0x0409, "en_AS"}, /* Alias for en_US. Leave last. */ - {0x0409, "en_GU"}, /* Alias for en_US. Leave last. */ - {0x0409, "en_MH"}, /* Alias for en_US. Leave last. */ - {0x0409, "en_MP"}, /* Alias for en_US. Leave last. */ - {0x0409, "en_UM"} /* Alias for en_US. Leave last. */ -}; - -ILCID_POSIX_SUBTABLE(en_US_POSIX) { - {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */ -}; - -ILCID_POSIX_SUBTABLE(es) { - {0x0a, "es"}, - {0x2c0a, "es_AR"}, - {0x400a, "es_BO"}, - {0x340a, "es_CL"}, - {0x240a, "es_CO"}, - {0x140a, "es_CR"}, - {0x5c0a, "es_CU"}, - {0x1c0a, "es_DO"}, - {0x300a, "es_EC"}, - {0x0c0a, "es_ES"}, /*Modern sort.*/ - {0x100a, "es_GT"}, - {0x480a, "es_HN"}, - {0x080a, "es_MX"}, - {0x4c0a, "es_NI"}, - {0x180a, "es_PA"}, - {0x280a, "es_PE"}, - {0x500a, "es_PR"}, - {0x3c0a, "es_PY"}, - {0x440a, "es_SV"}, - {0x540a, "es_US"}, - {0x380a, "es_UY"}, - {0x200a, "es_VE"}, - {0x580a, "es_419"}, - {0x040a, "es_ES@collation=traditional"}, - {0x040a, "es@collation=traditional"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE) -ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES) - -/* ISO-639 doesn't distinguish between Persian and Dari.*/ -ILCID_POSIX_SUBTABLE(fa) { - {0x29, "fa"}, - {0x0429, "fa_IR"}, /* Persian/Farsi (Iran) */ - {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */ -}; - -/* duplicate for roundtripping */ -ILCID_POSIX_SUBTABLE(fa_AF) { - {0x8c, "fa_AF"}, /* Persian/Dari (Afghanistan) */ - {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */ -}; - -ILCID_POSIX_SUBTABLE(ff) { - {0x67, "ff"}, - {0x7c67, "ff_Latn"}, - {0x0867, "ff_Latn_SN"}, - {0x0467, "ff_NG"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI) -ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH) -ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO) - -ILCID_POSIX_SUBTABLE(fr) { - {0x0c, "fr"}, - {0x080c, "fr_BE"}, - {0x0c0c, "fr_CA"}, - {0x240c, "fr_CD"}, - {0x240c, "fr_CG"}, - {0x100c, "fr_CH"}, - {0x300c, "fr_CI"}, - {0x2c0c, "fr_CM"}, - {0x040c, "fr_FR"}, - {0x3c0c, "fr_HT"}, - {0x140c, "fr_LU"}, - {0x380c, "fr_MA"}, - {0x180c, "fr_MC"}, - {0x340c, "fr_ML"}, - {0x200c, "fr_RE"}, - {0x280c, "fr_SN"}, - {0xe40c, "fr_015"}, - {0x1c0c, "fr_029"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG) - -ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL) - -ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */ - {0x3c, "ga"}, - {0x083c, "ga_IE"}, - {0x043c, "gd_GB"} -}; - -ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */ - {0x91, "gd"}, - {0x0491, "gd_GB"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES) -ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY) -ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR) - -ILCID_POSIX_SUBTABLE(ha) { - {0x68, "ha"}, - {0x7c68, "ha_Latn"}, - {0x0468, "ha_Latn_NG"}, -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US) -ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL) -ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN) - -/* This LCID is really four different locales.*/ -ILCID_POSIX_SUBTABLE(hr) { - {0x1a, "hr"}, - {0x141a, "bs_Latn_BA"}, /* Bosnian, Bosnia and Herzegovina */ - {0x681a, "bs_Latn"}, /* Bosnian, Bosnia and Herzegovina */ - {0x141a, "bs_BA"}, /* Bosnian, Bosnia and Herzegovina */ - {0x781a, "bs"}, /* Bosnian */ - {0x201a, "bs_Cyrl_BA"}, /* Bosnian, Bosnia and Herzegovina */ - {0x641a, "bs_Cyrl"}, /* Bosnian, Bosnia and Herzegovina */ - {0x101a, "hr_BA"}, /* Croatian in Bosnia */ - {0x041a, "hr_HR"}, /* Croatian*/ - {0x2c1a, "sr_Latn_ME"}, - {0x241a, "sr_Latn_RS"}, - {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */ - {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/ - {0x701a, "sr_Latn"}, /* It's 0x1a or 0x081a, pick one to make the test program happy. */ - {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */ - {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/ - {0x301a, "sr_Cyrl_ME"}, - {0x281a, "sr_Cyrl_RS"}, - {0x6c1a, "sr_Cyrl"}, /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */ - {0x7c1a, "sr"} /* In CLDR sr is sr_Cyrl. */ -}; - -ILCID_POSIX_SUBTABLE(hsb) { - {0x2E, "hsb"}, - {0x042E, "hsb_DE"}, - {0x082E, "dsb_DE"}, - {0x7C2E, "dsb"}, -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU) -ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM) -ILCID_POSIX_ELEMENT_ARRAY(0x0469, ibb, ibb_NG) -ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID) -ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG) -ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN) -ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS) - -ILCID_POSIX_SUBTABLE(it) { - {0x10, "it"}, - {0x0810, "it_CH"}, - {0x0410, "it_IT"} -}; - -ILCID_POSIX_SUBTABLE(iu) { - {0x5d, "iu"}, - {0x045d, "iu_Cans_CA"}, - {0x785d, "iu_Cans"}, - {0x085d, "iu_Latn_CA"}, - {0x7c5d, "iu_Latn"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL) /*Left in for compatibility*/ -ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP) -ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE) -ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ) -ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL) -ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH) -ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN) - -ILCID_POSIX_SUBTABLE(ko) { - {0x12, "ko"}, - {0x0812, "ko_KP"}, - {0x0412, "ko_KR"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr, kr_NG) - -ILCID_POSIX_SUBTABLE(ks) { /* We could add PK and CN too */ - {0x60, "ks"}, - {0x0860, "ks_IN"}, /* Documentation doesn't mention script */ - {0x0460, "ks_Arab_IN"}, - {0x0860, "ks_Deva_IN"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG) /* Kyrgyz is spoken in Kyrgyzstan */ -ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT) /* TODO: Verify the country */ -ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU) -ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA) -ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT) -ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV) -ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ) -ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK) -ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN) - -ILCID_POSIX_SUBTABLE(mn) { - {0x50, "mn"}, - {0x0450, "mn_MN"}, - {0x7c50, "mn_Mong"}, - {0x0850, "mn_Mong_CN"}, - {0x0850, "mn_CN"}, - {0x7850, "mn_Cyrl"}, - {0x0c50, "mn_Mong_MN"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA) -ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN) - -ILCID_POSIX_SUBTABLE(ms) { - {0x3e, "ms"}, - {0x083e, "ms_BN"}, /* Brunei Darussalam*/ - {0x043e, "ms_MY"} /* Malaysia*/ -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT) -ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM) - -ILCID_POSIX_SUBTABLE(ne) { - {0x61, "ne"}, - {0x0861, "ne_IN"}, /* India*/ - {0x0461, "ne_NP"} /* Nepal*/ -}; - -ILCID_POSIX_SUBTABLE(nl) { - {0x13, "nl"}, - {0x0813, "nl_BE"}, - {0x0413, "nl_NL"} -}; - -/* The "no" locale split into nb and nn. By default in ICU, "no" is nb.*/ -ILCID_POSIX_SUBTABLE(no) { - {0x14, "no"}, /* really nb_NO */ - {0x7c14, "nb"}, /* really nb */ - {0x0414, "nb_NO"}, /* really nb_NO. Keep first in the 414 list. */ - {0x0414, "no_NO"}, /* really nb_NO */ - {0x0814, "nn_NO"}, /* really nn_NO. Keep first in the 814 list. */ - {0x7814, "nn"}, /* It's 0x14 or 0x814, pick one to make the test program happy. */ - {0x0814, "no_NO_NY"}/* really nn_NO */ -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA) /* TODO: Verify the ISO-639 code */ -ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR) - -ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */ - {0x72, "om"}, - {0x0472, "om_ET"}, - {0x0472, "gaz_ET"} -}; - -/* Declared as or_IN to get around compiler errors*/ -ILCID_POSIX_SUBTABLE(or_IN) { - {0x48, "or"}, - {0x0448, "or_IN"}, -}; - - -ILCID_POSIX_SUBTABLE(pa) { - {0x46, "pa"}, - {0x0446, "pa_IN"}, - {0x0846, "pa_PK"}, - {0x0846, "pa_Arab_PK"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0479, pap, pap_AN) -ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL) -ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF) - -ILCID_POSIX_SUBTABLE(pt) { - {0x16, "pt"}, - {0x0416, "pt_BR"}, - {0x0816, "pt_PT"} -}; - -ILCID_POSIX_SUBTABLE(qu) { - {0x6b, "qu"}, - {0x046b, "qu_BO"}, - {0x086b, "qu_EC"}, - {0x0C6b, "qu_PE"}, - {0x046b, "quz_BO"}, - {0x086b, "quz_EC"}, - {0x0C6b, "quz_PE"} -}; - -ILCID_POSIX_SUBTABLE(quc) { - {0x93, "quc"}, - {0x0493, "quc_CO"}, - /* - "quc_Latn_GT" is an exceptional case. Language ID of "quc" - is 0x93, but LCID of "quc_Latn_GT" is 0x486, which should be - under the group of "qut". "qut" is a retired ISO 639-3 language - code for West Central Quiche, and merged to "quc". - It looks Windows previously reserved "qut" for K'iche', but, - decided to use "quc" when adding a locale for K'iche' (Guatemala). - - This data structure used here assumes language ID bits in - LCID is unique for alphabetic language code. But this is not true - for "quc_Latn_GT". If we don't have the data below, LCID look up - by alphabetic locale ID (POSIX) will fail. The same entry is found - under "qut" below, which is required for reverse look up. - */ - {0x0486, "quc_Latn_GT"} -}; - -ILCID_POSIX_SUBTABLE(qut) { - {0x86, "qut"}, - {0x0486, "qut_GT"}, - /* - See the note in "quc" above. - */ - {0x0486, "quc_Latn_GT"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH) - -ILCID_POSIX_SUBTABLE(ro) { - {0x18, "ro"}, - {0x0418, "ro_RO"}, - {0x0818, "ro_MD"} -}; - -ILCID_POSIX_SUBTABLE(root) { - {0x00, "root"} -}; - -ILCID_POSIX_SUBTABLE(ru) { - {0x19, "ru"}, - {0x0419, "ru_RU"}, - {0x0819, "ru_MD"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW) -ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU) - -ILCID_POSIX_SUBTABLE(sd) { - {0x59, "sd"}, - {0x0459, "sd_IN"}, - {0x0459, "sd_Deva_IN"}, - {0x0859, "sd_PK"} -}; - -ILCID_POSIX_SUBTABLE(se) { - {0x3b, "se"}, - {0x0c3b, "se_FI"}, - {0x043b, "se_NO"}, - {0x083b, "se_SE"}, - {0x783b, "sma"}, - {0x183b, "sma_NO"}, - {0x1c3b, "sma_SE"}, - {0x7c3b, "smj"}, - {0x703b, "smn"}, - {0x743b, "sms"}, - {0x103b, "smj_NO"}, - {0x143b, "smj_SE"}, - {0x243b, "smn_FI"}, - {0x203b, "sms_FI"}, -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK) -ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK) -ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI) - -ILCID_POSIX_SUBTABLE(so) { /* TODO: Verify the country */ - {0x77, "so"}, - {0x0477, "so_ET"}, - {0x0477, "so_SO"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL) -ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA) - -ILCID_POSIX_SUBTABLE(sv) { - {0x1d, "sv"}, - {0x081d, "sv_FI"}, - {0x041d, "sv_SE"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE) -ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY) - -ILCID_POSIX_SUBTABLE(ta) { - {0x49, "ta"}, - {0x0449, "ta_IN"}, - {0x0849, "ta_LK"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN) - -/* Cyrillic based by default */ -ILCID_POSIX_SUBTABLE(tg) { - {0x28, "tg"}, - {0x7c28, "tg_Cyrl"}, - {0x0428, "tg_Cyrl_TJ"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH) - -ILCID_POSIX_SUBTABLE(ti) { - {0x73, "ti"}, - {0x0873, "ti_ER"}, - {0x0473, "ti_ET"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM) - -ILCID_POSIX_SUBTABLE(tn) { - {0x32, "tn"}, - {0x0832, "tn_BW"}, - {0x0432, "tn_ZA"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR) -ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA) -ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU) - -ILCID_POSIX_SUBTABLE(tzm) { - {0x5f, "tzm"}, - {0x7c5f, "tzm_Latn"}, - {0x085f, "tzm_Latn_DZ"}, - {0x105f, "tzm_Tfng_MA"}, - {0x045f, "tzm_Arab_MA"}, - {0x045f, "tmz"} -}; - -ILCID_POSIX_SUBTABLE(ug) { - {0x80, "ug"}, - {0x0480, "ug_CN"}, - {0x0480, "ug_Arab_CN"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA) - -ILCID_POSIX_SUBTABLE(ur) { - {0x20, "ur"}, - {0x0820, "ur_IN"}, - {0x0420, "ur_PK"} -}; - -ILCID_POSIX_SUBTABLE(uz) { - {0x43, "uz"}, - {0x0843, "uz_Cyrl_UZ"}, /* Cyrillic based */ - {0x7843, "uz_Cyrl"}, /* Cyrillic based */ - {0x0843, "uz_UZ"}, /* Cyrillic based */ - {0x0443, "uz_Latn_UZ"}, /* Latin based */ - {0x7c43, "uz_Latn"} /* Latin based */ -}; - -ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */ - {0x33, "ve"}, - {0x0433, "ve_ZA"}, - {0x0433, "ven_ZA"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN) -ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN) -ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA) -ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi) -ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG) - -ILCID_POSIX_SUBTABLE(zh) { - {0x0004, "zh_Hans"}, - {0x7804, "zh"}, - {0x0804, "zh_CN"}, - {0x0804, "zh_Hans_CN"}, - {0x0c04, "zh_Hant_HK"}, - {0x0c04, "zh_HK"}, - {0x1404, "zh_Hant_MO"}, - {0x1404, "zh_MO"}, - {0x1004, "zh_Hans_SG"}, - {0x1004, "zh_SG"}, - {0x0404, "zh_Hant_TW"}, - {0x7c04, "zh_Hant"}, - {0x0404, "zh_TW"}, - {0x30404,"zh_Hant_TW"}, /* Bopomofo order */ - {0x30404,"zh_TW"}, /* Bopomofo order */ - {0x20004,"zh@collation=stroke"}, - {0x20404,"zh_Hant@collation=stroke"}, - {0x20404,"zh_Hant_TW@collation=stroke"}, - {0x20404,"zh_TW@collation=stroke"}, - {0x20804,"zh_Hans@collation=stroke"}, - {0x20804,"zh_Hans_CN@collation=stroke"}, - {0x20804,"zh_CN@collation=stroke"} -}; - -ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA) - -/* This must be static and grouped by LCID. */ -static const ILcidPosixMap gPosixIDmap[] = { - ILCID_POSIX_MAP(af), /* af Afrikaans 0x36 */ - ILCID_POSIX_MAP(am), /* am Amharic 0x5e */ - ILCID_POSIX_MAP(ar), /* ar Arabic 0x01 */ - ILCID_POSIX_MAP(arn), /* arn Araucanian/Mapudungun 0x7a */ - ILCID_POSIX_MAP(as), /* as Assamese 0x4d */ - ILCID_POSIX_MAP(az), /* az Azerbaijani 0x2c */ - ILCID_POSIX_MAP(ba), /* ba Bashkir 0x6d */ - ILCID_POSIX_MAP(be), /* be Belarusian 0x23 */ -/* ILCID_POSIX_MAP(ber), ber Berber/Tamazight 0x5f */ - ILCID_POSIX_MAP(bg), /* bg Bulgarian 0x02 */ - ILCID_POSIX_MAP(bin), /* bin Edo 0x66 */ - ILCID_POSIX_MAP(bn), /* bn Bengali; Bangla 0x45 */ - ILCID_POSIX_MAP(bo), /* bo Tibetan 0x51 */ - ILCID_POSIX_MAP(br), /* br Breton 0x7e */ - ILCID_POSIX_MAP(ca), /* ca Catalan 0x03 */ - ILCID_POSIX_MAP(chr), /* chr Cherokee 0x5c */ - ILCID_POSIX_MAP(ckb), /* ckb Sorani (Central Kurdish) 0x92 */ - ILCID_POSIX_MAP(co), /* co Corsican 0x83 */ - ILCID_POSIX_MAP(cs), /* cs Czech 0x05 */ - ILCID_POSIX_MAP(cy), /* cy Welsh 0x52 */ - ILCID_POSIX_MAP(da), /* da Danish 0x06 */ - ILCID_POSIX_MAP(de), /* de German 0x07 */ - ILCID_POSIX_MAP(dv), /* dv Divehi 0x65 */ - ILCID_POSIX_MAP(el), /* el Greek 0x08 */ - ILCID_POSIX_MAP(en), /* en English 0x09 */ - ILCID_POSIX_MAP(en_US_POSIX), /* invariant 0x7f */ - ILCID_POSIX_MAP(es), /* es Spanish 0x0a */ - ILCID_POSIX_MAP(et), /* et Estonian 0x25 */ - ILCID_POSIX_MAP(eu), /* eu Basque 0x2d */ - ILCID_POSIX_MAP(fa), /* fa Persian/Farsi 0x29 */ - ILCID_POSIX_MAP(fa_AF), /* fa Persian/Dari 0x8c */ - ILCID_POSIX_MAP(ff), /* ff Fula 0x67 */ - ILCID_POSIX_MAP(fi), /* fi Finnish 0x0b */ - ILCID_POSIX_MAP(fil), /* fil Filipino 0x64 */ - ILCID_POSIX_MAP(fo), /* fo Faroese 0x38 */ - ILCID_POSIX_MAP(fr), /* fr French 0x0c */ - ILCID_POSIX_MAP(fuv), /* fuv Fulfulde - Nigeria 0x67 */ - ILCID_POSIX_MAP(fy), /* fy Frisian 0x62 */ - ILCID_POSIX_MAP(ga), /* * Gaelic (Ireland,Scotland) 0x3c */ - ILCID_POSIX_MAP(gd), /* gd Gaelic (United Kingdom) 0x91 */ - ILCID_POSIX_MAP(gl), /* gl Galician 0x56 */ - ILCID_POSIX_MAP(gn), /* gn Guarani 0x74 */ - ILCID_POSIX_MAP(gsw), /* gsw Alemanic/Alsatian/Swiss German 0x84 */ - ILCID_POSIX_MAP(gu), /* gu Gujarati 0x47 */ - ILCID_POSIX_MAP(ha), /* ha Hausa 0x68 */ - ILCID_POSIX_MAP(haw), /* haw Hawaiian 0x75 */ - ILCID_POSIX_MAP(he), /* he Hebrew (formerly iw) 0x0d */ - ILCID_POSIX_MAP(hi), /* hi Hindi 0x39 */ - ILCID_POSIX_MAP(hr), /* * Croatian and others 0x1a */ - ILCID_POSIX_MAP(hsb), /* hsb Upper Sorbian 0x2e */ - ILCID_POSIX_MAP(hu), /* hu Hungarian 0x0e */ - ILCID_POSIX_MAP(hy), /* hy Armenian 0x2b */ - ILCID_POSIX_MAP(ibb), /* ibb Ibibio - Nigeria 0x69 */ - ILCID_POSIX_MAP(id), /* id Indonesian (formerly in) 0x21 */ - ILCID_POSIX_MAP(ig), /* ig Igbo 0x70 */ - ILCID_POSIX_MAP(ii), /* ii Sichuan Yi 0x78 */ - ILCID_POSIX_MAP(is), /* is Icelandic 0x0f */ - ILCID_POSIX_MAP(it), /* it Italian 0x10 */ - ILCID_POSIX_MAP(iu), /* iu Inuktitut 0x5d */ - ILCID_POSIX_MAP(iw), /* iw Hebrew 0x0d */ - ILCID_POSIX_MAP(ja), /* ja Japanese 0x11 */ - ILCID_POSIX_MAP(ka), /* ka Georgian 0x37 */ - ILCID_POSIX_MAP(kk), /* kk Kazakh 0x3f */ - ILCID_POSIX_MAP(kl), /* kl Kalaallisut 0x6f */ - ILCID_POSIX_MAP(km), /* km Khmer 0x53 */ - ILCID_POSIX_MAP(kn), /* kn Kannada 0x4b */ - ILCID_POSIX_MAP(ko), /* ko Korean 0x12 */ - ILCID_POSIX_MAP(kok), /* kok Konkani 0x57 */ - ILCID_POSIX_MAP(kr), /* kr Kanuri 0x71 */ - ILCID_POSIX_MAP(ks), /* ks Kashmiri 0x60 */ - ILCID_POSIX_MAP(ky), /* ky Kyrgyz 0x40 */ - ILCID_POSIX_MAP(lb), /* lb Luxembourgish 0x6e */ - ILCID_POSIX_MAP(la), /* la Latin 0x76 */ - ILCID_POSIX_MAP(lo), /* lo Lao 0x54 */ - ILCID_POSIX_MAP(lt), /* lt Lithuanian 0x27 */ - ILCID_POSIX_MAP(lv), /* lv Latvian, Lettish 0x26 */ - ILCID_POSIX_MAP(mi), /* mi Maori 0x81 */ - ILCID_POSIX_MAP(mk), /* mk Macedonian 0x2f */ - ILCID_POSIX_MAP(ml), /* ml Malayalam 0x4c */ - ILCID_POSIX_MAP(mn), /* mn Mongolian 0x50 */ - ILCID_POSIX_MAP(mni), /* mni Manipuri 0x58 */ - ILCID_POSIX_MAP(moh), /* moh Mohawk 0x7c */ - ILCID_POSIX_MAP(mr), /* mr Marathi 0x4e */ - ILCID_POSIX_MAP(ms), /* ms Malay 0x3e */ - ILCID_POSIX_MAP(mt), /* mt Maltese 0x3a */ - ILCID_POSIX_MAP(my), /* my Burmese 0x55 */ -/* ILCID_POSIX_MAP(nb), // no Norwegian 0x14 */ - ILCID_POSIX_MAP(ne), /* ne Nepali 0x61 */ - ILCID_POSIX_MAP(nl), /* nl Dutch 0x13 */ -/* ILCID_POSIX_MAP(nn), // no Norwegian 0x14 */ - ILCID_POSIX_MAP(no), /* * Norwegian 0x14 */ - ILCID_POSIX_MAP(nso), /* nso Sotho, Northern (Sepedi dialect) 0x6c */ - ILCID_POSIX_MAP(oc), /* oc Occitan 0x82 */ - ILCID_POSIX_MAP(om), /* om Oromo 0x72 */ - ILCID_POSIX_MAP(or_IN), /* or Oriya 0x48 */ - ILCID_POSIX_MAP(pa), /* pa Punjabi 0x46 */ - ILCID_POSIX_MAP(pap), /* pap Papiamentu 0x79 */ - ILCID_POSIX_MAP(pl), /* pl Polish 0x15 */ - ILCID_POSIX_MAP(ps), /* ps Pashto 0x63 */ - ILCID_POSIX_MAP(pt), /* pt Portuguese 0x16 */ - ILCID_POSIX_MAP(qu), /* qu Quechua 0x6B */ - ILCID_POSIX_MAP(quc), /* quc K'iche 0x93 */ - ILCID_POSIX_MAP(qut), /* qut K'iche 0x86 */ - ILCID_POSIX_MAP(rm), /* rm Raeto-Romance/Romansh 0x17 */ - ILCID_POSIX_MAP(ro), /* ro Romanian 0x18 */ - ILCID_POSIX_MAP(root), /* root 0x00 */ - ILCID_POSIX_MAP(ru), /* ru Russian 0x19 */ - ILCID_POSIX_MAP(rw), /* rw Kinyarwanda 0x87 */ - ILCID_POSIX_MAP(sa), /* sa Sanskrit 0x4f */ - ILCID_POSIX_MAP(sah), /* sah Yakut 0x85 */ - ILCID_POSIX_MAP(sd), /* sd Sindhi 0x59 */ - ILCID_POSIX_MAP(se), /* se Sami 0x3b */ -/* ILCID_POSIX_MAP(sh), // sh Serbo-Croatian 0x1a */ - ILCID_POSIX_MAP(si), /* si Sinhalese 0x5b */ - ILCID_POSIX_MAP(sk), /* sk Slovak 0x1b */ - ILCID_POSIX_MAP(sl), /* sl Slovenian 0x24 */ - ILCID_POSIX_MAP(so), /* so Somali 0x77 */ - ILCID_POSIX_MAP(sq), /* sq Albanian 0x1c */ -/* ILCID_POSIX_MAP(sr), // sr Serbian 0x1a */ - ILCID_POSIX_MAP(st), /* st Sutu 0x30 */ - ILCID_POSIX_MAP(sv), /* sv Swedish 0x1d */ - ILCID_POSIX_MAP(sw), /* sw Swahili 0x41 */ - ILCID_POSIX_MAP(syr), /* syr Syriac 0x5A */ - ILCID_POSIX_MAP(ta), /* ta Tamil 0x49 */ - ILCID_POSIX_MAP(te), /* te Telugu 0x4a */ - ILCID_POSIX_MAP(tg), /* tg Tajik 0x28 */ - ILCID_POSIX_MAP(th), /* th Thai 0x1e */ - ILCID_POSIX_MAP(ti), /* ti Tigrigna 0x73 */ - ILCID_POSIX_MAP(tk), /* tk Turkmen 0x42 */ - ILCID_POSIX_MAP(tn), /* tn Tswana 0x32 */ - ILCID_POSIX_MAP(tr), /* tr Turkish 0x1f */ - ILCID_POSIX_MAP(ts), /* ts Tsonga 0x31 */ - ILCID_POSIX_MAP(tt), /* tt Tatar 0x44 */ - ILCID_POSIX_MAP(tzm), /* tzm Tamazight 0x5f */ - ILCID_POSIX_MAP(ug), /* ug Uighur 0x80 */ - ILCID_POSIX_MAP(uk), /* uk Ukrainian 0x22 */ - ILCID_POSIX_MAP(ur), /* ur Urdu 0x20 */ - ILCID_POSIX_MAP(uz), /* uz Uzbek 0x43 */ - ILCID_POSIX_MAP(ve), /* ve Venda 0x33 */ - ILCID_POSIX_MAP(vi), /* vi Vietnamese 0x2a */ - ILCID_POSIX_MAP(wo), /* wo Wolof 0x88 */ - ILCID_POSIX_MAP(xh), /* xh Xhosa 0x34 */ - ILCID_POSIX_MAP(yi), /* yi Yiddish 0x3d */ - ILCID_POSIX_MAP(yo), /* yo Yoruba 0x6a */ - ILCID_POSIX_MAP(zh), /* zh Chinese 0x04 */ - ILCID_POSIX_MAP(zu), /* zu Zulu 0x35 */ -}; - -static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap); - -/** - * Do not call this function. It is called by hostID. - * The function is not private because this struct must stay as a C struct, - * and this is an internal class. - */ -static int32_t -idCmp(const char* id1, const char* id2) -{ - int32_t diffIdx = 0; - while (*id1 == *id2 && *id1 != 0) { - diffIdx++; - id1++; - id2++; - } - return diffIdx; -} - -/** - * Searches for a Windows LCID - * - * @param posixid the Posix style locale id. - * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has - * no equivalent Windows LCID. - * @return the LCID - */ -static uint32_t -getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status) -{ - int32_t bestIdx = 0; - int32_t bestIdxDiff = 0; - int32_t posixIDlen = (int32_t)uprv_strlen(posixID); - uint32_t idx; - - for (idx = 0; idx < this_0->numRegions; idx++ ) { - int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID); - if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) { - if (posixIDlen == sameChars) { - /* Exact match */ - return this_0->regionMaps[idx].hostID; - } - bestIdxDiff = sameChars; - bestIdx = idx; - } - } - /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */ - /* We also have to make sure that sid and si and similar string subsets don't match. */ - if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@') - && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0) - { - *status = U_USING_FALLBACK_WARNING; - return this_0->regionMaps[bestIdx].hostID; - } - - /*no match found */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - return this_0->regionMaps->hostID; -} - -static const char* -getPosixID(const ILcidPosixMap *this_0, uint32_t hostID) -{ - uint32_t i; - for (i = 0; i <= this_0->numRegions; i++) - { - if (this_0->regionMaps[i].hostID == hostID) - { - return this_0->regionMaps[i].posixID; - } - } - - /* If you get here, then no matching region was found, - so return the language id with the wild card region. */ - return this_0->regionMaps[0].posixID; -} - -/* -////////////////////////////////////// -// -// LCID --> POSIX -// -///////////////////////////////////// -*/ -#ifdef USE_WINDOWS_LOCALE_API -/* - * Various language tags needs to be changed: - * quz -> qu - * prs -> fa - */ -#define FIX_LANGUAGE_ID_TAG(buffer, len) \ - if (len >= 3) { \ - if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\ - buffer[2] = 0; \ - uprv_strcat(buffer, buffer+3); \ - } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\ - buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \ - uprv_strcat(buffer, buffer+3); \ - } \ - } - -#endif -U_CAPI int32_t -uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status) -{ - uint16_t langID; - uint32_t localeIndex; - UBool bLookup = TRUE; - const char *pPosixID = NULL; - -#ifdef USE_WINDOWS_LOCALE_API - // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and - // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for - // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot - // use the Windows API to resolve locale ID for this specific case. - if ((hostid & 0x3FF) != 0x92) { - int32_t tmpLen = 0; - char locName[157]; /* ULOC_FULLNAME_CAPACITY */ - - tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName)); - if (tmpLen > 1) { - /* Windows locale name may contain sorting variant, such as "es-ES_tradnl". - In such case, we need special mapping data found in the hardcoded table - in this source file. */ - char *p = uprv_strchr(locName, '_'); - if (p) { - /* Keep the base locale, without variant */ - *p = 0; - tmpLen = uprv_strlen(locName); - } - else { - /* No hardcoded table lookup necessary */ - bLookup = FALSE; - } - /* Change the tag separator from '-' to '_' */ - p = locName; - while (*p) { - if (*p == '-') { - *p = '_'; - } - p++; - } - FIX_LANGUAGE_ID_TAG(locName, tmpLen); - pPosixID = locName; - } - } -#endif - if (bLookup) { - const char *pCandidate = NULL; - langID = LANGUAGE_LCID(hostid); - - for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) { - if (langID == gPosixIDmap[localeIndex].regionMaps->hostID) { - pCandidate = getPosixID(&gPosixIDmap[localeIndex], hostid); - break; - } - } - - /* On Windows, when locale name has a variant, we still look up the hardcoded table. - If a match in the hardcoded table is longer than the Windows locale name without - variant, we use the one as the result */ - if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) { - pPosixID = pCandidate; - } - } - - if (pPosixID) { - int32_t resLen = uprv_strlen(pPosixID); - int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity; - uprv_memcpy(posixID, pPosixID, copyLen); - if (resLen < posixIDCapacity) { - posixID[resLen] = 0; - if (*status == U_STRING_NOT_TERMINATED_WARNING) { - *status = U_ZERO_ERROR; - } - } else if (resLen == posixIDCapacity) { - *status = U_STRING_NOT_TERMINATED_WARNING; - } else { - *status = U_BUFFER_OVERFLOW_ERROR; - } - return resLen; - } - - /* no match found */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - return -1; -} - -/* -////////////////////////////////////// -// -// POSIX --> LCID -// This should only be called from uloc_getLCID. -// The locale ID must be in canonical form. -// langID is separate so that this file doesn't depend on the uloc_* API. -// -///////////////////////////////////// -*/ - -U_CAPI uint32_t -uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status) -{ - - uint32_t low = 0; - uint32_t high = gLocaleCount; - uint32_t mid; - uint32_t oldmid = 0; - int32_t compVal; - - uint32_t value = 0; - uint32_t fallbackValue = (uint32_t)-1; - UErrorCode myStatus; - uint32_t idx; - - /* Check for incomplete id. */ - if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) { - return 0; - } - - /*Binary search for the map entry for normal cases */ - - while (high > low) /*binary search*/{ - - mid = (high+low) >> 1; /*Finds median*/ - - if (mid == oldmid) - break; - - compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID); - if (compVal < 0){ - high = mid; - } - else if (compVal > 0){ - low = mid; - } - else /*we found it*/{ - return getHostID(&gPosixIDmap[mid], posixID, status); - } - oldmid = mid; - } - - /* - * Sometimes we can't do a binary search on posixID because some LCIDs - * go to different locales. We hit one of those special cases. - */ - for (idx = 0; idx < gLocaleCount; idx++ ) { - myStatus = U_ZERO_ERROR; - value = getHostID(&gPosixIDmap[idx], posixID, &myStatus); - if (myStatus == U_ZERO_ERROR) { - return value; - } - else if (myStatus == U_USING_FALLBACK_WARNING) { - fallbackValue = value; - } - } - - if (fallbackValue != (uint32_t)-1) { - *status = U_USING_FALLBACK_WARNING; - return fallbackValue; - } - - /* no match found */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; /* return international (root) */ -} - diff --git a/source/common/locmap.h b/source/common/locmap.h index 4e14fe5..bef6295 100644 --- a/source/common/locmap.h +++ b/source/common/locmap.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -32,7 +32,8 @@ U_CAPI int32_t uprv_convertToPosix(uint32_t hostid, char* posixID, int32_t posixIDCapacity, UErrorCode* status); -/* Don't call this function directly. Use uloc_getLCID instead. */ +/* Don't call these functions directly. Use uloc_getLCID instead. */ +U_CAPI uint32_t uprv_convertToLCIDPlatform(const char *localeID); // Leverage platform conversion if possible U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status); #endif /* LOCMAP_H */ diff --git a/source/common/locresdata.cpp b/source/common/locresdata.cpp index ee60639..258b707 100644 --- a/source/common/locresdata.cpp +++ b/source/common/locresdata.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: loclikely.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/locutil.cpp b/source/common/locutil.cpp index a27edf1..5f0bd52 100644 --- a/source/common/locutil.cpp +++ b/source/common/locutil.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/locutil.h b/source/common/locutil.h index 64f7dcc..31bfffd 100644 --- a/source/common/locutil.h +++ b/source/common/locutil.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/messageimpl.h b/source/common/messageimpl.h index 980f777..dc7a6ed 100644 --- a/source/common/messageimpl.h +++ b/source/common/messageimpl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: messageimpl.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/messagepattern.cpp b/source/common/messagepattern.cpp index 31d5bb7..f223d06 100644 --- a/source/common/messagepattern.cpp +++ b/source/common/messagepattern.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: messagepattern.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/msvcres.h b/source/common/msvcres.h index ac23b97..0cace85 100644 --- a/source/common/msvcres.h +++ b/source/common/msvcres.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html //{{NO_DEPENDENCIES}} // Copyright (c) 2003-2010 International Business Machines diff --git a/source/common/mutex.h b/source/common/mutex.h index 525628b..bb45e7d 100644 --- a/source/common/mutex.h +++ b/source/common/mutex.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/norm2_nfc_data.h b/source/common/norm2_nfc_data.h index 4ddba0f..9295404 100644 --- a/source/common/norm2_nfc_data.h +++ b/source/common/norm2_nfc_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1999-2016, International Business Machines diff --git a/source/common/norm2allmodes.h b/source/common/norm2allmodes.h index 943e83d..9516817 100644 --- a/source/common/norm2allmodes.h +++ b/source/common/norm2allmodes.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/normalizer2.cpp b/source/common/normalizer2.cpp index 33d9417..77f6e27 100644 --- a/source/common/normalizer2.cpp +++ b/source/common/normalizer2.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: normalizer2.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/normalizer2impl.cpp b/source/common/normalizer2impl.cpp index be0240e..67f4c1c 100644 --- a/source/common/normalizer2impl.cpp +++ b/source/common/normalizer2impl.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: normalizer2impl.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/normalizer2impl.h b/source/common/normalizer2impl.h index a6bf967..946abee 100644 --- a/source/common/normalizer2impl.h +++ b/source/common/normalizer2impl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: normalizer2impl.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -176,7 +176,7 @@ public: lastCC=0; } void copyReorderableSuffixTo(UnicodeString &s) const { - s.setTo(reorderStart, (int32_t)(limit-reorderStart)); + s.setTo(ConstChar16Ptr(reorderStart), (int32_t)(limit-reorderStart)); } private: /* diff --git a/source/common/normlzr.cpp b/source/common/normlzr.cpp index 19c09f0..607660c 100644 --- a/source/common/normlzr.cpp +++ b/source/common/normlzr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************* @@ -23,6 +23,12 @@ #include "normalizer2impl.h" #include "uprops.h" // for uniset_getUnicode32Instance() +#if defined(_ARM64_) && defined(move32) + // System can define move32 intrinsics, but the char iters define move32 method + // using same undef trick in headers, so undef here to re-enable the method. +#undef move32 +#endif + U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Normalizer) @@ -40,7 +46,7 @@ Normalizer::Normalizer(const UnicodeString& str, UNormalizationMode mode) : init(); } -Normalizer::Normalizer(const UChar *str, int32_t length, UNormalizationMode mode) : +Normalizer::Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode) : UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0), text(new UCharCharacterIterator(str, length)), currentIndex(0), nextIndex(0), @@ -435,7 +441,7 @@ Normalizer::setText(const CharacterIterator& newText, } void -Normalizer::setText(const UChar* newText, +Normalizer::setText(ConstChar16Ptr newText, int32_t length, UErrorCode &status) { diff --git a/source/common/parsepos.cpp b/source/common/parsepos.cpp index af6ac6c..56c6c78 100644 --- a/source/common/parsepos.cpp +++ b/source/common/parsepos.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/patternprops.cpp b/source/common/patternprops.cpp index 30c3f68..01e33ce 100644 --- a/source/common/patternprops.cpp +++ b/source/common/patternprops.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: patternprops.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/patternprops.h b/source/common/patternprops.h index f309c2d..a42eb3c 100644 --- a/source/common/patternprops.h +++ b/source/common/patternprops.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: patternprops.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/pluralmap.cpp b/source/common/pluralmap.cpp index fc5f8fc..ec87f01 100644 --- a/source/common/pluralmap.cpp +++ b/source/common/pluralmap.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines Corporation and diff --git a/source/common/pluralmap.h b/source/common/pluralmap.h index 76e95c5..db64409 100644 --- a/source/common/pluralmap.h +++ b/source/common/pluralmap.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/propname.cpp b/source/common/propname.cpp index 4107869..a12eb7d 100644 --- a/source/common/propname.cpp +++ b/source/common/propname.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/propname.h b/source/common/propname.h index c93d3d7..1a8ced5 100644 --- a/source/common/propname.h +++ b/source/common/propname.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/propname_data.h b/source/common/propname_data.h index 4863b26..c15b2a4 100644 --- a/source/common/propname_data.h +++ b/source/common/propname_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 1999-2016, International Business Machines diff --git a/source/common/propsvec.c b/source/common/propsvec.c deleted file mode 100644 index ed4d899..0000000 --- a/source/common/propsvec.c +++ /dev/null @@ -1,527 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2002-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: propsvec.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002feb22 -* created by: Markus W. Scherer -* -* Store bits (Unicode character properties) in bit set vectors. -*/ - -#include -#include "unicode/utypes.h" -#include "cmemory.h" -#include "utrie.h" -#include "utrie2.h" -#include "uarrsort.h" -#include "propsvec.h" -#include "uassert.h" - -struct UPropsVectors { - uint32_t *v; - int32_t columns; /* number of columns, plus two for start & limit values */ - int32_t maxRows; - int32_t rows; - int32_t prevRow; /* search optimization: remember last row seen */ - UBool isCompacted; -}; - -#define UPVEC_INITIAL_ROWS (1<<12) -#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16) -#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1) - -U_CAPI UPropsVectors * U_EXPORT2 -upvec_open(int32_t columns, UErrorCode *pErrorCode) { - UPropsVectors *pv; - uint32_t *v, *row; - uint32_t cp; - - if(U_FAILURE(*pErrorCode)) { - return NULL; - } - if(columns<1) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - columns+=2; /* count range start and limit columns */ - - pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors)); - v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4); - if(pv==NULL || v==NULL) { - uprv_free(pv); - uprv_free(v); - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uprv_memset(pv, 0, sizeof(UPropsVectors)); - pv->v=v; - pv->columns=columns; - pv->maxRows=UPVEC_INITIAL_ROWS; - pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP); - - /* set the all-Unicode row and the special-value rows */ - row=pv->v; - uprv_memset(row, 0, pv->rows*columns*4); - row[0]=0; - row[1]=0x110000; - row+=columns; - for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) { - row[0]=cp; - row[1]=cp+1; - row+=columns; - } - return pv; -} - -U_CAPI void U_EXPORT2 -upvec_close(UPropsVectors *pv) { - if(pv!=NULL) { - uprv_free(pv->v); - uprv_free(pv); - } -} - -static uint32_t * -_findRow(UPropsVectors *pv, UChar32 rangeStart) { - uint32_t *row; - int32_t columns, i, start, limit, prevRow; - - columns=pv->columns; - limit=pv->rows; - prevRow=pv->prevRow; - - /* check the vicinity of the last-seen row (start searching with an unrolled loop) */ - row=pv->v+prevRow*columns; - if(rangeStart>=(UChar32)row[0]) { - if(rangeStart<(UChar32)row[1]) { - /* same row as last seen */ - return row; - } else if(rangeStart<(UChar32)(row+=columns)[1]) { - /* next row after the last one */ - pv->prevRow=prevRow+1; - return row; - } else if(rangeStart<(UChar32)(row+=columns)[1]) { - /* second row after the last one */ - pv->prevRow=prevRow+2; - return row; - } else if((rangeStart-(UChar32)row[1])<10) { - /* we are close, continue looping */ - prevRow+=2; - do { - ++prevRow; - row+=columns; - } while(rangeStart>=(UChar32)row[1]); - pv->prevRow=prevRow; - return row; - } - } else if(rangeStart<(UChar32)pv->v[1]) { - /* the very first row */ - pv->prevRow=0; - return pv->v; - } - - /* do a binary search for the start of the range */ - start=0; - while(startv+i*columns; - if(rangeStart<(UChar32)row[0]) { - limit=i; - } else if(rangeStart<(UChar32)row[1]) { - pv->prevRow=i; - return row; - } else { - start=i; - } - } - - /* must be found because all ranges together always cover all of Unicode */ - pv->prevRow=start; - return pv->v+start*columns; -} - -U_CAPI void U_EXPORT2 -upvec_setValue(UPropsVectors *pv, - UChar32 start, UChar32 end, - int32_t column, - uint32_t value, uint32_t mask, - UErrorCode *pErrorCode) { - uint32_t *firstRow, *lastRow; - int32_t columns; - UChar32 limit; - UBool splitFirstRow, splitLastRow; - - /* argument checking */ - if(U_FAILURE(*pErrorCode)) { - return; - } - if( pv==NULL || - start<0 || start>end || end>UPVEC_MAX_CP || - column<0 || column>=(pv->columns-2) - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if(pv->isCompacted) { - *pErrorCode=U_NO_WRITE_PERMISSION; - return; - } - limit=end+1; - - /* initialize */ - columns=pv->columns; - column+=2; /* skip range start and limit columns */ - value&=mask; - - /* find the rows whose ranges overlap with the input range */ - - /* find the first and last rows, always successful */ - firstRow=_findRow(pv, start); - lastRow=_findRow(pv, end); - - /* - * Rows need to be split if they partially overlap with the - * input range (only possible for the first and last rows) - * and if their value differs from the input value. - */ - splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask)); - splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask)); - - /* split first/last rows if necessary */ - if(splitFirstRow || splitLastRow) { - int32_t count, rows; - - rows=pv->rows; - if((rows+splitFirstRow+splitLastRow)>pv->maxRows) { - uint32_t *newVectors; - int32_t newMaxRows; - - if(pv->maxRowsmaxRowsv, (size_t)rows*columns*4); - firstRow=newVectors+(firstRow-pv->v); - lastRow=newVectors+(lastRow-pv->v); - uprv_free(pv->v); - pv->v=newVectors; - pv->maxRows=newMaxRows; - } - - /* count the number of row cells to move after the last row, and move them */ - count = (int32_t)((pv->v+rows*columns)-(lastRow+columns)); - if(count>0) { - uprv_memmove( - lastRow+(1+splitFirstRow+splitLastRow)*columns, - lastRow+columns, - count*4); - } - pv->rows=rows+splitFirstRow+splitLastRow; - - /* split the first row, and move the firstRow pointer to the second part */ - if(splitFirstRow) { - /* copy all affected rows up one and move the lastRow pointer */ - count = (int32_t)((lastRow-firstRow)+columns); - uprv_memmove(firstRow+columns, firstRow, (size_t)count*4); - lastRow+=columns; - - /* split the range and move the firstRow pointer */ - firstRow[1]=firstRow[columns]=(uint32_t)start; - firstRow+=columns; - } - - /* split the last row */ - if(splitLastRow) { - /* copy the last row data */ - uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4); - - /* split the range and move the firstRow pointer */ - lastRow[1]=lastRow[columns]=(uint32_t)limit; - } - } - - /* set the "row last seen" to the last row for the range */ - pv->prevRow=(int32_t)((lastRow-(pv->v))/columns); - - /* set the input value in all remaining rows */ - firstRow+=column; - lastRow+=column; - mask=~mask; - for(;;) { - *firstRow=(*firstRow&mask)|value; - if(firstRow==lastRow) { - break; - } - firstRow+=columns; - } -} - -U_CAPI uint32_t U_EXPORT2 -upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) { - uint32_t *row; - UPropsVectors *ncpv; - - if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) { - return 0; - } - ncpv=(UPropsVectors *)pv; - row=_findRow(ncpv, c); - return row[2+column]; -} - -U_CAPI uint32_t * U_EXPORT2 -upvec_getRow(const UPropsVectors *pv, int32_t rowIndex, - UChar32 *pRangeStart, UChar32 *pRangeEnd) { - uint32_t *row; - int32_t columns; - - if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) { - return NULL; - } - - columns=pv->columns; - row=pv->v+rowIndex*columns; - if(pRangeStart!=NULL) { - *pRangeStart=(UChar32)row[0]; - } - if(pRangeEnd!=NULL) { - *pRangeEnd=(UChar32)row[1]-1; - } - return row+2; -} - -static int32_t U_CALLCONV -upvec_compareRows(const void *context, const void *l, const void *r) { - const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r; - const UPropsVectors *pv=(const UPropsVectors *)context; - int32_t i, count, columns; - - count=columns=pv->columns; /* includes start/limit columns */ - - /* start comparing after start/limit but wrap around to them */ - i=2; - do { - if(left[i]!=right[i]) { - return left[i]0); - - return 0; -} - -U_CAPI void U_EXPORT2 -upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) { - uint32_t *row; - int32_t i, columns, valueColumns, rows, count; - UChar32 start, limit; - - /* argument checking */ - if(U_FAILURE(*pErrorCode)) { - return; - } - if(handler==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if(pv->isCompacted) { - return; - } - - /* Set the flag now: Sorting and compacting destroys the builder data structure. */ - pv->isCompacted=TRUE; - - rows=pv->rows; - columns=pv->columns; - U_ASSERT(columns>=3); /* upvec_open asserts this */ - valueColumns=columns-2; /* not counting start & limit */ - - /* sort the properties vectors to find unique vector values */ - uprv_sortArray(pv->v, rows, columns*4, - upvec_compareRows, pv, FALSE, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - - /* - * Find and set the special values. - * This has to do almost the same work as the compaction below, - * to find the indexes where the special-value rows will move. - */ - row=pv->v; - count=-valueColumns; - for(i=0; i=UPVEC_FIRST_SPECIAL_CP) { - handler(context, start, start, count, row+2, valueColumns, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - } - - row+=columns; - } - - /* count is at the beginning of the last vector, add valueColumns to include that last vector */ - count+=valueColumns; - - /* Call the handler once more to signal the start of delivering real values. */ - handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP, - count, row-valueColumns, valueColumns, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - - /* - * Move vector contents up to a contiguous array with only unique - * vector values, and call the handler function for each vector. - * - * This destroys the Properties Vector structure and replaces it - * with an array of just vector values. - */ - row=pv->v; - count=-valueColumns; - for(i=0; iv+count, valueColumns*4)) { - count+=valueColumns; - uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4); - } - - if(startv+count, valueColumns, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - } - - row+=columns; - } - - /* count is at the beginning of the last vector, add one to include that last vector */ - pv->rows=count/valueColumns+1; -} - -U_CAPI const uint32_t * U_EXPORT2 -upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) { - if(!pv->isCompacted) { - return NULL; - } - if(pRows!=NULL) { - *pRows=pv->rows; - } - if(pColumns!=NULL) { - *pColumns=pv->columns-2; - } - return pv->v; -} - -U_CAPI uint32_t * U_EXPORT2 -upvec_cloneArray(const UPropsVectors *pv, - int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) { - uint32_t *clonedArray; - int32_t byteLength; - - if(U_FAILURE(*pErrorCode)) { - return NULL; - } - if(!pv->isCompacted) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - byteLength=pv->rows*(pv->columns-2)*4; - clonedArray=(uint32_t *)uprv_malloc(byteLength); - if(clonedArray==NULL) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uprv_memcpy(clonedArray, pv->v, byteLength); - if(pRows!=NULL) { - *pRows=pv->rows; - } - if(pColumns!=NULL) { - *pColumns=pv->columns-2; - } - return clonedArray; -} - -U_CAPI UTrie2 * U_EXPORT2 -upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) { - UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 }; - upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode); - utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - utrie2_close(toUTrie2.trie); - toUTrie2.trie=NULL; - } - return toUTrie2.trie; -} - -/* - * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts - * some 16-bit field and builds and returns a UTrie2. - */ - -U_CAPI void U_CALLCONV -upvec_compactToUTrie2Handler(void *context, - UChar32 start, UChar32 end, - int32_t rowIndex, uint32_t *row, int32_t columns, - UErrorCode *pErrorCode) { - UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context; - if(starttrie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode); - } else { - switch(start) { - case UPVEC_INITIAL_VALUE_CP: - toUTrie2->initialValue=rowIndex; - break; - case UPVEC_ERROR_VALUE_CP: - toUTrie2->errorValue=rowIndex; - break; - case UPVEC_START_REAL_VALUES_CP: - toUTrie2->maxValue=rowIndex; - if(rowIndex>0xffff) { - /* too many rows for a 16-bit trie */ - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - } else { - toUTrie2->trie=utrie2_open(toUTrie2->initialValue, - toUTrie2->errorValue, pErrorCode); - } - break; - default: - break; - } - } -} diff --git a/source/common/propsvec.h b/source/common/propsvec.h index b34e4ee..3908061 100644 --- a/source/common/propsvec.h +++ b/source/common/propsvec.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: propsvec.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/punycode.cpp b/source/common/punycode.cpp index 1d2ccb3..90fe1ec 100644 --- a/source/common/punycode.cpp +++ b/source/common/punycode.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: punycode.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/punycode.h b/source/common/punycode.h index ff23eb0..5d8a243 100644 --- a/source/common/punycode.h +++ b/source/common/punycode.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: punycode.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/putil.cpp b/source/common/putil.cpp index 03f6548..023186c 100644 --- a/source/common/putil.cpp +++ b/source/common/putil.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -43,8 +43,24 @@ // Must be before any other #includes. #include "uposixdefs.h" -/* include ICU headers */ -#include "unicode/utypes.h" +// First, the platform type. Need this for U_PLATFORM. +#include "unicode/platform.h" + +#if U_PLATFORM == U_PF_MINGW && defined __STRICT_ANSI__ +/* tzset isn't defined in strict ANSI on MinGW. */ +#undef __STRICT_ANSI__ +#endif + +/* + * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement. + */ +#include + +#if !U_PLATFORM_USES_ONLY_WIN32_API +#include +#endif + +/* include the rest of the ICU headers */ #include "unicode/putil.h" #include "unicode/ustring.h" #include "putilimp.h" @@ -76,14 +92,29 @@ * Should Cygwin be included as well (U_PLATFORM_HAS_WIN32_API) * to use native APIs as much as possible? */ +#ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN +#endif # define VC_EXTRALEAN # define NOUSER # define NOSERVICE # define NOIME # define NOMCX # include +# include "unicode\uloc.h" +#if U_PLATFORM_HAS_WINUWP_API == 0 # include "wintz.h" +#else // U_PLATFORM_HAS_WINUWP_API +typedef PVOID LPMSG; // TODO: figure out how to get rid of this typedef +#include +#include +#include +#include + +using namespace ABI::Windows::Foundation; +using namespace Microsoft::WRL; +using namespace Microsoft::WRL::Wrappers; +#endif #elif U_PLATFORM == U_PF_OS400 # include # include /* error code structure */ @@ -104,20 +135,6 @@ # include #endif -#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__) -/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */ -#undef __STRICT_ANSI__ -#endif - -/* - * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement. - */ -#include - -#if !U_PLATFORM_USES_ONLY_WIN32_API -#include -#endif - /* * Only include langinfo.h if we have a way to get the codeset. If we later * depend on more feature, we can test on U_HAVE_NL_LANGINFO. @@ -651,7 +668,7 @@ uprv_timezone() /* Note that U_TZNAME does *not* have to be tzname, but if it is, some platforms need to have it declared here. */ -#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED || (U_PLATFORM == U_PF_CYGWIN && !U_PLATFORM_USES_ONLY_WIN32_API)) +#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED) /* RS6000 and others reject char **tzname. */ extern U_IMPORT char *U_TZNAME[]; #endif @@ -1008,16 +1025,65 @@ uprv_tzname_clear_cache() #endif } +// With the Universal Windows Platform we can just ask Windows for the name +#if U_PLATFORM_HAS_WINUWP_API +U_CAPI const char* U_EXPORT2 +uprv_getWindowsTimeZone() +{ + // Get default Windows timezone. + ComPtr calendar; + HRESULT hr = RoActivateInstance( + HStringReference(RuntimeClass_Windows_Globalization_Calendar).Get(), + &calendar); + if (SUCCEEDED(hr)) + { + ComPtr timezone; + hr = calendar.As(&timezone); + if (SUCCEEDED(hr)) + { + HString timezoneString; + hr = timezone->GetTimeZone(timezoneString.GetAddressOf()); + if (SUCCEEDED(hr)) + { + int32_t length = wcslen(timezoneString.GetRawBuffer(NULL)); + char* asciiId = (char*)uprv_calloc(length + 1, sizeof(char)); + if (asciiId != nullptr) + { + u_UCharsToChars((UChar*)timezoneString.GetRawBuffer(NULL), asciiId, length); + return asciiId; + } + } + } + } + + // Failed + return nullptr; +} +#endif + U_CAPI const char* U_EXPORT2 uprv_tzname(int n) { const char *tzid = NULL; #if U_PLATFORM_USES_ONLY_WIN32_API +#if U_PLATFORM_HAS_WINUWP_API > 0 + tzid = uprv_getWindowsTimeZone(); +#else tzid = uprv_detectWindowsTimeZone(); +#endif if (tzid != NULL) { return tzid; } + +#ifndef U_TZNAME + // The return value is free'd in timezone.cpp on Windows because + // the other code path returns a pointer to a heap location. + // If we don't have a name already, then tzname wouldn't be any + // better, so just fall back. + return uprv_strdup("Etc/UTC"); +#endif // !U_TZNAME + #else /*#if U_PLATFORM_IS_DARWIN_BASED @@ -1162,7 +1228,8 @@ UInitOnce gTimeZoneFilesInitOnce = U_INITONCE_INITIALIZER; static CharString *gTimeZoneFilesDirectory = NULL; #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API - static char *gCorrectedPOSIXLocale = NULL; /* Heap allocated */ + static char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */ + static bool gCorrectedPOSIXLocaleHeapAllocated = false; #endif static UBool U_CALLCONV putil_cleanup(void) @@ -1183,9 +1250,10 @@ static UBool U_CALLCONV putil_cleanup(void) #endif #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API - if (gCorrectedPOSIXLocale) { + if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) { uprv_free(gCorrectedPOSIXLocale); gCorrectedPOSIXLocale = NULL; + gCorrectedPOSIXLocaleHeapAllocated = false; } #endif return TRUE; @@ -1297,7 +1365,9 @@ static void U_CALLCONV dataDirectoryInitFn() { */ # if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO /* First try to get the environment variable */ - path=getenv("ICU_DATA"); +# if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP does not support getenv + path=getenv("ICU_DATA"); +# endif # endif /* ICU_DATA_DIR may be set as a compile option. @@ -1326,9 +1396,35 @@ static void U_CALLCONV dataDirectoryInitFn() { } #endif +#if defined(ICU_DATA_DIR_WINDOWS) && U_PLATFORM_HAS_WINUWP_API != 0 + // Use data from the %windir%\globalization\icu directory + // This is only available if ICU is built as a system component + char datadir_path_buffer[MAX_PATH]; + UINT length = GetWindowsDirectoryA(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer)); + if (length > 0 && length < (UPRV_LENGTHOF(datadir_path_buffer) - sizeof(ICU_DATA_DIR_WINDOWS) - 1)) + { + if (datadir_path_buffer[length - 1] != '\\') + { + datadir_path_buffer[length++] = '\\'; + datadir_path_buffer[length] = '\0'; + } + + if ((length + 1 + sizeof(ICU_DATA_DIR_WINDOWS)) < UPRV_LENGTHOF(datadir_path_buffer)) + { + uprv_strcat(datadir_path_buffer, ICU_DATA_DIR_WINDOWS); + path = datadir_path_buffer; + } + } +#endif + if(path==NULL) { /* It looks really bad, set it to something. */ +#if U_PLATFORM_HAS_WIN32_API + // Windows UWP will require icudtl.dat file in same directory as icuuc.dll + path = ".\\"; +#else path = ""; +#endif } u_setDataDirectory(path); @@ -1366,7 +1462,12 @@ static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) { status = U_MEMORY_ALLOCATION_ERROR; return; } +#if U_PLATFORM_HAS_WINUWP_API == 0 const char *dir = getenv("ICU_TIMEZONE_FILES_DIR"); +#else + // TODO: UWP does not support alternate timezone data directories at this time + const char *dir = ""; +#endif // U_PLATFORM_HAS_WINUWP_API #if defined(U_TIMEZONE_FILES_DIR) if (dir == NULL) { dir = TO_STRING(U_TIMEZONE_FILES_DIR); @@ -1603,6 +1704,7 @@ The leftmost codepage (.xxx) wins. if (gCorrectedPOSIXLocale == NULL) { gCorrectedPOSIXLocale = correctedPOSIXLocale; + gCorrectedPOSIXLocaleHeapAllocated = true; ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup); correctedPOSIXLocale = NULL; } @@ -1618,25 +1720,115 @@ The leftmost codepage (.xxx) wins. UErrorCode status = U_ZERO_ERROR; char *correctedPOSIXLocale = 0; + // If we have already figured this out just use the cached value if (gCorrectedPOSIXLocale != NULL) { return gCorrectedPOSIXLocale; } - LCID id = GetThreadLocale(); - correctedPOSIXLocale = static_cast(uprv_malloc(POSIX_LOCALE_CAPACITY + 1)); - if (correctedPOSIXLocale) { - int32_t posixLen = uprv_convertToPosix(id, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status); - if (U_SUCCESS(status)) { - *(correctedPOSIXLocale + posixLen) = 0; - gCorrectedPOSIXLocale = correctedPOSIXLocale; - ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup); - } else { - uprv_free(correctedPOSIXLocale); + // No cached value, need to determine the current value + static WCHAR windowsLocale[LOCALE_NAME_MAX_LENGTH]; +#if U_PLATFORM_HAS_WINUWP_API == 0 + // If not a Universal Windows App, we'll need user default language. + // Vista and above should use Locale Names instead of LCIDs + int length = GetUserDefaultLocaleName(windowsLocale, UPRV_LENGTHOF(windowsLocale)); +#else + // In a UWP app, we want the top language that the application and user agreed upon + ComPtr> languageList; + + ComPtr applicationLanguagesStatics; + HRESULT hr = GetActivationFactory( + HStringReference(RuntimeClass_Windows_Globalization_ApplicationLanguages).Get(), + &applicationLanguagesStatics); + if (SUCCEEDED(hr)) + { + hr = applicationLanguagesStatics->get_Languages(&languageList); + } + + if (FAILED(hr)) + { + // If there is no application context, then use the top language from the user language profile + ComPtr globalizationPreferencesStatics; + hr = GetActivationFactory( + HStringReference(RuntimeClass_Windows_System_UserProfile_GlobalizationPreferences).Get(), + &globalizationPreferencesStatics); + if (SUCCEEDED(hr)) + { + hr = globalizationPreferencesStatics->get_Languages(&languageList); } } + // We have a list of languages, ICU knows one, so use the top one for our locale + HString topLanguage; + if (SUCCEEDED(hr)) + { + hr = languageList->GetAt(0, topLanguage.GetAddressOf()); + } + + if (FAILED(hr)) + { + // Unexpected, use en-US by default + if (gCorrectedPOSIXLocale == NULL) { + gCorrectedPOSIXLocale = "en_US"; + } + + return gCorrectedPOSIXLocale; + } + + // ResolveLocaleName will get a likely subtags form consistent with Windows behavior. + int length = ResolveLocaleName(topLanguage.GetRawBuffer(NULL), windowsLocale, UPRV_LENGTHOF(windowsLocale)); +#endif + // Now we should have a Windows locale name that needs converted to the POSIX style, + if (length > 0) + { + // First we need to go from UTF-16 to char (and also convert from _ to - while we're at it.) + char modifiedWindowsLocale[LOCALE_NAME_MAX_LENGTH]; + + int32_t i; + for (i = 0; i < UPRV_LENGTHOF(modifiedWindowsLocale); i++) + { + if (windowsLocale[i] == '_') + { + modifiedWindowsLocale[i] = '-'; + } + else + { + modifiedWindowsLocale[i] = static_cast(windowsLocale[i]); + } + + if (modifiedWindowsLocale[i] == '\0') + { + break; + } + } + + if (i >= UPRV_LENGTHOF(modifiedWindowsLocale)) + { + // Ran out of room, can't really happen, maybe we'll be lucky about a matching + // locale when tags are dropped + modifiedWindowsLocale[UPRV_LENGTHOF(modifiedWindowsLocale) - 1] = '\0'; + } + + // Now normalize the resulting name + if (correctedPOSIXLocale) + { + int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status); + if (U_SUCCESS(status)) + { + *(correctedPOSIXLocale + posixLen) = 0; + gCorrectedPOSIXLocale = correctedPOSIXLocale; + gCorrectedPOSIXLocaleHeapAllocated = true; + ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup); + } + else + { + uprv_free(correctedPOSIXLocale); + } + } + } + + // If unable to find a locale we can agree upon, use en-US by default if (gCorrectedPOSIXLocale == NULL) { - return "en_US"; + gCorrectedPOSIXLocale = "en_US"; } return gCorrectedPOSIXLocale; @@ -1923,8 +2115,34 @@ int_getDefaultCodepage() #elif U_PLATFORM_USES_ONLY_WIN32_API static char codepage[64]; - sprintf(codepage, "windows-%d", GetACP()); - return codepage; + DWORD codepageNumber = 0; + +#if U_PLATFORM_HAS_WINUWP_API > 0 + // UWP doesn't have a direct API to get the default ACP as Microsoft would rather + // have folks use Unicode than a "system" code page, however this is the same + // codepage as the system default locale codepage. (FWIW, the system locale is + // ONLY used for codepage, it should never be used for anything else) + GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, + (LPWSTR)&codepageNumber, sizeof(codepageNumber) / sizeof(WCHAR)); +#else + // Win32 apps can call GetACP + codepageNumber = GetACP(); +#endif + // Special case for UTF-8 + if (codepageNumber == 65001) + { + return "UTF-8"; + } + // Windows codepages can look like windows-1252, so format the found number + // the numbers are eclectic, however all valid system code pages, besides UTF-8 + // are between 3 and 19999 + if (codepageNumber > 0 && codepageNumber < 20000) + { + sprintf(codepage, "windows-%ld", codepageNumber); + return codepage; + } + // If the codepage number call failed then return UTF-8 + return "UTF-8"; #elif U_POSIX_LOCALE static char codesetName[100]; diff --git a/source/common/putilimp.h b/source/common/putilimp.h index 05f7391..e547322 100644 --- a/source/common/putilimp.h +++ b/source/common/putilimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -87,7 +87,7 @@ typedef size_t uintptr_t; #ifdef U_HAVE_NL_LANGINFO_CODESET /* Use the predefined value. */ -#elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX +#elif U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX # define U_HAVE_NL_LANGINFO_CODESET 0 #else # define U_HAVE_NL_LANGINFO_CODESET 1 @@ -106,7 +106,10 @@ typedef size_t uintptr_t; #ifdef U_TZSET /* Use the predefined value. */ #elif U_PLATFORM_USES_ONLY_WIN32_API + // UWP doesn't support tzset or environment variables for tz +#if U_PLATFORM_HAS_WINUWP_API == 0 # define U_TZSET _tzset +#endif #elif U_PLATFORM == U_PF_OS400 /* not defined */ #else @@ -141,7 +144,10 @@ typedef size_t uintptr_t; #ifdef U_TZNAME /* Use the predefined value. */ #elif U_PLATFORM_USES_ONLY_WIN32_API + /* not usable on all windows platforms */ +#if U_PLATFORM_HAS_WINUWP_API == 0 # define U_TZNAME _tzname +#endif #elif U_PLATFORM == U_PF_OS400 /* not defined */ #else diff --git a/source/common/rbbi.cpp b/source/common/rbbi.cpp index 2680bf2..e4c91ba 100644 --- a/source/common/rbbi.cpp +++ b/source/common/rbbi.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** diff --git a/source/common/rbbidata.cpp b/source/common/rbbidata.cpp index 26e11ac..63ed15f 100644 --- a/source/common/rbbidata.cpp +++ b/source/common/rbbidata.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** diff --git a/source/common/rbbidata.h b/source/common/rbbidata.h index 1d6f37d..8011baf 100644 --- a/source/common/rbbidata.h +++ b/source/common/rbbidata.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: rbbidata.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/rbbinode.cpp b/source/common/rbbinode.cpp index 123c21e..69d8415 100644 --- a/source/common/rbbinode.cpp +++ b/source/common/rbbinode.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** diff --git a/source/common/rbbinode.h b/source/common/rbbinode.h index 74096cc..f352596 100644 --- a/source/common/rbbinode.h +++ b/source/common/rbbinode.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: diff --git a/source/common/rbbirb.cpp b/source/common/rbbirb.cpp index 3d9fe6f..f4fa13c 100644 --- a/source/common/rbbirb.cpp +++ b/source/common/rbbirb.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // file: rbbirb.cpp diff --git a/source/common/rbbirb.h b/source/common/rbbirb.h index e4f736c..d58a136 100644 --- a/source/common/rbbirb.h +++ b/source/common/rbbirb.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // rbbirb.h diff --git a/source/common/rbbirpt.h b/source/common/rbbirpt.h index b5bc8f7..586953c 100644 --- a/source/common/rbbirpt.h +++ b/source/common/rbbirpt.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------------------------------- // diff --git a/source/common/rbbiscan.cpp b/source/common/rbbiscan.cpp index df30f2c..e68e052 100644 --- a/source/common/rbbiscan.cpp +++ b/source/common/rbbiscan.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // file: rbbiscan.cpp @@ -1179,13 +1179,12 @@ RBBINode *RBBIRuleScanner::pushNewNode(RBBINode::NodeType t) { if (U_FAILURE(*fRB->fStatus)) { return NULL; } - fNodeStackPtr++; - if (fNodeStackPtr >= kStackSize) { - error(U_BRK_INTERNAL_ERROR); + if (fNodeStackPtr >= kStackSize - 1) { + error(U_BRK_RULE_SYNTAX); RBBIDebugPuts("RBBIRuleScanner::pushNewNode - stack overflow."); - *fRB->fStatus = U_BRK_INTERNAL_ERROR; return NULL; } + fNodeStackPtr++; fNodeStack[fNodeStackPtr] = new RBBINode(t); if (fNodeStack[fNodeStackPtr] == NULL) { *fRB->fStatus = U_MEMORY_ALLOCATION_ERROR; diff --git a/source/common/rbbiscan.h b/source/common/rbbiscan.h index 6f3267e..8bec823 100644 --- a/source/common/rbbiscan.h +++ b/source/common/rbbiscan.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // rbbiscan.h diff --git a/source/common/rbbisetb.cpp b/source/common/rbbisetb.cpp index ebdf8b7..f55388a 100644 --- a/source/common/rbbisetb.cpp +++ b/source/common/rbbisetb.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.cpp diff --git a/source/common/rbbisetb.h b/source/common/rbbisetb.h index 89bfb98..a7d1e7a 100644 --- a/source/common/rbbisetb.h +++ b/source/common/rbbisetb.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.h diff --git a/source/common/rbbistbl.cpp b/source/common/rbbistbl.cpp index d937edb..5303f76 100644 --- a/source/common/rbbistbl.cpp +++ b/source/common/rbbistbl.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // file: rbbistbl.cpp Implementation of the ICU RBBISymbolTable class diff --git a/source/common/rbbitblb.cpp b/source/common/rbbitblb.cpp index 2738c75..0f1a901 100644 --- a/source/common/rbbitblb.cpp +++ b/source/common/rbbitblb.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/rbbitblb.h b/source/common/rbbitblb.h index d71a024..1041501 100644 --- a/source/common/rbbitblb.h +++ b/source/common/rbbitblb.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // rbbitblb.h diff --git a/source/common/resbund.cpp b/source/common/resbund.cpp index 7bd6b32..512bd53 100644 --- a/source/common/resbund.cpp +++ b/source/common/resbund.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/resbund_cnv.cpp b/source/common/resbund_cnv.cpp index 65c32b5..45c0b39 100644 --- a/source/common/resbund_cnv.cpp +++ b/source/common/resbund_cnv.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: resbund_cnv.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/resource.cpp b/source/common/resource.cpp index 62b3aa4..3d41a16 100644 --- a/source/common/resource.cpp +++ b/source/common/resource.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/resource.h b/source/common/resource.h index 43c3309..3dbff78 100644 --- a/source/common/resource.h +++ b/source/common/resource.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/ruleiter.cpp b/source/common/ruleiter.cpp index 6e27b4d..41eea23 100644 --- a/source/common/ruleiter.cpp +++ b/source/common/ruleiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ruleiter.h b/source/common/ruleiter.h index 1221396..4e1be53 100644 --- a/source/common/ruleiter.h +++ b/source/common/ruleiter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/schriter.cpp b/source/common/schriter.cpp index cc41366..f852800 100644 --- a/source/common/schriter.cpp +++ b/source/common/schriter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/serv.cpp b/source/common/serv.cpp index c650ef3..de29c64 100644 --- a/source/common/serv.cpp +++ b/source/common/serv.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/serv.h b/source/common/serv.h index 679c443..e1f69cd 100644 --- a/source/common/serv.h +++ b/source/common/serv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servlk.cpp b/source/common/servlk.cpp index 319d7b8..538982c 100644 --- a/source/common/servlk.cpp +++ b/source/common/servlk.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servlkf.cpp b/source/common/servlkf.cpp index 114d643..84f2347 100644 --- a/source/common/servlkf.cpp +++ b/source/common/servlkf.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servloc.h b/source/common/servloc.h index 7faec51..ccf6433 100644 --- a/source/common/servloc.h +++ b/source/common/servloc.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servls.cpp b/source/common/servls.cpp index 71c6c44..f4579d0 100644 --- a/source/common/servls.cpp +++ b/source/common/servls.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servnotf.cpp b/source/common/servnotf.cpp index 69a81da..dc77c7b 100644 --- a/source/common/servnotf.cpp +++ b/source/common/servnotf.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servnotf.h b/source/common/servnotf.h index 05606ff..dba7a0f 100644 --- a/source/common/servnotf.h +++ b/source/common/servnotf.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servrbf.cpp b/source/common/servrbf.cpp index 299695e..94279ab 100644 --- a/source/common/servrbf.cpp +++ b/source/common/servrbf.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/servslkf.cpp b/source/common/servslkf.cpp index 4cf66b9..09154d1 100644 --- a/source/common/servslkf.cpp +++ b/source/common/servslkf.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* diff --git a/source/common/sharedobject.cpp b/source/common/sharedobject.cpp index 8e5095e..37aa458 100644 --- a/source/common/sharedobject.cpp +++ b/source/common/sharedobject.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/sharedobject.h b/source/common/sharedobject.h index 0e53cfb..d132651 100644 --- a/source/common/sharedobject.h +++ b/source/common/sharedobject.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/simpleformatter.cpp b/source/common/simpleformatter.cpp index eaeb60d..f866e0a 100644 --- a/source/common/simpleformatter.cpp +++ b/source/common/simpleformatter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/sprpimpl.h b/source/common/sprpimpl.h index 6e0bad0..12f18a5 100644 --- a/source/common/sprpimpl.h +++ b/source/common/sprpimpl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: sprpimpl.h - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/stringpiece.cpp b/source/common/stringpiece.cpp index b032b47..d4f7f31 100644 --- a/source/common/stringpiece.cpp +++ b/source/common/stringpiece.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. diff --git a/source/common/stringtriebuilder.cpp b/source/common/stringtriebuilder.cpp index 075d7c4..cf5b7b7 100644 --- a/source/common/stringtriebuilder.cpp +++ b/source/common/stringtriebuilder.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: stringtriebuilder.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uarrsort.c b/source/common/uarrsort.c deleted file mode 100644 index bb1b5bd..0000000 --- a/source/common/uarrsort.c +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2003-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: uarrsort.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2003aug04 -* created by: Markus W. Scherer -* -* Internal function for sorting arrays. -*/ - -#include "unicode/utypes.h" -#include "cmemory.h" -#include "uarrsort.h" - -enum { - /** - * "from Knuth" - * - * A binary search over 8 items performs 4 comparisons: - * log2(8)=3 to subdivide, +1 to check for equality. - * A linear search over 8 items on average also performs 4 comparisons. - */ - MIN_QSORT=9, - STACK_ITEM_SIZE=200 -}; - -/* UComparator convenience implementations ---------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -uprv_uint16Comparator(const void *context, const void *left, const void *right) { - return (int32_t)*(const uint16_t *)left - (int32_t)*(const uint16_t *)right; -} - -U_CAPI int32_t U_EXPORT2 -uprv_int32Comparator(const void *context, const void *left, const void *right) { - return *(const int32_t *)left - *(const int32_t *)right; -} - -U_CAPI int32_t U_EXPORT2 -uprv_uint32Comparator(const void *context, const void *left, const void *right) { - uint32_t l=*(const uint32_t *)left, r=*(const uint32_t *)right; - - /* compare directly because (l-r) would overflow the int32_t result */ - if(lr */ { - return 1; - } -} - -/* Insertion sort using binary search --------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -uprv_stableBinarySearch(char *array, int32_t limit, void *item, int32_t itemSize, - UComparator *cmp, const void *context) { - int32_t start=0; - UBool found=FALSE; - - /* Binary search until we get down to a tiny sub-array. */ - while((limit-start)>=MIN_QSORT) { - int32_t i=(start+limit)/2; - int32_t diff=cmp(context, item, array+i*itemSize); - if(diff==0) { - /* - * Found the item. We look for the *last* occurrence of such - * an item, for stable sorting. - * If we knew that there will be only few equal items, - * we could break now and enter the linear search. - * However, if there are many equal items, then it should be - * faster to continue with the binary search. - * It seems likely that we either have all unique items - * (where found will never become TRUE in the insertion sort) - * or potentially many duplicates. - */ - found=TRUE; - start=i+1; - } else if(diff<0) { - limit=i; - } else { - start=i; - } - } - - /* Linear search over the remaining tiny sub-array. */ - while(start=limit) { - doInsertionSort(array+start*itemSize, limit-start, itemSize, cmp, context, px); - break; - } - - left=start; - right=limit; - - /* x=array[middle] */ - uprv_memcpy(px, array+(size_t)((start+limit)/2)*itemSize, itemSize); - - do { - while(/* array[left]0 && array==NULL) || length<0 || itemSize<=0 || cmp==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - if(length<=1) { - return; - } else if(lengthbdp=ubidi_getSingleton(); - - /* allocate memory for arrays as requested */ - if(maxLength>0) { - if( !getInitialDirPropsMemory(pBiDi, maxLength) || - !getInitialLevelsMemory(pBiDi, maxLength) - ) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - } - } else { - pBiDi->mayAllocateText=TRUE; - } - - if(maxRunCount>0) { - if(maxRunCount==1) { - /* use simpleRuns[] */ - pBiDi->runsSize=sizeof(Run); - } else if(!getInitialRunsMemory(pBiDi, maxRunCount)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - } - } else { - pBiDi->mayAllocateRuns=TRUE; - } - - if(U_SUCCESS(*pErrorCode)) { - return pBiDi; - } else { - ubidi_close(pBiDi); - return NULL; - } -} - -/* - * We are allowed to allocate memory if memory==NULL or - * mayAllocate==TRUE for each array that we need. - * We also try to grow memory as needed if we - * allocate it. - * - * Assume sizeNeeded>0. - * If *pMemory!=NULL, then assume *pSize>0. - * - * ### this realloc() may unnecessarily copy the old data, - * which we know we don't need any more; - * is this the best way to do this?? - */ -U_CFUNC UBool -ubidi_getMemory(BidiMemoryForAllocation *bidiMem, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded) { - void **pMemory = (void **)bidiMem; - /* check for existing memory */ - if(*pMemory==NULL) { - /* we need to allocate memory */ - if(mayAllocate && (*pMemory=uprv_malloc(sizeNeeded))!=NULL) { - *pSize=sizeNeeded; - return TRUE; - } else { - return FALSE; - } - } else { - if(sizeNeeded<=*pSize) { - /* there is already enough memory */ - return TRUE; - } - else if(!mayAllocate) { - /* not enough memory, and we must not allocate */ - return FALSE; - } else { - /* we try to grow */ - void *memory; - /* in most cases, we do not need the copy-old-data part of - * realloc, but it is needed when adding runs using getRunsMemory() - * in setParaRunsOnly() - */ - if((memory=uprv_realloc(*pMemory, sizeNeeded))!=NULL) { - *pMemory=memory; - *pSize=sizeNeeded; - return TRUE; - } else { - /* we failed to grow */ - return FALSE; - } - } - } -} - -U_CAPI void U_EXPORT2 -ubidi_close(UBiDi *pBiDi) { - if(pBiDi!=NULL) { - pBiDi->pParaBiDi=NULL; /* in case one tries to reuse this block */ - if(pBiDi->dirPropsMemory!=NULL) { - uprv_free(pBiDi->dirPropsMemory); - } - if(pBiDi->levelsMemory!=NULL) { - uprv_free(pBiDi->levelsMemory); - } - if(pBiDi->openingsMemory!=NULL) { - uprv_free(pBiDi->openingsMemory); - } - if(pBiDi->parasMemory!=NULL) { - uprv_free(pBiDi->parasMemory); - } - if(pBiDi->runsMemory!=NULL) { - uprv_free(pBiDi->runsMemory); - } - if(pBiDi->isolatesMemory!=NULL) { - uprv_free(pBiDi->isolatesMemory); - } - if(pBiDi->insertPoints.points!=NULL) { - uprv_free(pBiDi->insertPoints.points); - } - - uprv_free(pBiDi); - } -} - -/* set to approximate "inverse BiDi" ---------------------------------------- */ - -U_CAPI void U_EXPORT2 -ubidi_setInverse(UBiDi *pBiDi, UBool isInverse) { - if(pBiDi!=NULL) { - pBiDi->isInverse=isInverse; - pBiDi->reorderingMode = isInverse ? UBIDI_REORDER_INVERSE_NUMBERS_AS_L - : UBIDI_REORDER_DEFAULT; - } -} - -U_CAPI UBool U_EXPORT2 -ubidi_isInverse(UBiDi *pBiDi) { - if(pBiDi!=NULL) { - return pBiDi->isInverse; - } else { - return FALSE; - } -} - -/* FOOD FOR THOUGHT: currently the reordering modes are a mixture of - * algorithm for direct BiDi, algorithm for inverse BiDi and the bizarre - * concept of RUNS_ONLY which is a double operation. - * It could be advantageous to divide this into 3 concepts: - * a) Operation: direct / inverse / RUNS_ONLY - * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_R - * c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL - * This would allow combinations not possible today like RUNS_ONLY with - * NUMBERS_SPECIAL. - * Also allow to set INSERT_MARKS for the direct step of RUNS_ONLY and - * REMOVE_CONTROLS for the inverse step. - * Not all combinations would be supported, and probably not all do make sense. - * This would need to document which ones are supported and what are the - * fallbacks for unsupported combinations. - */ -U_CAPI void U_EXPORT2 -ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) { - if ((pBiDi!=NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT) - && (reorderingMode < UBIDI_REORDER_COUNT)) { - pBiDi->reorderingMode = reorderingMode; - pBiDi->isInverse = (UBool)(reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L); - } -} - -U_CAPI UBiDiReorderingMode U_EXPORT2 -ubidi_getReorderingMode(UBiDi *pBiDi) { - if (pBiDi!=NULL) { - return pBiDi->reorderingMode; - } else { - return UBIDI_REORDER_DEFAULT; - } -} - -U_CAPI void U_EXPORT2 -ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions) { - if (reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { - reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS; - } - if (pBiDi!=NULL) { - pBiDi->reorderingOptions=reorderingOptions; - } -} - -U_CAPI uint32_t U_EXPORT2 -ubidi_getReorderingOptions(UBiDi *pBiDi) { - if (pBiDi!=NULL) { - return pBiDi->reorderingOptions; - } else { - return 0; - } -} - -U_CAPI UBiDiDirection U_EXPORT2 -ubidi_getBaseDirection(const UChar *text, -int32_t length){ - - int32_t i; - UChar32 uchar; - UCharDirection dir; - - if( text==NULL || length<-1 ){ - return UBIDI_NEUTRAL; - } - - if(length==-1) { - length=u_strlen(text); - } - - for( i = 0 ; i < length; ) { - /* i is incremented by U16_NEXT */ - U16_NEXT(text, i, length, uchar); - dir = u_charDirection(uchar); - if( dir == U_LEFT_TO_RIGHT ) - return UBIDI_LTR; - if( dir == U_RIGHT_TO_LEFT || dir ==U_RIGHT_TO_LEFT_ARABIC ) - return UBIDI_RTL; - } - return UBIDI_NEUTRAL; -} - -/* perform (P2)..(P3) ------------------------------------------------------- */ - -/** - * Returns the directionality of the first strong character - * after the last B in prologue, if any. - * Requires prologue!=null. - */ -static DirProp -firstL_R_AL(UBiDi *pBiDi) { - const UChar *text=pBiDi->prologue; - int32_t length=pBiDi->proLength; - int32_t i; - UChar32 uchar; - DirProp dirProp, result=ON; - for(i=0; iparas - */ -static UBool -checkParaCount(UBiDi *pBiDi) { - int32_t count=pBiDi->paraCount; - if(pBiDi->paras==pBiDi->simpleParas) { - if(count<=SIMPLE_PARAS_COUNT) - return TRUE; - if(!getInitialParasMemory(pBiDi, SIMPLE_PARAS_COUNT * 2)) - return FALSE; - pBiDi->paras=pBiDi->parasMemory; - uprv_memcpy(pBiDi->parasMemory, pBiDi->simpleParas, SIMPLE_PARAS_COUNT * sizeof(Para)); - return TRUE; - } - if(!getInitialParasMemory(pBiDi, count * 2)) - return FALSE; - pBiDi->paras=pBiDi->parasMemory; - return TRUE; -} - -/* - * Get the directional properties for the text, calculate the flags bit-set, and - * determine the paragraph level if necessary (in pBiDi->paras[i].level). - * FSI initiators are also resolved and their dirProp replaced with LRI or RLI. - * When encountering an FSI, it is initially replaced with an LRI, which is the - * default. Only if a strong R or AL is found within its scope will the LRI be - * replaced by an RLI. - */ -static UBool -getDirProps(UBiDi *pBiDi) { - const UChar *text=pBiDi->text; - DirProp *dirProps=pBiDi->dirPropsMemory; /* pBiDi->dirProps is const */ - - int32_t i=0, originalLength=pBiDi->originalLength; - Flags flags=0; /* collect all directionalities in the text */ - UChar32 uchar; - DirProp dirProp=0, defaultParaLevel=0; /* initialize to avoid compiler warnings */ - UBool isDefaultLevel=IS_DEFAULT_LEVEL(pBiDi->paraLevel); - /* for inverse BiDi, the default para level is set to RTL if there is a - strong R or AL character at either end of the text */ - UBool isDefaultLevelInverse=isDefaultLevel && (UBool) - (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT || - pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL); - int32_t lastArabicPos=-1; - int32_t controlCount=0; - UBool removeBiDiControls = (UBool)(pBiDi->reorderingOptions & - UBIDI_OPTION_REMOVE_CONTROLS); - - typedef enum { - NOT_SEEKING_STRONG, /* 0: not contextual paraLevel, not after FSI */ - SEEKING_STRONG_FOR_PARA, /* 1: looking for first strong char in para */ - SEEKING_STRONG_FOR_FSI, /* 2: looking for first strong after FSI */ - LOOKING_FOR_PDI /* 3: found strong after FSI, looking for PDI */ - } State; - State state; - DirProp lastStrong=ON; /* for default level & inverse BiDi */ - /* The following stacks are used to manage isolate sequences. Those - sequences may be nested, but obviously never more deeply than the - maximum explicit embedding level. - lastStack is the index of the last used entry in the stack. A value of -1 - means that there is no open isolate sequence. - lastStack is reset to -1 on paragraph boundaries. */ - /* The following stack contains the position of the initiator of - each open isolate sequence */ - int32_t isolateStartStack[UBIDI_MAX_EXPLICIT_LEVEL+1]; - /* The following stack contains the last known state before - encountering the initiator of an isolate sequence */ - int8_t previousStateStack[UBIDI_MAX_EXPLICIT_LEVEL+1]; - int32_t stackLast=-1; - - if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) - pBiDi->length=0; - defaultParaLevel=pBiDi->paraLevel&1; - if(isDefaultLevel) { - pBiDi->paras[0].level=defaultParaLevel; - lastStrong=defaultParaLevel; - if(pBiDi->proLength>0 && /* there is a prologue */ - (dirProp=firstL_R_AL(pBiDi))!=ON) { /* with a strong character */ - if(dirProp==L) - pBiDi->paras[0].level=0; /* set the default para level */ - else - pBiDi->paras[0].level=1; /* set the default para level */ - state=NOT_SEEKING_STRONG; - } else { - state=SEEKING_STRONG_FOR_PARA; - } - } else { - pBiDi->paras[0].level=pBiDi->paraLevel; - state=NOT_SEEKING_STRONG; - } - /* count paragraphs and determine the paragraph level (P2..P3) */ - /* - * see comment in ubidi.h: - * the UBIDI_DEFAULT_XXX values are designed so that - * their bit 0 alone yields the intended default - */ - for( /* i=0 above */ ; i0xffff) { /* set the lead surrogate's property to BN */ - flags|=DIRPROP_FLAG(BN); - dirProps[i-2]=BN; - } - if(removeBiDiControls && IS_BIDI_CONTROL_CHAR(uchar)) - controlCount++; - if(dirProp==L) { - if(state==SEEKING_STRONG_FOR_PARA) { - pBiDi->paras[pBiDi->paraCount-1].level=0; - state=NOT_SEEKING_STRONG; - } - else if(state==SEEKING_STRONG_FOR_FSI) { - if(stackLast<=UBIDI_MAX_EXPLICIT_LEVEL) { - /* no need for next statement, already set by default */ - /* dirProps[isolateStartStack[stackLast]]=LRI; */ - flags|=DIRPROP_FLAG(LRI); - } - state=LOOKING_FOR_PDI; - } - lastStrong=L; - continue; - } - if(dirProp==R || dirProp==AL) { - if(state==SEEKING_STRONG_FOR_PARA) { - pBiDi->paras[pBiDi->paraCount-1].level=1; - state=NOT_SEEKING_STRONG; - } - else if(state==SEEKING_STRONG_FOR_FSI) { - if(stackLast<=UBIDI_MAX_EXPLICIT_LEVEL) { - dirProps[isolateStartStack[stackLast]]=RLI; - flags|=DIRPROP_FLAG(RLI); - } - state=LOOKING_FOR_PDI; - } - lastStrong=R; - if(dirProp==AL) - lastArabicPos=i-1; - continue; - } - if(dirProp>=FSI && dirProp<=RLI) { /* FSI, LRI or RLI */ - stackLast++; - if(stackLast<=UBIDI_MAX_EXPLICIT_LEVEL) { - isolateStartStack[stackLast]=i-1; - previousStateStack[stackLast]=state; - } - if(dirProp==FSI) { - dirProps[i-1]=LRI; /* default if no strong char */ - state=SEEKING_STRONG_FOR_FSI; - } - else - state=LOOKING_FOR_PDI; - continue; - } - if(dirProp==PDI) { - if(state==SEEKING_STRONG_FOR_FSI) { - if(stackLast<=UBIDI_MAX_EXPLICIT_LEVEL) { - /* no need for next statement, already set by default */ - /* dirProps[isolateStartStack[stackLast]]=LRI; */ - flags|=DIRPROP_FLAG(LRI); - } - } - if(stackLast>=0) { - if(stackLast<=UBIDI_MAX_EXPLICIT_LEVEL) - state=previousStateStack[stackLast]; - stackLast--; - } - continue; - } - if(dirProp==B) { - if(iparas[pBiDi->paraCount-1].limit=i; - if(isDefaultLevelInverse && lastStrong==R) - pBiDi->paras[pBiDi->paraCount-1].level=1; - if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) { - /* When streaming, we only process whole paragraphs - thus some updates are only done on paragraph boundaries */ - pBiDi->length=i; /* i is index to next character */ - pBiDi->controlCount=controlCount; - } - if(iparaCount++; - if(checkParaCount(pBiDi)==FALSE) /* not enough memory for a new para entry */ - return FALSE; - if(isDefaultLevel) { - pBiDi->paras[pBiDi->paraCount-1].level=defaultParaLevel; - state=SEEKING_STRONG_FOR_PARA; - lastStrong=defaultParaLevel; - } else { - pBiDi->paras[pBiDi->paraCount-1].level=pBiDi->paraLevel; - state=NOT_SEEKING_STRONG; - } - stackLast=-1; - } - continue; - } - } - /* Ignore still open isolate sequences with overflow */ - if(stackLast>UBIDI_MAX_EXPLICIT_LEVEL) { - stackLast=UBIDI_MAX_EXPLICIT_LEVEL; - state=SEEKING_STRONG_FOR_FSI; /* to be on the safe side */ - } - /* Resolve direction of still unresolved open FSI sequences */ - while(stackLast>=0) { - if(state==SEEKING_STRONG_FOR_FSI) { - /* no need for next statement, already set by default */ - /* dirProps[isolateStartStack[stackLast]]=LRI; */ - flags|=DIRPROP_FLAG(LRI); - break; - } - state=previousStateStack[stackLast]; - stackLast--; - } - /* When streaming, ignore text after the last paragraph separator */ - if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) { - if(pBiDi->lengthparaCount--; - } else { - pBiDi->paras[pBiDi->paraCount-1].limit=originalLength; - pBiDi->controlCount=controlCount; - } - /* For inverse bidi, default para direction is RTL if there is - a strong R or AL at either end of the paragraph */ - if(isDefaultLevelInverse && lastStrong==R) { - pBiDi->paras[pBiDi->paraCount-1].level=1; - } - if(isDefaultLevel) { - pBiDi->paraLevel=pBiDi->paras[0].level; - } - /* The following is needed to resolve the text direction for default level - paragraphs containing no strong character */ - for(i=0; iparaCount; i++) - flags|=DIRPROP_FLAG_LR(pBiDi->paras[i].level); - - if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) { - flags|=DIRPROP_FLAG(L); - } - pBiDi->flags=flags; - pBiDi->lastArabicPos=lastArabicPos; - return TRUE; -} - -/* determine the paragraph level at position index */ -U_CFUNC UBiDiLevel -ubidi_getParaLevelAtIndex(const UBiDi *pBiDi, int32_t pindex) { - int32_t i; - for(i=0; iparaCount; i++) - if(pindexparas[i].limit) - break; - if(i>=pBiDi->paraCount) - i=pBiDi->paraCount-1; - return (UBiDiLevel)(pBiDi->paras[i].level); -} - -/* Functions for handling paired brackets ----------------------------------- */ - -/* In the isoRuns array, the first entry is used for text outside of any - isolate sequence. Higher entries are used for each more deeply nested - isolate sequence. isoRunLast is the index of the last used entry. The - openings array is used to note the data of opening brackets not yet - matched by a closing bracket, or matched but still susceptible to change - level. - Each isoRun entry contains the index of the first and - one-after-last openings entries for pending opening brackets it - contains. The next openings entry to use is the one-after-last of the - most deeply nested isoRun entry. - isoRun entries also contain their current embedding level and the last - encountered strong character, since these will be needed to resolve - the level of paired brackets. */ - -static void -bracketInit(UBiDi *pBiDi, BracketData *bd) { - bd->pBiDi=pBiDi; - bd->isoRunLast=0; - bd->isoRuns[0].start=0; - bd->isoRuns[0].limit=0; - bd->isoRuns[0].level=GET_PARALEVEL(pBiDi, 0); - bd->isoRuns[0].lastStrong=bd->isoRuns[0].lastBase=bd->isoRuns[0].contextDir=GET_PARALEVEL(pBiDi, 0)&1; - bd->isoRuns[0].contextPos=0; - if(pBiDi->openingsMemory) { - bd->openings=pBiDi->openingsMemory; - bd->openingsCount=pBiDi->openingsSize / sizeof(Opening); - } else { - bd->openings=bd->simpleOpenings; - bd->openingsCount=SIMPLE_OPENINGS_COUNT; - } - bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIAL || - bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL; -} - -/* paragraph boundary */ -static void -bracketProcessB(BracketData *bd, UBiDiLevel level) { - bd->isoRunLast=0; - bd->isoRuns[0].limit=0; - bd->isoRuns[0].level=level; - bd->isoRuns[0].lastStrong=bd->isoRuns[0].lastBase=bd->isoRuns[0].contextDir=level&1; - bd->isoRuns[0].contextPos=0; -} - -/* LRE, LRO, RLE, RLO, PDF */ -static void -bracketProcessBoundary(BracketData *bd, int32_t lastCcPos, - UBiDiLevel contextLevel, UBiDiLevel embeddingLevel) { - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - DirProp *dirProps=bd->pBiDi->dirProps; - if(DIRPROP_FLAG(dirProps[lastCcPos])&MASK_ISO) /* after an isolate */ - return; - if(NO_OVERRIDE(embeddingLevel)>NO_OVERRIDE(contextLevel)) /* not a PDF */ - contextLevel=embeddingLevel; - pLastIsoRun->limit=pLastIsoRun->start; - pLastIsoRun->level=embeddingLevel; - pLastIsoRun->lastStrong=pLastIsoRun->lastBase=pLastIsoRun->contextDir=contextLevel&1; - pLastIsoRun->contextPos=lastCcPos; -} - -/* LRI or RLI */ -static void -bracketProcessLRI_RLI(BracketData *bd, UBiDiLevel level) { - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - int16_t lastLimit; - pLastIsoRun->lastBase=ON; - lastLimit=pLastIsoRun->limit; - bd->isoRunLast++; - pLastIsoRun++; - pLastIsoRun->start=pLastIsoRun->limit=lastLimit; - pLastIsoRun->level=level; - pLastIsoRun->lastStrong=pLastIsoRun->lastBase=pLastIsoRun->contextDir=level&1; - pLastIsoRun->contextPos=0; -} - -/* PDI */ -static void -bracketProcessPDI(BracketData *bd) { - IsoRun *pLastIsoRun; - bd->isoRunLast--; - pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - pLastIsoRun->lastBase=ON; -} - -/* newly found opening bracket: create an openings entry */ -static UBool /* return TRUE if success */ -bracketAddOpening(BracketData *bd, UChar match, int32_t position) { - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - Opening *pOpening; - if(pLastIsoRun->limit>=bd->openingsCount) { /* no available new entry */ - UBiDi *pBiDi=bd->pBiDi; - if(!getInitialOpeningsMemory(pBiDi, pLastIsoRun->limit * 2)) - return FALSE; - if(bd->openings==bd->simpleOpenings) - uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings, - SIMPLE_OPENINGS_COUNT * sizeof(Opening)); - bd->openings=pBiDi->openingsMemory; /* may have changed */ - bd->openingsCount=pBiDi->openingsSize / sizeof(Opening); - } - pOpening=&bd->openings[pLastIsoRun->limit]; - pOpening->position=position; - pOpening->match=match; - pOpening->contextDir=pLastIsoRun->contextDir; - pOpening->contextPos=pLastIsoRun->contextPos; - pOpening->flags=0; - pLastIsoRun->limit++; - return TRUE; -} - -/* change N0c1 to N0c2 when a preceding bracket is assigned the embedding level */ -static void -fixN0c(BracketData *bd, int32_t openingIndex, int32_t newPropPosition, DirProp newProp) { - /* This function calls itself recursively */ - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - Opening *qOpening; - DirProp *dirProps=bd->pBiDi->dirProps; - int32_t k, openingPosition, closingPosition; - for(k=openingIndex+1, qOpening=&bd->openings[k]; klimit; k++, qOpening++) { - if(qOpening->match>=0) /* not an N0c match */ - continue; - if(newPropPositioncontextPos) - break; - if(newPropPosition>=qOpening->position) - continue; - if(newProp==qOpening->contextDir) - break; - openingPosition=qOpening->position; - dirProps[openingPosition]=newProp; - closingPosition=-(qOpening->match); - dirProps[closingPosition]=newProp; - qOpening->match=0; /* prevent further changes */ - fixN0c(bd, k, openingPosition, newProp); - fixN0c(bd, k, closingPosition, newProp); - } -} - -/* process closing bracket */ -static DirProp /* return L or R if N0b or N0c, ON if N0d */ -bracketProcessClosing(BracketData *bd, int32_t openIdx, int32_t position) { - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - Opening *pOpening, *qOpening; - UBiDiDirection direction; - UBool stable; - DirProp newProp; - pOpening=&bd->openings[openIdx]; - direction=pLastIsoRun->level&1; - stable=TRUE; /* assume stable until proved otherwise */ - - /* The stable flag is set when brackets are paired and their - level is resolved and cannot be changed by what will be - found later in the source string. - An unstable match can occur only when applying N0c, where - the resolved level depends on the preceding context, and - this context may be affected by text occurring later. - Example: RTL paragraph containing: abc[(latin) HEBREW] - When the closing parenthesis is encountered, it appears - that N0c1 must be applied since 'abc' sets an opposite - direction context and both parentheses receive level 2. - However, when the closing square bracket is processed, - N0b applies because of 'HEBREW' being included within the - brackets, thus the square brackets are treated like R and - receive level 1. However, this changes the preceding - context of the opening parenthesis, and it now appears - that N0c2 must be applied to the parentheses rather than - N0c1. */ - - if((direction==0 && pOpening->flags&FOUND_L) || - (direction==1 && pOpening->flags&FOUND_R)) { /* N0b */ - newProp=direction; - } - else if(pOpening->flags&(FOUND_L|FOUND_R)) { /* N0c */ - /* it is stable if there is no containing pair or in - conditions too complicated and not worth checking */ - stable=(openIdx==pLastIsoRun->start); - if(direction!=pOpening->contextDir) - newProp=pOpening->contextDir; /* N0c1 */ - else - newProp=direction; /* N0c2 */ - } else { - /* forget this and any brackets nested within this pair */ - pLastIsoRun->limit=openIdx; - return ON; /* N0d */ - } - bd->pBiDi->dirProps[pOpening->position]=newProp; - bd->pBiDi->dirProps[position]=newProp; - /* Update nested N0c pairs that may be affected */ - fixN0c(bd, openIdx, pOpening->position, newProp); - if(stable) { - pLastIsoRun->limit=openIdx; /* forget any brackets nested within this pair */ - /* remove lower located synonyms if any */ - while(pLastIsoRun->limit>pLastIsoRun->start && - bd->openings[pLastIsoRun->limit-1].position==pOpening->position) - pLastIsoRun->limit--; - } else { - int32_t k; - pOpening->match=-position; - /* neutralize lower located synonyms if any */ - k=openIdx-1; - while(k>=pLastIsoRun->start && - bd->openings[k].position==pOpening->position) - bd->openings[k--].match=0; - /* neutralize any unmatched opening between the current pair; - this will also neutralize higher located synonyms if any */ - for(k=openIdx+1; klimit; k++) { - qOpening=&bd->openings[k]; - if(qOpening->position>=position) - break; - if(qOpening->match>0) - qOpening->match=0; - } - } - return newProp; -} - -/* handle strong characters, digits and candidates for closing brackets */ -static UBool /* return TRUE if success */ -bracketProcessChar(BracketData *bd, int32_t position) { - IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; - DirProp *dirProps, dirProp, newProp; - UBiDiLevel level; - dirProps=bd->pBiDi->dirProps; - dirProp=dirProps[position]; - if(dirProp==ON) { - UChar c, match; - int32_t idx; - /* First see if it is a matching closing bracket. Hopefully, this is - more efficient than checking if it is a closing bracket at all */ - c=bd->pBiDi->text[position]; - for(idx=pLastIsoRun->limit-1; idx>=pLastIsoRun->start; idx--) { - if(bd->openings[idx].match!=c) - continue; - /* We have a match */ - newProp=bracketProcessClosing(bd, idx, position); - if(newProp==ON) { /* N0d */ - c=0; /* prevent handling as an opening */ - break; - } - pLastIsoRun->lastBase=ON; - pLastIsoRun->contextDir=newProp; - pLastIsoRun->contextPos=position; - level=bd->pBiDi->levels[position]; - if(level&UBIDI_LEVEL_OVERRIDE) { /* X4, X5 */ - uint16_t flag; - int32_t i; - newProp=level&1; - pLastIsoRun->lastStrong=newProp; - flag=DIRPROP_FLAG(newProp); - for(i=pLastIsoRun->start; iopenings[i].flags|=flag; - /* matching brackets are not overridden by LRO/RLO */ - bd->pBiDi->levels[position]&=~UBIDI_LEVEL_OVERRIDE; - } - /* matching brackets are not overridden by LRO/RLO */ - bd->pBiDi->levels[bd->openings[idx].position]&=~UBIDI_LEVEL_OVERRIDE; - return TRUE; - } - /* We get here only if the ON character is not a matching closing - bracket or it is a case of N0d */ - /* Now see if it is an opening bracket */ - if(c) - match=u_getBidiPairedBracket(c); /* get the matching char */ - else - match=0; - if(match!=c && /* has a matching char */ - ubidi_getPairedBracketType(bd->pBiDi->bdp, c)==U_BPT_OPEN) { /* opening bracket */ - /* special case: process synonyms - create an opening entry for each synonym */ - if(match==0x232A) { /* RIGHT-POINTING ANGLE BRACKET */ - if(!bracketAddOpening(bd, 0x3009, position)) - return FALSE; - } - else if(match==0x3009) { /* RIGHT ANGLE BRACKET */ - if(!bracketAddOpening(bd, 0x232A, position)) - return FALSE; - } - if(!bracketAddOpening(bd, match, position)) - return FALSE; - } - } - level=bd->pBiDi->levels[position]; - if(level&UBIDI_LEVEL_OVERRIDE) { /* X4, X5 */ - newProp=level&1; - if(dirProp!=S && dirProp!=WS && dirProp!=ON) - dirProps[position]=newProp; - pLastIsoRun->lastBase=newProp; - pLastIsoRun->lastStrong=newProp; - pLastIsoRun->contextDir=newProp; - pLastIsoRun->contextPos=position; - } - else if(dirProp<=R || dirProp==AL) { - newProp=DIR_FROM_STRONG(dirProp); - pLastIsoRun->lastBase=dirProp; - pLastIsoRun->lastStrong=dirProp; - pLastIsoRun->contextDir=newProp; - pLastIsoRun->contextPos=position; - } - else if(dirProp==EN) { - pLastIsoRun->lastBase=EN; - if(pLastIsoRun->lastStrong==L) { - newProp=L; /* W7 */ - if(!bd->isNumbersSpecial) - dirProps[position]=ENL; - pLastIsoRun->contextDir=L; - pLastIsoRun->contextPos=position; - } - else { - newProp=R; /* N0 */ - if(pLastIsoRun->lastStrong==AL) - dirProps[position]=AN; /* W2 */ - else - dirProps[position]=ENR; - pLastIsoRun->contextDir=R; - pLastIsoRun->contextPos=position; - } - } - else if(dirProp==AN) { - newProp=R; /* N0 */ - pLastIsoRun->lastBase=AN; - pLastIsoRun->contextDir=R; - pLastIsoRun->contextPos=position; - } - else if(dirProp==NSM) { - /* if the last real char was ON, change NSM to ON so that it - will stay ON even if the last real char is a bracket which - may be changed to L or R */ - newProp=pLastIsoRun->lastBase; - if(newProp==ON) - dirProps[position]=newProp; - } - else { - newProp=dirProp; - pLastIsoRun->lastBase=dirProp; - } - if(newProp<=R || newProp==AL) { - int32_t i; - uint16_t flag=DIRPROP_FLAG(DIR_FROM_STRONG(newProp)); - for(i=pLastIsoRun->start; ilimit; i++) - if(position>bd->openings[i].position) - bd->openings[i].flags|=flag; - } - return TRUE; -} - -/* perform (X1)..(X9) ------------------------------------------------------- */ - -/* determine if the text is mixed-directional or single-directional */ -static UBiDiDirection -directionFromFlags(UBiDi *pBiDi) { - Flags flags=pBiDi->flags; - /* if the text contains AN and neutrals, then some neutrals may become RTL */ - if(!(flags&MASK_RTL || ((flags&DIRPROP_FLAG(AN)) && (flags&MASK_POSSIBLE_N)))) { - return UBIDI_LTR; - } else if(!(flags&MASK_LTR)) { - return UBIDI_RTL; - } else { - return UBIDI_MIXED; - } -} - -/* - * Resolve the explicit levels as specified by explicit embedding codes. - * Recalculate the flags to have them reflect the real properties - * after taking the explicit embeddings into account. - * - * The BiDi algorithm is designed to result in the same behavior whether embedding - * levels are externally specified (from "styled text", supposedly the preferred - * method) or set by explicit embedding codes (LRx, RLx, PDF, FSI, PDI) in the plain text. - * That is why (X9) instructs to remove all not-isolate explicit codes (and BN). - * However, in a real implementation, the removal of these codes and their index - * positions in the plain text is undesirable since it would result in - * reallocated, reindexed text. - * Instead, this implementation leaves the codes in there and just ignores them - * in the subsequent processing. - * In order to get the same reordering behavior, positions with a BN or a not-isolate - * explicit embedding code just get the same level assigned as the last "real" - * character. - * - * Some implementations, not this one, then overwrite some of these - * directionality properties at "real" same-level-run boundaries by - * L or R codes so that the resolution of weak types can be performed on the - * entire paragraph at once instead of having to parse it once more and - * perform that resolution on same-level-runs. - * This limits the scope of the implicit rules in effectively - * the same way as the run limits. - * - * Instead, this implementation does not modify these codes, except for - * paired brackets whose properties (ON) may be replaced by L or R. - * On one hand, the paragraph has to be scanned for same-level-runs, but - * on the other hand, this saves another loop to reset these codes, - * or saves making and modifying a copy of dirProps[]. - * - * - * Note that (Pn) and (Xn) changed significantly from version 4 of the BiDi algorithm. - * - * - * Handling the stack of explicit levels (Xn): - * - * With the BiDi stack of explicit levels, as pushed with each - * LRE, RLE, LRO, RLO, LRI, RLI and FSI and popped with each PDF and PDI, - * the explicit level must never exceed UBIDI_MAX_EXPLICIT_LEVEL. - * - * In order to have a correct push-pop semantics even in the case of overflows, - * overflow counters and a valid isolate counter are used as described in UAX#9 - * section 3.3.2 "Explicit Levels and Directions". - * - * This implementation assumes that UBIDI_MAX_EXPLICIT_LEVEL is odd. - * - * Returns normally the direction; -1 if there was a memory shortage - * - */ -static UBiDiDirection -resolveExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { - DirProp *dirProps=pBiDi->dirProps; - UBiDiLevel *levels=pBiDi->levels; - const UChar *text=pBiDi->text; - - int32_t i=0, length=pBiDi->length; - Flags flags=pBiDi->flags; /* collect all directionalities in the text */ - DirProp dirProp; - UBiDiLevel level=GET_PARALEVEL(pBiDi, 0); - UBiDiDirection direction; - pBiDi->isolateCount=0; - - if(U_FAILURE(*pErrorCode)) { return UBIDI_LTR; } - - /* determine if the text is mixed-directional or single-directional */ - direction=directionFromFlags(pBiDi); - - /* we may not need to resolve any explicit levels */ - if((direction!=UBIDI_MIXED)) { - /* not mixed directionality: levels don't matter - trailingWSStart will be 0 */ - return direction; - } - if(pBiDi->reorderingMode > UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL) { - /* inverse BiDi: mixed, but all characters are at the same embedding level */ - /* set all levels to the paragraph level */ - int32_t paraIndex, start, limit; - for(paraIndex=0; paraIndexparaCount; paraIndex++) { - if(paraIndex==0) - start=0; - else - start=pBiDi->paras[paraIndex-1].limit; - limit=pBiDi->paras[paraIndex].limit; - level=pBiDi->paras[paraIndex].level; - for(i=start; iparaCount; paraIndex++) { - if(paraIndex==0) - start=0; - else - start=pBiDi->paras[paraIndex-1].limit; - limit=pBiDi->paras[paraIndex].limit; - level=pBiDi->paras[paraIndex].level; - for(i=start; i=UBIDI_MAX_EXPLICIT_LEVEL - but we need one more entry as base */ - uint32_t stackLast=0; - int32_t overflowIsolateCount=0; - int32_t overflowEmbeddingCount=0; - int32_t validIsolateCount=0; - BracketData bracketData; - bracketInit(pBiDi, &bracketData); - stack[0]=level; /* initialize base entry to para level, no override, no isolate */ - - /* recalculate the flags */ - flags=0; - - for(i=0; i0 && stack[stackLast]pBiDi->isolateCount) - pBiDi->isolateCount=validIsolateCount; - embeddingLevel=newLevel; - /* we can increment stackLast without checking because newLevel - will exceed UBIDI_MAX_EXPLICIT_LEVEL before stackLast overflows */ - stackLast++; - stack[stackLast]=embeddingLevel+ISOLATE; - bracketProcessLRI_RLI(&bracketData, embeddingLevel); - } else { - /* make it WS so that it is handled by adjustWSLevels() */ - dirProps[i]=WS; - overflowIsolateCount++; - } - break; - case PDI: - if(NO_OVERRIDE(embeddingLevel)!=NO_OVERRIDE(previousLevel)) { - bracketProcessBoundary(&bracketData, lastCcPos, - previousLevel, embeddingLevel); - flags|=DIRPROP_FLAG_MULTI_RUNS; - } - /* (X6a) */ - if(overflowIsolateCount) { - overflowIsolateCount--; - /* make it WS so that it is handled by adjustWSLevels() */ - dirProps[i]=WS; - } - else if(validIsolateCount) { - flags|=DIRPROP_FLAG(PDI); - lastCcPos=i; - overflowEmbeddingCount=0; - while(stack[stackLast]paraLevel); - if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) - flags|=DIRPROP_FLAG(L); - /* again, determine if the text is mixed-directional or single-directional */ - pBiDi->flags=flags; - direction=directionFromFlags(pBiDi); - } - return direction; -} - -/* - * Use a pre-specified embedding levels array: - * - * Adjust the directional properties for overrides (->LEVEL_OVERRIDE), - * ignore all explicit codes (X9), - * and check all the preset levels. - * - * Recalculate the flags to have them reflect the real properties - * after taking the explicit embeddings into account. - */ -static UBiDiDirection -checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { - DirProp *dirProps=pBiDi->dirProps; - DirProp dirProp; - UBiDiLevel *levels=pBiDi->levels; - int32_t isolateCount=0; - - int32_t i, length=pBiDi->length; - Flags flags=0; /* collect all directionalities in the text */ - UBiDiLevel level; - pBiDi->isolateCount=0; - - for(i=0; ipBiDi->isolateCount) - pBiDi->isolateCount=isolateCount; - } - else if(dirProp==PDI) - isolateCount--; - else if(dirProp==B) - isolateCount=0; - if(level&UBIDI_LEVEL_OVERRIDE) { - /* keep the override flag in levels[i] but adjust the flags */ - level&=~UBIDI_LEVEL_OVERRIDE; /* make the range check below simpler */ - flags|=DIRPROP_FLAG_O(level); - } else { - /* set the flags */ - flags|=DIRPROP_FLAG_E(level)|DIRPROP_FLAG(dirProp); - } - if((levelparaLevel); - /* determine if the text is mixed-directional or single-directional */ - pBiDi->flags=flags; - return directionFromFlags(pBiDi); -} - -/****************************************************************** - The Properties state machine table -******************************************************************* - - All table cells are 8 bits: - bits 0..4: next state - bits 5..7: action to perform (if > 0) - - Cells may be of format "n" where n represents the next state - (except for the rightmost column). - Cells may also be of format "s(x,y)" where x represents an action - to perform and y represents the next state. - -******************************************************************* - Definitions and type for properties state table -******************************************************************* -*/ -#define IMPTABPROPS_COLUMNS 16 -#define IMPTABPROPS_RES (IMPTABPROPS_COLUMNS - 1) -#define GET_STATEPROPS(cell) ((cell)&0x1f) -#define GET_ACTIONPROPS(cell) ((cell)>>5) -#define s(action, newState) ((uint8_t)(newState+(action<<5))) - -static const uint8_t groupProp[] = /* dirProp regrouped */ -{ -/* L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN FSI LRI RLI PDI ENL ENR */ - 0, 1, 2, 7, 8, 3, 9, 6, 5, 4, 4, 10, 10, 12, 10, 10, 10, 11, 10, 4, 4, 4, 4, 13, 14 -}; -enum { DirProp_L=0, DirProp_R=1, DirProp_EN=2, DirProp_AN=3, DirProp_ON=4, DirProp_S=5, DirProp_B=6 }; /* reduced dirProp */ - -/****************************************************************** - - PROPERTIES STATE TABLE - - In table impTabProps, - - the ON column regroups ON and WS, FSI, RLI, LRI and PDI - - the BN column regroups BN, LRE, RLE, LRO, RLO, PDF - - the Res column is the reduced property assigned to a run - - Action 1: process current run1, init new run1 - 2: init new run2 - 3: process run1, process run2, init new run1 - 4: process run1, set run1=run2, init new run2 - - Notes: - 1) This table is used in resolveImplicitLevels(). - 2) This table triggers actions when there is a change in the Bidi - property of incoming characters (action 1). - 3) Most such property sequences are processed immediately (in - fact, passed to processPropertySeq(). - 4) However, numbers are assembled as one sequence. This means - that undefined situations (like CS following digits, until - it is known if the next char will be a digit) are held until - following chars define them. - Example: digits followed by CS, then comes another CS or ON; - the digits will be processed, then the CS assigned - as the start of an ON sequence (action 3). - 5) There are cases where more than one sequence must be - processed, for instance digits followed by CS followed by L: - the digits must be processed as one sequence, and the CS - must be processed as an ON sequence, all this before starting - assembling chars for the opening L sequence. - - -*/ -static const uint8_t impTabProps[][IMPTABPROPS_COLUMNS] = -{ -/* L , R , EN , AN , ON , S , B , ES , ET , CS , BN , NSM , AL , ENL , ENR , Res */ -/* 0 Init */ { 1 , 2 , 4 , 5 , 7 , 15 , 17 , 7 , 9 , 7 , 0 , 7 , 3 , 18 , 21 , DirProp_ON }, -/* 1 L */ { 1 , s(1,2), s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7), 1 , 1 , s(1,3),s(1,18),s(1,21), DirProp_L }, -/* 2 R */ { s(1,1), 2 , s(1,4), s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), s(1,9), s(1,7), 2 , 2 , s(1,3),s(1,18),s(1,21), DirProp_R }, -/* 3 AL */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8),s(1,16),s(1,17), s(1,8), s(1,8), s(1,8), 3 , 3 , 3 ,s(1,18),s(1,21), DirProp_R }, -/* 4 EN */ { s(1,1), s(1,2), 4 , s(1,5), s(1,7),s(1,15),s(1,17),s(2,10), 11 ,s(2,10), 4 , 4 , s(1,3), 18 , 21 , DirProp_EN }, -/* 5 AN */ { s(1,1), s(1,2), s(1,4), 5 , s(1,7),s(1,15),s(1,17), s(1,7), s(1,9),s(2,12), 5 , 5 , s(1,3),s(1,18),s(1,21), DirProp_AN }, -/* 6 AL:EN/AN */ { s(1,1), s(1,2), 6 , 6 , s(1,8),s(1,16),s(1,17), s(1,8), s(1,8),s(2,13), 6 , 6 , s(1,3), 18 , 21 , DirProp_AN }, -/* 7 ON */ { s(1,1), s(1,2), s(1,4), s(1,5), 7 ,s(1,15),s(1,17), 7 ,s(2,14), 7 , 7 , 7 , s(1,3),s(1,18),s(1,21), DirProp_ON }, -/* 8 AL:ON */ { s(1,1), s(1,2), s(1,6), s(1,6), 8 ,s(1,16),s(1,17), 8 , 8 , 8 , 8 , 8 , s(1,3),s(1,18),s(1,21), DirProp_ON }, -/* 9 ET */ { s(1,1), s(1,2), 4 , s(1,5), 7 ,s(1,15),s(1,17), 7 , 9 , 7 , 9 , 9 , s(1,3), 18 , 21 , DirProp_ON }, -/*10 EN+ES/CS */ { s(3,1), s(3,2), 4 , s(3,5), s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 10 , s(4,7), s(3,3), 18 , 21 , DirProp_EN }, -/*11 EN+ET */ { s(1,1), s(1,2), 4 , s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), 11 , s(1,7), 11 , 11 , s(1,3), 18 , 21 , DirProp_EN }, -/*12 AN+CS */ { s(3,1), s(3,2), s(3,4), 5 , s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 12 , s(4,7), s(3,3),s(3,18),s(3,21), DirProp_AN }, -/*13 AL:EN/AN+CS */ { s(3,1), s(3,2), 6 , 6 , s(4,8),s(3,16),s(3,17), s(4,8), s(4,8), s(4,8), 13 , s(4,8), s(3,3), 18 , 21 , DirProp_AN }, -/*14 ON+ET */ { s(1,1), s(1,2), s(4,4), s(1,5), 7 ,s(1,15),s(1,17), 7 , 14 , 7 , 14 , 14 , s(1,3),s(4,18),s(4,21), DirProp_ON }, -/*15 S */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7), 15 ,s(1,17), s(1,7), s(1,9), s(1,7), 15 , s(1,7), s(1,3),s(1,18),s(1,21), DirProp_S }, -/*16 AL:S */ { s(1,1), s(1,2), s(1,6), s(1,6), s(1,8), 16 ,s(1,17), s(1,8), s(1,8), s(1,8), 16 , s(1,8), s(1,3),s(1,18),s(1,21), DirProp_S }, -/*17 B */ { s(1,1), s(1,2), s(1,4), s(1,5), s(1,7),s(1,15), 17 , s(1,7), s(1,9), s(1,7), 17 , s(1,7), s(1,3),s(1,18),s(1,21), DirProp_B }, -/*18 ENL */ { s(1,1), s(1,2), 18 , s(1,5), s(1,7),s(1,15),s(1,17),s(2,19), 20 ,s(2,19), 18 , 18 , s(1,3), 18 , 21 , DirProp_L }, -/*19 ENL+ES/CS */ { s(3,1), s(3,2), 18 , s(3,5), s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 19 , s(4,7), s(3,3), 18 , 21 , DirProp_L }, -/*20 ENL+ET */ { s(1,1), s(1,2), 18 , s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), 20 , s(1,7), 20 , 20 , s(1,3), 18 , 21 , DirProp_L }, -/*21 ENR */ { s(1,1), s(1,2), 21 , s(1,5), s(1,7),s(1,15),s(1,17),s(2,22), 23 ,s(2,22), 21 , 21 , s(1,3), 18 , 21 , DirProp_AN }, -/*22 ENR+ES/CS */ { s(3,1), s(3,2), 21 , s(3,5), s(4,7),s(3,15),s(3,17), s(4,7),s(4,14), s(4,7), 22 , s(4,7), s(3,3), 18 , 21 , DirProp_AN }, -/*23 ENR+ET */ { s(1,1), s(1,2), 21 , s(1,5), s(1,7),s(1,15),s(1,17), s(1,7), 23 , s(1,7), 23 , 23 , s(1,3), 18 , 21 , DirProp_AN } -}; - -/* we must undef macro s because the levels tables have a different - * structure (4 bits for action and 4 bits for next state. - */ -#undef s - -/****************************************************************** - The levels state machine tables -******************************************************************* - - All table cells are 8 bits: - bits 0..3: next state - bits 4..7: action to perform (if > 0) - - Cells may be of format "n" where n represents the next state - (except for the rightmost column). - Cells may also be of format "s(x,y)" where x represents an action - to perform and y represents the next state. - - This format limits each table to 16 states each and to 15 actions. - -******************************************************************* - Definitions and type for levels state tables -******************************************************************* -*/ -#define IMPTABLEVELS_COLUMNS (DirProp_B + 2) -#define IMPTABLEVELS_RES (IMPTABLEVELS_COLUMNS - 1) -#define GET_STATE(cell) ((cell)&0x0f) -#define GET_ACTION(cell) ((cell)>>4) -#define s(action, newState) ((uint8_t)(newState+(action<<4))) - -typedef uint8_t ImpTab[][IMPTABLEVELS_COLUMNS]; -typedef uint8_t ImpAct[]; - -/* FOOD FOR THOUGHT: each ImpTab should have its associated ImpAct, - * instead of having a pair of ImpTab and a pair of ImpAct. - */ -typedef struct ImpTabPair { - const void * pImpTab[2]; - const void * pImpAct[2]; -} ImpTabPair; - -/****************************************************************** - - LEVELS STATE TABLES - - In all levels state tables, - - state 0 is the initial state - - the Res column is the increment to add to the text level - for this property sequence. - - The impAct arrays for each table of a pair map the local action - numbers of the table to the total list of actions. For instance, - action 2 in a given table corresponds to the action number which - appears in entry [2] of the impAct array for that table. - The first entry of all impAct arrays must be 0. - - Action 1: init conditional sequence - 2: prepend conditional sequence to current sequence - 3: set ON sequence to new level - 1 - 4: init EN/AN/ON sequence - 5: fix EN/AN/ON sequence followed by R - 6: set previous level sequence to level 2 - - Notes: - 1) These tables are used in processPropertySeq(). The input - is property sequences as determined by resolveImplicitLevels. - 2) Most such property sequences are processed immediately - (levels are assigned). - 3) However, some sequences cannot be assigned a final level till - one or more following sequences are received. For instance, - ON following an R sequence within an even-level paragraph. - If the following sequence is R, the ON sequence will be - assigned basic run level+1, and so will the R sequence. - 4) S is generally handled like ON, since its level will be fixed - to paragraph level in adjustWSLevels(). - -*/ - -static const ImpTab impTabL_DEFAULT = /* Even paragraph level */ -/* In this table, conditional sequences receive the lower possible level - until proven otherwise. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 0 , 1 , 0 , 2 , 0 , 0 , 0 , 0 }, -/* 1 : R */ { 0 , 1 , 3 , 3 , s(1,4), s(1,4), 0 , 1 }, -/* 2 : AN */ { 0 , 1 , 0 , 2 , s(1,5), s(1,5), 0 , 2 }, -/* 3 : R+EN/AN */ { 0 , 1 , 3 , 3 , s(1,4), s(1,4), 0 , 2 }, -/* 4 : R+ON */ { 0 , s(2,1), s(3,3), s(3,3), 4 , 4 , 0 , 0 }, -/* 5 : AN+ON */ { 0 , s(2,1), 0 , s(3,2), 5 , 5 , 0 , 0 } -}; -static const ImpTab impTabR_DEFAULT = /* Odd paragraph level */ -/* In this table, conditional sequences receive the lower possible level - until proven otherwise. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 }, -/* 1 : L */ { 1 , 0 , 1 , 3 , s(1,4), s(1,4), 0 , 1 }, -/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 }, -/* 3 : L+AN */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 1 }, -/* 4 : L+ON */ { s(2,1), 0 , s(2,1), 3 , 4 , 4 , 0 , 0 }, -/* 5 : L+AN+ON */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 0 } -}; -static const ImpAct impAct0 = {0,1,2,3,4}; -static const ImpTabPair impTab_DEFAULT = {{&impTabL_DEFAULT, - &impTabR_DEFAULT}, - {&impAct0, &impAct0}}; - -static const ImpTab impTabL_NUMBERS_SPECIAL = /* Even paragraph level */ -/* In this table, conditional sequences receive the lower possible level - until proven otherwise. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 0 , 2 , s(1,1), s(1,1), 0 , 0 , 0 , 0 }, -/* 1 : L+EN/AN */ { 0 , s(4,2), 1 , 1 , 0 , 0 , 0 , 0 }, -/* 2 : R */ { 0 , 2 , 4 , 4 , s(1,3), s(1,3), 0 , 1 }, -/* 3 : R+ON */ { 0 , s(2,2), s(3,4), s(3,4), 3 , 3 , 0 , 0 }, -/* 4 : R+EN/AN */ { 0 , 2 , 4 , 4 , s(1,3), s(1,3), 0 , 2 } -}; -static const ImpTabPair impTab_NUMBERS_SPECIAL = {{&impTabL_NUMBERS_SPECIAL, - &impTabR_DEFAULT}, - {&impAct0, &impAct0}}; - -static const ImpTab impTabL_GROUP_NUMBERS_WITH_R = -/* In this table, EN/AN+ON sequences receive levels as if associated with R - until proven that there is L or sor/eor on both sides. AN is handled like EN. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 init */ { 0 , 3 , s(1,1), s(1,1), 0 , 0 , 0 , 0 }, -/* 1 EN/AN */ { s(2,0), 3 , 1 , 1 , 2 , s(2,0), s(2,0), 2 }, -/* 2 EN/AN+ON */ { s(2,0), 3 , 1 , 1 , 2 , s(2,0), s(2,0), 1 }, -/* 3 R */ { 0 , 3 , 5 , 5 , s(1,4), 0 , 0 , 1 }, -/* 4 R+ON */ { s(2,0), 3 , 5 , 5 , 4 , s(2,0), s(2,0), 1 }, -/* 5 R+EN/AN */ { 0 , 3 , 5 , 5 , s(1,4), 0 , 0 , 2 } -}; -static const ImpTab impTabR_GROUP_NUMBERS_WITH_R = -/* In this table, EN/AN+ON sequences receive levels as if associated with R - until proven that there is L on both sides. AN is handled like EN. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 init */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, -/* 1 EN/AN */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 1 }, -/* 2 L */ { 2 , 0 , s(1,4), s(1,4), s(1,3), 0 , 0 , 1 }, -/* 3 L+ON */ { s(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 0 }, -/* 4 L+EN/AN */ { s(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 1 } -}; -static const ImpTabPair impTab_GROUP_NUMBERS_WITH_R = { - {&impTabL_GROUP_NUMBERS_WITH_R, - &impTabR_GROUP_NUMBERS_WITH_R}, - {&impAct0, &impAct0}}; - - -static const ImpTab impTabL_INVERSE_NUMBERS_AS_L = -/* This table is identical to the Default LTR table except that EN and AN are - handled like L. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 }, -/* 1 : R */ { 0 , 1 , 0 , 0 , s(1,4), s(1,4), 0 , 1 }, -/* 2 : AN */ { 0 , 1 , 0 , 0 , s(1,5), s(1,5), 0 , 2 }, -/* 3 : R+EN/AN */ { 0 , 1 , 0 , 0 , s(1,4), s(1,4), 0 , 2 }, -/* 4 : R+ON */ { s(2,0), 1 , s(2,0), s(2,0), 4 , 4 , s(2,0), 1 }, -/* 5 : AN+ON */ { s(2,0), 1 , s(2,0), s(2,0), 5 , 5 , s(2,0), 1 } -}; -static const ImpTab impTabR_INVERSE_NUMBERS_AS_L = -/* This table is identical to the Default RTL table except that EN and AN are - handled like L. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, -/* 1 : L */ { 1 , 0 , 1 , 1 , s(1,4), s(1,4), 0 , 1 }, -/* 2 : EN/AN */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 }, -/* 3 : L+AN */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 1 }, -/* 4 : L+ON */ { s(2,1), 0 , s(2,1), s(2,1), 4 , 4 , 0 , 0 }, -/* 5 : L+AN+ON */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 0 } -}; -static const ImpTabPair impTab_INVERSE_NUMBERS_AS_L = { - {&impTabL_INVERSE_NUMBERS_AS_L, - &impTabR_INVERSE_NUMBERS_AS_L}, - {&impAct0, &impAct0}}; - -static const ImpTab impTabR_INVERSE_LIKE_DIRECT = /* Odd paragraph level */ -/* In this table, conditional sequences receive the lower possible level - until proven otherwise. -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 }, -/* 1 : L */ { 1 , 0 , 1 , 2 , s(1,3), s(1,3), 0 , 1 }, -/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 }, -/* 3 : L+ON */ { s(2,1), s(3,0), 6 , 4 , 3 , 3 , s(3,0), 0 }, -/* 4 : L+ON+AN */ { s(2,1), s(3,0), 6 , 4 , 5 , 5 , s(3,0), 3 }, -/* 5 : L+AN+ON */ { s(2,1), s(3,0), 6 , 4 , 5 , 5 , s(3,0), 2 }, -/* 6 : L+ON+EN */ { s(2,1), s(3,0), 6 , 4 , 3 , 3 , s(3,0), 1 } -}; -static const ImpAct impAct1 = {0,1,13,14}; -/* FOOD FOR THOUGHT: in LTR table below, check case "JKL 123abc" - */ -static const ImpTabPair impTab_INVERSE_LIKE_DIRECT = { - {&impTabL_DEFAULT, - &impTabR_INVERSE_LIKE_DIRECT}, - {&impAct0, &impAct1}}; - -static const ImpTab impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS = -/* The case handled in this table is (visually): R EN L -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 0 , s(6,3), 0 , 1 , 0 , 0 , 0 , 0 }, -/* 1 : L+AN */ { 0 , s(6,3), 0 , 1 , s(1,2), s(3,0), 0 , 4 }, -/* 2 : L+AN+ON */ { s(2,0), s(6,3), s(2,0), 1 , 2 , s(3,0), s(2,0), 3 }, -/* 3 : R */ { 0 , s(6,3), s(5,5), s(5,6), s(1,4), s(3,0), 0 , 3 }, -/* 4 : R+ON */ { s(3,0), s(4,3), s(5,5), s(5,6), 4 , s(3,0), s(3,0), 3 }, -/* 5 : R+EN */ { s(3,0), s(4,3), 5 , s(5,6), s(1,4), s(3,0), s(3,0), 4 }, -/* 6 : R+AN */ { s(3,0), s(4,3), s(5,5), 6 , s(1,4), s(3,0), s(3,0), 4 } -}; -static const ImpTab impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS = -/* The cases handled in this table are (visually): R EN L - R L AN L -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { s(1,3), 0 , 1 , 1 , 0 , 0 , 0 , 0 }, -/* 1 : R+EN/AN */ { s(2,3), 0 , 1 , 1 , 2 , s(4,0), 0 , 1 }, -/* 2 : R+EN/AN+ON */ { s(2,3), 0 , 1 , 1 , 2 , s(4,0), 0 , 0 }, -/* 3 : L */ { 3 , 0 , 3 , s(3,6), s(1,4), s(4,0), 0 , 1 }, -/* 4 : L+ON */ { s(5,3), s(4,0), 5 , s(3,6), 4 , s(4,0), s(4,0), 0 }, -/* 5 : L+ON+EN */ { s(5,3), s(4,0), 5 , s(3,6), 4 , s(4,0), s(4,0), 1 }, -/* 6 : L+AN */ { s(5,3), s(4,0), 6 , 6 , 4 , s(4,0), s(4,0), 3 } -}; -static const ImpAct impAct2 = {0,1,2,5,6,7,8}; -static const ImpAct impAct3 = {0,1,9,10,11,12}; -static const ImpTabPair impTab_INVERSE_LIKE_DIRECT_WITH_MARKS = { - {&impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS, - &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS}, - {&impAct2, &impAct3}}; - -static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL = { - {&impTabL_NUMBERS_SPECIAL, - &impTabR_INVERSE_LIKE_DIRECT}, - {&impAct0, &impAct1}}; - -static const ImpTab impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = -/* The case handled in this table is (visually): R EN L -*/ -{ -/* L , R , EN , AN , ON , S , B , Res */ -/* 0 : init */ { 0 , s(6,2), 1 , 1 , 0 , 0 , 0 , 0 }, -/* 1 : L+EN/AN */ { 0 , s(6,2), 1 , 1 , 0 , s(3,0), 0 , 4 }, -/* 2 : R */ { 0 , s(6,2), s(5,4), s(5,4), s(1,3), s(3,0), 0 , 3 }, -/* 3 : R+ON */ { s(3,0), s(4,2), s(5,4), s(5,4), 3 , s(3,0), s(3,0), 3 }, -/* 4 : R+EN/AN */ { s(3,0), s(4,2), 4 , 4 , s(1,3), s(3,0), s(3,0), 4 } -}; -static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = { - {&impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS, - &impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS}, - {&impAct2, &impAct3}}; - -#undef s - -typedef struct { - const ImpTab * pImpTab; /* level table pointer */ - const ImpAct * pImpAct; /* action map array */ - int32_t startON; /* start of ON sequence */ - int32_t startL2EN; /* start of level 2 sequence */ - int32_t lastStrongRTL; /* index of last found R or AL */ - int32_t state; /* current state */ - int32_t runStart; /* start position of the run */ - UBiDiLevel runLevel; /* run level before implicit solving */ -} LevState; - -/*------------------------------------------------------------------------*/ - -static void -addPoint(UBiDi *pBiDi, int32_t pos, int32_t flag) - /* param pos: position where to insert - param flag: one of LRM_BEFORE, LRM_AFTER, RLM_BEFORE, RLM_AFTER - */ -{ -#define FIRSTALLOC 10 - Point point; - InsertPoints * pInsertPoints=&(pBiDi->insertPoints); - - if (pInsertPoints->capacity == 0) - { - pInsertPoints->points=uprv_malloc(sizeof(Point)*FIRSTALLOC); - if (pInsertPoints->points == NULL) - { - pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - pInsertPoints->capacity=FIRSTALLOC; - } - if (pInsertPoints->size >= pInsertPoints->capacity) /* no room for new point */ - { - void * savePoints=pInsertPoints->points; - pInsertPoints->points=uprv_realloc(pInsertPoints->points, - pInsertPoints->capacity*2*sizeof(Point)); - if (pInsertPoints->points == NULL) - { - pInsertPoints->points=savePoints; - pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - else pInsertPoints->capacity*=2; - } - point.pos=pos; - point.flag=flag; - pInsertPoints->points[pInsertPoints->size]=point; - pInsertPoints->size++; -#undef FIRSTALLOC -} - -static void -setLevelsOutsideIsolates(UBiDi *pBiDi, int32_t start, int32_t limit, UBiDiLevel level) -{ - DirProp *dirProps=pBiDi->dirProps, dirProp; - UBiDiLevel *levels=pBiDi->levels; - int32_t isolateCount=0, k; - for(k=start; kpImpTab; - const ImpAct * pImpAct=pLevState->pImpAct; - UBiDiLevel * levels=pBiDi->levels; - UBiDiLevel level, addLevel; - InsertPoints * pInsertPoints; - int32_t start0, k; - - start0=start; /* save original start position */ - oldStateSeq=(uint8_t)pLevState->state; - cell=(*pImpTab)[oldStateSeq][_prop]; - pLevState->state=GET_STATE(cell); /* isolate the new state */ - actionSeq=(*pImpAct)[GET_ACTION(cell)]; /* isolate the action */ - addLevel=(*pImpTab)[pLevState->state][IMPTABLEVELS_RES]; - - if(actionSeq) { - switch(actionSeq) { - case 1: /* init ON seq */ - pLevState->startON=start0; - break; - - case 2: /* prepend ON seq to current seq */ - start=pLevState->startON; - break; - - case 3: /* EN/AN after R+ON */ - level=pLevState->runLevel+1; - setLevelsOutsideIsolates(pBiDi, pLevState->startON, start0, level); - break; - - case 4: /* EN/AN before R for NUMBERS_SPECIAL */ - level=pLevState->runLevel+2; - setLevelsOutsideIsolates(pBiDi, pLevState->startON, start0, level); - break; - - case 5: /* L or S after possible relevant EN/AN */ - /* check if we had EN after R/AL */ - if (pLevState->startL2EN >= 0) { - addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE); - } - pLevState->startL2EN=-1; /* not within previous if since could also be -2 */ - /* check if we had any relevant EN/AN after R/AL */ - pInsertPoints=&(pBiDi->insertPoints); - if ((pInsertPoints->capacity == 0) || - (pInsertPoints->size <= pInsertPoints->confirmed)) - { - /* nothing, just clean up */ - pLevState->lastStrongRTL=-1; - /* check if we have a pending conditional segment */ - level=(*pImpTab)[oldStateSeq][IMPTABLEVELS_RES]; - if ((level & 1) && (pLevState->startON > 0)) { /* after ON */ - start=pLevState->startON; /* reset to basic run level */ - } - if (_prop == DirProp_S) /* add LRM before S */ - { - addPoint(pBiDi, start0, LRM_BEFORE); - pInsertPoints->confirmed=pInsertPoints->size; - } - break; - } - /* reset previous RTL cont to level for LTR text */ - for (k=pLevState->lastStrongRTL+1; kconfirmed=pInsertPoints->size; - pLevState->lastStrongRTL=-1; - if (_prop == DirProp_S) /* add LRM before S */ - { - addPoint(pBiDi, start0, LRM_BEFORE); - pInsertPoints->confirmed=pInsertPoints->size; - } - break; - - case 6: /* R/AL after possible relevant EN/AN */ - /* just clean up */ - pInsertPoints=&(pBiDi->insertPoints); - if (pInsertPoints->capacity > 0) - /* remove all non confirmed insert points */ - pInsertPoints->size=pInsertPoints->confirmed; - pLevState->startON=-1; - pLevState->startL2EN=-1; - pLevState->lastStrongRTL=limit - 1; - break; - - case 7: /* EN/AN after R/AL + possible cont */ - /* check for real AN */ - if ((_prop == DirProp_AN) && (pBiDi->dirProps[start0] == AN) && - (pBiDi->reorderingMode!=UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL)) - { - /* real AN */ - if (pLevState->startL2EN == -1) /* if no relevant EN already found */ - { - /* just note the righmost digit as a strong RTL */ - pLevState->lastStrongRTL=limit - 1; - break; - } - if (pLevState->startL2EN >= 0) /* after EN, no AN */ - { - addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE); - pLevState->startL2EN=-2; - } - /* note AN */ - addPoint(pBiDi, start0, LRM_BEFORE); - break; - } - /* if first EN/AN after R/AL */ - if (pLevState->startL2EN == -1) { - pLevState->startL2EN=start0; - } - break; - - case 8: /* note location of latest R/AL */ - pLevState->lastStrongRTL=limit - 1; - pLevState->startON=-1; - break; - - case 9: /* L after R+ON/EN/AN */ - /* include possible adjacent number on the left */ - for (k=start0-1; k>=0 && !(levels[k]&1); k--); - if(k>=0) { - addPoint(pBiDi, k, RLM_BEFORE); /* add RLM before */ - pInsertPoints=&(pBiDi->insertPoints); - pInsertPoints->confirmed=pInsertPoints->size; /* confirm it */ - } - pLevState->startON=start0; - break; - - case 10: /* AN after L */ - /* AN numbers between L text on both sides may be trouble. */ - /* tentatively bracket with LRMs; will be confirmed if followed by L */ - addPoint(pBiDi, start0, LRM_BEFORE); /* add LRM before */ - addPoint(pBiDi, start0, LRM_AFTER); /* add LRM after */ - break; - - case 11: /* R after L+ON/EN/AN */ - /* false alert, infirm LRMs around previous AN */ - pInsertPoints=&(pBiDi->insertPoints); - pInsertPoints->size=pInsertPoints->confirmed; - if (_prop == DirProp_S) /* add RLM before S */ - { - addPoint(pBiDi, start0, RLM_BEFORE); - pInsertPoints->confirmed=pInsertPoints->size; - } - break; - - case 12: /* L after L+ON/AN */ - level=pLevState->runLevel + addLevel; - for(k=pLevState->startON; kinsertPoints); - pInsertPoints->confirmed=pInsertPoints->size; /* confirm inserts */ - pLevState->startON=start0; - break; - - case 13: /* L after L+ON+EN/AN/ON */ - level=pLevState->runLevel; - for(k=start0-1; k>=pLevState->startON; k--) { - if(levels[k]==level+3) { - while(levels[k]==level+3) { - levels[k--]-=2; - } - while(levels[k]==level) { - k--; - } - } - if(levels[k]==level+2) { - levels[k]=level; - continue; - } - levels[k]=level+1; - } - break; - - case 14: /* R after L+ON+EN/AN/ON */ - level=pLevState->runLevel+1; - for(k=start0-1; k>=pLevState->startON; k--) { - if(levels[k]>level) { - levels[k]-=2; - } - } - break; - - default: /* we should never get here */ - U_ASSERT(FALSE); - break; - } - } - if((addLevel) || (start < start0)) { - level=pLevState->runLevel + addLevel; - if(start>=pLevState->runStart) { - for(k=start; kprologue; - int32_t length=pBiDi->proLength; - int32_t i; - UChar32 uchar; - DirProp dirProp; - for(i=length; i>0; ) { - /* i is decremented by U16_PREV */ - U16_PREV(text, 0, i, uchar); - dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar); - if(dirProp==L) { - return DirProp_L; - } - if(dirProp==R || dirProp==AL) { - return DirProp_R; - } - if(dirProp==B) { - return DirProp_ON; - } - } - return DirProp_ON; -} - -/** - * Returns the directionality of the first strong character, or digit, in the epilogue, if any. - * Requires epilogue!=null. - */ -static DirProp -firstL_R_AL_EN_AN(UBiDi *pBiDi) { - const UChar *text=pBiDi->epilogue; - int32_t length=pBiDi->epiLength; - int32_t i; - UChar32 uchar; - DirProp dirProp; - for(i=0; idirProps; - DirProp dirProp; - LevState levState; - int32_t i, start1, start2; - uint16_t oldStateImp, stateImp, actionImp; - uint8_t gprop, resProp, cell; - UBool inverseRTL; - DirProp nextStrongProp=R; - int32_t nextStrongPos=-1; - - /* check for RTL inverse BiDi mode */ - /* FOOD FOR THOUGHT: in case of RTL inverse BiDi, it would make sense to - * loop on the text characters from end to start. - * This would need a different properties state table (at least different - * actions) and different levels state tables (maybe very similar to the - * LTR corresponding ones. - */ - inverseRTL=(UBool) - ((startlastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) && - (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT || - pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL)); - - /* initialize for property and levels state tables */ - levState.startL2EN=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */ - levState.lastStrongRTL=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */ - levState.runStart=start; - levState.runLevel=pBiDi->levels[start]; - levState.pImpTab=(const ImpTab*)((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1]; - levState.pImpAct=(const ImpAct*)((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1]; - if(start==0 && pBiDi->proLength>0) { - DirProp lastStrong=lastL_R_AL(pBiDi); - if(lastStrong!=DirProp_ON) { - sor=lastStrong; - } - } - /* The isolates[] entries contain enough information to - resume the bidi algorithm in the same state as it was - when it was interrupted by an isolate sequence. */ - if(dirProps[start]==PDI && pBiDi->isolateCount >= 0) { - levState.startON=pBiDi->isolates[pBiDi->isolateCount].startON; - start1=pBiDi->isolates[pBiDi->isolateCount].start1; - stateImp=pBiDi->isolates[pBiDi->isolateCount].stateImp; - levState.state=pBiDi->isolates[pBiDi->isolateCount].state; - pBiDi->isolateCount--; - } else { - levState.startON=-1; - start1=start; - if(dirProps[start]==NSM) - stateImp = 1 + sor; - else - stateImp=0; - levState.state=0; - processPropertySeq(pBiDi, &levState, sor, start, start); - } - start2=start; /* to make Java compiler happy */ - - for(i=start; i<=limit; i++) { - if(i>=limit) { - int32_t k; - for(k=limit-1; k>start&&(DIRPROP_FLAG(dirProps[k])&MASK_BN_EXPLICIT); k--); - dirProp=dirProps[k]; - if(dirProp==LRI || dirProp==RLI) - break; /* no forced closing for sequence ending with LRI/RLI */ - gprop=eor; - } else { - DirProp prop, prop1; - prop=dirProps[i]; - if(prop==B) { - pBiDi->isolateCount=-1; /* current isolates stack entry == none */ - } - if(inverseRTL) { - if(prop==AL) { - /* AL before EN does not make it AN */ - prop=R; - } else if(prop==EN) { - if(nextStrongPos<=i) { - /* look for next strong char (L/R/AL) */ - int32_t j; - nextStrongProp=R; /* set default */ - nextStrongPos=limit; - for(j=i+1; jlength && pBiDi->epiLength>0) { - DirProp firstStrong=firstL_R_AL_EN_AN(pBiDi); - if(firstStrong!=DirProp_ON) { - eor=firstStrong; - } - } - - /* look for the last char not a BN or LRE/RLE/LRO/RLO/PDF */ - for(i=limit-1; i>start&&(DIRPROP_FLAG(dirProps[i])&MASK_BN_EXPLICIT); i--); - dirProp=dirProps[i]; - if((dirProp==LRI || dirProp==RLI) && limitlength) { - pBiDi->isolateCount++; - pBiDi->isolates[pBiDi->isolateCount].stateImp=stateImp; - pBiDi->isolates[pBiDi->isolateCount].state=levState.state; - pBiDi->isolates[pBiDi->isolateCount].start1=start1; - pBiDi->isolates[pBiDi->isolateCount].startON=levState.startON; - } - else - processPropertySeq(pBiDi, &levState, eor, limit, limit); -} - -/* perform (L1) and (X9) ---------------------------------------------------- */ - -/* - * Reset the embedding levels for some non-graphic characters (L1). - * This function also sets appropriate levels for BN, and - * explicit embedding types that are supposed to have been removed - * from the paragraph in (X9). - */ -static void -adjustWSLevels(UBiDi *pBiDi) { - const DirProp *dirProps=pBiDi->dirProps; - UBiDiLevel *levels=pBiDi->levels; - int32_t i; - - if(pBiDi->flags&MASK_WS) { - UBool orderParagraphsLTR=pBiDi->orderParagraphsLTR; - Flags flag; - - i=pBiDi->trailingWSStart; - while(i>0) { - /* reset a sequence of WS/BN before eop and B/S to the paragraph paraLevel */ - while(i>0 && (flag=DIRPROP_FLAG(dirProps[--i]))&MASK_WS) { - if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) { - levels[i]=0; - } else { - levels[i]=GET_PARALEVEL(pBiDi, i); - } - } - - /* reset BN to the next character's paraLevel until B/S, which restarts above loop */ - /* here, i+1 is guaranteed to be 0) { - flag=DIRPROP_FLAG(dirProps[--i]); - if(flag&MASK_BN_EXPLICIT) { - levels[i]=levels[i+1]; - } else if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) { - levels[i]=0; - break; - } else if(flag&MASK_B_S) { - levels[i]=GET_PARALEVEL(pBiDi, i); - break; - } - } - } - } -} - -U_CAPI void U_EXPORT2 -ubidi_setContext(UBiDi *pBiDi, - const UChar *prologue, int32_t proLength, - const UChar *epilogue, int32_t epiLength, - UErrorCode *pErrorCode) { - /* check the argument values */ - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - if(pBiDi==NULL || proLength<-1 || epiLength<-1 || - (prologue==NULL && proLength!=0) || (epilogue==NULL && epiLength!=0)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - if(proLength==-1) { - pBiDi->proLength=u_strlen(prologue); - } else { - pBiDi->proLength=proLength; - } - if(epiLength==-1) { - pBiDi->epiLength=u_strlen(epilogue); - } else { - pBiDi->epiLength=epiLength; - } - pBiDi->prologue=prologue; - pBiDi->epilogue=epilogue; -} - -static void -setParaSuccess(UBiDi *pBiDi) { - pBiDi->proLength=0; /* forget the last context */ - pBiDi->epiLength=0; - pBiDi->pParaBiDi=pBiDi; /* mark successful setPara */ -} - -#define BIDI_MIN(x, y) ((x)<(y) ? (x) : (y)) -#define BIDI_ABS(x) ((x)>=0 ? (x) : (-(x))) - -static void -setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, - UBiDiLevel paraLevel, UErrorCode *pErrorCode) { - void *runsOnlyMemory = NULL; - int32_t *visualMap; - UChar *visualText; - int32_t saveLength, saveTrailingWSStart; - const UBiDiLevel *levels; - UBiDiLevel *saveLevels; - UBiDiDirection saveDirection; - UBool saveMayAllocateText; - Run *runs; - int32_t visualLength, i, j, visualStart, logicalStart, - runCount, runLength, addedRuns, insertRemove, - start, limit, step, indexOddBit, logicalPos, - index0, index1; - uint32_t saveOptions; - - pBiDi->reorderingMode=UBIDI_REORDER_DEFAULT; - if(length==0) { - ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode); - goto cleanup3; - } - /* obtain memory for mapping table and visual text */ - runsOnlyMemory=uprv_malloc(length*(sizeof(int32_t)+sizeof(UChar)+sizeof(UBiDiLevel))); - if(runsOnlyMemory==NULL) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - goto cleanup3; - } - visualMap=runsOnlyMemory; - visualText=(UChar *)&visualMap[length]; - saveLevels=(UBiDiLevel *)&visualText[length]; - saveOptions=pBiDi->reorderingOptions; - if(saveOptions & UBIDI_OPTION_INSERT_MARKS) { - pBiDi->reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS; - pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS; - } - paraLevel&=1; /* accept only 0 or 1 */ - ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - goto cleanup3; - } - /* we cannot access directly pBiDi->levels since it is not yet set if - * direction is not MIXED - */ - levels=ubidi_getLevels(pBiDi, pErrorCode); - uprv_memcpy(saveLevels, levels, (size_t)pBiDi->length*sizeof(UBiDiLevel)); - saveTrailingWSStart=pBiDi->trailingWSStart; - saveLength=pBiDi->length; - saveDirection=pBiDi->direction; - - /* FOOD FOR THOUGHT: instead of writing the visual text, we could use - * the visual map and the dirProps array to drive the second call - * to ubidi_setPara (but must make provision for possible removal of - * BiDi controls. Alternatively, only use the dirProps array via - * customized classifier callback. - */ - visualLength=ubidi_writeReordered(pBiDi, visualText, length, - UBIDI_DO_MIRRORING, pErrorCode); - ubidi_getVisualMap(pBiDi, visualMap, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - goto cleanup2; - } - pBiDi->reorderingOptions=saveOptions; - - pBiDi->reorderingMode=UBIDI_REORDER_INVERSE_LIKE_DIRECT; - paraLevel^=1; - /* Because what we did with reorderingOptions, visualText may be shorter - * than the original text. But we don't want the levels memory to be - * reallocated shorter than the original length, since we need to restore - * the levels as after the first call to ubidi_setpara() before returning. - * We will force mayAllocateText to FALSE before the second call to - * ubidi_setpara(), and will restore it afterwards. - */ - saveMayAllocateText=pBiDi->mayAllocateText; - pBiDi->mayAllocateText=FALSE; - ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode); - pBiDi->mayAllocateText=saveMayAllocateText; - ubidi_getRuns(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - goto cleanup1; - } - /* check if some runs must be split, count how many splits */ - addedRuns=0; - runCount=pBiDi->runCount; - runs=pBiDi->runs; - visualStart=0; - for(i=0; irunsMemory[0]=runs[0]; - } - runs=pBiDi->runs=pBiDi->runsMemory; - pBiDi->runCount+=addedRuns; - } else { - goto cleanup1; - } - } - /* split runs which are not consecutive in source text */ - for(i=runCount-1; i>=0; i--) { - runLength= i==0 ? runs[0].visualLimit : - runs[i].visualLimit-runs[i-1].visualLimit; - logicalStart=runs[i].logicalStart; - indexOddBit=GET_ODD_BIT(logicalStart); - logicalStart=GET_INDEX(logicalStart); - if(runLength<2) { - if(addedRuns) { - runs[i+addedRuns]=runs[i]; - } - logicalPos=visualMap[logicalStart]; - runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, - saveLevels[logicalPos]^indexOddBit); - continue; - } - if(indexOddBit) { - start=logicalStart; - limit=logicalStart+runLength-1; - step=1; - } else { - start=logicalStart+runLength-1; - limit=logicalStart; - step=-1; - } - for(j=start; j!=limit; j+=step) { - index0=visualMap[j]; - index1=visualMap[j+step]; - if((BIDI_ABS(index0-index1)!=1) || (saveLevels[index0]!=saveLevels[index1])) { - logicalPos=BIDI_MIN(visualMap[start], index0); - runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, - saveLevels[logicalPos]^indexOddBit); - runs[i+addedRuns].visualLimit=runs[i].visualLimit; - runs[i].visualLimit-=BIDI_ABS(j-start)+1; - insertRemove=runs[i].insertRemove&(LRM_AFTER|RLM_AFTER); - runs[i+addedRuns].insertRemove=insertRemove; - runs[i].insertRemove&=~insertRemove; - start=j+step; - addedRuns--; - } - } - if(addedRuns) { - runs[i+addedRuns]=runs[i]; - } - logicalPos=BIDI_MIN(visualMap[start], visualMap[limit]); - runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, - saveLevels[logicalPos]^indexOddBit); - } - - cleanup1: - /* restore initial paraLevel */ - pBiDi->paraLevel^=1; - cleanup2: - /* restore real text */ - pBiDi->text=text; - pBiDi->length=saveLength; - pBiDi->originalLength=length; - pBiDi->direction=saveDirection; - /* the saved levels should never excess levelsSize, but we check anyway */ - if(saveLength>pBiDi->levelsSize) { - saveLength=pBiDi->levelsSize; - } - uprv_memcpy(pBiDi->levels, saveLevels, (size_t)saveLength*sizeof(UBiDiLevel)); - pBiDi->trailingWSStart=saveTrailingWSStart; - if(pBiDi->runCount>1) { - pBiDi->direction=UBIDI_MIXED; - } - cleanup3: - /* free memory for mapping table and visual text */ - uprv_free(runsOnlyMemory); - - pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY; -} - -/* ubidi_setPara ------------------------------------------------------------ */ - -U_CAPI void U_EXPORT2 -ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, - UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, - UErrorCode *pErrorCode) { - UBiDiDirection direction; - DirProp *dirProps; - - /* check the argument values */ - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - if(pBiDi==NULL || text==NULL || length<-1 || - (paraLevel>UBIDI_MAX_EXPLICIT_LEVEL && paraLevelreorderingMode==UBIDI_REORDER_RUNS_ONLY) { - setParaRunsOnly(pBiDi, text, length, paraLevel, pErrorCode); - return; - } - - /* initialize the UBiDi structure */ - pBiDi->pParaBiDi=NULL; /* mark unfinished setPara */ - pBiDi->text=text; - pBiDi->length=pBiDi->originalLength=pBiDi->resultLength=length; - pBiDi->paraLevel=paraLevel; - pBiDi->direction=paraLevel&1; - pBiDi->paraCount=1; - - pBiDi->dirProps=NULL; - pBiDi->levels=NULL; - pBiDi->runs=NULL; - pBiDi->insertPoints.size=0; /* clean up from last call */ - pBiDi->insertPoints.confirmed=0; /* clean up from last call */ - - /* - * Save the original paraLevel if contextual; otherwise, set to 0. - */ - pBiDi->defaultParaLevel=IS_DEFAULT_LEVEL(paraLevel); - - if(length==0) { - /* - * For an empty paragraph, create a UBiDi object with the paraLevel and - * the flags and the direction set but without allocating zero-length arrays. - * There is nothing more to do. - */ - if(IS_DEFAULT_LEVEL(paraLevel)) { - pBiDi->paraLevel&=1; - pBiDi->defaultParaLevel=0; - } - pBiDi->flags=DIRPROP_FLAG_LR(paraLevel); - pBiDi->runCount=0; - pBiDi->paraCount=0; - setParaSuccess(pBiDi); /* mark successful setPara */ - return; - } - - pBiDi->runCount=-1; - - /* allocate paras memory */ - if(pBiDi->parasMemory) - pBiDi->paras=pBiDi->parasMemory; - else - pBiDi->paras=pBiDi->simpleParas; - - /* - * Get the directional properties, - * the flags bit-set, and - * determine the paragraph level if necessary. - */ - if(getDirPropsMemory(pBiDi, length)) { - pBiDi->dirProps=pBiDi->dirPropsMemory; - if(!getDirProps(pBiDi)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - } else { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - dirProps=pBiDi->dirProps; - /* the processed length may have changed if UBIDI_OPTION_STREAMING */ - length= pBiDi->length; - pBiDi->trailingWSStart=length; /* the levels[] will reflect the WS run */ - - /* are explicit levels specified? */ - if(embeddingLevels==NULL) { - /* no: determine explicit levels according to the (Xn) rules */\ - if(getLevelsMemory(pBiDi, length)) { - pBiDi->levels=pBiDi->levelsMemory; - direction=resolveExplicitLevels(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - } else { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - } else { - /* set BN for all explicit codes, check that all levels are 0 or paraLevel..UBIDI_MAX_EXPLICIT_LEVEL */ - pBiDi->levels=embeddingLevels; - direction=checkExplicitLevels(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - } - - /* allocate isolate memory */ - if(pBiDi->isolateCount<=SIMPLE_ISOLATES_COUNT) - pBiDi->isolates=pBiDi->simpleIsolates; - else - if((int32_t)(pBiDi->isolateCount*sizeof(Isolate))<=pBiDi->isolatesSize) - pBiDi->isolates=pBiDi->isolatesMemory; - else { - if(getInitialIsolatesMemory(pBiDi, pBiDi->isolateCount)) { - pBiDi->isolates=pBiDi->isolatesMemory; - } else { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - } - pBiDi->isolateCount=-1; /* current isolates stack entry == none */ - - /* - * The steps after (X9) in the UBiDi algorithm are performed only if - * the paragraph text has mixed directionality! - */ - pBiDi->direction=direction; - switch(direction) { - case UBIDI_LTR: - /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ - pBiDi->trailingWSStart=0; - break; - case UBIDI_RTL: - /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ - pBiDi->trailingWSStart=0; - break; - default: - /* - * Choose the right implicit state table - */ - switch(pBiDi->reorderingMode) { - case UBIDI_REORDER_DEFAULT: - pBiDi->pImpTabPair=&impTab_DEFAULT; - break; - case UBIDI_REORDER_NUMBERS_SPECIAL: - pBiDi->pImpTabPair=&impTab_NUMBERS_SPECIAL; - break; - case UBIDI_REORDER_GROUP_NUMBERS_WITH_R: - pBiDi->pImpTabPair=&impTab_GROUP_NUMBERS_WITH_R; - break; - case UBIDI_REORDER_INVERSE_NUMBERS_AS_L: - pBiDi->pImpTabPair=&impTab_INVERSE_NUMBERS_AS_L; - break; - case UBIDI_REORDER_INVERSE_LIKE_DIRECT: - if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { - pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT_WITH_MARKS; - } else { - pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT; - } - break; - case UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL: - if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { - pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS; - } else { - pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL; - } - break; - default: - /* we should never get here */ - U_ASSERT(FALSE); - break; - } - /* - * If there are no external levels specified and there - * are no significant explicit level codes in the text, - * then we can treat the entire paragraph as one run. - * Otherwise, we need to perform the following rules on runs of - * the text with the same embedding levels. (X10) - * "Significant" explicit level codes are ones that actually - * affect non-BN characters. - * Examples for "insignificant" ones are empty embeddings - * LRE-PDF, LRE-RLE-PDF-PDF, etc. - */ - if(embeddingLevels==NULL && pBiDi->paraCount<=1 && - !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) { - resolveImplicitLevels(pBiDi, 0, length, - GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)), - GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, length-1))); - } else { - /* sor, eor: start and end types of same-level-run */ - UBiDiLevel *levels=pBiDi->levels; - int32_t start, limit=0; - UBiDiLevel level, nextLevel; - DirProp sor, eor; - - /* determine the first sor and set eor to it because of the loop body (sor=eor there) */ - level=GET_PARALEVEL(pBiDi, 0); - nextLevel=levels[0]; - if(level0) && (dirProps[start-1]==B)) { - /* except if this is a new paragraph, then set sor = para level */ - sor=GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, start)); - } else { - sor=eor; - } - - /* search for the limit of this run */ - while((++limitinsertPoints.errorCode)) - { - *pErrorCode=pBiDi->insertPoints.errorCode; - return; - } - /* reset the embedding levels for some non-graphic characters (L1), (X9) */ - adjustWSLevels(pBiDi); - break; - } - /* add RLM for inverse Bidi with contextual orientation resolving - * to RTL which would not round-trip otherwise - */ - if((pBiDi->defaultParaLevel>0) && - (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) && - ((pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT) || - (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))) { - int32_t i, j, start, last; - UBiDiLevel level; - DirProp dirProp; - for(i=0; iparaCount; i++) { - last=(pBiDi->paras[i].limit)-1; - level=pBiDi->paras[i].level; - if(level==0) - continue; /* LTR paragraph */ - start= i==0 ? 0 : pBiDi->paras[i-1].limit; - for(j=last; j>=start; j--) { - dirProp=dirProps[j]; - if(dirProp==L) { - if(jreorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { - pBiDi->resultLength -= pBiDi->controlCount; - } else { - pBiDi->resultLength += pBiDi->insertPoints.size; - } - setParaSuccess(pBiDi); /* mark successful setPara */ -} - -U_CAPI void U_EXPORT2 -ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR) { - if(pBiDi!=NULL) { - pBiDi->orderParagraphsLTR=orderParagraphsLTR; - } -} - -U_CAPI UBool U_EXPORT2 -ubidi_isOrderParagraphsLTR(UBiDi *pBiDi) { - if(pBiDi!=NULL) { - return pBiDi->orderParagraphsLTR; - } else { - return FALSE; - } -} - -U_CAPI UBiDiDirection U_EXPORT2 -ubidi_getDirection(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->direction; - } else { - return UBIDI_LTR; - } -} - -U_CAPI const UChar * U_EXPORT2 -ubidi_getText(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->text; - } else { - return NULL; - } -} - -U_CAPI int32_t U_EXPORT2 -ubidi_getLength(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->originalLength; - } else { - return 0; - } -} - -U_CAPI int32_t U_EXPORT2 -ubidi_getProcessedLength(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->length; - } else { - return 0; - } -} - -U_CAPI int32_t U_EXPORT2 -ubidi_getResultLength(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->resultLength; - } else { - return 0; - } -} - -/* paragraphs API functions ------------------------------------------------- */ - -U_CAPI UBiDiLevel U_EXPORT2 -ubidi_getParaLevel(const UBiDi *pBiDi) { - if(IS_VALID_PARA_OR_LINE(pBiDi)) { - return pBiDi->paraLevel; - } else { - return 0; - } -} - -U_CAPI int32_t U_EXPORT2 -ubidi_countParagraphs(UBiDi *pBiDi) { - if(!IS_VALID_PARA_OR_LINE(pBiDi)) { - return 0; - } else { - return pBiDi->paraCount; - } -} - -U_CAPI void U_EXPORT2 -ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, - int32_t *pParaStart, int32_t *pParaLimit, - UBiDiLevel *pParaLevel, UErrorCode *pErrorCode) { - int32_t paraStart; - - /* check the argument values */ - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode); - RETURN_VOID_IF_BAD_RANGE(paraIndex, 0, pBiDi->paraCount, *pErrorCode); - - pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */ - if(paraIndex) { - paraStart=pBiDi->paras[paraIndex-1].limit; - } else { - paraStart=0; - } - if(pParaStart!=NULL) { - *pParaStart=paraStart; - } - if(pParaLimit!=NULL) { - *pParaLimit=pBiDi->paras[paraIndex].limit; - } - if(pParaLevel!=NULL) { - *pParaLevel=GET_PARALEVEL(pBiDi, paraStart); - } -} - -U_CAPI int32_t U_EXPORT2 -ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, - int32_t *pParaStart, int32_t *pParaLimit, - UBiDiLevel *pParaLevel, UErrorCode *pErrorCode) { - int32_t paraIndex; - - /* check the argument values */ - /* pErrorCode will be checked by the call to ubidi_getParagraphByIndex */ - RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1); - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1); - pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */ - RETURN_IF_BAD_RANGE(charIndex, 0, pBiDi->length, *pErrorCode, -1); - - for(paraIndex=0; charIndex>=pBiDi->paras[paraIndex].limit; paraIndex++); - ubidi_getParagraphByIndex(pBiDi, paraIndex, pParaStart, pParaLimit, pParaLevel, pErrorCode); - return paraIndex; -} - -U_CAPI void U_EXPORT2 -ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, - const void *newContext, UBiDiClassCallback **oldFn, - const void **oldContext, UErrorCode *pErrorCode) -{ - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - if(pBiDi==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if( oldFn ) - { - *oldFn = pBiDi->fnClassCallback; - } - if( oldContext ) - { - *oldContext = pBiDi->coClassCallback; - } - pBiDi->fnClassCallback = newFn; - pBiDi->coClassCallback = newContext; -} - -U_CAPI void U_EXPORT2 -ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context) -{ - if(pBiDi==NULL) { - return; - } - if( fn ) - { - *fn = pBiDi->fnClassCallback; - } - if( context ) - { - *context = pBiDi->coClassCallback; - } -} - -U_CAPI UCharDirection U_EXPORT2 -ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c) -{ - UCharDirection dir; - - if( pBiDi->fnClassCallback == NULL || - (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT ) - { - dir = ubidi_getClass(pBiDi->bdp, c); - } - if(dir >= U_CHAR_DIRECTION_COUNT) { - dir = ON; - } - return dir; -} diff --git a/source/common/ubidi_props.c b/source/common/ubidi_props.c deleted file mode 100644 index 7c7a6ce..0000000 --- a/source/common/ubidi_props.c +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2004-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ubidi_props.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2004dec30 -* created by: Markus W. Scherer -* -* Low-level Unicode bidi/shaping properties access. -*/ - -#include "unicode/utypes.h" -#include "unicode/uset.h" -#include "unicode/udata.h" /* UDataInfo */ -#include "ucmndata.h" /* DataHeader */ -#include "udatamem.h" -#include "uassert.h" -#include "cmemory.h" -#include "utrie2.h" -#include "ubidi_props.h" -#include "ucln_cmn.h" - -struct UBiDiProps { - UDataMemory *mem; - const int32_t *indexes; - const uint32_t *mirrors; - const uint8_t *jgArray; - const uint8_t *jgArray2; - - UTrie2 trie; - uint8_t formatVersion[4]; -}; - -/* ubidi_props_data.h is machine-generated by genbidi --csource */ -#define INCLUDED_FROM_UBIDI_PROPS_C -#include "ubidi_props_data.h" - -/* UBiDiProps singleton ----------------------------------------------------- */ - -U_CFUNC const UBiDiProps * -ubidi_getSingleton() { - return &ubidi_props_singleton; -} - -/* set of property starts for UnicodeSet ------------------------------------ */ - -static UBool U_CALLCONV -_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32_t value) { - /* add the start code point to the USet */ - const USetAdder *sa=(const USetAdder *)context; - sa->add(sa->set, start); - return TRUE; -} - -U_CFUNC void -ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode) { - int32_t i, length; - UChar32 c, start, limit; - - const uint8_t *jgArray; - uint8_t prev, jg; - - if(U_FAILURE(*pErrorCode)) { - return; - } - - /* add the start code point of each same-value range of the trie */ - utrie2_enum(&bdp->trie, NULL, _enumPropertyStartsRange, sa); - - /* add the code points from the bidi mirroring table */ - length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; - for(i=0; imirrors[i]); - sa->addRange(sa->set, c, c+1); - } - - /* add the code points from the Joining_Group array where the value changes */ - start=bdp->indexes[UBIDI_IX_JG_START]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; - jgArray=bdp->jgArray; - for(;;) { - prev=0; - while(startadd(sa->set, start); - prev=jg; - } - ++start; - } - if(prev!=0) { - /* add the limit code point if the last value was not 0 (it is now start==limit) */ - sa->add(sa->set, limit); - } - if(limit==bdp->indexes[UBIDI_IX_JG_LIMIT]) { - /* switch to the second Joining_Group range */ - start=bdp->indexes[UBIDI_IX_JG_START2]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT2]; - jgArray=bdp->jgArray2; - } else { - break; - } - } - - /* add code points with hardcoded properties, plus the ones following them */ - - /* (none right now) */ -} - -/* property access functions ------------------------------------------------ */ - -U_CFUNC int32_t -ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) { - int32_t max; - - if(bdp==NULL) { - return -1; - } - - max=bdp->indexes[UBIDI_MAX_VALUES_INDEX]; - switch(which) { - case UCHAR_BIDI_CLASS: - return (max&UBIDI_CLASS_MASK); - case UCHAR_JOINING_GROUP: - return (max&UBIDI_MAX_JG_MASK)>>UBIDI_MAX_JG_SHIFT; - case UCHAR_JOINING_TYPE: - return (max&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT; - case UCHAR_BIDI_PAIRED_BRACKET_TYPE: - return (max&UBIDI_BPT_MASK)>>UBIDI_BPT_SHIFT; - default: - return -1; /* undefined */ - } -} - -U_CAPI UCharDirection -ubidi_getClass(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UCharDirection)UBIDI_GET_CLASS(props); -} - -U_CFUNC UBool -ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UBool)UBIDI_GET_FLAG(props, UBIDI_IS_MIRRORED_SHIFT); -} - -static UChar32 -getMirror(const UBiDiProps *bdp, UChar32 c, uint16_t props) { - int32_t delta=UBIDI_GET_MIRROR_DELTA(props); - if(delta!=UBIDI_ESC_MIRROR_DELTA) { - return c+delta; - } else { - /* look for mirror code point in the mirrors[] table */ - const uint32_t *mirrors; - uint32_t m; - int32_t i, length; - UChar32 c2; - - mirrors=bdp->mirrors; - length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; - - /* linear search */ - for(i=0; itrie, c); - return getMirror(bdp, c, props); -} - -U_CFUNC UBool -ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UBool)UBIDI_GET_FLAG(props, UBIDI_BIDI_CONTROL_SHIFT); -} - -U_CFUNC UBool -ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UBool)UBIDI_GET_FLAG(props, UBIDI_JOIN_CONTROL_SHIFT); -} - -U_CFUNC UJoiningType -ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UJoiningType)((props&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT); -} - -U_CFUNC UJoiningGroup -ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) { - UChar32 start, limit; - - start=bdp->indexes[UBIDI_IX_JG_START]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; - if(start<=c && cjgArray[c-start]; - } - start=bdp->indexes[UBIDI_IX_JG_START2]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT2]; - if(start<=c && cjgArray2[c-start]; - } - return U_JG_NO_JOINING_GROUP; -} - -U_CFUNC UBidiPairedBracketType -ubidi_getPairedBracketType(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - return (UBidiPairedBracketType)((props&UBIDI_BPT_MASK)>>UBIDI_BPT_SHIFT); -} - -U_CFUNC UChar32 -ubidi_getPairedBracket(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); - if((props&UBIDI_BPT_MASK)==0) { - return c; - } else { - return getMirror(bdp, c, props); - } -} - -/* public API (see uchar.h) ------------------------------------------------- */ - -U_CFUNC UCharDirection -u_charDirection(UChar32 c) { - return ubidi_getClass(&ubidi_props_singleton, c); -} - -U_CFUNC UBool -u_isMirrored(UChar32 c) { - return ubidi_isMirrored(&ubidi_props_singleton, c); -} - -U_CFUNC UChar32 -u_charMirror(UChar32 c) { - return ubidi_getMirror(&ubidi_props_singleton, c); -} - -U_STABLE UChar32 U_EXPORT2 -u_getBidiPairedBracket(UChar32 c) { - return ubidi_getPairedBracket(&ubidi_props_singleton, c); -} diff --git a/source/common/ubidi_props.h b/source/common/ubidi_props.h index 4312230..69e8853 100644 --- a/source/common/ubidi_props.h +++ b/source/common/ubidi_props.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ubidi_props.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ubidi_props_data.h b/source/common/ubidi_props_data.h index 685d2b1..8d6856d 100644 --- a/source/common/ubidi_props_data.h +++ b/source/common/ubidi_props_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 1999-2016, International Business Machines @@ -13,35 +13,35 @@ static const UVersionInfo ubidi_props_dataVersion={9,0,0,0}; -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5df0,0x5a78,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5802b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6060,0x5ce8,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5802b6}; -static const uint16_t ubidi_props_trieIndex[11572]={ +static const uint16_t ubidi_props_trieIndex[11884]={ 0x36a,0x372,0x37a,0x382,0x39a,0x3a2,0x3aa,0x3b2,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x38a,0x392, 0x38a,0x392,0x38a,0x392,0x3b8,0x3c0,0x3c8,0x3d0,0x3d8,0x3e0,0x3dc,0x3e4,0x3ec,0x3f4,0x3ef,0x3f7, 0x38a,0x392,0x38a,0x392,0x3ff,0x407,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x40d,0x415,0x41d,0x425, 0x42d,0x435,0x43d,0x445,0x44b,0x453,0x45b,0x463,0x46b,0x473,0x479,0x481,0x489,0x491,0x499,0x4a1, -0x4ad,0x4a9,0x4b5,0x41f,0x41f,0x4c5,0x4cd,0x4bd,0x4d5,0x4d7,0x4df,0x4e7,0x4ef,0x4f0,0x4f8,0x500, -0x508,0x4f0,0x510,0x515,0x508,0x4f0,0x51d,0x525,0x4ef,0x52a,0x532,0x4e7,0x537,0x38a,0x53f,0x543, -0x54b,0x54c,0x554,0x55c,0x4ef,0x564,0x56c,0x4e7,0x4ef,0x38a,0x4f8,0x4e7,0x38a,0x38a,0x572,0x38a, -0x38a,0x578,0x580,0x38a,0x38a,0x584,0x58c,0x38a,0x590,0x597,0x38a,0x59f,0x5a7,0x5ae,0x536,0x38a, -0x38a,0x5b6,0x5be,0x5c6,0x5ce,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x5d6,0x38a,0x5de,0x38a,0x38a,0x38a, -0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x5ee,0x38a,0x38a,0x38a,0x5f6,0x5f6,0x4fc,0x4fc,0x38a,0x5fc,0x604,0x5de, -0x61a,0x60c,0x60c,0x622,0x629,0x612,0x38a,0x38a,0x38a,0x631,0x639,0x38a,0x38a,0x38a,0x63b,0x643, -0x64b,0x38a,0x652,0x65a,0x38a,0x662,0x38a,0x38a,0x66a,0x66d,0x537,0x675,0x401,0x67d,0x38a,0x684, -0x38a,0x689,0x38a,0x38a,0x38a,0x38a,0x68f,0x697,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0x69f, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x6a7,0x6af,0x6b3, -0x6cb,0x6d1,0x6bb,0x6c3,0x6d9,0x6e1,0x6e5,0x5b1,0x6ed,0x6f5,0x6fd,0x38a,0x705,0x643,0x643,0x643, -0x715,0x71d,0x725,0x72d,0x732,0x73a,0x742,0x70d,0x74a,0x752,0x38a,0x758,0x75f,0x643,0x643,0x765, -0x643,0x562,0x76a,0x643,0x772,0x38a,0x38a,0x640,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, -0x643,0x643,0x643,0x643,0x643,0x77a,0x643,0x643,0x643,0x643,0x643,0x780,0x643,0x643,0x788,0x790, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643,0x643,0x7a0,0x7a7,0x7af,0x798, -0x7bf,0x7c7,0x7cf,0x7d6,0x7de,0x7e6,0x7ed,0x7b7,0x643,0x643,0x643,0x7f5,0x7fb,0x801,0x809,0x80e, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x815,0x38a,0x38a,0x38a,0x81d,0x38a,0x38a,0x38a,0x3d8, -0x825,0x82d,0x834,0x38a,0x83c,0x643,0x643,0x646,0x643,0x643,0x643,0x643,0x643,0x643,0x843,0x849, -0x859,0x851,0x38a,0x38a,0x861,0x5e6,0x38a,0x3b1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x81c, -0x3bf,0x38a,0x838,0x869,0x38a,0x871,0x80e,0x38a,0x38a,0x38a,0x38a,0x879,0x38a,0x38a,0x63b,0x3b0, +0x4ad,0x4a9,0x4b5,0x4bd,0x41f,0x4cd,0x4d5,0x4c5,0x4dd,0x4df,0x4e7,0x4ef,0x4f7,0x4f8,0x500,0x508, +0x510,0x4f8,0x518,0x51d,0x510,0x4f8,0x525,0x52d,0x4f7,0x535,0x53d,0x4ef,0x542,0x38a,0x54a,0x54e, +0x556,0x557,0x55f,0x567,0x4f7,0x56f,0x577,0x4ef,0x57f,0x581,0x500,0x4ef,0x38a,0x38a,0x589,0x38a, +0x38a,0x58f,0x597,0x38a,0x38a,0x59b,0x5a3,0x38a,0x5a7,0x5ae,0x38a,0x5b6,0x5be,0x5c5,0x541,0x38a, +0x38a,0x5cd,0x5d5,0x5dd,0x5e5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x5ed,0x38a,0x5f5,0x38a,0x38a,0x38a, +0x5fd,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x605,0x38a,0x38a,0x38a,0x60d,0x60d,0x504,0x504,0x38a,0x613,0x61b,0x5f5, +0x631,0x623,0x623,0x639,0x640,0x629,0x38a,0x38a,0x38a,0x648,0x650,0x38a,0x38a,0x38a,0x652,0x65a, +0x662,0x38a,0x669,0x671,0x38a,0x679,0x38a,0x38a,0x681,0x684,0x542,0x68c,0x401,0x694,0x38a,0x69b, +0x38a,0x6a0,0x38a,0x38a,0x38a,0x38a,0x6a6,0x6ae,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0x6b6, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x6be,0x6c6,0x6ca, +0x6e2,0x6e8,0x6d2,0x6da,0x6f0,0x6f8,0x6fc,0x5c8,0x704,0x70c,0x714,0x38a,0x71c,0x65a,0x65a,0x65a, +0x72c,0x734,0x73c,0x744,0x749,0x751,0x759,0x724,0x761,0x769,0x38a,0x76f,0x776,0x65a,0x65a,0x65a, +0x65a,0x56d,0x77c,0x65a,0x784,0x38a,0x38a,0x657,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x78c,0x65a,0x65a,0x65a,0x65a,0x65a,0x792,0x65a,0x65a,0x79a,0x7a2, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x65a,0x65a,0x65a,0x65a,0x7b2,0x7b9,0x7c1,0x7aa, +0x7d1,0x7d9,0x7e1,0x7e8,0x7f0,0x7f8,0x7ff,0x7c9,0x65a,0x65a,0x65a,0x807,0x80d,0x813,0x81b,0x820, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x827,0x38a,0x38a,0x38a,0x82f,0x38a,0x38a,0x38a,0x3d8, +0x837,0x83f,0x76c,0x38a,0x842,0x65a,0x65a,0x65d,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x849,0x84f, +0x85f,0x857,0x38a,0x38a,0x867,0x5fd,0x38a,0x3b1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x65a,0x82e, +0x3bf,0x38a,0x86f,0x877,0x38a,0x87f,0x820,0x38a,0x38a,0x38a,0x38a,0x887,0x38a,0x38a,0x652,0x3b0, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, @@ -54,7 +54,7 @@ static const uint16_t ubidi_props_trieIndex[11572]={ 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x65a,0x65a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, @@ -98,10 +98,10 @@ static const uint16_t ubidi_props_trieIndex[11572]={ 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x838,0x643,0x562,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x880,0x38a,0x38a,0x885,0x54c,0x38a,0x38a,0x592,0x643,0x63a,0x38a,0x38a,0x88d,0x38a,0x38a,0x38a, -0x895,0x89c,0x60c,0x8a4,0x38a,0x38a,0x8ab,0x8b3,0x38a,0x8ba,0x8c1,0x38a,0x4d5,0x8c6,0x38a,0x4ee, -0x38a,0x8ce,0x8d6,0x4f0,0x38a,0x8da,0x4ef,0x8e2,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8e9, +0x38a,0x38a,0x38a,0x38a,0x86f,0x65a,0x56d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x88e,0x38a,0x38a,0x893,0x557,0x38a,0x38a,0x5a9,0x65a,0x651,0x38a,0x38a,0x89b,0x38a,0x38a,0x38a, +0x8a3,0x8aa,0x623,0x8b2,0x38a,0x38a,0x8b9,0x8c1,0x38a,0x8c8,0x8cf,0x38a,0x4dd,0x8d4,0x38a,0x4f6, +0x38a,0x8dc,0x8e4,0x4f8,0x38a,0x8e8,0x4f7,0x8f0,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8f7, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, @@ -141,100 +141,100 @@ static const uint16_t ubidi_props_trieIndex[11572]={ 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8fd,0x8f1,0x8f5,0x489,0x489,0x489,0x489,0x489, -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x905,0x489,0x489,0x489,0x489,0x90d,0x911, -0x919,0x921,0x925,0x92d,0x489,0x489,0x489,0x931,0x939,0x37a,0x941,0x949,0x38a,0x38a,0x38a,0x951, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x90b,0x8ff,0x903,0x489,0x489,0x489,0x489,0x489, +0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x913,0x489,0x489,0x489,0x489,0x91b,0x91f, +0x927,0x92f,0x933,0x93b,0x489,0x489,0x489,0x93f,0x947,0x37a,0x94f,0x957,0x38a,0x38a,0x38a,0x95f, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0xe28,0xe28,0xe68,0xea8,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xee0,0xf20,0xf60,0xf70,0xfb0,0xfbc, 0xe28,0xe28,0xffc,0xe28,0xe28,0xe28,0x1034,0x1074,0x10b4,0x10f4,0x112c,0x116c,0x11ac,0x11e4,0x1224,0x1264, -0xa40,0xa80,0xac0,0xafa,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb23,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb60,0x1a0,0x1a0,0xb95,0xbd5,0xc15,0xc55,0xc95,0xcd5, +0xa40,0xa80,0xac0,0xafa,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb25,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb62,0x1a0,0x1a0,0xb97,0xbd7,0xc17,0xc57,0xc97,0xcd7, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, -0xd55,0xd65,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0xd57,0xd67,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x959,0x38a,0x643,0x643,0x961,0x5e6,0x38a,0x4e8, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x969,0x38a,0x38a,0x38a,0x970,0x38a,0x38a,0x38a,0x38a, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x967,0x38a,0x65a,0x65a,0x96f,0x5fd,0x38a,0x4f0, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x977,0x38a,0x38a,0x38a,0x97e,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x978,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x980,0x984,0x41f,0x41f,0x41f,0x41f,0x994,0x98c,0x41f,0x99c,0x41f,0x41f,0x9a4,0x9aa,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x986,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x98e,0x992,0x41f,0x41f,0x41f,0x41f,0x9a2,0x99a,0x41f,0x9aa,0x41f,0x41f,0x9b2,0x9b8,0x41f,0x41f, 0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x41f,0x41f,0x41f,0x9b2,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x4ef,0x8ad,0x9ba,0x9c1,0x401,0x9c4,0x38a,0x38a,0x4d5,0x9cc,0x38a,0x9d2,0x401,0x9d7,0x5f8,0x38a, -0x38a,0x9df,0x38a,0x38a,0x38a,0x38a,0x81d,0x9e7,0x401,0x4f0,0x54b,0x9ee,0x38a,0x38a,0x38a,0x38a, -0x38a,0x8ad,0x9f6,0x38a,0x38a,0x9fa,0xa02,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa06,0xa0e,0x38a, -0x38a,0xa16,0x54b,0x832,0x38a,0xa1e,0x38a,0x38a,0x5d6,0xa26,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x41f,0x41f,0x41f,0x9c0,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x4f7,0x8bb,0x9c8,0x9cf,0x401,0x9d2,0x38a,0x38a,0x4dd,0x9da,0x38a,0x9e0,0x401,0x9e5,0x60f,0x38a, +0x38a,0x9ed,0x38a,0x38a,0x38a,0x38a,0x82f,0x9f5,0x401,0x4f8,0x556,0x9fc,0x38a,0x38a,0x38a,0x38a, +0x38a,0x8bb,0xa04,0x38a,0x38a,0xa08,0xa10,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa14,0xa1c,0x38a, +0x38a,0xa24,0x556,0xa2c,0x38a,0xa32,0x38a,0x38a,0x5ed,0xa3a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa42,0xa46,0xa4e,0x38a,0xa55,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa5c,0x38a,0x38a,0xa64,0xa6a, +0x38a,0x38a,0x38a,0xa70,0xa78,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa7c,0x38a,0xa82,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa2a,0x38a,0x38a,0xa32,0xa38, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa3e,0x38a,0xa44,0x38a,0x38a,0x38a, +0x38a,0xa88,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa4a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x511,0xa90,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0xa97,0xa9f,0xaa5,0x38a,0x38a,0x65a,0x65a,0xaad,0x38a,0x38a,0x38a,0x38a,0x38a,0x65a, +0x65a,0xab5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xabb,0x38a,0xac2, +0x38a,0xabe,0x38a,0xac5,0x38a,0xacd,0xad1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xad9,0x3d8,0xae0,0xae7,0xaef,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x509,0xa52,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0xa59,0xa61,0xa67,0x38a,0x38a,0x643,0x643,0xa6f,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x767, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xaf7,0xaff,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa71,0x38a,0xa78,0x38a,0xa74, -0x38a,0xa7b,0x38a,0xa83,0xa87,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xa8f,0x3d8,0xa96,0xa9d,0xaa5,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0xaad,0xab5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xabd,0x41f,0xac5,0xac5,0xacc, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xb07,0x41f,0xb0f, +0xb0f,0xb16,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, 0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xad4,0x41f,0x41f,0x41f, -0x41f,0x41f,0x41f,0x41f,0x41f,0x643,0xadc,0x643,0x643,0x646,0xae1,0xae5,0x843,0xaed,0x38a,0x38a, -0xaf3,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643, -0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, -0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x768,0xafb,0x643,0x643,0x643, -0x646,0x643,0x643,0x830,0x38a,0xadc,0x643,0xb03,0x643,0xb0b,0x845,0x38a,0x38a,0xb1b,0xb23,0xb2b, -0x38a,0x844,0x38a,0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xb1e,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x65a,0xb26,0x65a,0x65a,0x65d,0xb2b,0xb2f,0x849,0xb37, +0x38a,0x38a,0xb3d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x76d,0x38a,0x38a,0x38a,0x38a,0x65a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0xb45,0xb4d,0x65a, +0x65a,0x65a,0x65d,0x65a,0x65a,0xb45,0x38a,0xb26,0x65a,0xb55,0x65a,0xb5d,0x84b,0x38a,0x38a,0xb26, +0xb61,0xb69,0x65f,0x65c,0x38a,0xb71,0x56d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0xb13,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb79,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, 0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0xb13,0xb3b,0xb33,0xb33,0xb33,0xb3c,0xb3c,0xb3c,0xb3c,0x3d8,0x3d8,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0xb44,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, -0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, -0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, -0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, -0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0x369,0x369,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb79,0xb89,0xb81,0xb81,0xb81,0xb8a,0xb8a,0xb8a,0xb8a,0x3d8, +0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0xb92,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a, +0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a, +0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a, +0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a, +0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0xb8a,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4,4,4,0xa,0xa, 0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, @@ -319,6 +319,8 @@ static const uint16_t ubidi_props_trieIndex[11572]={ 1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1, 0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1,1,0xb1,0xb1,0xb1, +1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d, @@ -346,400 +348,417 @@ static const uint16_t ubidi_props_trieIndex[11572]={ 0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0xb1,0xb1,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,0x11,0x11, +0x11,0x11,0x11,0x11,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0, +0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, -0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0, -0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, +0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,0,0,0,0, +0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x11,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x11, +0x11,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1, +0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x310a, +0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a, -0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,4,0,0xb1,0,0,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1, +0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1, -0,0,0,0,0xa,0,0,0,0xa,0xa,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, +0xa,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0, -0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa, -6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2, -0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0, -2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9, -9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae, -0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa, -0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,3,3, -0xa,0x310a,0xf20a,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,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0, -0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0, -0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0, -0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, -0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, -0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a, -0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a, -0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a, -0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, -0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, -0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a, -0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0,0,0, +0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x11,0x11, +0x11,0x11,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815, +0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0,2,2,2,2, +2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9,9,9,9,9, +9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6, +4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +2,2,2,2,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, +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, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0,0,0,0,0, +0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, +0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0,0,0,4,0, +0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0, +0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, -0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa, -0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa, -0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, +0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a, +0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa, +0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a, +0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a, +0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a, +0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa, +0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a, +0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa, -0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a, -0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a, -0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa, -0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a, -0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a, -0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa, -0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, -0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa, -0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa, -0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, -0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, -0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa, +0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa, +0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa, +0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a, +0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa, +0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a, +0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a, +0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a, +0xf20a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa, +0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a, +0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a, +0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a, +0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a, +0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a, +0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a, +0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0, -0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa, -0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a, +0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0,0,0, -0,0xa,0xa,0xa,9,0xa,0xa,0xa,0xa,0,0,0,0x310a,0xf20a,0x310a,0xf20a, -0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa, -0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xa,0,0,0, +0,0,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,9,0xa,0xa,0xa, +0xa,0,0,0,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa, +0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,0,0xb1, +0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xa, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0,0,0, +0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, +0,0,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +4,4,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0, -0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1, -0xb1,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0, -0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0,0, -0,0xb1,0,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,3,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0, +0,0xb1,0,0,0xb1,0,0,0,0,0xb1,0,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,3,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1,0xb1,1,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a, -0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa, -0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0, +0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3, +0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3, -6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa, -0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x510a, -0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4, +4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2, +2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,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,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa, -0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a, +0xa,0xa,0,0,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,0xa,0xa, +0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0xb1,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0xb1,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,1,1,1,1,1,1,1,0xa, -1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1, +1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1, -0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81, +0xb1,0xb1,0xb1,1,1,1,1,0xb1,0x41,0x81,1,1,0x81,0xb1,0xb1,1, +1,1,1,0x41,0x41,0x41,0x41,0x81,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x81,1,0x81, +1,0x81,0x81,1,1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61, +0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81, -0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41, +1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41, +0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,0x41,0x81,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,0x81,0x81,0x81,0x81,0x41,0x41,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81, -0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0x81,0x81,0x81,0x81,0x41,0x41,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,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0, +0,0xb1,0xb1,0,0,0xa0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xa0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1, +0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xb1,0,0,0,0, +0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0xb1, +0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0,0xb1, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, 0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1, 0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0x11,0x11,0x11,0x11,0x11,0x11,0, +0,0x11,0x11,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x11,0x11,0x11,0x11,0x11, +0x11,0,0,0x11,0x11,0x11,0x11,0,0,0,0,0,0,0,0,0x11, +0,0,0,0,0,0,0,0,0,0x11,0x11,0x11,0x11,0x11,0x11,0, +0,0x11,0x11,0x11,0,0,0,0,0,0,0,0,0,0,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0x11,0x11,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1, -0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, +0,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0,0x11,0,0x11,0x11,0,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0,0x11,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, -0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb2,0xb2,0xb2,0xb2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, -1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2, +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, +0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,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,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2, +2,2,2,2,2,2,2,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,0xa, -0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x12,0x12,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xb2,0xb2,0xb2,0xb2, +0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, -0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0,0,0,0 +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0,0,0 }; static const uint32_t ubidi_props_mirrors[26]={ @@ -809,13 +828,13 @@ static const UBiDiProps ubidi_props_singleton={ ubidi_props_trieIndex+3496, NULL, 3496, - 8076, + 8388, 0x1a0, 0xe28, 0x0, 0x0, 0x110000, - 0x2d30, + 0x2e68, NULL, 0, FALSE, FALSE, 0, NULL }, { 2,2,0,0 } diff --git a/source/common/ubidiimp.h b/source/common/ubidiimp.h index a62d8b2..fd64fac 100644 --- a/source/common/ubidiimp.h +++ b/source/common/ubidiimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ubidiimp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ubidiln.c b/source/common/ubidiln.c deleted file mode 100644 index 688ca4c..0000000 --- a/source/common/ubidiln.c +++ /dev/null @@ -1,1349 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: ubidiln.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999aug06 -* created by: Markus W. Scherer, updated by Matitiahu Allouche -*/ - -#include "cmemory.h" -#include "unicode/utypes.h" -#include "unicode/ustring.h" -#include "unicode/uchar.h" -#include "unicode/ubidi.h" -#include "ubidiimp.h" -#include "uassert.h" - -/* - * General remarks about the functions in this file: - * - * These functions deal with the aspects of potentially mixed-directional - * text in a single paragraph or in a line of a single paragraph - * which has already been processed according to - * the Unicode 6.3 BiDi algorithm as defined in - * http://www.unicode.org/unicode/reports/tr9/ , version 28, - * also described in The Unicode Standard, Version 6.3.0 . - * - * This means that there is a UBiDi object with a levels - * and a dirProps array. - * paraLevel and direction are also set. - * Only if the length of the text is zero, then levels==dirProps==NULL. - * - * The overall directionality of the paragraph - * or line is used to bypass the reordering steps if possible. - * Even purely RTL text does not need reordering there because - * the ubidi_getLogical/VisualIndex() functions can compute the - * index on the fly in such a case. - * - * The implementation of the access to same-level-runs and of the reordering - * do attempt to provide better performance and less memory usage compared to - * a direct implementation of especially rule (L2) with an array of - * one (32-bit) integer per text character. - * - * Here, the levels array is scanned as soon as necessary, and a vector of - * same-level-runs is created. Reordering then is done on this vector. - * For each run of text positions that were resolved to the same level, - * only 8 bytes are stored: the first text position of the run and the visual - * position behind the run after reordering. - * One sign bit is used to hold the directionality of the run. - * This is inefficient if there are many very short runs. If the average run - * length is <2, then this uses more memory. - * - * In a further attempt to save memory, the levels array is never changed - * after all the resolution rules (Xn, Wn, Nn, In). - * Many functions have to consider the field trailingWSStart: - * if it is less than length, then there is an implicit trailing run - * at the paraLevel, - * which is not reflected in the levels array. - * This allows a line UBiDi object to use the same levels array as - * its paragraph parent object. - * - * When a UBiDi object is created for a line of a paragraph, then the - * paragraph's levels and dirProps arrays are reused by way of setting - * a pointer into them, not by copying. This again saves memory and forbids to - * change the now shared levels for (L1). - */ - -/* handle trailing WS (L1) -------------------------------------------------- */ - -/* - * setTrailingWSStart() sets the start index for a trailing - * run of WS in the line. This is necessary because we do not modify - * the paragraph's levels array that we just point into. - * Using trailingWSStart is another form of performing (L1). - * - * To make subsequent operations easier, we also include the run - * before the WS if it is at the paraLevel - we merge the two here. - * - * This function is called only from ubidi_setLine(), so pBiDi->paraLevel is - * set correctly for the line even when contextual multiple paragraphs. - */ -static void -setTrailingWSStart(UBiDi *pBiDi) { - /* pBiDi->direction!=UBIDI_MIXED */ - - const DirProp *dirProps=pBiDi->dirProps; - UBiDiLevel *levels=pBiDi->levels; - int32_t start=pBiDi->length; - UBiDiLevel paraLevel=pBiDi->paraLevel; - - /* If the line is terminated by a block separator, all preceding WS etc... - are already set to paragraph level. - Setting trailingWSStart to pBidi->length will avoid changing the - level of B chars from 0 to paraLevel in ubidi_getLevels when - orderParagraphsLTR==TRUE. - */ - if(dirProps[start-1]==B) { - pBiDi->trailingWSStart=start; /* currently == pBiDi->length */ - return; - } - /* go backwards across all WS, BN, explicit codes */ - while(start>0 && DIRPROP_FLAG(dirProps[start-1])&MASK_WS) { - --start; - } - - /* if the WS run can be merged with the previous run then do so here */ - while(start>0 && levels[start-1]==paraLevel) { - --start; - } - - pBiDi->trailingWSStart=start; -} - -/* ubidi_setLine ------------------------------------------------------------ */ - -U_CAPI void U_EXPORT2 -ubidi_setLine(const UBiDi *pParaBiDi, - int32_t start, int32_t limit, - UBiDi *pLineBiDi, - UErrorCode *pErrorCode) { - int32_t length; - - /* check the argument values */ - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - RETURN_VOID_IF_NOT_VALID_PARA(pParaBiDi, *pErrorCode); - RETURN_VOID_IF_BAD_RANGE(start, 0, limit, *pErrorCode); - RETURN_VOID_IF_BAD_RANGE(limit, 0, pParaBiDi->length+1, *pErrorCode); - if(pLineBiDi==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) != - ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) { - /* the line crosses a paragraph boundary */ - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - /* set the values in pLineBiDi from its pParaBiDi parent */ - pLineBiDi->pParaBiDi=NULL; /* mark unfinished setLine */ - pLineBiDi->text=pParaBiDi->text+start; - length=pLineBiDi->length=limit-start; - pLineBiDi->resultLength=pLineBiDi->originalLength=length; - pLineBiDi->paraLevel=GET_PARALEVEL(pParaBiDi, start); - pLineBiDi->paraCount=pParaBiDi->paraCount; - pLineBiDi->runs=NULL; - pLineBiDi->flags=0; - pLineBiDi->reorderingMode=pParaBiDi->reorderingMode; - pLineBiDi->reorderingOptions=pParaBiDi->reorderingOptions; - pLineBiDi->controlCount=0; - if(pParaBiDi->controlCount>0) { - int32_t j; - for(j=start; jtext[j])) { - pLineBiDi->controlCount++; - } - } - pLineBiDi->resultLength-=pLineBiDi->controlCount; - } - - pLineBiDi->dirProps=pParaBiDi->dirProps+start; - pLineBiDi->levels=pParaBiDi->levels+start; - pLineBiDi->runCount=-1; - - if(pParaBiDi->direction!=UBIDI_MIXED) { - /* the parent is already trivial */ - pLineBiDi->direction=pParaBiDi->direction; - - /* - * The parent's levels are all either - * implicitly or explicitly ==paraLevel; - * do the same here. - */ - if(pParaBiDi->trailingWSStart<=start) { - pLineBiDi->trailingWSStart=0; - } else if(pParaBiDi->trailingWSStarttrailingWSStart=pParaBiDi->trailingWSStart-start; - } else { - pLineBiDi->trailingWSStart=length; - } - } else { - const UBiDiLevel *levels=pLineBiDi->levels; - int32_t i, trailingWSStart; - UBiDiLevel level; - - setTrailingWSStart(pLineBiDi); - trailingWSStart=pLineBiDi->trailingWSStart; - - /* recalculate pLineBiDi->direction */ - if(trailingWSStart==0) { - /* all levels are at paraLevel */ - pLineBiDi->direction=(UBiDiDirection)(pLineBiDi->paraLevel&1); - } else { - /* get the level of the first character */ - level=(UBiDiLevel)(levels[0]&1); - - /* if there is anything of a different level, then the line is mixed */ - if(trailingWSStartparaLevel&1)!=level) { - /* the trailing WS is at paraLevel, which differs from levels[0] */ - pLineBiDi->direction=UBIDI_MIXED; - } else { - /* see if levels[1..trailingWSStart-1] have the same direction as levels[0] and paraLevel */ - i=1; - for(;;) { - if(i==trailingWSStart) { - /* the direction values match those in level */ - pLineBiDi->direction=(UBiDiDirection)level; - break; - } else if((levels[i]&1)!=level) { - pLineBiDi->direction=UBIDI_MIXED; - break; - } - ++i; - } - } - } - - switch(pLineBiDi->direction) { - case UBIDI_LTR: - /* make sure paraLevel is even */ - pLineBiDi->paraLevel=(UBiDiLevel)((pLineBiDi->paraLevel+1)&~1); - - /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ - pLineBiDi->trailingWSStart=0; - break; - case UBIDI_RTL: - /* make sure paraLevel is odd */ - pLineBiDi->paraLevel|=1; - - /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ - pLineBiDi->trailingWSStart=0; - break; - default: - break; - } - } - pLineBiDi->pParaBiDi=pParaBiDi; /* mark successful setLine */ - return; -} - -U_CAPI UBiDiLevel U_EXPORT2 -ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex) { - /* return paraLevel if in the trailing WS run, otherwise the real level */ - if(!IS_VALID_PARA_OR_LINE(pBiDi) || charIndex<0 || pBiDi->length<=charIndex) { - return 0; - } else if(pBiDi->direction!=UBIDI_MIXED || charIndex>=pBiDi->trailingWSStart) { - return GET_PARALEVEL(pBiDi, charIndex); - } else { - return pBiDi->levels[charIndex]; - } -} - -U_CAPI const UBiDiLevel * U_EXPORT2 -ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { - int32_t start, length; - - RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, NULL); - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, NULL); - if((length=pBiDi->length)<=0) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - if((start=pBiDi->trailingWSStart)==length) { - /* the current levels array reflects the WS run */ - return pBiDi->levels; - } - - /* - * After the previous if(), we know that the levels array - * has an implicit trailing WS run and therefore does not fully - * reflect itself all the levels. - * This must be a UBiDi object for a line, and - * we need to create a new levels array. - */ - if(getLevelsMemory(pBiDi, length)) { - UBiDiLevel *levels=pBiDi->levelsMemory; - - if(start>0 && levels!=pBiDi->levels) { - uprv_memcpy(levels, pBiDi->levels, start); - } - /* pBiDi->paraLevel is ok even if contextual multiple paragraphs, - since pBidi is a line object */ - uprv_memset(levels+start, pBiDi->paraLevel, length-start); - - /* this new levels array is set for the line and reflects the WS run */ - pBiDi->trailingWSStart=length; - return pBiDi->levels=levels; - } else { - /* out of memory */ - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return NULL; - } -} - -U_CAPI void U_EXPORT2 -ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, - int32_t *pLogicalLimit, UBiDiLevel *pLevel) { - UErrorCode errorCode; - int32_t runCount, visualStart, logicalLimit, logicalFirst, i; - Run iRun; - - errorCode=U_ZERO_ERROR; - RETURN_VOID_IF_BAD_RANGE(logicalPosition, 0, pBiDi->length, errorCode); - /* ubidi_countRuns will check VALID_PARA_OR_LINE */ - runCount=ubidi_countRuns((UBiDi *)pBiDi, &errorCode); - if(U_FAILURE(errorCode)) { - return; - } - /* this is done based on runs rather than on levels since levels have - a special interpretation when UBIDI_REORDER_RUNS_ONLY - */ - visualStart=logicalLimit=0; - iRun=pBiDi->runs[0]; - - for(i=0; iruns[i]; - logicalFirst=GET_INDEX(iRun.logicalStart); - logicalLimit=logicalFirst+iRun.visualLimit-visualStart; - if((logicalPosition>=logicalFirst) && - (logicalPositionreorderingMode==UBIDI_REORDER_RUNS_ONLY) { - *pLevel=(UBiDiLevel)GET_ODD_BIT(iRun.logicalStart); - } - else if(pBiDi->direction!=UBIDI_MIXED || logicalPosition>=pBiDi->trailingWSStart) { - *pLevel=GET_PARALEVEL(pBiDi, logicalPosition); - } else { - *pLevel=pBiDi->levels[logicalPosition]; - } - } -} - -/* runs API functions ------------------------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) { - RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1); - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1); - ubidi_getRuns(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return -1; - } - return pBiDi->runCount; -} - -U_CAPI UBiDiDirection U_EXPORT2 -ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, - int32_t *pLogicalStart, int32_t *pLength) -{ - int32_t start; - UErrorCode errorCode = U_ZERO_ERROR; - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, errorCode, UBIDI_LTR); - ubidi_getRuns(pBiDi, &errorCode); - if(U_FAILURE(errorCode)) { - return UBIDI_LTR; - } - RETURN_IF_BAD_RANGE(runIndex, 0, pBiDi->runCount, errorCode, UBIDI_LTR); - - start=pBiDi->runs[runIndex].logicalStart; - if(pLogicalStart!=NULL) { - *pLogicalStart=GET_INDEX(start); - } - if(pLength!=NULL) { - if(runIndex>0) { - *pLength=pBiDi->runs[runIndex].visualLimit- - pBiDi->runs[runIndex-1].visualLimit; - } else { - *pLength=pBiDi->runs[0].visualLimit; - } - } - return (UBiDiDirection)GET_ODD_BIT(start); -} - -/* in trivial cases there is only one trivial run; called by ubidi_getRuns() */ -static void -getSingleRun(UBiDi *pBiDi, UBiDiLevel level) { - /* simple, single-run case */ - pBiDi->runs=pBiDi->simpleRuns; - pBiDi->runCount=1; - - /* fill and reorder the single run */ - pBiDi->runs[0].logicalStart=MAKE_INDEX_ODD_PAIR(0, level); - pBiDi->runs[0].visualLimit=pBiDi->length; - pBiDi->runs[0].insertRemove=0; -} - -/* reorder the runs array (L2) ---------------------------------------------- */ - -/* - * Reorder the same-level runs in the runs array. - * Here, runCount>1 and maxLevel>=minLevel>=paraLevel. - * All the visualStart fields=logical start before reordering. - * The "odd" bits are not set yet. - * - * Reordering with this data structure lends itself to some handy shortcuts: - * - * Since each run is moved but not modified, and since at the initial maxLevel - * each sequence of same-level runs consists of only one run each, we - * don't need to do anything there and can predecrement maxLevel. - * In many simple cases, the reordering is thus done entirely in the - * index mapping. - * Also, reordering occurs only down to the lowest odd level that occurs, - * which is minLevel|1. However, if the lowest level itself is odd, then - * in the last reordering the sequence of the runs at this level or higher - * will be all runs, and we don't need the elaborate loop to search for them. - * This is covered by ++minLevel instead of minLevel|=1 followed - * by an extra reorder-all after the reorder-some loop. - * About a trailing WS run: - * Such a run would need special treatment because its level is not - * reflected in levels[] if this is not a paragraph object. - * Instead, all characters from trailingWSStart on are implicitly at - * paraLevel. - * However, for all maxLevel>paraLevel, this run will never be reordered - * and does not need to be taken into account. maxLevel==paraLevel is only reordered - * if minLevel==paraLevel is odd, which is done in the extra segment. - * This means that for the main reordering loop we don't need to consider - * this run and can --runCount. If it is later part of the all-runs - * reordering, then runCount is adjusted accordingly. - */ -static void -reorderLine(UBiDi *pBiDi, UBiDiLevel minLevel, UBiDiLevel maxLevel) { - Run *runs, tempRun; - UBiDiLevel *levels; - int32_t firstRun, endRun, limitRun, runCount; - - /* nothing to do? */ - if(maxLevel<=(minLevel|1)) { - return; - } - - /* - * Reorder only down to the lowest odd level - * and reorder at an odd minLevel in a separate, simpler loop. - * See comments above for why minLevel is always incremented. - */ - ++minLevel; - - runs=pBiDi->runs; - levels=pBiDi->levels; - runCount=pBiDi->runCount; - - /* do not include the WS run at paraLevel<=old minLevel except in the simple loop */ - if(pBiDi->trailingWSStartlength) { - --runCount; - } - - while(--maxLevel>=minLevel) { - firstRun=0; - - /* loop for all sequences of runs */ - for(;;) { - /* look for a sequence of runs that are all at >=maxLevel */ - /* look for the first run of such a sequence */ - while(firstRun=runCount) { - break; /* no more such runs */ - } - - /* look for the limit run of such a sequence (the run behind it) */ - for(limitRun=firstRun; ++limitRun=maxLevel;) {} - - /* Swap the entire sequence of runs from firstRun to limitRun-1. */ - endRun=limitRun-1; - while(firstRuntrailingWSStart==pBiDi->length) { - --runCount; - } - - /* Swap the entire sequence of all runs. (endRun==runCount) */ - while(firstRunruns; - int32_t runCount=pBiDi->runCount, visualStart=0, i, length, logicalStart; - - for(i=0; i=logicalStart) && (logicalIndex<(logicalStart+length))) { - return i; - } - visualStart+=length; - } - /* we should never get here */ - U_ASSERT(FALSE); - *pErrorCode = U_INVALID_STATE_ERROR; - return 0; -} - -/* - * Compute the runs array from the levels array. - * After ubidi_getRuns() returns TRUE, runCount is guaranteed to be >0 - * and the runs are reordered. - * Odd-level runs have visualStart on their visual right edge and - * they progress visually to the left. - * If option UBIDI_OPTION_INSERT_MARKS is set, insertRemove will contain the - * sum of appropriate LRM/RLM_BEFORE/AFTER flags. - * If option UBIDI_OPTION_REMOVE_CONTROLS is set, insertRemove will contain the - * negative number of BiDi control characters within this run. - */ -U_CFUNC UBool -ubidi_getRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) { - /* - * This method returns immediately if the runs are already set. This - * includes the case of length==0 (handled in setPara).. - */ - if (pBiDi->runCount>=0) { - return TRUE; - } - - if(pBiDi->direction!=UBIDI_MIXED) { - /* simple, single-run case - this covers length==0 */ - /* pBiDi->paraLevel is ok even for contextual multiple paragraphs */ - getSingleRun(pBiDi, pBiDi->paraLevel); - } else /* UBIDI_MIXED, length>0 */ { - /* mixed directionality */ - int32_t length=pBiDi->length, limit; - UBiDiLevel *levels=pBiDi->levels; - int32_t i, runCount; - UBiDiLevel level=UBIDI_DEFAULT_LTR; /* initialize with no valid level */ - /* - * If there are WS characters at the end of the line - * and the run preceding them has a level different from - * paraLevel, then they will form their own run at paraLevel (L1). - * Count them separately. - * We need some special treatment for this in order to not - * modify the levels array which a line UBiDi object shares - * with its paragraph parent and its other line siblings. - * In other words, for the trailing WS, it may be - * levels[]!=paraLevel but we have to treat it like it were so. - */ - limit=pBiDi->trailingWSStart; - /* count the runs, there is at least one non-WS run, and limit>0 */ - runCount=0; - for(i=0; i1 || limit1 */ - if(getRunsMemory(pBiDi, runCount)) { - runs=pBiDi->runsMemory; - } else { - return FALSE; - } - - /* set the runs */ - /* FOOD FOR THOUGHT: this could be optimized, e.g.: - * 464->444, 484->444, 575->555, 595->555 - * However, that would take longer. Check also how it would - * interact with BiDi control removal and inserting Marks. - */ - runIndex=0; - - /* search for the run limits and initialize visualLimit values with the run lengths */ - i=0; - do { - /* prepare this run */ - start=i; - level=levels[i]; - if(levelmaxLevel) { - maxLevel=level; - } - - /* look for the run limit */ - while(++iparaLevel is ok even - if contextual multiple paragraphs. */ - if(pBiDi->paraLevelparaLevel; - } - } - - /* set the object fields */ - pBiDi->runs=runs; - pBiDi->runCount=runCount; - - reorderLine(pBiDi, minLevel, maxLevel); - - /* now add the direction flags and adjust the visualLimit's to be just that */ - /* this loop will also handle the trailing WS run */ - limit=0; - for(i=0; iparaLevel is ok even if - contextual multiple paragraphs. */ - if(runIndexparaLevel & 1) != 0)? 0 : runIndex; - - ADD_ODD_BIT_FROM_LEVEL(runs[trailingRun].logicalStart, pBiDi->paraLevel); - } - } - } - - /* handle insert LRM/RLM BEFORE/AFTER run */ - if(pBiDi->insertPoints.size>0) { - Point *point, *start=pBiDi->insertPoints.points, - *limit=start+pBiDi->insertPoints.size; - int32_t runIndex; - for(point=start; pointpos, pErrorCode); - pBiDi->runs[runIndex].insertRemove|=point->flag; - } - } - - /* handle remove BiDi control characters */ - if(pBiDi->controlCount>0) { - int32_t runIndex; - const UChar *start=pBiDi->text, *limit=start+pBiDi->length, *pu; - for(pu=start; puruns[runIndex].insertRemove--; - } - } - } - - return TRUE; -} - -static UBool -prepareReorder(const UBiDiLevel *levels, int32_t length, - int32_t *indexMap, - UBiDiLevel *pMinLevel, UBiDiLevel *pMaxLevel) { - int32_t start; - UBiDiLevel level, minLevel, maxLevel; - - if(levels==NULL || length<=0) { - return FALSE; - } - - /* determine minLevel and maxLevel */ - minLevel=UBIDI_MAX_EXPLICIT_LEVEL+1; - maxLevel=0; - for(start=length; start>0;) { - level=levels[--start]; - if(level>UBIDI_MAX_EXPLICIT_LEVEL+1) { - return FALSE; - } - if(levelmaxLevel) { - maxLevel=level; - } - } - *pMinLevel=minLevel; - *pMaxLevel=maxLevel; - - /* initialize the index map */ - for(start=length; start>0;) { - --start; - indexMap[start]=start; - } - - return TRUE; -} - -/* reorder a line based on a levels array (L2) ------------------------------ */ - -U_CAPI void U_EXPORT2 -ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { - int32_t start, limit, sumOfSosEos; - UBiDiLevel minLevel = 0, maxLevel = 0; - - if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) { - return; - } - - /* nothing to do? */ - if(minLevel==maxLevel && (minLevel&1)==0) { - return; - } - - /* reorder only down to the lowest odd level */ - minLevel|=1; - - /* loop maxLevel..minLevel */ - do { - start=0; - - /* loop for all sequences of levels to reorder at the current maxLevel */ - for(;;) { - /* look for a sequence of levels that are all at >=maxLevel */ - /* look for the first index of such a sequence */ - while(start=length) { - break; /* no more such sequences */ - } - - /* look for the limit of such a sequence (the index behind it) */ - for(limit=start; ++limit=maxLevel;) {} - - /* - * sos=start of sequence, eos=end of sequence - * - * The closed (inclusive) interval from sos to eos includes all the logical - * and visual indexes within this sequence. They are logically and - * visually contiguous and in the same range. - * - * For each run, the new visual index=sos+eos-old visual index; - * we pre-add sos+eos into sumOfSosEos -> - * new visual index=sumOfSosEos-old visual index; - */ - sumOfSosEos=start+limit-1; - - /* reorder each index in the sequence */ - do { - indexMap[start]=sumOfSosEos-indexMap[start]; - } while(++start=minLevel); -} - -U_CAPI void U_EXPORT2 -ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { - int32_t start, end, limit, temp; - UBiDiLevel minLevel = 0, maxLevel = 0; - - if(indexMap==NULL || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) { - return; - } - - /* nothing to do? */ - if(minLevel==maxLevel && (minLevel&1)==0) { - return; - } - - /* reorder only down to the lowest odd level */ - minLevel|=1; - - /* loop maxLevel..minLevel */ - do { - start=0; - - /* loop for all sequences of levels to reorder at the current maxLevel */ - for(;;) { - /* look for a sequence of levels that are all at >=maxLevel */ - /* look for the first index of such a sequence */ - while(start=length) { - break; /* no more such runs */ - } - - /* look for the limit of such a sequence (the index behind it) */ - for(limit=start; ++limit=maxLevel;) {} - - /* - * Swap the entire interval of indexes from start to limit-1. - * We don't need to swap the levels for the purpose of this - * algorithm: the sequence of levels that we look at does not - * move anyway. - */ - end=limit-1; - while(start=minLevel); -} - -/* API functions for logical<->visual mapping ------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) { - int32_t visualIndex=UBIDI_MAP_NOWHERE; - RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1); - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1); - RETURN_IF_BAD_RANGE(logicalIndex, 0, pBiDi->length, *pErrorCode, -1); - - /* we can do the trivial cases without the runs array */ - switch(pBiDi->direction) { - case UBIDI_LTR: - visualIndex=logicalIndex; - break; - case UBIDI_RTL: - visualIndex=pBiDi->length-logicalIndex-1; - break; - default: - if(!ubidi_getRuns(pBiDi, pErrorCode)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return -1; - } else { - Run *runs=pBiDi->runs; - int32_t i, visualStart=0, offset, length; - - /* linear search for the run, search on the visual runs */ - for(i=0; irunCount; ++i) { - length=runs[i].visualLimit-visualStart; - offset=logicalIndex-GET_INDEX(runs[i].logicalStart); - if(offset>=0 && offset=pBiDi->runCount) { - return UBIDI_MAP_NOWHERE; - } - } - } - - if(pBiDi->insertPoints.size>0) { - /* add the number of added marks until the calculated visual index */ - Run *runs=pBiDi->runs; - int32_t i, length, insertRemove; - int32_t visualStart=0, markFound=0; - for(i=0; ; i++, visualStart+=length) { - length=runs[i].visualLimit-visualStart; - insertRemove=runs[i].insertRemove; - if(insertRemove & (LRM_BEFORE|RLM_BEFORE)) { - markFound++; - } - /* is it the run containing the visual index? */ - if(visualIndexcontrolCount>0) { - /* subtract the number of controls until the calculated visual index */ - Run *runs=pBiDi->runs; - int32_t i, j, start, limit, length, insertRemove; - int32_t visualStart=0, controlFound=0; - UChar uchar=pBiDi->text[logicalIndex]; - /* is the logical index pointing to a control ? */ - if(IS_BIDI_CONTROL_CHAR(uchar)) { - return UBIDI_MAP_NOWHERE; - } - /* loop on runs */ - for(i=0; ; i++, visualStart+=length) { - length=runs[i].visualLimit-visualStart; - insertRemove=runs[i].insertRemove; - /* calculated visual index is beyond this run? */ - if(visualIndex>=runs[i].visualLimit) { - controlFound-=insertRemove; - continue; - } - /* calculated visual index must be within current run */ - if(insertRemove==0) { - return visualIndex-controlFound; - } - if(IS_EVEN_RUN(runs[i].logicalStart)) { - /* LTR: check from run start to logical index */ - start=runs[i].logicalStart; - limit=logicalIndex; - } else { - /* RTL: check from logical index to run end */ - start=logicalIndex+1; - limit=GET_INDEX(runs[i].logicalStart)+length; - } - for(j=start; jtext[j]; - if(IS_BIDI_CONTROL_CHAR(uchar)) { - controlFound++; - } - } - return visualIndex-controlFound; - } - } - - return visualIndex; -} - -U_CAPI int32_t U_EXPORT2 -ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) { - Run *runs; - int32_t i, runCount, start; - RETURN_IF_NULL_OR_FAILING_ERRCODE(pErrorCode, -1); - RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1); - RETURN_IF_BAD_RANGE(visualIndex, 0, pBiDi->resultLength, *pErrorCode, -1); - /* we can do the trivial cases without the runs array */ - if(pBiDi->insertPoints.size==0 && pBiDi->controlCount==0) { - if(pBiDi->direction==UBIDI_LTR) { - return visualIndex; - } - else if(pBiDi->direction==UBIDI_RTL) { - return pBiDi->length-visualIndex-1; - } - } - if(!ubidi_getRuns(pBiDi, pErrorCode)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return -1; - } - - runs=pBiDi->runs; - runCount=pBiDi->runCount; - if(pBiDi->insertPoints.size>0) { - /* handle inserted LRM/RLM */ - int32_t markFound=0, insertRemove; - int32_t visualStart=0, length; - runs=pBiDi->runs; - /* subtract number of marks until visual index */ - for(i=0; ; i++, visualStart+=length) { - length=runs[i].visualLimit-visualStart; - insertRemove=runs[i].insertRemove; - if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) { - if(visualIndex<=(visualStart+markFound)) { - return UBIDI_MAP_NOWHERE; - } - markFound++; - } - /* is adjusted visual index within this run? */ - if(visualIndex<(runs[i].visualLimit+markFound)) { - visualIndex-=markFound; - break; - } - if(insertRemove&(LRM_AFTER|RLM_AFTER)) { - if(visualIndex==(visualStart+length+markFound)) { - return UBIDI_MAP_NOWHERE; - } - markFound++; - } - } - } - else if(pBiDi->controlCount>0) { - /* handle removed BiDi control characters */ - int32_t controlFound=0, insertRemove, length; - int32_t logicalStart, logicalEnd, visualStart=0, j, k; - UChar uchar; - UBool evenRun; - /* add number of controls until visual index */ - for(i=0; ; i++, visualStart+=length) { - length=runs[i].visualLimit-visualStart; - insertRemove=runs[i].insertRemove; - /* is adjusted visual index beyond current run? */ - if(visualIndex>=(runs[i].visualLimit-controlFound+insertRemove)) { - controlFound-=insertRemove; - continue; - } - /* adjusted visual index is within current run */ - if(insertRemove==0) { - visualIndex+=controlFound; - break; - } - /* count non-control chars until visualIndex */ - logicalStart=runs[i].logicalStart; - evenRun=IS_EVEN_RUN(logicalStart); - REMOVE_ODD_BIT(logicalStart); - logicalEnd=logicalStart+length-1; - for(j=0; jtext[k]; - if(IS_BIDI_CONTROL_CHAR(uchar)) { - controlFound++; - } - if((visualIndex+controlFound)==(visualStart+j)) { - break; - } - } - visualIndex+=controlFound; - break; - } - } - /* handle all cases */ - if(runCount<=10) { - /* linear search for the run */ - for(i=0; visualIndex>=runs[i].visualLimit; ++i) {} - } else { - /* binary search for the run */ - int32_t begin=0, limit=runCount; - - /* the middle if() is guaranteed to find the run, we don't need a loop limit */ - for(;;) { - i=(begin+limit)/2; - if(visualIndex>=runs[i].visualLimit) { - begin=i+1; - } else if(i==0 || visualIndex>=runs[i-1].visualLimit) { - break; - } else { - limit=i; - } - } - } - - start=runs[i].logicalStart; - if(IS_EVEN_RUN(start)) { - /* LTR */ - /* the offset in runs[i] is visualIndex-runs[i-1].visualLimit */ - if(i>0) { - visualIndex-=runs[i-1].visualLimit; - } - return start+visualIndex; - } else { - /* RTL */ - return GET_INDEX(start)+runs[i].visualLimit-visualIndex-1; - } -} - -U_CAPI void U_EXPORT2 -ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) { - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */ - ubidi_countRuns(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - /* no op */ - } else if(indexMap==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - } else { - /* fill a logical-to-visual index map using the runs[] */ - int32_t visualStart, visualLimit, i, j, k; - int32_t logicalStart, logicalLimit; - Run *runs=pBiDi->runs; - if (pBiDi->length<=0) { - return; - } - if (pBiDi->length>pBiDi->resultLength) { - uprv_memset(indexMap, 0xFF, pBiDi->length*sizeof(int32_t)); - } - - visualStart=0; - for(j=0; jrunCount; ++j) { - logicalStart=GET_INDEX(runs[j].logicalStart); - visualLimit=runs[j].visualLimit; - if(IS_EVEN_RUN(runs[j].logicalStart)) { - do { /* LTR */ - indexMap[logicalStart++]=visualStart++; - } while(visualStartinsertPoints.size>0) { - int32_t markFound=0, runCount=pBiDi->runCount; - int32_t length, insertRemove; - visualStart=0; - /* add number of marks found until each index */ - for(i=0; i0) { - logicalStart=GET_INDEX(runs[i].logicalStart); - logicalLimit=logicalStart+length; - for(j=logicalStart; jcontrolCount>0) { - int32_t controlFound=0, runCount=pBiDi->runCount; - int32_t length, insertRemove; - UBool evenRun; - UChar uchar; - visualStart=0; - /* subtract number of controls found until each index */ - for(i=0; itext[k]; - if(IS_BIDI_CONTROL_CHAR(uchar)) { - controlFound++; - indexMap[k]=UBIDI_MAP_NOWHERE; - continue; - } - indexMap[k]-=controlFound; - } - } - } - } -} - -U_CAPI void U_EXPORT2 -ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) { - RETURN_VOID_IF_NULL_OR_FAILING_ERRCODE(pErrorCode); - if(indexMap==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - /* ubidi_countRuns() checks for VALID_PARA_OR_LINE */ - ubidi_countRuns(pBiDi, pErrorCode); - if(U_SUCCESS(*pErrorCode)) { - /* fill a visual-to-logical index map using the runs[] */ - Run *runs=pBiDi->runs, *runsLimit=runs+pBiDi->runCount; - int32_t logicalStart, visualStart, visualLimit, *pi=indexMap; - - if (pBiDi->resultLength<=0) { - return; - } - visualStart=0; - for(; runslogicalStart; - visualLimit=runs->visualLimit; - if(IS_EVEN_RUN(logicalStart)) { - do { /* LTR */ - *pi++ = logicalStart++; - } while(++visualStartinsertPoints.size>0) { - int32_t markFound=0, runCount=pBiDi->runCount; - int32_t insertRemove, i, j, k; - runs=pBiDi->runs; - /* count all inserted marks */ - for(i=0; iresultLength; - for(i=runCount-1; i>=0 && markFound>0; i--) { - insertRemove=runs[i].insertRemove; - if(insertRemove&(LRM_AFTER|RLM_AFTER)) { - indexMap[--k]= UBIDI_MAP_NOWHERE; - markFound--; - } - visualStart= i>0 ? runs[i-1].visualLimit : 0; - for(j=runs[i].visualLimit-1; j>=visualStart && markFound>0; j--) { - indexMap[--k]=indexMap[j]; - } - if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) { - indexMap[--k]= UBIDI_MAP_NOWHERE; - markFound--; - } - } - } - else if(pBiDi->controlCount>0) { - int32_t runCount=pBiDi->runCount, logicalEnd; - int32_t insertRemove, length, i, j, k, m; - UChar uchar; - UBool evenRun; - runs=pBiDi->runs; - visualStart=0; - /* move forward indexes by number of preceding controls */ - k=0; - for(i=0; itext[m]; - if(!IS_BIDI_CONTROL_CHAR(uchar)) { - indexMap[k++]=m; - } - } - } - } - } -} - -U_CAPI void U_EXPORT2 -ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) { - if(srcMap!=NULL && destMap!=NULL && length>0) { - const int32_t *pi; - int32_t destLength=-1, count=0; - /* find highest value and count positive indexes in srcMap */ - pi=srcMap+length; - while(pi>srcMap) { - if(*--pi>destLength) { - destLength=*pi; - } - if(*pi>=0) { - count++; - } - } - destLength++; /* add 1 for origin 0 */ - if(count0) { - if(*--pi>=0) { - destMap[*pi]=--length; - } else { - --length; - } - } - } -} diff --git a/source/common/ubiditransform.c b/source/common/ubiditransform.c deleted file mode 100644 index 5f83a2b..0000000 --- a/source/common/ubiditransform.c +++ /dev/null @@ -1,528 +0,0 @@ -/* -****************************************************************************** -* -* Copyright (C) 2016 and later: Unicode, Inc. and others. -* License & terms of use: http://www.unicode.org/copyright.html -* -****************************************************************************** -* file name: ubiditransform.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2016jul24 -* created by: Lina Kemmel -* -*/ - -#include "cmemory.h" -#include "unicode/ubidi.h" -#include "unicode/ustring.h" -#include "unicode/ushape.h" -#include "unicode/utf16.h" -#include "ustr_imp.h" -#include "unicode/ubiditransform.h" - -/* Some convenience defines */ -#define LTR UBIDI_LTR -#define RTL UBIDI_RTL -#define LOGICAL UBIDI_LOGICAL -#define VISUAL UBIDI_VISUAL -#define SHAPE_LOGICAL U_SHAPE_TEXT_DIRECTION_LOGICAL -#define SHAPE_VISUAL U_SHAPE_TEXT_DIRECTION_VISUAL_LTR - -#define CHECK_LEN(STR, LEN, ERROR) { \ - if (LEN == 0) return 0; \ - if (LEN < -1) { *(ERROR) = U_ILLEGAL_ARGUMENT_ERROR; return 0; } \ - if (LEN == -1) LEN = u_strlen(STR); \ - } - -#define MAX_ACTIONS 7 - -/** - * Typedef for a pointer to a function, which performs some operation (such as - * reordering, setting "inverse" mode, character mirroring, etc.). Return value - * indicates whether the text was changed in the course of this operation or - * not. - */ -typedef UBool (*UBiDiAction)(UBiDiTransform *, UErrorCode *); - -/** - * Structure that holds a predefined reordering scheme, including the following - * information: - *
      - *
    • an input base direction,
    • - *
    • an input order,
    • - *
    • an output base direction,
    • - *
    • an output order,
    • - *
    • a digit shaping direction,
    • - *
    • a letter shaping direction,
    • - *
    • a base direction that should be applied when the reordering engine is - * invoked (which can not always be derived from the caller-defined - * options),
    • - *
    • an array of pointers to functions that accomplish the bidi layout - * transformation.
    • - *
    - */ -typedef struct { - UBiDiLevel inLevel; /* input level */ - UBiDiOrder inOrder; /* input order */ - UBiDiLevel outLevel; /* output level */ - UBiDiOrder outOrder; /* output order */ - uint32_t digitsDir; /* digit shaping direction */ - uint32_t lettersDir; /* letter shaping direction */ - UBiDiLevel baseLevel; /* paragraph level to be used with setPara */ - const UBiDiAction actions[MAX_ACTIONS]; /* array of pointers to functions carrying out the transformation */ -} ReorderingScheme; - -struct UBiDiTransform { - UBiDi *pBidi; /* pointer to a UBiDi object */ - const ReorderingScheme *pActiveScheme; /* effective reordering scheme */ - UChar *src; /* input text */ - UChar *dest; /* output text */ - uint32_t srcLength; /* input text length - not really needed as we are zero-terminated and can u_strlen */ - uint32_t srcSize; /* input text capacity excluding the trailing zero */ - uint32_t destSize; /* output text capacity */ - uint32_t *pDestLength; /* number of UChars written to dest */ - uint32_t reorderingOptions; /* reordering options - currently only suppot DO_MIRRORING */ - uint32_t digits; /* digit option for ArabicShaping */ - uint32_t letters; /* letter option for ArabicShaping */ -}; - -U_DRAFT UBiDiTransform* U_EXPORT2 -ubiditransform_open(UErrorCode *pErrorCode) -{ - UBiDiTransform *pBiDiTransform = NULL; - if (U_SUCCESS(*pErrorCode)) { - pBiDiTransform = (UBiDiTransform*) uprv_calloc(1, sizeof(UBiDiTransform)); - if (pBiDiTransform == NULL) { - *pErrorCode = U_MEMORY_ALLOCATION_ERROR; - } - } - return pBiDiTransform; -} - -U_DRAFT void U_EXPORT2 -ubiditransform_close(UBiDiTransform *pBiDiTransform) -{ - if (pBiDiTransform != NULL) { - if (pBiDiTransform->pBidi != NULL) { - ubidi_close(pBiDiTransform->pBidi); - } - if (pBiDiTransform->src != NULL) { - uprv_free(pBiDiTransform->src); - } - uprv_free(pBiDiTransform); - } -} - -/** - * Performs Bidi resolution of text. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_resolve(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - ubidi_setPara(pTransform->pBidi, pTransform->src, pTransform->srcLength, - pTransform->pActiveScheme->baseLevel, NULL, pErrorCode); - return FALSE; -} - -/** - * Performs basic reordering of text (Logical -> Visual LTR). - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_reorder(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - ubidi_writeReordered(pTransform->pBidi, pTransform->dest, pTransform->destSize, - pTransform->reorderingOptions, pErrorCode); - - *pTransform->pDestLength = pTransform->srcLength; - pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; - return TRUE; -} - -/** - * Sets "inverse" mode on the UBiDi object. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_setInverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - ubidi_setInverse(pTransform->pBidi, TRUE); - ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_INVERSE_LIKE_DIRECT); - return FALSE; -} - -/** - * Sets "runs only" reordering mode indicating a Logical LTR <-> Logical RTL - * transformation. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_setRunsOnly(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_RUNS_ONLY); - return FALSE; -} - -/** - * Performs string reverse. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_reverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - ubidi_writeReverse(pTransform->src, pTransform->srcLength, - pTransform->dest, pTransform->destSize, - UBIDI_REORDER_DEFAULT, pErrorCode); - *pTransform->pDestLength = pTransform->srcLength; - return TRUE; -} - -/** - * Applies a new value to the text that serves as input at the current - * processing step. This value is identical to the original one when we begin - * the processing, but usually changes as the transformation progresses. - * - * @param pTransform A pointer to the UBiDiTransform structure. - * @param newSrc A pointer whose value is to be used as input text. - * @param newLength A length of the new text in UChars. - * @param newSize A new source capacity in UChars. - * @param pErrorCode Pointer to the error code value. - */ -static void -updateSrc(UBiDiTransform *pTransform, const UChar *newSrc, uint32_t newLength, - uint32_t newSize, UErrorCode *pErrorCode) -{ - if (newSize < newLength) { - *pErrorCode = U_BUFFER_OVERFLOW_ERROR; - return; - } - if (newSize > pTransform->srcSize) { - newSize += 50; // allocate slightly more than needed right now - if (pTransform->src != NULL) { - uprv_free(pTransform->src); - pTransform->src = NULL; - } - pTransform->src = (UChar *)uprv_malloc(newSize * sizeof(UChar)); - if (pTransform->src == NULL) { - *pErrorCode = U_MEMORY_ALLOCATION_ERROR; - //pTransform->srcLength = pTransform->srcSize = 0; - return; - } - pTransform->srcSize = newSize; - } - u_strncpy(pTransform->src, newSrc, newLength); - pTransform->srcLength = u_terminateUChars(pTransform->src, - pTransform->srcSize, newLength, pErrorCode); -} - -/** - * Calls a lower level shaping function. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param options Shaping options. - * @param pErrorCode Pointer to the error code value. - */ -static void -doShape(UBiDiTransform *pTransform, uint32_t options, UErrorCode *pErrorCode) -{ - *pTransform->pDestLength = u_shapeArabic(pTransform->src, - pTransform->srcLength, pTransform->dest, pTransform->destSize, - options, pErrorCode); -} - -/** - * Performs digit and letter shaping. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_shapeArabic(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - if ((pTransform->letters | pTransform->digits) == 0) { - return FALSE; - } - if (pTransform->pActiveScheme->lettersDir == pTransform->pActiveScheme->digitsDir) { - doShape(pTransform, pTransform->letters | pTransform->digits | pTransform->pActiveScheme->lettersDir, - pErrorCode); - } else { - doShape(pTransform, pTransform->digits | pTransform->pActiveScheme->digitsDir, pErrorCode); - if (U_SUCCESS(*pErrorCode)) { - updateSrc(pTransform, pTransform->dest, *pTransform->pDestLength, - *pTransform->pDestLength, pErrorCode); - doShape(pTransform, pTransform->letters | pTransform->pActiveScheme->lettersDir, - pErrorCode); - } - } - return TRUE; -} - -/** - * Performs character mirroring. - * - * @param pTransform Pointer to the UBiDiTransform structure. - * @param pErrorCode Pointer to the error code value. - * - * @return Whether or not this function modifies the text. Besides the return - * value, the caller should also check U_SUCCESS(*pErrorCode). - */ -static UBool -action_mirror(UBiDiTransform *pTransform, UErrorCode *pErrorCode) -{ - UChar32 c; - uint32_t i = 0, j = 0; - if (0 == (pTransform->reorderingOptions & UBIDI_DO_MIRRORING)) { - return FALSE; - } - if (pTransform->destSize < pTransform->srcLength) { - *pErrorCode = U_BUFFER_OVERFLOW_ERROR; - return FALSE; - } - do { - UBool isOdd = ubidi_getLevelAt(pTransform->pBidi, i) & 1; - U16_NEXT(pTransform->src, i, pTransform->srcLength, c); - U16_APPEND_UNSAFE(pTransform->dest, j, isOdd ? u_charMirror(c) : c); - } while (i < pTransform->srcLength); - - *pTransform->pDestLength = pTransform->srcLength; - pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; - return TRUE; -} - -/** - * All possible reordering schemes. - * - */ -static const ReorderingScheme Schemes[] = -{ - /* 0: Logical LTR => Visual LTR */ - {LTR, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_shapeArabic, action_resolve, action_reorder, NULL}}, - /* 1: Logical RTL => Visual LTR */ - {RTL, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, - {action_resolve, action_reorder, action_shapeArabic, NULL}}, - /* 2: Logical LTR => Visual RTL */ - {LTR, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_shapeArabic, action_resolve, action_reorder, action_reverse, NULL}}, - /* 3: Logical RTL => Visual RTL */ - {RTL, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, - {action_resolve, action_reorder, action_shapeArabic, action_reverse, NULL}}, - /* 4: Visual LTR => Logical RTL */ - {LTR, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, - {action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, - /* 5: Visual RTL => Logical RTL */ - {RTL, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, - {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, - /* 6: Visual LTR => Logical LTR */ - {LTR, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, - /* 7: Visual RTL => Logical LTR */ - {RTL, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_reverse, action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, - /* 8: Logical LTR => Logical RTL */ - {LTR, LOGICAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_shapeArabic, action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, NULL}}, - /* 9: Logical RTL => Logical LTR */ - {RTL, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, RTL, - {action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, action_shapeArabic, NULL}}, - /* 10: Visual LTR => Visual RTL */ - {LTR, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, - {action_shapeArabic, action_setInverse, action_resolve, action_mirror, action_reverse, NULL}}, - /* 11: Visual RTL => Visual LTR */ - {RTL, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, - {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_mirror, NULL}}, - /* 12: Logical LTR => Logical LTR */ - {LTR, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, - {action_resolve, action_mirror, action_shapeArabic, NULL}}, - /* 13: Logical RTL => Logical RTL */ - {RTL, LOGICAL, RTL, LOGICAL, SHAPE_VISUAL, SHAPE_LOGICAL, RTL, - {action_resolve, action_mirror, action_shapeArabic, NULL}}, - /* 14: Visual LTR => Visual LTR */ - {LTR, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, - {action_resolve, action_mirror, action_shapeArabic, NULL}}, - /* 15: Visual RTL => Visual RTL */ - {RTL, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, - {action_reverse, action_resolve, action_mirror, action_shapeArabic, action_reverse, NULL}} -}; - -static const uint32_t nSchemes = sizeof(Schemes) / sizeof(*Schemes); - -/** - * When the direction option is UBIDI_DEFAULT_LTR or - * UBIDI_DEFAULT_RTL, resolve the base direction according to that - * of the first strong bidi character. - */ -static void -resolveBaseDirection(const UChar *text, uint32_t length, - UBiDiLevel *pInLevel, UBiDiLevel *pOutLevel) -{ - switch (*pInLevel) { - case UBIDI_DEFAULT_LTR: - case UBIDI_DEFAULT_RTL: { - UBiDiLevel level = ubidi_getBaseDirection(text, length); - *pInLevel = level != UBIDI_NEUTRAL ? level - : *pInLevel == UBIDI_DEFAULT_RTL ? RTL : LTR; - break; - } - default: - *pInLevel &= 1; - break; - } - switch (*pOutLevel) { - case UBIDI_DEFAULT_LTR: - case UBIDI_DEFAULT_RTL: - *pOutLevel = *pInLevel; - break; - default: - *pOutLevel &= 1; - break; - } -} - -/** - * Finds a valid ReorderingScheme matching the - * caller-defined scheme. - * - * @return A valid ReorderingScheme object or NULL - */ -static const ReorderingScheme* -findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel, - UBiDiOrder inOrder, UBiDiOrder outOrder) -{ - uint32_t i; - for (i = 0; i < nSchemes; i++) { - const ReorderingScheme *pScheme = Schemes + i; - if (inLevel == pScheme->inLevel && outLevel == pScheme->outLevel - && inOrder == pScheme->inOrder && outOrder == pScheme->outOrder) { - return pScheme; - } - } - return NULL; -} - -U_DRAFT uint32_t U_EXPORT2 -ubiditransform_transform(UBiDiTransform *pBiDiTransform, - const UChar *src, int32_t srcLength, - UChar *dest, int32_t destSize, - UBiDiLevel inParaLevel, UBiDiOrder inOrder, - UBiDiLevel outParaLevel, UBiDiOrder outOrder, - UBiDiMirroring doMirroring, uint32_t shapingOptions, - UErrorCode *pErrorCode) -{ - uint32_t destLength = 0; - UBool textChanged = FALSE; - const UBiDiTransform *pOrigTransform = pBiDiTransform; - const UBiDiAction *action = NULL; - - if (U_FAILURE(*pErrorCode)) { - return 0; - } - if (src == NULL || dest == NULL) { - *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - CHECK_LEN(src, srcLength, pErrorCode); - CHECK_LEN(dest, destSize, pErrorCode); - - if (pBiDiTransform == NULL) { - pBiDiTransform = ubiditransform_open(pErrorCode); - if (U_FAILURE(*pErrorCode)) { - return 0; - } - } - /* Current limitation: in multiple paragraphs will be resolved according - to the 1st paragraph */ - resolveBaseDirection(src, srcLength, &inParaLevel, &outParaLevel); - - pBiDiTransform->pActiveScheme = findMatchingScheme(inParaLevel, outParaLevel, - inOrder, outOrder); - if (pBiDiTransform->pActiveScheme == NULL) { - goto cleanup; - } - pBiDiTransform->reorderingOptions = doMirroring ? UBIDI_DO_MIRRORING - : UBIDI_REORDER_DEFAULT; - - /* Ignore TEXT_DIRECTION_* flags, as we apply our own depending on the text - scheme at the time shaping is invoked. */ - shapingOptions &= ~U_SHAPE_TEXT_DIRECTION_MASK; - pBiDiTransform->digits = shapingOptions & ~U_SHAPE_LETTERS_MASK; - pBiDiTransform->letters = shapingOptions & ~U_SHAPE_DIGITS_MASK; - - updateSrc(pBiDiTransform, src, srcLength, destSize > srcLength ? destSize : srcLength, pErrorCode); - if (U_FAILURE(*pErrorCode)) { - goto cleanup; - } - if (pBiDiTransform->pBidi == NULL) { - pBiDiTransform->pBidi = ubidi_openSized(0, 0, pErrorCode); - if (U_FAILURE(*pErrorCode)) { - goto cleanup; - } - } - pBiDiTransform->dest = dest; - pBiDiTransform->destSize = destSize; - pBiDiTransform->pDestLength = &destLength; - - /* Checking for U_SUCCESS() within the loop to bail out on first failure. */ - for (action = pBiDiTransform->pActiveScheme->actions; *action && U_SUCCESS(*pErrorCode); action++) { - if ((*action)(pBiDiTransform, pErrorCode)) { - if (action + 1) { - updateSrc(pBiDiTransform, pBiDiTransform->dest, *pBiDiTransform->pDestLength, - *pBiDiTransform->pDestLength, pErrorCode); - } - textChanged = TRUE; - } - } - ubidi_setInverse(pBiDiTransform->pBidi, FALSE); - - if (!textChanged && U_SUCCESS(*pErrorCode)) { - /* Text was not changed - just copy src to dest */ - if (destSize < srcLength) { - *pErrorCode = U_BUFFER_OVERFLOW_ERROR; - } else { - u_strncpy(dest, src, srcLength); - destLength = srcLength; - } - } -cleanup: - if (pOrigTransform != pBiDiTransform) { - ubiditransform_close(pBiDiTransform); - } else { - pBiDiTransform->dest = NULL; - pBiDiTransform->pDestLength = NULL; - pBiDiTransform->srcLength = 0; - pBiDiTransform->destSize = 0; - } - return U_FAILURE(*pErrorCode) ? 0 : destLength; -} diff --git a/source/common/ubidiwrt.c b/source/common/ubidiwrt.c deleted file mode 100644 index 1d0c36a..0000000 --- a/source/common/ubidiwrt.c +++ /dev/null @@ -1,640 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2000-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: ubidiwrt.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999aug06 -* created by: Markus W. Scherer, updated by Matitiahu Allouche -* -* This file contains implementations for BiDi functions that use -* the core algorithm and core API to write reordered text. -*/ - -#include "unicode/utypes.h" -#include "unicode/ustring.h" -#include "unicode/uchar.h" -#include "unicode/ubidi.h" -#include "unicode/utf16.h" -#include "cmemory.h" -#include "ustr_imp.h" -#include "ubidiimp.h" - -/* - * The function implementations in this file are designed - * for UTF-16 and UTF-32, not for UTF-8. - * - * Assumptions that are not true for UTF-8: - * - Any code point always needs the same number of code units - * ("minimum-length-problem" of UTF-8) - * - The BiDi control characters need only one code unit each - * - * Further assumptions for all UTFs: - * - u_charMirror(c) needs the same number of code units as c - */ -#if UTF_SIZE==8 -# error reimplement ubidi_writeReordered() for UTF-8, see comment above -#endif - -#define IS_COMBINING(type) ((1UL<<(type))&(1UL<0); - return srcLength; - } - case UBIDI_DO_MIRRORING: { - /* do mirroring */ - int32_t i=0, j=0; - UChar32 c; - - if(destSize0) { - c=*src++; - if(!IS_BIDI_CONTROL_CHAR(c)) { - --remaining; - } - } - return destSize-remaining; - } - *dest++=c; - } - } while(--srcLength>0); - return destSize-remaining; - } - default: { - /* remove BiDi control characters and do mirroring */ - int32_t remaining=destSize; - int32_t i, j=0; - UChar32 c; - do { - i=0; - U16_NEXT(src, i, srcLength, c); - src+=i; - srcLength-=i; - if(!IS_BIDI_CONTROL_CHAR(c)) { - remaining-=i; - if(remaining<0) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - - /* preflight the length */ - while(srcLength>0) { - c=*src++; - if(!IS_BIDI_CONTROL_CHAR(c)) { - --remaining; - } - --srcLength; - } - return destSize-remaining; - } - c=u_charMirror(c); - U16_APPEND_UNSAFE(dest, j, c); - } - } while(srcLength>0); - return j; - } - } /* end of switch */ -} - -static int32_t -doWriteReverse(const UChar *src, int32_t srcLength, - UChar *dest, int32_t destSize, - uint16_t options, - UErrorCode *pErrorCode) { - /* - * RTL run - - * - * RTL runs need to be copied to the destination in reverse order - * of code points, not code units, to keep Unicode characters intact. - * - * The general strategy for this is to read the source text - * in backward order, collect all code units for a code point - * (and optionally following combining characters, see below), - * and copy all these code units in ascending order - * to the destination for this run. - * - * Several options request whether combining characters - * should be kept after their base characters, - * whether BiDi control characters should be removed, and - * whether characters should be replaced by their mirror-image - * equivalent Unicode characters. - */ - int32_t i, j; - UChar32 c; - - /* optimize for several combinations of options */ - switch(options&(UBIDI_REMOVE_BIDI_CONTROLS|UBIDI_DO_MIRRORING|UBIDI_KEEP_BASE_COMBINING)) { - case 0: - /* - * With none of the "complicated" options set, the destination - * run will have the same length as the source run, - * and there is no mirroring and no keeping combining characters - * with their base characters. - */ - if(destSize0); - break; - case UBIDI_KEEP_BASE_COMBINING: - /* - * Here, too, the destination - * run will have the same length as the source run, - * and there is no mirroring. - * We do need to keep combining characters with their base characters. - */ - if(destSize0 && IS_COMBINING(u_charType(c))); - - /* copy this "user character" */ - j=srcLength; - do { - *dest++=src[j++]; - } while(j0); - break; - default: - /* - * With several "complicated" options set, this is the most - * general and the slowest copying of an RTL run. - * We will do mirroring, remove BiDi controls, and - * keep combining characters with their base characters - * as requested. - */ - if(!(options&UBIDI_REMOVE_BIDI_CONTROLS)) { - i=srcLength; - } else { - /* we need to find out the destination length of the run, - which will not include the BiDi control characters */ - int32_t length=srcLength; - UChar ch; - - i=0; - do { - ch=*src++; - if(!IS_BIDI_CONTROL_CHAR(ch)) { - ++i; - } - } while(--length>0); - src-=srcLength; - } - - if(destSize0 && IS_COMBINING(u_charType(c))) { - U16_PREV(src, 0, srcLength, c); - } - } - - if(options&UBIDI_REMOVE_BIDI_CONTROLS && IS_BIDI_CONTROL_CHAR(c)) { - /* do not copy this BiDi control character */ - continue; - } - - /* copy this "user character" */ - j=srcLength; - if(options&UBIDI_DO_MIRRORING) { - /* mirror only the base character */ - int32_t k=0; - c=u_charMirror(c); - U16_APPEND_UNSAFE(dest, k, c); - dest+=k; - j+=k; - } - while(j0); - break; - } /* end of switch */ - - return destSize; -} - -U_CAPI int32_t U_EXPORT2 -ubidi_writeReverse(const UChar *src, int32_t srcLength, - UChar *dest, int32_t destSize, - uint16_t options, - UErrorCode *pErrorCode) { - int32_t destLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - /* more error checking */ - if( src==NULL || srcLength<-1 || - destSize<0 || (destSize>0 && dest==NULL)) - { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* do input and output overlap? */ - if( dest!=NULL && - ((src>=dest && src=src && dest0) { - destLength=doWriteReverse(src, srcLength, dest, destSize, options, pErrorCode); - } else { - /* nothing to do */ - destLength=0; - } - - return u_terminateUChars(dest, destSize, destLength, pErrorCode); -} - -U_CAPI int32_t U_EXPORT2 -ubidi_writeReordered(UBiDi *pBiDi, - UChar *dest, int32_t destSize, - uint16_t options, - UErrorCode *pErrorCode) { - const UChar *text; - UChar *saveDest; - int32_t length, destCapacity; - int32_t run, runCount, logicalStart, runLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - /* more error checking */ - if( pBiDi==NULL || - (text=pBiDi->text)==NULL || (length=pBiDi->length)<0 || - destSize<0 || (destSize>0 && dest==NULL)) - { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* do input and output overlap? */ - if( dest!=NULL && - ((text>=dest && text=text && destoriginalLength))) - { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - if(length==0) { - /* nothing to do */ - return u_terminateUChars(dest, destSize, 0, pErrorCode); - } - - runCount=ubidi_countRuns(pBiDi, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return 0; - } - - /* destSize shrinks, later destination length=destCapacity-destSize */ - saveDest=dest; - destCapacity=destSize; - - /* - * Option "insert marks" implies UBIDI_INSERT_LRM_FOR_NUMERIC if the - * reordering mode (checked below) is appropriate. - */ - if(pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { - options|=UBIDI_INSERT_LRM_FOR_NUMERIC; - options&=~UBIDI_REMOVE_BIDI_CONTROLS; - } - /* - * Option "remove controls" implies UBIDI_REMOVE_BIDI_CONTROLS - * and cancels UBIDI_INSERT_LRM_FOR_NUMERIC. - */ - if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { - options|=UBIDI_REMOVE_BIDI_CONTROLS; - options&=~UBIDI_INSERT_LRM_FOR_NUMERIC; - } - /* - * If we do not perform the "inverse BiDi" algorithm, then we - * don't need to insert any LRMs, and don't need to test for it. - */ - if((pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_NUMBERS_AS_L) && - (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_LIKE_DIRECT) && - (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL) && - (pBiDi->reorderingMode != UBIDI_REORDER_RUNS_ONLY)) { - options&=~UBIDI_INSERT_LRM_FOR_NUMERIC; - } - /* - * Iterate through all visual runs and copy the run text segments to - * the destination, according to the options. - * - * The tests for where to insert LRMs ignore the fact that there may be - * BN codes or non-BMP code points at the beginning and end of a run; - * they may insert LRMs unnecessarily but the tests are faster this way - * (this would have to be improved for UTF-8). - * - * Note that the only errors that are set by doWriteXY() are buffer overflow - * errors. Ignore them until the end, and continue for preflighting. - */ - if(!(options&UBIDI_OUTPUT_REVERSE)) { - /* forward output */ - if(!(options&UBIDI_INSERT_LRM_FOR_NUMERIC)) { - /* do not insert BiDi controls */ - for(run=0; rundirProps; - const UChar *src; - UChar uc; - UBiDiDirection dir; - int32_t markFlag; - - for(run=0; runruns[run].insertRemove; - if(markFlag<0) { /* BiDi controls count */ - markFlag=0; - } - - if(UBIDI_LTR==dir) { - if((pBiDi->isInverse) && - (/*run>0 &&*/ dirProps[logicalStart]!=L)) { - markFlag |= LRM_BEFORE; - } - if (markFlag & LRM_BEFORE) { - uc=LRM_CHAR; - } - else if (markFlag & RLM_BEFORE) { - uc=RLM_CHAR; - } - else uc=0; - if(uc) { - if(destSize>0) { - *dest++=uc; - } - --destSize; - } - - runLength=doWriteForward(src, runLength, - dest, destSize, - (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode); - if(dest!=NULL) { - dest+=runLength; - } - destSize-=runLength; - - if((pBiDi->isInverse) && - (/*run0) { - *dest++=uc; - } - --destSize; - } - } else { /* RTL run */ - if((pBiDi->isInverse) && - (/*run>0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1])))) { - markFlag |= RLM_BEFORE; - } - if (markFlag & LRM_BEFORE) { - uc=LRM_CHAR; - } - else if (markFlag & RLM_BEFORE) { - uc=RLM_CHAR; - } - else uc=0; - if(uc) { - if(destSize>0) { - *dest++=uc; - } - --destSize; - } - - runLength=doWriteReverse(src, runLength, - dest, destSize, - options, pErrorCode); - if(dest!=NULL) { - dest+=runLength; - } - destSize-=runLength; - - if((pBiDi->isInverse) && - (/*run0) { - *dest++=uc; - } - --destSize; - } - } - } - } - } else { - /* reverse output */ - if(!(options&UBIDI_INSERT_LRM_FOR_NUMERIC)) { - /* do not insert BiDi controls */ - for(run=runCount; --run>=0;) { - if(UBIDI_LTR==ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength)) { - runLength=doWriteReverse(text+logicalStart, runLength, - dest, destSize, - (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode); - } else { - runLength=doWriteForward(text+logicalStart, runLength, - dest, destSize, - options, pErrorCode); - } - if(dest!=NULL) { - dest+=runLength; - } - destSize-=runLength; - } - } else { - /* insert BiDi controls for "inverse BiDi" */ - const DirProp *dirProps=pBiDi->dirProps; - const UChar *src; - UBiDiDirection dir; - - for(run=runCount; --run>=0;) { - /* reverse output */ - dir=ubidi_getVisualRun(pBiDi, run, &logicalStart, &runLength); - src=text+logicalStart; - - if(UBIDI_LTR==dir) { - if(/*run0) { - *dest++=LRM_CHAR; - } - --destSize; - } - - runLength=doWriteReverse(src, runLength, - dest, destSize, - (uint16_t)(options&~UBIDI_DO_MIRRORING), pErrorCode); - if(dest!=NULL) { - dest+=runLength; - } - destSize-=runLength; - - if(/*run>0 &&*/ dirProps[logicalStart]!=L) { - if(destSize>0) { - *dest++=LRM_CHAR; - } - --destSize; - } - } else { - if(/*run0) { - *dest++=RLM_CHAR; - } - --destSize; - } - - runLength=doWriteForward(src, runLength, - dest, destSize, - options, pErrorCode); - if(dest!=NULL) { - dest+=runLength; - } - destSize-=runLength; - - if(/*run>0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1]))) { - if(destSize>0) { - *dest++=RLM_CHAR; - } - --destSize; - } - } - } - } - } - - return u_terminateUChars(saveDest, destCapacity, destCapacity-destSize, pErrorCode); -} diff --git a/source/common/ubrk.cpp b/source/common/ubrk.cpp index b02c966..f8bdf5a 100644 --- a/source/common/ubrk.cpp +++ b/source/common/ubrk.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** @@ -20,6 +20,7 @@ #include "unicode/rbbi.h" #include "rbbirb.h" #include "uassert.h" +#include "cmemory.h" U_NAMESPACE_USE @@ -119,7 +120,28 @@ ubrk_openRules( const UChar *rules, } - +U_CAPI UBreakIterator* U_EXPORT2 +ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, + const UChar * text, int32_t textLength, + UErrorCode * status) +{ + if (U_FAILURE(*status)) { + return NULL; + } + if (rulesLength < 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + LocalPointer lpRBBI(new RuleBasedBreakIterator(binaryRules, rulesLength, *status), *status); + if (U_FAILURE(*status)) { + return NULL; + } + UBreakIterator *uBI = reinterpret_cast(lpRBBI.orphan()); + if (text != NULL) { + ubrk_setText(uBI, text, textLength, status); + } + return uBI; +} U_CAPI UBreakIterator * U_EXPORT2 @@ -288,7 +310,8 @@ ubrk_getLocaleByType(const UBreakIterator *bi, } -void ubrk_refreshUText(UBreakIterator *bi, +U_CAPI void U_EXPORT2 +ubrk_refreshUText(UBreakIterator *bi, UText *text, UErrorCode *status) { @@ -296,6 +319,39 @@ void ubrk_refreshUText(UBreakIterator *bi, bii->refreshInputText(text, *status); } +U_CAPI int32_t U_EXPORT2 +ubrk_getBinaryRules(UBreakIterator *bi, + uint8_t * binaryRules, int32_t rulesCapacity, + UErrorCode * status) +{ + if (U_FAILURE(*status)) { + return 0; + } + if ((binaryRules == NULL && rulesCapacity > 0) || rulesCapacity < 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + RuleBasedBreakIterator* rbbi; + if ((rbbi = dynamic_cast(reinterpret_cast(bi))) == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + uint32_t rulesLength; + const uint8_t * returnedRules = rbbi->getBinaryRules(rulesLength); + if (rulesLength > INT32_MAX) { + *status = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + if (binaryRules != NULL) { // if not preflighting + // Here we know rulesLength <= INT32_MAX and rulesCapacity >= 0, can cast safely + if ((int32_t)rulesLength > rulesCapacity) { + *status = U_BUFFER_OVERFLOW_ERROR; + } else { + uprv_memcpy(binaryRules, returnedRules, rulesLength); + } + } + return (int32_t)rulesLength; +} #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/source/common/ubrkimpl.h b/source/common/ubrkimpl.h index 36ca668..8197f66 100644 --- a/source/common/ubrkimpl.h +++ b/source/common/ubrkimpl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ucase.cpp b/source/common/ucase.cpp index 97ded9e..706d728 100644 --- a/source/common/ucase.cpp +++ b/source/common/ucase.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucase.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -46,13 +46,6 @@ struct UCaseProps { #define INCLUDED_FROM_UCASE_CPP #include "ucase_props_data.h" -/* UCaseProps singleton ----------------------------------------------------- */ - -U_CAPI const UCaseProps * U_EXPORT2 -ucase_getSingleton() { - return &ucase_props_singleton; -} - /* set of property starts for UnicodeSet ------------------------------------ */ static UBool U_CALLCONV @@ -64,13 +57,13 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 /*end*/, ui } U_CFUNC void U_EXPORT2 -ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode) { +ucase_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { if(U_FAILURE(*pErrorCode)) { return; } /* add the start code point of each same-value range of the trie */ - utrie2_enum(&csp->trie, NULL, _enumPropertyStartsRange, sa); + utrie2_enum(&ucase_props_singleton.trie, NULL, _enumPropertyStartsRange, sa); /* add code points with hardcoded properties, plus the ones following them */ @@ -133,14 +126,14 @@ static const uint8_t flagsOffset[256]={ /* simple case mappings ----------------------------------------------------- */ U_CAPI UChar32 U_EXPORT2 -ucase_tolower(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_tolower(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { c+=UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) { GET_SLOT_VALUE(excWord, UCASE_EXC_LOWER, pe, c); @@ -150,14 +143,14 @@ ucase_tolower(const UCaseProps *csp, UChar32 c) { } U_CAPI UChar32 U_EXPORT2 -ucase_toupper(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_toupper(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { c+=UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) { GET_SLOT_VALUE(excWord, UCASE_EXC_UPPER, pe, c); @@ -167,14 +160,14 @@ ucase_toupper(const UCaseProps *csp, UChar32 c) { } U_CAPI UChar32 U_EXPORT2 -ucase_totitle(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_totitle(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { c+=UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; int32_t idx; if(HAS_SLOT(excWord, UCASE_EXC_TITLE)) { @@ -198,7 +191,7 @@ static const UChar iDotTilde[3] = { 0x69, 0x307, 0x303 }; U_CFUNC void U_EXPORT2 -ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) { +ucase_addCaseClosure(UChar32 c, const USetAdder *sa) { uint16_t props; /* @@ -229,7 +222,7 @@ ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) { break; } - props=UTRIE2_GET16(&csp->trie, c); + props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)!=UCASE_NONE) { /* add the one simple case mapping, no matter what type it is */ @@ -243,7 +236,7 @@ ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) { * c has exceptions, so there may be multiple simple and/or * full case mappings. Add them all. */ - const uint16_t *pe0, *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe0, *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); const UChar *closure; uint16_t excWord=*pe++; int32_t idx, closureLength, fullLength, length; @@ -338,10 +331,10 @@ strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) { } U_CFUNC UBool U_EXPORT2 -ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa) { +ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa) { int32_t i, start, limit, result, unfoldRows, unfoldRowWidth, unfoldStringWidth; - if(csp->unfold==NULL || s==NULL) { + if(ucase_props_singleton.unfold==NULL || s==NULL) { return FALSE; /* no reverse case folding data, or no string */ } if(length<=1) { @@ -355,7 +348,7 @@ ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length return FALSE; } - const uint16_t *unfold=csp->unfold; + const uint16_t *unfold=ucase_props_singleton.unfold; unfoldRows=unfold[UCASE_UNFOLD_ROWS]; unfoldRowWidth=unfold[UCASE_UNFOLD_ROW_WIDTH]; unfoldStringWidth=unfold[UCASE_UNFOLD_STRING_WIDTH]; @@ -381,7 +374,7 @@ ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length for(i=unfoldStringWidth; iadd(sa->set, c); - ucase_addCaseClosure(csp, c, sa); + ucase_addCaseClosure(c, sa); } return TRUE; } else if(result<0) { @@ -430,38 +423,38 @@ U_NAMESPACE_END /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */ U_CAPI int32_t U_EXPORT2 -ucase_getType(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_getType(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); return UCASE_GET_TYPE(props); } /** @return same as ucase_getType() and set bit 2 if c is case-ignorable */ U_CAPI int32_t U_EXPORT2 -ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_getTypeOrIgnorable(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); return UCASE_GET_TYPE_AND_IGNORABLE(props); } /** @return UCASE_NO_DOT, UCASE_SOFT_DOTTED, UCASE_ABOVE, UCASE_OTHER_ACCENT */ static inline int32_t -getDotType(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +getDotType(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { return props&UCASE_DOT_MASK; } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); return (*pe>>UCASE_EXC_DOT_SHIFT)&UCASE_DOT_MASK; } } U_CAPI UBool U_EXPORT2 -ucase_isSoftDotted(const UCaseProps *csp, UChar32 c) { - return (UBool)(getDotType(csp, c)==UCASE_SOFT_DOTTED); +ucase_isSoftDotted(UChar32 c) { + return (UBool)(getDotType(c)==UCASE_SOFT_DOTTED); } U_CAPI UBool U_EXPORT2 -ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_isCaseSensitive(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); return (UBool)((props&UCASE_SENSITIVE)!=0); } @@ -545,12 +538,10 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) { * zero or more case-ignorable characters. */ -#define is_a(c) ((c)=='a' || (c)=='A') #define is_d(c) ((c)=='d' || (c)=='D') #define is_e(c) ((c)=='e' || (c)=='E') #define is_i(c) ((c)=='i' || (c)=='I') #define is_l(c) ((c)=='l' || (c)=='L') -#define is_n(c) ((c)=='n' || (c)=='N') #define is_r(c) ((c)=='r' || (c)=='R') #define is_t(c) ((c)=='t' || (c)=='T') #define is_u(c) ((c)=='u' || (c)=='U') @@ -565,16 +556,7 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) { * Accepts both 2- and 3-letter codes and accepts case variants. */ U_CFUNC int32_t -ucase_getCaseLocale(const char *locale, int32_t *locCache) { - int32_t result; - char c; - - if(locCache!=NULL && (result=*locCache)!=UCASE_LOC_UNKNOWN) { - return result; - } - - result=UCASE_LOC_ROOT; - +ucase_getCaseLocale(const char *locale) { /* * This function used to use uloc_getLanguage(), but the current code * removes the dependency of this low-level code on uloc implementation code @@ -584,73 +566,149 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) { * Because this code does not want to depend on uloc, the caller must * pass in a non-NULL locale, i.e., may need to call uloc_getDefault(). */ - c=*locale++; - if(is_t(c)) { - /* tr or tur? */ + char c=*locale++; + // Fastpath for English "en" which is often used for default (=root locale) case mappings, + // and for Chinese "zh": Very common but no special case mapping behavior. + // Then check lowercase vs. uppercase to reduce the number of comparisons + // for other locales without special behavior. + if(c=='e') { + /* el or ell? */ c=*locale++; - if(is_u(c)) { + if(is_l(c)) { c=*locale++; - } - if(is_r(c)) { - c=*locale; + if(is_l(c)) { + c=*locale; + } if(is_sep(c)) { - result=UCASE_LOC_TURKISH; + return UCASE_LOC_GREEK; } } - } else if(is_a(c)) { - /* az or aze? */ - c=*locale++; - if(is_z(c)) { + // en, es, ... -> root + } else if(c=='z') { + return UCASE_LOC_ROOT; +#if U_CHARSET_FAMILY==U_ASCII_FAMILY + } else if(c>='a') { // ASCII a-z = 0x61..0x7a, after A-Z +#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY + } else if(c<='z') { // EBCDIC a-z = 0x81..0xa9 with two gaps, before A-Z +#else +# error Unknown charset family! +#endif + // lowercase c + if(c=='t') { + /* tr or tur? */ c=*locale++; - if(is_e(c)) { + if(is_u(c)) { + c=*locale++; + } + if(is_r(c)) { c=*locale; + if(is_sep(c)) { + return UCASE_LOC_TURKISH; + } } - if(is_sep(c)) { - result=UCASE_LOC_TURKISH; + } else if(c=='a') { + /* az or aze? */ + c=*locale++; + if(is_z(c)) { + c=*locale++; + if(is_e(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_TURKISH; + } } - } - } else if(is_l(c)) { - /* lt or lit? */ - c=*locale++; - if(is_i(c)) { + } else if(c=='l') { + /* lt or lit? */ c=*locale++; - } - if(is_t(c)) { - c=*locale; - if(is_sep(c)) { - result=UCASE_LOC_LITHUANIAN; + if(is_i(c)) { + c=*locale++; } - } - } else if(is_e(c)) { - /* el or ell? */ - c=*locale++; - if(is_l(c)) { + if(is_t(c)) { + c=*locale; + if(is_sep(c)) { + return UCASE_LOC_LITHUANIAN; + } + } + } else if(c=='n') { + /* nl or nld? */ c=*locale++; if(is_l(c)) { + c=*locale++; + if(is_d(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_DUTCH; + } + } + } + } else { + // uppercase c + // Same code as for lowercase c but also check for 'E'. + if(c=='T') { + /* tr or tur? */ + c=*locale++; + if(is_u(c)) { + c=*locale++; + } + if(is_r(c)) { c=*locale; + if(is_sep(c)) { + return UCASE_LOC_TURKISH; + } } - if(is_sep(c)) { - result=UCASE_LOC_GREEK; + } else if(c=='A') { + /* az or aze? */ + c=*locale++; + if(is_z(c)) { + c=*locale++; + if(is_e(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_TURKISH; + } } - } - } else if(is_n(c)) { - /* nl or nld? */ - c=*locale++; - if(is_l(c)) { + } else if(c=='L') { + /* lt or lit? */ c=*locale++; - if(is_d(c)) { + if(is_i(c)) { + c=*locale++; + } + if(is_t(c)) { c=*locale; + if(is_sep(c)) { + return UCASE_LOC_LITHUANIAN; + } } - if(is_sep(c)) { - result=UCASE_LOC_DUTCH; + } else if(c=='E') { + /* el or ell? */ + c=*locale++; + if(is_l(c)) { + c=*locale++; + if(is_l(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_GREEK; + } + } + } else if(c=='N') { + /* nl or nld? */ + c=*locale++; + if(is_l(c)) { + c=*locale++; + if(is_d(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_DUTCH; + } } } } - - if(locCache!=NULL) { - *locCache=result; - } - return result; + return UCASE_LOC_ROOT; } /* @@ -662,7 +720,7 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) { * it is also cased or not. */ static UBool -isFollowedByCasedLetter(const UCaseProps *csp, UCaseContextIterator *iter, void *context, int8_t dir) { +isFollowedByCasedLetter(UCaseContextIterator *iter, void *context, int8_t dir) { UChar32 c; if(iter==NULL) { @@ -670,7 +728,7 @@ isFollowedByCasedLetter(const UCaseProps *csp, UCaseContextIterator *iter, void } for(/* dir!=0 sets direction */; (c=iter(context, dir))>=0; dir=0) { - int32_t type=ucase_getTypeOrIgnorable(csp, c); + int32_t type=ucase_getTypeOrIgnorable(c); if(type&4) { /* case-ignorable, continue with the loop */ } else if(type!=UCASE_NONE) { @@ -685,7 +743,7 @@ isFollowedByCasedLetter(const UCaseProps *csp, UCaseContextIterator *iter, void /* Is preceded by Soft_Dotted character with no intervening cc=230 ? */ static UBool -isPrecededBySoftDotted(const UCaseProps *csp, UCaseContextIterator *iter, void *context) { +isPrecededBySoftDotted(UCaseContextIterator *iter, void *context) { UChar32 c; int32_t dotType; int8_t dir; @@ -695,7 +753,7 @@ isPrecededBySoftDotted(const UCaseProps *csp, UCaseContextIterator *iter, void * } for(dir=-1; (c=iter(context, dir))>=0; dir=0) { - dotType=getDotType(csp, c); + dotType=getDotType(c); if(dotType==UCASE_SOFT_DOTTED) { return TRUE; /* preceded by TYPE_i */ } else if(dotType!=UCASE_OTHER_ACCENT) { @@ -742,7 +800,7 @@ isPrecededBySoftDotted(const UCaseProps *csp, UCaseContextIterator *iter, void * /* Is preceded by base character 'I' with no intervening cc=230 ? */ static UBool -isPrecededBy_I(const UCaseProps *csp, UCaseContextIterator *iter, void *context) { +isPrecededBy_I(UCaseContextIterator *iter, void *context) { UChar32 c; int32_t dotType; int8_t dir; @@ -755,7 +813,7 @@ isPrecededBy_I(const UCaseProps *csp, UCaseContextIterator *iter, void *context) if(c==0x49) { return TRUE; /* preceded by I */ } - dotType=getDotType(csp, c); + dotType=getDotType(c); if(dotType!=UCASE_OTHER_ACCENT) { return FALSE; /* preceded by different base character (not I), or intervening cc==230 */ } @@ -766,7 +824,7 @@ isPrecededBy_I(const UCaseProps *csp, UCaseContextIterator *iter, void *context) /* Is followed by one or more cc==230 ? */ static UBool -isFollowedByMoreAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *context) { +isFollowedByMoreAbove(UCaseContextIterator *iter, void *context) { UChar32 c; int32_t dotType; int8_t dir; @@ -776,7 +834,7 @@ isFollowedByMoreAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *c } for(dir=1; (c=iter(context, dir))>=0; dir=0) { - dotType=getDotType(csp, c); + dotType=getDotType(c); if(dotType==UCASE_ABOVE) { return TRUE; /* at least one cc==230 following */ } else if(dotType!=UCASE_OTHER_ACCENT) { @@ -789,7 +847,7 @@ isFollowedByMoreAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *c /* Is followed by a dot above (without cc==230 in between) ? */ static UBool -isFollowedByDotAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *context) { +isFollowedByDotAbove(UCaseContextIterator *iter, void *context) { UChar32 c; int32_t dotType; int8_t dir; @@ -802,7 +860,7 @@ isFollowedByDotAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *co if(c==0x307) { return TRUE; } - dotType=getDotType(csp, c); + dotType=getDotType(c); if(dotType!=UCASE_OTHER_ACCENT) { return FALSE; /* next base character or cc==230 in between */ } @@ -812,20 +870,20 @@ isFollowedByDotAbove(const UCaseProps *csp, UCaseContextIterator *iter, void *co } U_CAPI int32_t U_EXPORT2 -ucase_toFullLower(const UCaseProps *csp, UChar32 c, +ucase_toFullLower(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache) { + int32_t loc) { // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; - uint16_t props=UTRIE2_GET16(&csp->trie, c); + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { result=c+UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props), *pe2; uint16_t excWord=*pe++; int32_t full; @@ -833,7 +891,6 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) { /* use hardcoded conditions and mappings */ - int32_t loc=ucase_getCaseLocale(locale, locCache); /* * Test for conditional mappings first @@ -844,7 +901,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, if( loc==UCASE_LOC_LITHUANIAN && /* base characters, find accents above */ (((c==0x49 || c==0x4a || c==0x12e) && - isFollowedByMoreAbove(csp, iter, context)) || + isFollowedByMoreAbove(iter, context)) || /* precomposed with accent above, no need to find one */ (c==0xcc || c==0xcd || c==0x128)) ) { @@ -896,7 +953,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, 0130; 0069; 0130; 0130; az # LATIN CAPITAL LETTER I WITH DOT ABOVE */ return 0x69; - } else if(loc==UCASE_LOC_TURKISH && c==0x307 && isPrecededBy_I(csp, iter, context)) { + } else if(loc==UCASE_LOC_TURKISH && c==0x307 && isPrecededBy_I(iter, context)) { /* # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i. # This matches the behavior of the canonically equivalent I-dot_above @@ -905,7 +962,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE */ return 0; /* remove the dot (continue without output) */ - } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(csp, iter, context)) { + } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(iter, context)) { /* # When lowercasing, unless an I is before a dot_above, it turns into a dotless i. @@ -922,8 +979,8 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, *pString=iDot; return 2; } else if( c==0x3a3 && - !isFollowedByCasedLetter(csp, iter, context, 1) && - isFollowedByCasedLetter(csp, iter, context, -1) /* -1=preceded */ + !isFollowedByCasedLetter(iter, context, 1) && + isFollowedByCasedLetter(iter, context, -1) /* -1=preceded */ ) { /* greek capital sigma maps depending on surrounding cased letters (see SpecialCasing.txt) */ /* @@ -957,21 +1014,21 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, /* internal */ static int32_t -toUpperOrTitle(const UCaseProps *csp, UChar32 c, +toUpperOrTitle(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache, + int32_t loc, UBool upperNotTitle) { // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; - uint16_t props=UTRIE2_GET16(&csp->trie, c); + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { result=c+UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props), *pe2; uint16_t excWord=*pe++; int32_t full, idx; @@ -979,8 +1036,6 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) { /* use hardcoded conditions and mappings */ - int32_t loc=ucase_getCaseLocale(locale, locCache); - if(loc==UCASE_LOC_TURKISH && c==0x69) { /* # Turkish and Azeri @@ -994,7 +1049,7 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, 0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I */ return 0x130; - } else if(loc==UCASE_LOC_LITHUANIAN && c==0x307 && isPrecededBySoftDotted(csp, iter, context)) { + } else if(loc==UCASE_LOC_LITHUANIAN && c==0x307 && isPrecededBySoftDotted(iter, context)) { /* # Lithuanian @@ -1052,19 +1107,19 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, } U_CAPI int32_t U_EXPORT2 -ucase_toFullUpper(const UCaseProps *csp, UChar32 c, +ucase_toFullUpper(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache) { - return toUpperOrTitle(csp, c, iter, context, pString, locale, locCache, TRUE); + int32_t caseLocale) { + return toUpperOrTitle(c, iter, context, pString, caseLocale, TRUE); } U_CAPI int32_t U_EXPORT2 -ucase_toFullTitle(const UCaseProps *csp, UChar32 c, +ucase_toFullTitle(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache) { - return toUpperOrTitle(csp, c, iter, context, pString, locale, locCache, FALSE); + int32_t caseLocale) { + return toUpperOrTitle(c, iter, context, pString, caseLocale, FALSE); } /* case folding ------------------------------------------------------------- */ @@ -1110,14 +1165,14 @@ ucase_toFullTitle(const UCaseProps *csp, UChar32 c, /* return the simple case folding mapping for c */ U_CAPI UChar32 U_EXPORT2 -ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) { - uint16_t props=UTRIE2_GET16(&csp->trie, c); +ucase_fold(UChar32 c, uint32_t options) { + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { c+=UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props); + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; int32_t idx; if(excWord&UCASE_EXC_CONDITIONAL_FOLD) { @@ -1170,19 +1225,19 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) { */ U_CAPI int32_t U_EXPORT2 -ucase_toFullFolding(const UCaseProps *csp, UChar32 c, +ucase_toFullFolding(UChar32 c, const UChar **pString, uint32_t options) { // The sign of the result has meaning, input must be non-negative so that it can be returned as is. U_ASSERT(c >= 0); UChar32 result=c; - uint16_t props=UTRIE2_GET16(&csp->trie, c); + uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); if(!PROPS_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { result=c+UCASE_GET_DELTA(props); } } else { - const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props), *pe2; uint16_t excWord=*pe++; int32_t full, idx; @@ -1244,66 +1299,59 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c, /* case mapping properties API ---------------------------------------------- */ -#define GET_CASE_PROPS() &ucase_props_singleton - /* public API (see uchar.h) */ U_CAPI UBool U_EXPORT2 u_isULowercase(UChar32 c) { - return (UBool)(UCASE_LOWER==ucase_getType(GET_CASE_PROPS(), c)); + return (UBool)(UCASE_LOWER==ucase_getType(c)); } U_CAPI UBool U_EXPORT2 u_isUUppercase(UChar32 c) { - return (UBool)(UCASE_UPPER==ucase_getType(GET_CASE_PROPS(), c)); + return (UBool)(UCASE_UPPER==ucase_getType(c)); } /* Transforms the Unicode character to its lower case equivalent.*/ U_CAPI UChar32 U_EXPORT2 u_tolower(UChar32 c) { - return ucase_tolower(GET_CASE_PROPS(), c); + return ucase_tolower(c); } /* Transforms the Unicode character to its upper case equivalent.*/ U_CAPI UChar32 U_EXPORT2 u_toupper(UChar32 c) { - return ucase_toupper(GET_CASE_PROPS(), c); + return ucase_toupper(c); } /* Transforms the Unicode character to its title case equivalent.*/ U_CAPI UChar32 U_EXPORT2 u_totitle(UChar32 c) { - return ucase_totitle(GET_CASE_PROPS(), c); + return ucase_totitle(c); } /* return the simple case folding mapping for c */ U_CAPI UChar32 U_EXPORT2 u_foldCase(UChar32 c, uint32_t options) { - return ucase_fold(GET_CASE_PROPS(), c, options); + return ucase_fold(c, options); } U_CFUNC int32_t U_EXPORT2 ucase_hasBinaryProperty(UChar32 c, UProperty which) { /* case mapping properties */ const UChar *resultString; - int32_t locCache; - const UCaseProps *csp=GET_CASE_PROPS(); - if(csp==NULL) { - return FALSE; - } switch(which) { case UCHAR_LOWERCASE: - return (UBool)(UCASE_LOWER==ucase_getType(csp, c)); + return (UBool)(UCASE_LOWER==ucase_getType(c)); case UCHAR_UPPERCASE: - return (UBool)(UCASE_UPPER==ucase_getType(csp, c)); + return (UBool)(UCASE_UPPER==ucase_getType(c)); case UCHAR_SOFT_DOTTED: - return ucase_isSoftDotted(csp, c); + return ucase_isSoftDotted(c); case UCHAR_CASE_SENSITIVE: - return ucase_isCaseSensitive(csp, c); + return ucase_isCaseSensitive(c); case UCHAR_CASED: - return (UBool)(UCASE_NONE!=ucase_getType(csp, c)); + return (UBool)(UCASE_NONE!=ucase_getType(c)); case UCHAR_CASE_IGNORABLE: - return (UBool)(ucase_getTypeOrIgnorable(csp, c)>>2); + return (UBool)(ucase_getTypeOrIgnorable(c)>>2); /* * Note: The following Changes_When_Xyz are defined as testing whether * the NFD form of the input changes when Xyz-case-mapped. @@ -1317,21 +1365,17 @@ ucase_hasBinaryProperty(UChar32 c, UProperty which) { * start sets for normalization and case mappings. */ case UCHAR_CHANGES_WHEN_LOWERCASED: - locCache=UCASE_LOC_ROOT; - return (UBool)(ucase_toFullLower(csp, c, NULL, NULL, &resultString, "", &locCache)>=0); + return (UBool)(ucase_toFullLower(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0); case UCHAR_CHANGES_WHEN_UPPERCASED: - locCache=UCASE_LOC_ROOT; - return (UBool)(ucase_toFullUpper(csp, c, NULL, NULL, &resultString, "", &locCache)>=0); + return (UBool)(ucase_toFullUpper(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0); case UCHAR_CHANGES_WHEN_TITLECASED: - locCache=UCASE_LOC_ROOT; - return (UBool)(ucase_toFullTitle(csp, c, NULL, NULL, &resultString, "", &locCache)>=0); + return (UBool)(ucase_toFullTitle(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0); /* case UCHAR_CHANGES_WHEN_CASEFOLDED: -- in uprops.c */ case UCHAR_CHANGES_WHEN_CASEMAPPED: - locCache=UCASE_LOC_ROOT; return (UBool)( - ucase_toFullLower(csp, c, NULL, NULL, &resultString, "", &locCache)>=0 || - ucase_toFullUpper(csp, c, NULL, NULL, &resultString, "", &locCache)>=0 || - ucase_toFullTitle(csp, c, NULL, NULL, &resultString, "", &locCache)>=0); + ucase_toFullLower(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0 || + ucase_toFullUpper(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0 || + ucase_toFullTitle(c, NULL, NULL, &resultString, UCASE_LOC_ROOT)>=0); default: return FALSE; } diff --git a/source/common/ucase.h b/source/common/ucase.h index 29ea71a..e15bae6 100644 --- a/source/common/ucase.h +++ b/source/common/ucase.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucase.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -37,18 +37,8 @@ U_NAMESPACE_END /* library API -------------------------------------------------------------- */ -U_CDECL_BEGIN - -struct UCaseProps; -typedef struct UCaseProps UCaseProps; - -U_CDECL_END - -U_CAPI const UCaseProps * U_EXPORT2 -ucase_getSingleton(void); - U_CFUNC void U_EXPORT2 -ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode); +ucase_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); /** * Requires non-NULL locale ID but otherwise does the equivalent of @@ -56,7 +46,7 @@ ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode * * Accepts both 2- and 3-letter codes and accepts case variants. */ U_CFUNC int32_t -ucase_getCaseLocale(const char *locale, int32_t *locCache); +ucase_getCaseLocale(const char *locale); /* Casing locale types for ucase_getCaseLocale */ enum { @@ -87,16 +77,16 @@ enum { /* single-code point functions */ U_CAPI UChar32 U_EXPORT2 -ucase_tolower(const UCaseProps *csp, UChar32 c); +ucase_tolower(UChar32 c); U_CAPI UChar32 U_EXPORT2 -ucase_toupper(const UCaseProps *csp, UChar32 c); +ucase_toupper(UChar32 c); U_CAPI UChar32 U_EXPORT2 -ucase_totitle(const UCaseProps *csp, UChar32 c); +ucase_totitle(UChar32 c); U_CAPI UChar32 U_EXPORT2 -ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options); +ucase_fold(UChar32 c, uint32_t options); /** * Adds all simple case mappings and the full case folding for c to sa, @@ -108,7 +98,7 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options); * - for k include the Kelvin sign */ U_CFUNC void U_EXPORT2 -ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa); +ucase_addCaseClosure(UChar32 c, const USetAdder *sa); /** * Maps the string to single code points and adds the associated case closure @@ -123,7 +113,7 @@ ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa); * @return TRUE if the string was found */ U_CFUNC UBool U_EXPORT2 -ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa); +ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa); #ifdef __cplusplus U_NAMESPACE_BEGIN @@ -157,17 +147,17 @@ U_NAMESPACE_END /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */ U_CAPI int32_t U_EXPORT2 -ucase_getType(const UCaseProps *csp, UChar32 c); +ucase_getType(UChar32 c); /** @return like ucase_getType() but also sets UCASE_IGNORABLE if c is case-ignorable */ U_CAPI int32_t U_EXPORT2 -ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c); +ucase_getTypeOrIgnorable(UChar32 c); U_CAPI UBool U_EXPORT2 -ucase_isSoftDotted(const UCaseProps *csp, UChar32 c); +ucase_isSoftDotted(UChar32 c); U_CAPI UBool U_EXPORT2 -ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c); +ucase_isCaseSensitive(UChar32 c); /* string case mapping functions */ @@ -240,10 +230,7 @@ enum { * @param context Pointer to be passed into iter. * @param pString If the mapping result is a string, then the pointer is * written to *pString. - * @param locale Locale ID for locale-dependent mappings. - * @param locCache Initialize to 0; may be used to cache the result of parsing - * the locale ID for subsequent calls. - * Can be NULL. + * @param caseLocale Case locale value from ucase_getCaseLocale(). * @return Output code point or string length, see UCASE_MAX_STRING_LENGTH. * * @see UCaseContextIterator @@ -251,25 +238,25 @@ enum { * @internal */ U_CAPI int32_t U_EXPORT2 -ucase_toFullLower(const UCaseProps *csp, UChar32 c, +ucase_toFullLower(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache); + int32_t caseLocale); U_CAPI int32_t U_EXPORT2 -ucase_toFullUpper(const UCaseProps *csp, UChar32 c, +ucase_toFullUpper(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache); + int32_t caseLocale); U_CAPI int32_t U_EXPORT2 -ucase_toFullTitle(const UCaseProps *csp, UChar32 c, +ucase_toFullTitle(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache); + int32_t caseLocale); U_CAPI int32_t U_EXPORT2 -ucase_toFullFolding(const UCaseProps *csp, UChar32 c, +ucase_toFullFolding(UChar32 c, const UChar **pString, uint32_t options); @@ -283,10 +270,10 @@ U_CDECL_BEGIN * @internal */ typedef int32_t U_CALLCONV -UCaseMapFull(const UCaseProps *csp, UChar32 c, +UCaseMapFull(UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache); + int32_t caseLocale); U_CDECL_END diff --git a/source/common/ucase_props_data.h b/source/common/ucase_props_data.h index aa51bac..3663592 100644 --- a/source/common/ucase_props_data.h +++ b/source/common/ucase_props_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 1999-2016, International Business Machines diff --git a/source/common/ucasemap.cpp b/source/common/ucasemap.cpp index 0576a26..391140d 100644 --- a/source/common/ucasemap.cpp +++ b/source/common/ucasemap.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucasemap.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -20,6 +20,8 @@ #include "unicode/utypes.h" #include "unicode/brkiter.h" +#include "unicode/casemap.h" +#include "unicode/edits.h" #include "unicode/ubrk.h" #include "unicode/uloc.h" #include "unicode/ustring.h" @@ -32,47 +34,69 @@ #include "unicode/utf16.h" #include "cmemory.h" #include "cstring.h" +#include "uassert.h" #include "ucase.h" +#include "ucasemap_imp.h" #include "ustr_imp.h" +U_NAMESPACE_BEGIN + +namespace { + +// TODO: share with UTF-16? inline in ucasemap_imp.h? +int32_t checkOverflowAndEditsError(int32_t destIndex, int32_t destCapacity, + Edits *edits, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode)) { + if (destIndex > destCapacity) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + } else if (edits != NULL) { + edits->copyErrorTo(errorCode); + } + } + return destIndex; +} + +} // namespace + +U_NAMESPACE_END + U_NAMESPACE_USE /* UCaseMap service object -------------------------------------------------- */ +UCaseMap::UCaseMap(const char *localeID, uint32_t opts, UErrorCode *pErrorCode) : +#if !UCONFIG_NO_BREAK_ITERATION + iter(NULL), +#endif + caseLocale(UCASE_LOC_UNKNOWN), options(opts) { + ucasemap_setLocale(this, localeID, pErrorCode); +} + +UCaseMap::~UCaseMap() { +#if !UCONFIG_NO_BREAK_ITERATION + delete iter; +#endif +} + U_CAPI UCaseMap * U_EXPORT2 ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) { - UCaseMap *csm; - if(U_FAILURE(*pErrorCode)) { return NULL; } - - csm=(UCaseMap *)uprv_malloc(sizeof(UCaseMap)); + UCaseMap *csm = new UCaseMap(locale, options, pErrorCode); if(csm==NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; return NULL; - } - uprv_memset(csm, 0, sizeof(UCaseMap)); - - csm->csp=ucase_getSingleton(); - ucasemap_setLocale(csm, locale, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - uprv_free(csm); + } else if (U_FAILURE(*pErrorCode)) { + delete csm; return NULL; } - - csm->options=options; return csm; } U_CAPI void U_EXPORT2 ucasemap_close(UCaseMap *csm) { - if(csm!=NULL) { -#if !UCONFIG_NO_BREAK_ITERATION - // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code. - delete reinterpret_cast(csm->iter); -#endif - uprv_free(csm); - } + delete csm; } U_CAPI const char * U_EXPORT2 @@ -87,13 +111,16 @@ ucasemap_getOptions(const UCaseMap *csm) { U_CAPI void U_EXPORT2 ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) { - int32_t length; - if(U_FAILURE(*pErrorCode)) { return; } + if (locale != NULL && *locale == 0) { + csm->locale[0] = 0; + csm->caseLocale = UCASE_LOC_ROOT; + return; + } - length=uloc_getName(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode); + int32_t length=uloc_getName(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode); if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR || length==sizeof(csm->locale)) { *pErrorCode=U_ZERO_ERROR; /* we only really need the language code for case mappings */ @@ -102,27 +129,32 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) { if(length==sizeof(csm->locale)) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; } - csm->locCache=0; if(U_SUCCESS(*pErrorCode)) { - ucase_getCaseLocale(csm->locale, &csm->locCache); + csm->caseLocale=UCASE_LOC_UNKNOWN; + csm->caseLocale = ucase_getCaseLocale(csm->locale); } else { csm->locale[0]=0; + csm->caseLocale = UCASE_LOC_ROOT; } } U_CAPI void U_EXPORT2 -ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode * /*pErrorCode*/) { +ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return; + } csm->options=options; } /* UTF-8 string case mappings ----------------------------------------------- */ -/* TODO(markus): Move to a new, separate utf8case.c file. */ +/* TODO(markus): Move to a new, separate utf8case.cpp file. */ /* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */ static inline int32_t appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, - int32_t result, const UChar *s) { + int32_t result, const UChar *s, + int32_t cpLength, uint32_t options, icu::Edits *edits) { UChar32 c; int32_t length; UErrorCode errorCode; @@ -130,86 +162,126 @@ appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, /* decode the result */ if(result<0) { /* (not) original code point */ + if(edits!=NULL) { + edits->addUnchanged(cpLength); + if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { + return destIndex; + } + } c=~result; - length=U8_LENGTH(c); - } else if(result<=UCASE_MAX_STRING_LENGTH) { - c=U_SENTINEL; - length=result; + if(destIndex(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + if(edits!=NULL) { + edits->addReplace(cpLength, length); + } + // We might have an overflow, but we know the actual length. + return destIndex+length; + } else if(destIndexaddReplace(cpLength, 1); + } + return destIndex; + } else { + c=result; + length=U8_LENGTH(c); + if(edits!=NULL) { + edits->addReplace(cpLength, length); + } + } } + // c>=0 single code point if(length>(INT32_MAX-destIndex)) { return -1; // integer overflow } if(destIndex=0) { - /* code point */ - UBool isError=FALSE; - U8_APPEND(dest, destIndex, destCapacity, c, isError); - if(isError) { - /* overflow, nothing written */ - destIndex+=length; - } - } else { - /* string */ - int32_t destLength; - errorCode=U_ZERO_ERROR; - u_strToUTF8( - (char *)(dest+destIndex), destCapacity-destIndex, &destLength, - s, length, - &errorCode); - if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { - return -1; - } - if(destLength>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - destIndex+=destLength; - /* we might have an overflow, but we know the actual length */ + UBool isError=FALSE; + U8_APPEND(dest, destIndex, destCapacity, c, isError); + if(isError) { + /* overflow, nothing written */ + destIndex+=length; } } else { /* preflight */ - if(c>=0) { - destIndex+=length; - } else { - int32_t destLength; - errorCode=U_ZERO_ERROR; - u_strToUTF8( - NULL, 0, &destLength, - s, length, - &errorCode); - if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { - return -1; - } - if(destLength>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - destIndex+=destLength; - } + destIndex+=length; } return destIndex; } static inline int32_t -appendUChar(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar c) { - int32_t length=U8_LENGTH(c); - if(length>(INT32_MAX-destIndex)) { +appendASCII(uint8_t *dest, int32_t destIndex, int32_t destCapacity, uint8_t c) { + if(destIndex> 6) | 0xc0); } +static inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); } + +static inline int32_t +appendTwoBytes(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar32 c) { + U_ASSERT(0x370 <= c && c <= 0x3ff); // 2-byte UTF-8, main Greek block + if(2>(INT32_MAX-destIndex)) { return -1; // integer overflow } - int32_t limit=destIndex+length; + int32_t limit=destIndex+2; if(limit<=destCapacity) { - U8_APPEND_UNSAFE(dest, destIndex, c); + dest+=destIndex; + dest[0]=getTwoByteLead(c); + dest[1]=getTwoByteTrail(c); } return limit; } static inline int32_t -appendString(uint8_t *dest, int32_t destIndex, int32_t destCapacity, - const uint8_t *s, int32_t length) { +appendTwoBytes(uint8_t *dest, int32_t destIndex, int32_t destCapacity, const char *s) { + if(2>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + int32_t limit=destIndex+2; + if(limit<=destCapacity) { + dest+=destIndex; + dest[0]=(uint8_t)s[0]; + dest[1]=(uint8_t)s[1]; + } + return limit; +} + +static inline int32_t +appendUnchanged(uint8_t *dest, int32_t destIndex, int32_t destCapacity, + const uint8_t *s, int32_t length, uint32_t options, icu::Edits *edits) { if(length>0) { + if(edits!=NULL) { + edits->addUnchanged(length); + if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { + return destIndex; + } + } if(length>(INT32_MAX-destIndex)) { return -1; // integer overflow } @@ -258,93 +330,77 @@ utf8_caseContextIterator(void *context, int8_t dir) { * context [0..srcLength[ into account. */ static int32_t -_caseMap(const UCaseMap *csm, UCaseMapFull *map, +_caseMap(int32_t caseLocale, uint32_t options, UCaseMapFull *map, uint8_t *dest, int32_t destCapacity, const uint8_t *src, UCaseContext *csc, int32_t srcStart, int32_t srcLimit, - UErrorCode *pErrorCode) { - const UChar *s = NULL; - UChar32 c, c2 = 0; - int32_t srcIndex, destIndex; - int32_t locCache; - - locCache=csm->locCache; - + icu::Edits *edits, + UErrorCode &errorCode) { /* case mapping loop */ - srcIndex=srcStart; - destIndex=0; + int32_t srcIndex=srcStart; + int32_t destIndex=0; while(srcIndexcpStart=srcIndex; + int32_t cpStart; + csc->cpStart=cpStart=srcIndex; + UChar32 c; U8_NEXT(src, srcIndex, srcLimit, c); csc->cpLimit=srcIndex; if(c<0) { // Malformed UTF-8. - destIndex=appendString(dest, destIndex, destCapacity, src+csc->cpStart, srcIndex-csc->cpStart); + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+cpStart, srcIndex-cpStart, options, edits); if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } continue; } - c=map(csm->csp, c, utf8_caseContextIterator, csc, &s, csm->locale, &locCache); - if((destIndexdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } return destIndex; } #if !UCONFIG_NO_BREAK_ITERATION U_CFUNC int32_t U_CALLCONV -ucasemap_internalUTF8ToTitle(const UCaseMap *csm, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode) { - const UChar *s; - UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex; - UBool isFirstIndex; - - if(U_FAILURE(*pErrorCode)) { +ucasemap_internalUTF8ToTitle( + int32_t caseLocale, uint32_t options, BreakIterator *iter, + uint8_t *dest, int32_t destCapacity, + const uint8_t *src, int32_t srcLength, + icu::Edits *edits, + UErrorCode &errorCode) { + if(U_FAILURE(errorCode)) { return 0; } - // Use the C++ abstract base class to minimize dependencies. - // TODO: Change UCaseMap.iter to store a BreakIterator directly. - BreakIterator *bi=reinterpret_cast(csm->iter); - /* set up local variables */ - int32_t locCache=csm->locCache; UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - destIndex=0; - prev=0; - isFirstIndex=TRUE; + int32_t destIndex=0; + int32_t prev=0; + UBool isFirstIndex=TRUE; /* titlecasing loop */ while(prevfirst(); + index=iter->first(); } else { - idx=bi->next(); + index=iter->next(); } - if(idx==UBRK_DONE || idx>srcLength) { - idx=srcLength; + if(index==UBRK_DONE || index>srcLength) { + index=srcLength; } /* @@ -360,29 +416,32 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, * b) first case letter (titlecase) [titleStart..titleLimit[ * c) subsequent characters (lowercase) [titleLimit..index[ */ - if(prevoptions&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(csm->csp, c)) { + int32_t titleStart=prev; + int32_t titleLimit=prev; + UChar32 c; + U8_NEXT(src, titleLimit, index, c); + if((options&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(c)) { /* Adjust the titlecasing index (titleStart) to the next cased character. */ for(;;) { titleStart=titleLimit; - if(titleLimit==idx) { + if(titleLimit==index) { /* * only uncased characters in [prev..index[ * stop with titleStart==titleLimit==index */ break; } - U8_NEXT(src, titleLimit, idx, c); - if(UCASE_NONE!=ucase_getType(csm->csp, c)) { + U8_NEXT(src, titleLimit, index, c); + if(UCASE_NONE!=ucase_getType(c)) { break; /* cased letter at [titleStart..titleLimit[ */ } } - destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+prev, titleStart-prev, options, edits); if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } } @@ -392,47 +451,69 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, if(c>=0) { csc.cpStart=titleStart; csc.cpLimit=titleLimit; - c=ucase_toFullTitle(csm->csp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + const UChar *s; + c=ucase_toFullTitle(c, utf8_caseContextIterator, &csc, &s, caseLocale); + destIndex=appendResult(dest, destIndex, destCapacity, c, s, + titleLimit-titleStart, options, edits); } else { // Malformed UTF-8. - destIndex=appendString(dest, destIndex, destCapacity, src+titleStart, titleLimit-titleStart); + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+titleStart, titleLimit-titleStart, options, edits); } if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } /* Special case Dutch IJ titlecasing */ - if (titleStart+1 < idx && - ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH && - (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && - (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); - titleLimit++; + if (titleStart+1 < index && + caseLocale == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069)) { + if (src[titleStart+1] == 0x006A) { + destIndex=appendASCII(dest, destIndex, destCapacity, 0x004A); + if(destIndex<0) { + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + if(edits!=NULL) { + edits->addReplace(1, 1); + } + titleLimit++; + } else if (src[titleStart+1] == 0x004A) { + // Keep the capital J from getting lowercased. + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+titleStart+1, 1, options, edits); + if(destIndex<0) { + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + titleLimit++; + } } + /* lowercase [titleLimit..index[ */ - if(titleLimitoptions&U_TITLECASE_NO_LOWERCASE)==0) { + if(titleLimitdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - return destIndex; + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } #endif @@ -454,11 +532,11 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, U_NAMESPACE_BEGIN namespace GreekUpper { -UBool isFollowedByCasedLetter(const UCaseProps *csp, const uint8_t *s, int32_t i, int32_t length) { +UBool isFollowedByCasedLetter(const uint8_t *s, int32_t i, int32_t length) { while (i < length) { UChar32 c; U8_NEXT(s, i, length, c); - int32_t type = ucase_getTypeOrIgnorable(csp, c); + int32_t type = ucase_getTypeOrIgnorable(c); if ((type & UCASE_IGNORABLE) != 0) { // Case-ignorable, continue with the loop. } else if (type != UCASE_NONE) { @@ -471,11 +549,11 @@ UBool isFollowedByCasedLetter(const UCaseProps *csp, const uint8_t *s, int32_t i } // Keep this consistent with the UTF-16 version in ustrcase.cpp and the Java version in CaseMap.java. -int32_t toUpper(const UCaseMap *csm, +int32_t toUpper(uint32_t options, uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode) { - int32_t locCache = UCASE_LOC_GREEK; + Edits *edits, + UErrorCode &errorCode) { int32_t destIndex=0; uint32_t state = 0; for (int32_t i = 0; i < srcLength;) { @@ -483,7 +561,7 @@ int32_t toUpper(const UCaseMap *csm, UChar32 c; U8_NEXT(src, nextIndex, srcLength, c); uint32_t nextState = 0; - int32_t type = ucase_getTypeOrIgnorable(csm->csp, c); + int32_t type = ucase_getTypeOrIgnorable(c); if ((type & UCASE_IGNORABLE) != 0) { // c is case-ignorable nextState |= (state & AFTER_CASED); @@ -533,7 +611,7 @@ int32_t toUpper(const UCaseMap *csm, (data & HAS_ACCENT) != 0 && numYpogegrammeni == 0 && (state & AFTER_CASED) == 0 && - !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + !isFollowedByCasedLetter(src, nextIndex, srcLength)) { // Keep disjunctive "or" with (only) a tonos. // We use the same "word boundary" conditions as for the Final_Sigma test. if (i == nextIndex) { @@ -551,40 +629,75 @@ int32_t toUpper(const UCaseMap *csm, data &= ~HAS_EITHER_DIALYTIKA; } } - destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); - if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika - } - if (destIndex >= 0 && addTonos) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); - } - while (destIndex >= 0 && numYpogegrammeni > 0) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); - --numYpogegrammeni; - } - if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + + UBool change = TRUE; + if (edits != NULL) { + // Find out first whether we are changing the text. + U_ASSERT(0x370 <= upper && upper <= 0x3ff); // 2-byte UTF-8, main Greek block + change = (i + 2) > nextIndex || + src[i] != getTwoByteLead(upper) || src[i + 1] != getTwoByteTrail(upper) || + numYpogegrammeni > 0; + int32_t i2 = i + 2; + if ((data & HAS_EITHER_DIALYTIKA) != 0) { + change |= (i2 + 2) > nextIndex || + src[i2] != (uint8_t)u8"\u0308"[0] || + src[i2 + 1] != (uint8_t)u8"\u0308"[1]; + i2 += 2; + } + if (addTonos) { + change |= (i2 + 2) > nextIndex || + src[i2] != (uint8_t)u8"\u0301"[0] || + src[i2 + 1] != (uint8_t)u8"\u0301"[1]; + i2 += 2; + } + int32_t oldLength = nextIndex - i; + int32_t newLength = (i2 - i) + numYpogegrammeni * 2; // 2 bytes per U+0399 + change |= oldLength != newLength; + if (change) { + if (edits != NULL) { + edits->addReplace(oldLength, newLength); + } + } else { + if (edits != NULL) { + edits->addUnchanged(oldLength); + } + // Write unchanged text? + change = (options & UCASEMAP_OMIT_UNCHANGED_TEXT) == 0; + } } - } else if(c>=0) { - const UChar *s; - UChar32 c2 = 0; - c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); - if((destIndex= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0308"); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0301"); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0399"); + --numYpogegrammeni; + } if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } } + } else if(c>=0) { + const UChar *s; + c=ucase_toFullUpper(c, NULL, NULL, &s, UCASE_LOC_GREEK); + destIndex = appendResult(dest, destIndex, destCapacity, c, s, + nextIndex - i, options, edits); + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } else { // Malformed UTF-8. - destIndex=appendString(dest, destIndex, destCapacity, src+i, nextIndex-i); + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+i, nextIndex-i, options, edits); if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } } @@ -592,9 +705,6 @@ int32_t toUpper(const UCaseMap *csm, state = nextState; } - if(destIndex>destCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } return destIndex; } @@ -602,102 +712,92 @@ int32_t toUpper(const UCaseMap *csm, U_NAMESPACE_END static int32_t U_CALLCONV -ucasemap_internalUTF8ToLower(const UCaseMap *csm, +ucasemap_internalUTF8ToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode) { + icu::Edits *edits, + UErrorCode &errorCode) { UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - return _caseMap( - csm, ucase_toFullLower, + int32_t destIndex = _caseMap( + caseLocale, options, ucase_toFullLower, dest, destCapacity, src, &csc, 0, srcLength, - pErrorCode); + edits, errorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } static int32_t U_CALLCONV -ucasemap_internalUTF8ToUpper(const UCaseMap *csm, +ucasemap_internalUTF8ToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode) { - int32_t locCache = csm->locCache; - if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { - return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + icu::Edits *edits, + UErrorCode &errorCode) { + int32_t destIndex; + if (caseLocale == UCASE_LOC_GREEK) { + destIndex = GreekUpper::toUpper(options, dest, destCapacity, + src, srcLength, edits, errorCode); + } else { + UCaseContext csc=UCASECONTEXT_INITIALIZER; + csc.p=(void *)src; + csc.limit=srcLength; + destIndex = _caseMap( + caseLocale, options, ucase_toFullUpper, + dest, destCapacity, + src, &csc, 0, srcLength, + edits, errorCode); } - UCaseContext csc=UCASECONTEXT_INITIALIZER; - csc.p=(void *)src; - csc.limit=srcLength; - return _caseMap( - csm, ucase_toFullUpper, - dest, destCapacity, - src, &csc, 0, srcLength, - pErrorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } -static int32_t -utf8_foldCase(const UCaseProps *csp, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - uint32_t options, - UErrorCode *pErrorCode) { - int32_t srcIndex, destIndex; - - const UChar *s; - UChar32 c, c2; - int32_t start; - +static int32_t U_CALLCONV +ucasemap_internalUTF8Fold(int32_t /* caseLocale */, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED + uint8_t *dest, int32_t destCapacity, + const uint8_t *src, int32_t srcLength, + icu::Edits *edits, + UErrorCode &errorCode) { /* case mapping loop */ - srcIndex=destIndex=0; - while(srcIndexdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - return destIndex; -} - -static int32_t U_CALLCONV -ucasemap_internalUTF8Fold(const UCaseMap *csm, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode) { - return utf8_foldCase(csm->csp, dest, destCapacity, src, srcLength, csm->options, pErrorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } U_CFUNC int32_t -ucasemap_mapUTF8(const UCaseMap *csm, +ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, UTF8CaseMapper *stringCaseMapper, - UErrorCode *pErrorCode) { + icu::Edits *edits, + UErrorCode &errorCode) { int32_t destLength; /* check argument values */ - if(U_FAILURE(*pErrorCode)) { + if(U_FAILURE(errorCode)) { return 0; } if( destCapacity<0 || @@ -705,7 +805,7 @@ ucasemap_mapUTF8(const UCaseMap *csm, src==NULL || srcLength<-1 ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + errorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } @@ -719,12 +819,16 @@ ucasemap_mapUTF8(const UCaseMap *csm, ((src>=dest && src<(dest+destCapacity)) || (dest>=src && dest<(src+srcLength))) ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + errorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } - destLength=stringCaseMapper(csm, dest, destCapacity, src, srcLength, pErrorCode); - return u_terminateChars((char *)dest, destCapacity, destLength, pErrorCode); + if(edits!=NULL) { + edits->reset(); + } + destLength=stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + dest, destCapacity, src, srcLength, edits, errorCode); + return u_terminateChars((char *)dest, destCapacity, destLength, &errorCode); } /* public API functions */ @@ -734,10 +838,11 @@ ucasemap_utf8ToLower(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode) { - return ucasemap_mapUTF8(csm, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, - ucasemap_internalUTF8ToLower, pErrorCode); + return ucasemap_mapUTF8( + csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToLower, NULL, *pErrorCode); } U_CAPI int32_t U_EXPORT2 @@ -745,10 +850,11 @@ ucasemap_utf8ToUpper(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode) { - return ucasemap_mapUTF8(csm, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, - ucasemap_internalUTF8ToUpper, pErrorCode); + return ucasemap_mapUTF8( + csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToUpper, NULL, *pErrorCode); } U_CAPI int32_t U_EXPORT2 @@ -756,8 +862,49 @@ ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode) { - return ucasemap_mapUTF8(csm, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, - ucasemap_internalUTF8Fold, pErrorCode); + return ucasemap_mapUTF8( + UCASE_LOC_ROOT, csm->options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8Fold, NULL, *pErrorCode); +} + +U_NAMESPACE_BEGIN + +int32_t CaseMap::utf8ToLower( + const char *locale, uint32_t options, + const char *src, int32_t srcLength, + char *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + return ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToLower, edits, errorCode); } + +int32_t CaseMap::utf8ToUpper( + const char *locale, uint32_t options, + const char *src, int32_t srcLength, + char *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + return ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToUpper, edits, errorCode); +} + +int32_t CaseMap::utf8Fold( + uint32_t options, + const char *src, int32_t srcLength, + char *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + return ucasemap_mapUTF8( + UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8Fold, edits, errorCode); +} + +U_NAMESPACE_END diff --git a/source/common/ucasemap_titlecase_brkiter.cpp b/source/common/ucasemap_titlecase_brkiter.cpp index ab61e21..a253850 100644 --- a/source/common/ucasemap_titlecase_brkiter.cpp +++ b/source/common/ucasemap_titlecase_brkiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucasemap_titlecase_brkiter.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -23,23 +23,59 @@ #include "unicode/brkiter.h" #include "unicode/ubrk.h" +#include "unicode/casemap.h" #include "unicode/ucasemap.h" #include "cmemory.h" #include "ucase.h" -#include "ustr_imp.h" +#include "ucasemap_imp.h" + +U_NAMESPACE_BEGIN + +int32_t CaseMap::utf8ToTitle( + const char *locale, uint32_t options, BreakIterator *iter, + const char *src, int32_t srcLength, + char *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { + return 0; + } + UText utext=UTEXT_INITIALIZER; + utext_openUTF8(&utext, src, srcLength, &errorCode); + LocalPointer ownedIter; + if(iter==NULL) { + iter=BreakIterator::createWordInstance(Locale(locale), errorCode); + ownedIter.adoptInstead(iter); + } + if(U_FAILURE(errorCode)) { + utext_close(&utext); + return 0; + } + iter->setText(&utext, errorCode); + int32_t length=ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, iter, + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToTitle, edits, errorCode); + utext_close(&utext); + return length; +} + +U_NAMESPACE_END U_NAMESPACE_USE U_CAPI const UBreakIterator * U_EXPORT2 ucasemap_getBreakIterator(const UCaseMap *csm) { - return csm->iter; + return reinterpret_cast(csm->iter); } U_CAPI void U_EXPORT2 -ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * /*pErrorCode*/) { - // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code. - delete reinterpret_cast(csm->iter); - csm->iter=iterToAdopt; +ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return; + } + delete csm->iter; + csm->iter=reinterpret_cast(iterToAdopt); } U_CAPI int32_t U_EXPORT2 @@ -47,21 +83,23 @@ ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode) { - UText utext=UTEXT_INITIALIZER; - utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode); - if(U_FAILURE(*pErrorCode)) { + if (U_FAILURE(*pErrorCode)) { return 0; } + UText utext=UTEXT_INITIALIZER; + utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode); if(csm->iter==NULL) { - csm->iter=ubrk_open(UBRK_WORD, csm->locale, - NULL, 0, - pErrorCode); + csm->iter=BreakIterator::createWordInstance(Locale(csm->locale), *pErrorCode); + } + if (U_FAILURE(*pErrorCode)) { + return 0; } - ubrk_setUText(csm->iter, &utext, pErrorCode); - int32_t length=ucasemap_mapUTF8(csm, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, - ucasemap_internalUTF8ToTitle, pErrorCode); + csm->iter->setText(&utext, *pErrorCode); + int32_t length=ucasemap_mapUTF8( + csm->caseLocale, csm->options, csm->iter, + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + ucasemap_internalUTF8ToTitle, NULL, *pErrorCode); utext_close(&utext); return length; } diff --git a/source/common/ucat.c b/source/common/ucat.c deleted file mode 100644 index cfd8b53..0000000 --- a/source/common/ucat.c +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2003, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: March 19 2003 -* Since: ICU 2.6 -********************************************************************** -*/ -#include "unicode/ucat.h" -#include "unicode/ustring.h" -#include "cstring.h" -#include "uassert.h" - -/* Separator between set_num and msg_num */ -static const char SEPARATOR = '%'; - -/* Maximum length of a set_num/msg_num key, incl. terminating zero. - * Longest possible key is "-2147483648%-2147483648" */ -#define MAX_KEY_LEN (24) - -/** - * Fill in buffer with a set_num/msg_num key string, given the numeric - * values. Numeric values must be >= 0. Buffer must be of length - * MAX_KEY_LEN or more. - */ -static char* -_catkey(char* buffer, int32_t set_num, int32_t msg_num) { - int32_t i = 0; - i = T_CString_integerToString(buffer, set_num, 10); - buffer[i++] = SEPARATOR; - T_CString_integerToString(buffer+i, msg_num, 10); - return buffer; -} - -U_CAPI u_nl_catd U_EXPORT2 -u_catopen(const char* name, const char* locale, UErrorCode* ec) { - return (u_nl_catd) ures_open(name, locale, ec); -} - -U_CAPI void U_EXPORT2 -u_catclose(u_nl_catd catd) { - ures_close((UResourceBundle*) catd); /* may be NULL */ -} - -U_CAPI const UChar* U_EXPORT2 -u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, - const UChar* s, - int32_t* len, UErrorCode* ec) { - - char key[MAX_KEY_LEN]; - const UChar* result; - - if (ec == NULL || U_FAILURE(*ec)) { - goto ERROR; - } - - result = ures_getStringByKey((const UResourceBundle*) catd, - _catkey(key, set_num, msg_num), - len, ec); - if (U_FAILURE(*ec)) { - goto ERROR; - } - - return result; - - ERROR: - /* In case of any failure, return s */ - if (len != NULL) { - *len = u_strlen(s); - } - return s; -} - -/*eof*/ diff --git a/source/common/uchar.c b/source/common/uchar.c deleted file mode 100644 index 496df86..0000000 --- a/source/common/uchar.c +++ /dev/null @@ -1,733 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1996-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File UCHAR.C -* -* Modification History: -* -* Date Name Description -* 04/02/97 aliu Creation. -* 4/15/99 Madhu Updated all the function definitions for C Implementation -* 5/20/99 Madhu Added the function u_getVersion() -* 8/19/1999 srl Upgraded scripts to Unicode3.0 -* 11/11/1999 weiv added u_isalnum(), cleaned comments -* 01/11/2000 helena Renamed u_getVersion to u_getUnicodeVersion. -* 06/20/2000 helena OS/400 port changes; mostly typecast. -****************************************************************************** -*/ - -#include "unicode/utypes.h" -#include "unicode/uchar.h" -#include "unicode/uscript.h" -#include "unicode/udata.h" -#include "uassert.h" -#include "cmemory.h" -#include "ucln_cmn.h" -#include "utrie2.h" -#include "udataswp.h" -#include "uprops.h" -#include "ustr_imp.h" - -/* uchar_props_data.h is machine-generated by genprops --csource */ -#define INCLUDED_FROM_UCHAR_C -#include "uchar_props_data.h" - -/* constants and macros for access to the data ------------------------------ */ - -/* getting a uint32_t properties word from the data */ -#define GET_PROPS(c, result) ((result)=UTRIE2_GET16(&propsTrie, c)); - -U_CFUNC UBool -uprv_haveProperties(UErrorCode *pErrorCode) { - if(U_FAILURE(*pErrorCode)) { - return FALSE; - } - return TRUE; -} - -/* API functions ------------------------------------------------------------ */ - -/* Gets the Unicode character's general category.*/ -U_CAPI int8_t U_EXPORT2 -u_charType(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (int8_t)GET_CATEGORY(props); -} - -/* Enumerate all code points with their general categories. */ -struct _EnumTypeCallback { - UCharEnumTypeRange *enumRange; - const void *context; -}; - -static uint32_t U_CALLCONV -_enumTypeValue(const void *context, uint32_t value) { - return GET_CATEGORY(value); -} - -static UBool U_CALLCONV -_enumTypeRange(const void *context, UChar32 start, UChar32 end, uint32_t value) { - /* just cast the value to UCharCategory */ - return ((struct _EnumTypeCallback *)context)-> - enumRange(((struct _EnumTypeCallback *)context)->context, - start, end+1, (UCharCategory)value); -} - -U_CAPI void U_EXPORT2 -u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context) { - struct _EnumTypeCallback callback; - - if(enumRange==NULL) { - return; - } - - callback.enumRange=enumRange; - callback.context=context; - utrie2_enum(&propsTrie, _enumTypeValue, _enumTypeRange, &callback); -} - -/* Checks if ch is a lower case letter.*/ -U_CAPI UBool U_EXPORT2 -u_islower(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_LOWERCASE_LETTER); -} - -/* Checks if ch is an upper case letter.*/ -U_CAPI UBool U_EXPORT2 -u_isupper(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_UPPERCASE_LETTER); -} - -/* Checks if ch is a title case letter; usually upper case letters.*/ -U_CAPI UBool U_EXPORT2 -u_istitle(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_TITLECASE_LETTER); -} - -/* Checks if ch is a decimal digit. */ -U_CAPI UBool U_EXPORT2 -u_isdigit(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER); -} - -U_CAPI UBool U_EXPORT2 -u_isxdigit(UChar32 c) { - uint32_t props; - - /* check ASCII and Fullwidth ASCII a-fA-F */ - if( - (c<=0x66 && c>=0x41 && (c<=0x46 || c>=0x61)) || - (c>=0xff21 && c<=0xff46 && (c<=0xff26 || c>=0xff41)) - ) { - return TRUE; - } - - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER); -} - -/* Checks if the Unicode character is a letter.*/ -U_CAPI UBool U_EXPORT2 -u_isalpha(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&U_GC_L_MASK)!=0); -} - -U_CAPI UBool U_EXPORT2 -u_isUAlphabetic(UChar32 c) { - return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_ALPHABETIC))!=0; -} - -/* Checks if c is a letter or a decimal digit */ -U_CAPI UBool U_EXPORT2 -u_isalnum(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_ND_MASK))!=0); -} - -/** - * Checks if c is alphabetic, or a decimal digit; implements UCHAR_POSIX_ALNUM. - * @internal - */ -U_CFUNC UBool -u_isalnumPOSIX(UChar32 c) { - return (UBool)(u_isUAlphabetic(c) || u_isdigit(c)); -} - -/* Checks if ch is a unicode character with assigned character type.*/ -U_CAPI UBool U_EXPORT2 -u_isdefined(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)!=0); -} - -/* Checks if the Unicode character is a base form character that can take a diacritic.*/ -U_CAPI UBool U_EXPORT2 -u_isbase(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_N_MASK|U_GC_MC_MASK|U_GC_ME_MASK))!=0); -} - -/* Checks if the Unicode character is a control character.*/ -U_CAPI UBool U_EXPORT2 -u_iscntrl(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&(U_GC_CC_MASK|U_GC_CF_MASK|U_GC_ZL_MASK|U_GC_ZP_MASK))!=0); -} - -U_CAPI UBool U_EXPORT2 -u_isISOControl(UChar32 c) { - return (uint32_t)c<=0x9f && (c<=0x1f || c>=0x7f); -} - -/* Some control characters that are used as space. */ -#define IS_THAT_CONTROL_SPACE(c) \ - (c<=0x9f && ((c>=TAB && c<=CR) || (c>=0x1c && c <=0x1f) || c==NL)) - -/* Java has decided that U+0085 New Line is not whitespace any more. */ -#define IS_THAT_ASCII_CONTROL_SPACE(c) \ - (c<=0x1f && c>=TAB && (c<=CR || c>=0x1c)) - -/* Checks if the Unicode character is a space character.*/ -U_CAPI UBool U_EXPORT2 -u_isspace(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0 || IS_THAT_CONTROL_SPACE(c)); -} - -U_CAPI UBool U_EXPORT2 -u_isJavaSpaceChar(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0); -} - -/* Checks if the Unicode character is a whitespace character.*/ -U_CAPI UBool U_EXPORT2 -u_isWhitespace(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)( - ((CAT_MASK(props)&U_GC_Z_MASK)!=0 && - c!=NBSP && c!=FIGURESP && c!=NNBSP) || /* exclude no-break spaces */ - IS_THAT_ASCII_CONTROL_SPACE(c) - ); -} - -U_CAPI UBool U_EXPORT2 -u_isblank(UChar32 c) { - if((uint32_t)c<=0x9f) { - return c==9 || c==0x20; /* TAB or SPACE */ - } else { - /* Zs */ - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_SPACE_SEPARATOR); - } -} - -U_CAPI UBool U_EXPORT2 -u_isUWhiteSpace(UChar32 c) { - return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_WHITE_SPACE))!=0; -} - -/* Checks if the Unicode character is printable.*/ -U_CAPI UBool U_EXPORT2 -u_isprint(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - /* comparing ==0 returns FALSE for the categories mentioned */ - return (UBool)((CAT_MASK(props)&U_GC_C_MASK)==0); -} - -/** - * Checks if c is in \p{graph}\p{blank} - \p{cntrl}. - * Implements UCHAR_POSIX_PRINT. - * @internal - */ -U_CFUNC UBool -u_isprintPOSIX(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - /* - * The only cntrl character in graph+blank is TAB (in blank). - * Here we implement (blank-TAB)=Zs instead of calling u_isblank(). - */ - return (UBool)((GET_CATEGORY(props)==U_SPACE_SEPARATOR) || u_isgraphPOSIX(c)); -} - -U_CAPI UBool U_EXPORT2 -u_isgraph(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - /* comparing ==0 returns FALSE for the categories mentioned */ - return (UBool)((CAT_MASK(props)& - (U_GC_CC_MASK|U_GC_CF_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK)) - ==0); -} - -/** - * Checks if c is in - * [^\p{space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}] - * with space=\p{Whitespace} and Control=Cc. - * Implements UCHAR_POSIX_GRAPH. - * @internal - */ -U_CFUNC UBool -u_isgraphPOSIX(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - /* \p{space}\p{gc=Control} == \p{gc=Z}\p{Control} */ - /* comparing ==0 returns FALSE for the categories mentioned */ - return (UBool)((CAT_MASK(props)& - (U_GC_CC_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK)) - ==0); -} - -U_CAPI UBool U_EXPORT2 -u_ispunct(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&U_GC_P_MASK)!=0); -} - -/* Checks if the Unicode character can start a Unicode identifier.*/ -U_CAPI UBool U_EXPORT2 -u_isIDStart(UChar32 c) { - /* same as u_isalpha() */ - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_NL_MASK))!=0); -} - -/* Checks if the Unicode character can be a Unicode identifier part other than starting the - identifier.*/ -U_CAPI UBool U_EXPORT2 -u_isIDPart(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)( - (CAT_MASK(props)& - (U_GC_ND_MASK|U_GC_NL_MASK| - U_GC_L_MASK| - U_GC_PC_MASK|U_GC_MC_MASK|U_GC_MN_MASK) - )!=0 || - u_isIDIgnorable(c)); -} - -/*Checks if the Unicode character can be ignorable in a Java or Unicode identifier.*/ -U_CAPI UBool U_EXPORT2 -u_isIDIgnorable(UChar32 c) { - if(c<=0x9f) { - return u_isISOControl(c) && !IS_THAT_ASCII_CONTROL_SPACE(c); - } else { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(GET_CATEGORY(props)==U_FORMAT_CHAR); - } -} - -/*Checks if the Unicode character can start a Java identifier.*/ -U_CAPI UBool U_EXPORT2 -u_isJavaIDStart(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_SC_MASK|U_GC_PC_MASK))!=0); -} - -/*Checks if the Unicode character can be a Java identifier part other than starting the - * identifier. - */ -U_CAPI UBool U_EXPORT2 -u_isJavaIDPart(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)( - (CAT_MASK(props)& - (U_GC_ND_MASK|U_GC_NL_MASK| - U_GC_L_MASK| - U_GC_SC_MASK|U_GC_PC_MASK| - U_GC_MC_MASK|U_GC_MN_MASK) - )!=0 || - u_isIDIgnorable(c)); -} - -U_CAPI int32_t U_EXPORT2 -u_charDigitValue(UChar32 c) { - uint32_t props; - int32_t value; - GET_PROPS(c, props); - value=(int32_t)GET_NUMERIC_TYPE_VALUE(props)-UPROPS_NTV_DECIMAL_START; - if(value<=9) { - return value; - } else { - return -1; - } -} - -U_CAPI double U_EXPORT2 -u_getNumericValue(UChar32 c) { - uint32_t props; - int32_t ntv; - GET_PROPS(c, props); - ntv=(int32_t)GET_NUMERIC_TYPE_VALUE(props); - - if(ntv==UPROPS_NTV_NONE) { - return U_NO_NUMERIC_VALUE; - } else if(ntv>4)-12; - int32_t denominator=(ntv&0xf)+1; - return (double)numerator/denominator; - } else if(ntv>5)-14; - int32_t exp=(ntv&0x1f)+2; - numValue=mant; - - /* multiply by 10^exp without math.h */ - while(exp>=4) { - numValue*=10000.; - exp-=4; - } - switch(exp) { - case 3: - numValue*=1000.; - break; - case 2: - numValue*=100.; - break; - case 1: - numValue*=10.; - break; - case 0: - default: - break; - } - - return numValue; - } else if(ntv>2)-0xbf; - int32_t exp=(ntv&3)+1; - - switch(exp) { - case 4: - numValue*=60*60*60*60; - break; - case 3: - numValue*=60*60*60; - break; - case 2: - numValue*=60*60; - break; - case 1: - numValue*=60; - break; - case 0: - default: - break; - } - - return numValue; - } else if(ntv>2); - return (double)numerator/denominator; - } else { - /* reserved */ - return U_NO_NUMERIC_VALUE; - } -} - -U_CAPI int32_t U_EXPORT2 -u_digit(UChar32 ch, int8_t radix) { - int8_t value; - if((uint8_t)(radix-2)<=(36-2)) { - value=(int8_t)u_charDigitValue(ch); - if(value<0) { - /* ch is not a decimal digit, try latin letters */ - if(ch>=0x61 && ch<=0x7A) { - value=(int8_t)(ch-0x57); /* ch - 'a' + 10 */ - } else if(ch>=0x41 && ch<=0x5A) { - value=(int8_t)(ch-0x37); /* ch - 'A' + 10 */ - } else if(ch>=0xFF41 && ch<=0xFF5A) { - value=(int8_t)(ch-0xFF37); /* fullwidth ASCII a-z */ - } else if(ch>=0xFF21 && ch<=0xFF3A) { - value=(int8_t)(ch-0xFF17); /* fullwidth ASCII A-Z */ - } - } - } else { - value=-1; /* invalid radix */ - } - return (int8_t)((value(36-2) || (uint32_t)digit>=(uint32_t)radix) { - return 0; - } else if(digit<10) { - return (UChar32)(0x30+digit); - } else { - return (UChar32)((0x61-10)+digit); - } -} - -/* miscellaneous, and support for uprops.cpp -------------------------------- */ - -U_CAPI void U_EXPORT2 -u_getUnicodeVersion(UVersionInfo versionArray) { - if(versionArray!=NULL) { - uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH); - } -} - -U_CFUNC uint32_t -u_getMainProperties(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return props; -} - -U_CFUNC uint32_t -u_getUnicodeProperties(UChar32 c, int32_t column) { - U_ASSERT(column>=0); - if(column>=propsVectorsColumns) { - return 0; - } else { - uint16_t vecIndex=UTRIE2_GET16(&propsVectorsTrie, c); - return propsVectors[vecIndex+column]; - } -} - -U_CFUNC int32_t -uprv_getMaxValues(int32_t column) { - switch(column) { - case 0: - return indexes[UPROPS_MAX_VALUES_INDEX]; - case 2: - return indexes[UPROPS_MAX_VALUES_2_INDEX]; - default: - return 0; - } -} - -U_CAPI void U_EXPORT2 -u_charAge(UChar32 c, UVersionInfo versionArray) { - if(versionArray!=NULL) { - uint32_t version=u_getUnicodeProperties(c, 0)>>UPROPS_AGE_SHIFT; - versionArray[0]=(uint8_t)(version>>4); - versionArray[1]=(uint8_t)(version&0xf); - versionArray[2]=versionArray[3]=0; - } -} - -U_CAPI UScriptCode U_EXPORT2 -uscript_getScript(UChar32 c, UErrorCode *pErrorCode) { - uint32_t scriptX; - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return USCRIPT_INVALID_CODE; - } - if((uint32_t)c>0x10ffff) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return USCRIPT_INVALID_CODE; - } - scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; - if(scriptX=UPROPS_SCRIPT_X_WITH_OTHER) { - scx=scriptExtensions+scx[1]; - } - if(sc>=USCRIPT_CODE_LIMIT) { - /* Guard against bogus input that would make us go past the Script_Extensions terminator. */ - return FALSE; - } - while(sc>*scx) { - ++scx; - } - return sc==(*scx&0x7fff); -} - -U_CAPI int32_t U_EXPORT2 -uscript_getScriptExtensions(UChar32 c, - UScriptCode *scripts, int32_t capacity, - UErrorCode *pErrorCode) { - uint32_t scriptX; - int32_t length; - const uint16_t *scx; - uint16_t sx; - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(capacity<0 || (capacity>0 && scripts==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; - if(scriptX=UPROPS_SCRIPT_X_WITH_OTHER) { - scx=scriptExtensions+scx[1]; - } - length=0; - do { - sx=*scx++; - if(lengthcapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - return length; -} - -U_CAPI UBlockCode U_EXPORT2 -ublock_getCode(UChar32 c) { - return (UBlockCode)((u_getUnicodeProperties(c, 0)&UPROPS_BLOCK_MASK)>>UPROPS_BLOCK_SHIFT); -} - -/* property starts for UnicodeSet ------------------------------------------- */ - -static UBool U_CALLCONV -_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32_t value) { - /* add the start code point to the USet */ - const USetAdder *sa=(const USetAdder *)context; - sa->add(sa->set, start); - return TRUE; -} - -#define USET_ADD_CP_AND_NEXT(sa, cp) sa->add(sa->set, cp); sa->add(sa->set, cp+1) - -U_CFUNC void U_EXPORT2 -uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { - if(U_FAILURE(*pErrorCode)) { - return; - } - - /* add the start code point of each same-value range of the main trie */ - utrie2_enum(&propsTrie, NULL, _enumPropertyStartsRange, sa); - - /* add code points with hardcoded properties, plus the ones following them */ - - /* add for u_isblank() */ - USET_ADD_CP_AND_NEXT(sa, TAB); - - /* add for IS_THAT_CONTROL_SPACE() */ - sa->add(sa->set, CR+1); /* range TAB..CR */ - sa->add(sa->set, 0x1c); - sa->add(sa->set, 0x1f+1); - USET_ADD_CP_AND_NEXT(sa, NL); - - /* add for u_isIDIgnorable() what was not added above */ - sa->add(sa->set, DEL); /* range DEL..NBSP-1, NBSP added below */ - sa->add(sa->set, HAIRSP); - sa->add(sa->set, RLM+1); - sa->add(sa->set, INHSWAP); - sa->add(sa->set, NOMDIG+1); - USET_ADD_CP_AND_NEXT(sa, ZWNBSP); - - /* add no-break spaces for u_isWhitespace() what was not added above */ - USET_ADD_CP_AND_NEXT(sa, NBSP); - USET_ADD_CP_AND_NEXT(sa, FIGURESP); - USET_ADD_CP_AND_NEXT(sa, NNBSP); - - /* add for u_digit() */ - sa->add(sa->set, U_a); - sa->add(sa->set, U_z+1); - sa->add(sa->set, U_A); - sa->add(sa->set, U_Z+1); - sa->add(sa->set, U_FW_a); - sa->add(sa->set, U_FW_z+1); - sa->add(sa->set, U_FW_A); - sa->add(sa->set, U_FW_Z+1); - - /* add for u_isxdigit() */ - sa->add(sa->set, U_f+1); - sa->add(sa->set, U_F+1); - sa->add(sa->set, U_FW_f+1); - sa->add(sa->set, U_FW_F+1); - - /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */ - sa->add(sa->set, WJ); /* range WJ..NOMDIG */ - sa->add(sa->set, 0xfff0); - sa->add(sa->set, 0xfffb+1); - sa->add(sa->set, 0xe0000); - sa->add(sa->set, 0xe0fff+1); - - /* add for UCHAR_GRAPHEME_BASE and others */ - USET_ADD_CP_AND_NEXT(sa, CGJ); -} - -U_CFUNC void U_EXPORT2 -upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { - if(U_FAILURE(*pErrorCode)) { - return; - } - - /* add the start code point of each same-value range of the properties vectors trie */ - if(propsVectorsColumns>0) { - /* if propsVectorsColumns==0 then the properties vectors trie may not be there at all */ - utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); - } -} diff --git a/source/common/uchar_props_data.h b/source/common/uchar_props_data.h index 79ba55e..fd74402 100644 --- a/source/common/uchar_props_data.h +++ b/source/common/uchar_props_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 1999-2016, International Business Machines @@ -1330,2199 +1330,2241 @@ static const UTrie2 propsTrie={ NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint16_t propsVectorsTrie_index[28540]={ -0x4bb,0x4c3,0x4cb,0x4d3,0x4eb,0x4f3,0x4fb,0x503,0x50b,0x513,0x51b,0x523,0x52b,0x533,0x53b,0x543, -0x54a,0x552,0x55a,0x562,0x565,0x56d,0x575,0x57d,0x585,0x58d,0x595,0x59d,0x5a5,0x5ad,0x5b5,0x5bd, -0x5c5,0x5cd,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc,0x604,0x60c,0x611,0x619,0x620,0x628,0x630,0x638, -0x640,0x648,0x650,0x658,0x65f,0x667,0x66f,0x677,0x67f,0x687,0x68f,0x697,0x69f,0x6a7,0x6af,0x6b7, -0x18ce,0xd31,0xe19,0x4db,0x4db,0xe89,0xe91,0x1a56,0x11bd,0x11d5,0x11c5,0x11cd,0x75c,0x762,0x76a,0x772, -0x77a,0x780,0x788,0x790,0x798,0x79e,0x7a6,0x7ae,0x7b6,0x7bc,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x7eb, -0x7f3,0x7f9,0x801,0x809,0x811,0x817,0x81f,0x827,0x82f,0x835,0x83d,0x845,0x84d,0x854,0x85c,0x864, -0x86c,0x870,0x878,0x87f,0x887,0x88f,0x897,0x89f,0x14dd,0x14e5,0x8a7,0x8af,0x8b7,0x8bf,0x8c7,0x8ce, -0x1543,0x1533,0x153b,0x1811,0x1819,0x11e5,0x8d6,0x11dd,0x1427,0x1427,0x1429,0x11f9,0x11fa,0x11ed,0x11ef,0x11f1, -0x154b,0x154d,0x8de,0x154d,0x8e6,0x8eb,0x8f3,0x1552,0x8f9,0x154d,0x8ff,0x907,0xc09,0x155a,0x155a,0x90f, -0x156a,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b, -0x156b,0x156b,0x156b,0x1562,0x917,0x1573,0x1573,0x91f,0xb16,0xb1e,0xb26,0xb2e,0x1583,0x157b,0x927,0x92f, -0x937,0x158d,0x1595,0x93f,0x158b,0x947,0x18d6,0xd39,0xb36,0xb3e,0xb46,0xb4b,0x1787,0xc3c,0xc43,0x16ef, -0xbd9,0x18de,0xd41,0xd49,0xd51,0xd59,0xf41,0xf41,0x17d7,0x17dc,0xc75,0xc7d,0x184d,0x1855,0x197f,0xe21, -0x185d,0xcc5,0xccd,0x1865,0x6bf,0x4db,0xf21,0xd61,0x170f,0x16f7,0x1707,0x16ff,0x179f,0x1797,0x175f,0xbe9, -0x1202,0x1202,0x1202,0x1202,0x1205,0x1202,0x1202,0x120d,0x94f,0x1215,0x953,0x95b,0x1215,0x963,0x96b,0x973, -0x1225,0x121d,0x122d,0x97b,0x983,0x98b,0x993,0x99b,0x1235,0x123d,0x1245,0x124d,0x9a3,0x1255,0x125c,0x1264, -0x126c,0x1274,0x127c,0x1284,0x128c,0x1293,0x129b,0x12a3,0x12ab,0x12b3,0x12b6,0x12b8,0x159d,0x1682,0x1688,0x9ab, -0x12c0,0x9b3,0x9bb,0x13da,0x13df,0x13e2,0x13ea,0x12c8,0x13f2,0x13f2,0x12d8,0x12d0,0x12e0,0x12e8,0x12f0,0x12f8, -0x1300,0x1308,0x1310,0x1318,0x1690,0x16e7,0x1821,0x195f,0x1328,0x132f,0x1337,0x133f,0x1320,0x1347,0x1698,0x169f, -0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x16a7,0x16aa,0x16a7,0x16a7,0x16b2,0x16b9,0x16bb,0x16c2, -0x16ca,0x16ce,0x16ce,0x16d1,0x16ce,0x16ce,0x16d7,0x16ce,0x1717,0x17cf,0x1829,0xb53,0xb59,0xb5f,0xb67,0xb6c, -0x1777,0xc19,0xc1d,0x17e4,0x1767,0x1767,0x1767,0xbf1,0x176f,0xc11,0x17b7,0xc65,0xbf9,0xc01,0xc01,0x186d, -0x17a7,0x1831,0xc53,0xc55,0x9c3,0x15ad,0x15ad,0x9cb,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x9d3,0x6c3, -0x140f,0x1431,0x9db,0x1439,0x9e3,0x1441,0x1449,0x1451,0x9eb,0x9f0,0x1459,0x1460,0x9f5,0x9fd,0x17c7,0xbe1, -0xa05,0x14b7,0x14be,0x1468,0x14c6,0x14cd,0x1470,0xa0d,0x1489,0x1489,0x148b,0x1478,0x1480,0x1480,0x1481,0x14d5, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x1174,0x171f,0x171f, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, -0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x149a,0x117c,0x1182, -0x15c5,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, -0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, -0x15cb,0x15cb,0x15cb,0x15cb,0xa15,0x15d3,0xa1d,0x18e6,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879, -0x1875,0xcd5,0x1889,0x1881,0x188b,0x18ee,0x18ee,0xd69,0x177f,0x17ec,0x1841,0x1845,0x1839,0xc85,0xc8b,0xc8e, -0x17af,0xc5d,0x17f4,0xc96,0x1893,0x1896,0xcdd,0xd71,0x18a6,0x189e,0xce5,0xd79,0x18f6,0x18fa,0xd81,0xfe7, -0x18ae,0xced,0xcf5,0x1902,0x1912,0x190a,0xd89,0xee4,0xe29,0xe31,0x1ac9,0xf9f,0x1b6e,0x1b6e,0x191a,0xd91, -0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, -0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, -0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, -0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, -0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, -0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, -0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, -0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, -0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, -0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, -0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, -0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, -0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, -0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, -0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, -0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, -0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, -0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, -0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, -0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, -0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, -0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0xa25,0xd99,0xd9c, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, -0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, -0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2, -0x14a7,0x14af,0x16df,0x118a,0x17bf,0x17bf,0x118e,0x1195,0xa2d,0xa35,0xa3d,0x1367,0x136e,0x1376,0xa45,0x137e, -0x13af,0x13af,0x1357,0x135f,0x1386,0x13a6,0x13a7,0x13b7,0x138e,0x134f,0xa4d,0x1396,0xa55,0x139e,0xa5d,0xa61, -0xc6d,0x13bf,0xa69,0xa71,0x13c7,0x13cd,0x13d2,0xa79,0xa89,0x1417,0x141f,0x1402,0x1407,0xa91,0xa99,0xa81, -0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed, -0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14f5,0x14f5,0x14f5,0x14f5, -0x136c,0x136c,0x13ac,0x13ec,0x142c,0x146c,0x14ac,0x14ec,0x1528,0x1568,0x1594,0x15d4,0x1614,0x1654,0x1694,0x16d4, -0x1714,0x1750,0x1790,0x17d0,0x1810,0x1844,0x1880,0x18c0,0x1900,0x1940,0x197c,0x19bc,0x19fc,0x1a3c,0x1a7c,0x1abc, -0xa80,0xac0,0xb00,0xe4d,0xb40,0xa40,0xb80,0xa40,0xe73,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12a9,0x12a9, -0xeb3,0xef3,0xa40,0xa40,0xa40,0xa40,0xdd2,0xc00,0xa40,0xa40,0xc40,0xc80,0xcc0,0xe12,0xd92,0xd02, -0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9, -0x11e9,0x11e9,0x11e9,0x11e9,0xf33,0x1229,0x1069,0x10a9,0x1269,0xf73,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfe9, -0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9, -0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0x1029, +static const uint16_t propsVectorsTrie_index[29136]={ +0x4cf,0x4d7,0x4df,0x4e7,0x4ff,0x507,0x50f,0x517,0x51f,0x527,0x52f,0x537,0x53f,0x547,0x54f,0x557, +0x55e,0x566,0x56e,0x576,0x579,0x581,0x589,0x591,0x599,0x5a1,0x5a9,0x5b1,0x5b9,0x5c1,0x5c9,0x5d1, +0x5d9,0x5e1,0x5e8,0x5f0,0x5f8,0x600,0x608,0x610,0x618,0x620,0x625,0x62d,0x634,0x63c,0x644,0x64c, +0x654,0x65c,0x664,0x66c,0x673,0x67b,0x683,0x68b,0x693,0x69b,0x6a3,0x6ab,0x6b3,0x6bb,0x6c3,0x6cb, +0x195d,0xda7,0xe8f,0x6d3,0x4ef,0xeff,0xf07,0x1aeb,0x124c,0x1264,0x1254,0x125c,0x7cf,0x7d5,0x7dd,0x7e5, +0x7ed,0x7f3,0x7fb,0x803,0x80b,0x811,0x819,0x821,0x829,0x82f,0x837,0x83f,0x847,0x84f,0x857,0x85e, +0x866,0x86c,0x874,0x87c,0x884,0x88a,0x892,0x89a,0x8a2,0x8ba,0x8aa,0x8b2,0x8c2,0x8c9,0x8d1,0x8d9, +0x8e1,0x8e5,0x8ed,0x8f4,0x8fc,0x904,0x90c,0x914,0x156c,0x1574,0x91c,0x924,0x92c,0x934,0x93c,0x943, +0x15d2,0x15c2,0x15ca,0x18a0,0x18a8,0x1274,0x94b,0x126c,0x14b6,0x14b6,0x14b8,0x1288,0x1289,0x127c,0x127e,0x1280, +0x15da,0x15dc,0x953,0x15dc,0x95b,0x960,0x968,0x15e1,0x96e,0x15dc,0x974,0x97c,0xc7e,0x15e9,0x15e9,0x984, +0x15f9,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa,0x15fa, +0x15fa,0x15fa,0x15fa,0x15f1,0x98c,0x1602,0x1602,0x994,0xb8b,0xb93,0xb9b,0xba3,0x1612,0x160a,0x99c,0x9a4, +0x9ac,0x161c,0x1624,0x9b4,0x161a,0x9bc,0x1965,0xdaf,0xbab,0xbb3,0xbbb,0xbc0,0x1816,0xcb1,0xcb8,0x177e, +0xc4e,0x196d,0xdb7,0xdbf,0xdc7,0xdcf,0xfb7,0xfb7,0x1866,0x186b,0xceb,0xcf3,0x18dc,0x18e4,0x1a0e,0xe97, +0x18ec,0xd3b,0xd43,0x18f4,0x6db,0x4ef,0xf97,0xdd7,0x179e,0x1786,0x1796,0x178e,0x182e,0x1826,0x17ee,0xc5e, +0x1291,0x1291,0x1291,0x1291,0x1294,0x1291,0x1291,0x129c,0x9c4,0x12a4,0x9c8,0x9d0,0x12a4,0x9d8,0x9e0,0x9e8, +0x12b4,0x12ac,0x12bc,0x9f0,0x9f8,0xa00,0xa08,0xa10,0x12c4,0x12cc,0x12d4,0x12dc,0xa18,0x12e4,0x12eb,0x12f3, +0x12fb,0x1303,0x130b,0x1313,0x131b,0x1322,0x132a,0x1332,0x133a,0x1342,0x1345,0x1347,0x162c,0x1711,0x1717,0xa20, +0x134f,0xa28,0xa30,0x1469,0x146e,0x1471,0x1479,0x1357,0x1481,0x1481,0x1367,0x135f,0x136f,0x1377,0x137f,0x1387, +0x138f,0x1397,0x139f,0x13a7,0x171f,0x1776,0x18b0,0x19ee,0x13b7,0x13be,0x13c6,0x13ce,0x13af,0x13d6,0x1727,0x172e, +0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1736,0x1739,0x1736,0x1736,0x1741,0x1748,0x174a,0x1751, +0x1759,0x175d,0x175d,0x1760,0x175d,0x175d,0x1766,0x175d,0x17a6,0x185e,0x18b8,0xbc8,0xbce,0xbd4,0xbdc,0xbe1, +0x1806,0xc8e,0xc92,0x1873,0x17f6,0x17f6,0x17f6,0xc66,0x17fe,0xc86,0x1846,0xcdb,0xc6e,0xc76,0xc76,0x18fc, +0x1836,0x18c0,0xcc8,0xccb,0xa38,0x163c,0x163c,0xa40,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0xa48,0x6df, +0x149e,0x14c0,0xa50,0x14c8,0xa58,0x14d0,0x14d8,0x14e0,0xa60,0xa65,0x14e8,0x14ef,0xa6a,0xa72,0x1856,0xc56, +0xa7a,0x1546,0x154d,0x14f7,0x1555,0x155c,0x14ff,0xa82,0x1518,0x1518,0x151a,0x1507,0x150f,0x150f,0x1510,0x1564, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c, +0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x1201,0x17ae,0x17ae, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522, +0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1522,0x1529,0x1211,0x1209, +0x1654,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a, +0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a,0x165a, +0x165a,0x165a,0x165a,0x165a,0xa8a,0x1662,0xa92,0x1975,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908, +0x1904,0xd4b,0x1918,0x1910,0x191a,0x197d,0x197d,0xddf,0x180e,0x187b,0x18d0,0x18d4,0x18c8,0xcfb,0xd01,0xd04, +0x183e,0xcd3,0x1883,0xd0c,0x1922,0x1925,0xd53,0xde7,0x1935,0x192d,0xd5b,0xdef,0x1985,0x1989,0xdf7,0x105d, +0x193d,0xd63,0xd6b,0x1991,0x19a1,0x1999,0xdff,0xf5a,0xe9f,0xea7,0x1b5e,0x1015,0x1c03,0x1c03,0x19a9,0xe07, +0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5, +0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7, +0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9, +0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4, +0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6, +0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8, +0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, +0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5, +0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7, +0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9, +0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4, +0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6, +0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8, +0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, +0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5, +0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7, +0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9, +0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4, +0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6, +0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8, +0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, +0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15b4,0x15b5,0x15b6,0x15b7,0x15b8,0x15b9,0xa9a,0xe0f,0xe12, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c, +0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c,0x158c, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489, +0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1489,0x1531,0x1531,0x1531,0x1531,0x1531,0x1531,0x1531,0x1531, +0x1536,0x153e,0x176e,0x1219,0x184e,0x184e,0x121d,0x1224,0xaa2,0xaaa,0xab2,0x13f6,0x13fd,0x1405,0xaba,0x140d, +0x143e,0x143e,0x13e6,0x13ee,0x1415,0x1435,0x1436,0x1446,0x141d,0x13de,0xac2,0x1425,0xaca,0x142d,0xad2,0xad6, +0xce3,0x144e,0xade,0xae6,0x1456,0x145c,0x1461,0xaee,0xafe,0x14a6,0x14ae,0x1491,0x1496,0xb06,0xb0e,0xaf6, +0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c, +0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x157c,0x1584,0x1584,0x1584,0x1584, +0x13bc,0x13bc,0x13fc,0x143c,0x147c,0x14bc,0x14fc,0x153c,0x1578,0x15b8,0x15e4,0x1624,0x1664,0x16a4,0x16e4,0x1724, +0x1764,0x17a0,0x17e0,0x1820,0x1860,0x1894,0x18d0,0x1910,0x1950,0x1990,0x19cc,0x1a0c,0x1a4c,0x1a8c,0x1acc,0x1b0c, +0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xe65,0xa40,0xa40,0xa40,0xa40,0xbfb,0x12fb,0x12fb, +0xea5,0xee5,0xa40,0xa40,0xa40,0xa40,0xc3b,0xc5b,0xa40,0xa40,0xc9b,0xcdb,0xd1b,0xe2d,0xded,0xd5d, +0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b,0x123b, +0x123b,0x123b,0x123b,0x123b,0xf25,0x127b,0x10bb,0x10fb,0x12bb,0x1045,0x107b,0x107b,0x107b,0xf65,0xf85,0xfc5, +0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85, +0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0x1005, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, -0xd42,0xd52,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, -0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169, -0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x10e9, -0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9, -0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x1129, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0xb74,0xb7b,0xb83,0xb8b,0x1727,0x1727,0x1727,0xb93,0xb9b,0xb9e,0x1757,0x174f,0xbd1,0xcfd,0xd01,0xd05, -0x4db,0x4db,0x4db,0x4db,0xd0d,0x18b6,0xd15,0xf39,0x15db,0xaa1,0xaa7,0xff7,0xba6,0x178f,0xc4b,0x4db, -0x15f0,0x15e3,0x15e8,0x172f,0xbae,0xbb6,0x1142,0x1148,0x1ab1,0xf56,0x1aa1,0x6cb,0x4db,0x4db,0x4db,0x4db, -0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0xfa7,0xfaf,0xfb7,0x4db,0x4db,0x4db,0x4db, -0xbbe,0xbc1,0xda4,0x1b19,0xfef,0x6d3,0x4db,0x1088,0xc9e,0xd1d,0x4db,0x4db,0x1a66,0xeec,0xef4,0x1b59, -0xc25,0xc2c,0xc34,0x1922,0x1af9,0x4db,0x1ad9,0xfc7,0x192a,0xdac,0xdb4,0xdbc,0x1017,0x6db,0x4db,0x4db, -0x1932,0x1932,0x6e3,0x4db,0x1b86,0x10a0,0x1b7e,0x10a8,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0xdc4,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x1987,0x1989,0xe39,0xe40,0x1942,0x193a,0xdcc,0xf19,0x1a5e,0xed4,0xedc,0xfbf,0x1a76,0x1a7a,0xf11,0x1037, -0xf8a,0xf8f,0x6eb,0x4db,0x1090,0x1098,0x1ac1,0xf97,0xf6c,0xf72,0xf7a,0xf82,0x4db,0x4db,0x4db,0x4db, -0x1bc6,0x1bbe,0x1132,0x113a,0x1b41,0x1b39,0x105e,0x4db,0x4db,0x4db,0x4db,0x4db,0x1b29,0x101f,0x1027,0x102f, -0x1af1,0x1ae9,0xfd7,0x112a,0x1a82,0xf29,0x6f3,0x4db,0x106e,0x1076,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc, -0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x1801,0xca6,0xcad,0xcad,0xcad, -0x1809,0x1809,0x1809,0xcb5,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x6fb,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a, -0x194a,0x194a,0x194c,0x194a,0x1954,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x1957,0x194a,0x194a,0x194a,0x194a, -0x194a,0x703,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991, -0x1991,0xe48,0xfdf,0x70b,0x4db,0x4db,0x70f,0xf31,0x1b11,0x1b09,0xfff,0x1007,0x717,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x1a6e,0x1a6e,0xefc,0xf01,0xf09,0x4db,0x4db,0x1114, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x1aa9,0x1aa9,0x1aa9,0xf49,0xf4e,0x71f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0xaaf,0x1608,0xab7,0x1609,0x1600,0x1611,0x1617,0x161f,0xabf, -0x1747,0x1747,0x727,0x4db,0x4db,0x4db,0x4db,0x4db,0x1737,0x1737,0xbc9,0xcbd,0x4db,0x4db,0x4db,0x4db, -0x1650,0x1657,0xac7,0x165a,0xacf,0xad7,0xadf,0x1654,0xae7,0xaef,0xaf7,0x1659,0x1661,0x1650,0x1657,0x1653, -0x165a,0x1662,0x1651,0x1658,0x1654,0xafe,0x1627,0x162f,0x1636,0x163d,0x162a,0x1632,0x1639,0x1640,0xb06,0x1648, -0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e, -0x1b8e,0x1b91,0x1b8e,0x1b98,0x10e0,0x72f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x110c,0x737,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x73b,0x103f,0x1b31,0x1045,0x1b31,0x104d,0x1052,0x1056,0x1056,0x10b0,0x10b8,0x10c0,0x10c8,0x10d0,0x10c8, -0x10d8,0x10c8,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, -0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, -0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, -0x743,0x744,0xb0e,0x166a,0x166a,0x166a,0x74c,0x74c,0x74c,0x74c,0x173f,0x173f,0x173f,0x173f,0x173f,0x173f, -0x173f,0x754,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, -0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, -0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, -0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, -0x74c,0x74c,0x18be,0xd25,0x18c6,0x18c6,0xd29,0xe59,0xe61,0xe69,0xdd4,0xdda,0x196f,0xde2,0x1967,0xdea, -0xdee,0xdf5,0xdfd,0xe04,0xe0c,0xe11,0xe11,0xe11,0xe11,0xe11,0x19c0,0x19c8,0x19c0,0x19ce,0x19d6,0x19a1, -0x19de,0x19e6,0x19c0,0x19ee,0x19f6,0x19fd,0x1a05,0x19a9,0x19c0,0x1a08,0x19b1,0x19b8,0x1a10,0x1a16,0x1a92,0x1a99, -0x1a8a,0x1a1e,0x1a26,0x1a2e,0x1a36,0x1b01,0x1a3e,0x1a46,0xe71,0xe79,0x1999,0x1999,0x1999,0xe81,0x1ab9,0x1ab9, -0xf5e,0xf64,0xe50,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0xfcf,0x4db,0x1bb6,0x1bae,0x10e8,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0xe99,0xea1,0xea9,0xeb1,0xeb9,0xec1,0xec8,0xecc,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x1b51,0x1b49,0x1066,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x1b21,0x100f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x10f0,0x10f5,0x10fd, -0x1104,0x111c,0x1122,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61, -0x1b61,0x1b66,0x1b61,0x1b61,0x1b61,0x107e,0x1080,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1150,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6, -0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1158,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, -0x4db,0x4db,0x4db,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x119d,0x1160,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1168,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a, -0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x11a5,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, -0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x11ad,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x11b5,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1505,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x150d,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, -0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, -0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, -0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, -0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, -0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, -0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x4ba,0x4ba,0x4ba,0x273,0x273,0x273,0x273, -0x273,0x273,0x273,0x273,0x273,0x276,0x27f,0x279,0x279,0x27c,0x273,0x273,0x273,0x273,0x273,0x273, -0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x7a1,0x79b,0x780,0x777, -0x76e,0x76b,0x762,0x77d,0x768,0x774,0x777,0x792,0x789,0x77a,0x79e,0x771,0x75f,0x75f,0x75f,0x75f, -0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x786,0x783,0x78c,0x78c,0x78c,0x79b,0x762,0x7ad,0x7ad,0x7ad, -0x7ad,0x7ad,0x7ad,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, -0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x768,0x76e,0x774,0x798,0x75c,0x795,0x7aa,0x7aa,0x7aa, -0x7aa,0x7aa,0x7aa,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, -0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x768,0x78f,0x765,0x78c,0x273,0,0,0,0, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xd9d,0xdad,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, +0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x113b, +0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb, +0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x11fb,0x117b, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0xbe9,0xbf0,0xbf8,0xc00,0x17b6,0x17b6,0x17b6,0xc08,0xc10,0xc13,0x17e6,0x17de,0xc46,0xd73,0xd77,0xd7b, +0x4ef,0x4ef,0x4ef,0x4ef,0xd83,0x1945,0xd8b,0xfaf,0x166a,0xb16,0xb1c,0x106d,0xc1b,0x181e,0xcc0,0x4ef, +0x167f,0x1672,0x1677,0x17be,0xc23,0xc2b,0x11c6,0x11cc,0x1b46,0xfcc,0x1b36,0x6e7,0x4ef,0x4ef,0x4ef,0x4ef, +0x1b66,0x1b66,0x1b66,0x1b66,0x1b66,0x1b66,0x1b66,0x1b66,0x1b66,0x101d,0x1025,0x102d,0x4ef,0x4ef,0x4ef,0x4ef, +0xc33,0xc36,0xe1a,0x1bae,0x1065,0x6ef,0x4ef,0x10fe,0xd14,0xd93,0x4ef,0x4ef,0x1afb,0xf62,0xf6a,0x1bee, +0xc9a,0xca1,0xca9,0x19b1,0x1b8e,0x4ef,0x1b6e,0x103d,0x19b9,0xe22,0xe2a,0xe32,0x108d,0x6f7,0x4ef,0x4ef, +0x19c1,0x19c1,0x6ff,0x4ef,0x1c1b,0x1116,0x1c13,0x111e,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0xe3a,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x1a16,0x1a18,0xeaf,0xeb6,0x19d1,0x19c9,0xe42,0xf8f,0x1af3,0xf4a,0xf52,0x1035,0x1b0b,0x1b0f,0xf87,0x10ad, +0x1000,0x1005,0x707,0x4ef,0x1106,0x110e,0x1b56,0x100d,0xfe2,0xfe8,0xff0,0xff8,0x4ef,0x4ef,0x4ef,0x4ef, +0x1c5b,0x1c53,0x11b6,0x11be,0x1bd6,0x1bce,0x10d4,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1bbe,0x1095,0x109d,0x10a5, +0x1b86,0x1b7e,0x104d,0x11ae,0x1b17,0xf9f,0x70f,0x4ef,0x10e4,0x10ec,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x1be6,0x1bde,0x10dc,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x79a,0x79e,0x717,0x7a6,0x71e, +0x726,0x1bb6,0x1085,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1174,0x1179,0x1181,0x1188,0x11a0, +0x11a6,0x4ef,0x4ef,0x72e,0x732,0x73a,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x188b,0x188b,0x188b,0x188b,0x188b, +0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x188b, +0x188b,0x188b,0x188b,0x188b,0x188b,0x188b,0x1890,0xd1c,0xd23,0xd23,0xd23,0x1898,0x1898,0x1898,0xd2b,0x1c0b, +0x1c0b,0x1c0b,0x1c0b,0x1c0b,0x1c0b,0x742,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9, +0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19db,0x19d9,0x19e3, +0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x19e6,0x19d9,0x19d9,0x19d9,0x19d9,0x19d9,0x74a,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20, +0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0x1a20,0xebe,0x1055,0x752,0x4ef, +0x4ef,0x756,0xfa7,0x1ba6,0x1b9e,0x1075,0x107d,0x75e,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x1b03,0x1b03,0xf72,0xf77,0xf7f,0x4ef,0x4ef,0x1198,0xec6,0xec7,0xec7,0xec7,0xec7, +0xec7,0xec7,0xec7,0x766,0x4ef,0x4ef,0x762,0x7b7,0x7b7,0x7b7,0x7b7,0x7b7,0x7b7,0x7b7,0x7b7,0x7b7, +0x7b7,0x7b7,0x76e,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1b3e,0x1b3e,0x1b3e,0xfbf,0xfc4, +0x776,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1687,0x1687,0x1687,0x1687,0x1687, +0x1687,0x1687,0xb24,0x1697,0xb2c,0x1698,0x168f,0x16a0,0x16a6,0x16ae,0xb34,0x17d6,0x17d6,0x77e,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x17c6,0x17c6,0xc3e,0xd33,0x4ef,0x4ef,0x4ef,0x4ef,0x16df,0x16e6,0xb3c,0x16e9,0xb44, +0xb4c,0xb54,0x16e3,0xb5c,0xb64,0xb6c,0x16e8,0x16f0,0x16df,0x16e6,0x16e2,0x16e9,0x16f1,0x16e0,0x16e7,0x16e3, +0xb73,0x16b6,0x16be,0x16c5,0x16cc,0x16b9,0x16c1,0x16c8,0x16cf,0xb7b,0x16d7,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33, +0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c33,0x1c23,0x1c26,0x1c23,0x1c2d,0x1164, +0x786,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1190,0x78e,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x792,0x10b5,0x1bc6,0x10bb, +0x1bc6,0x10c3,0x10c8,0x10cc,0x10cc,0x1126,0x112e,0x1136,0x113e,0x1146,0x114c,0x1154,0x115c,0x7ae,0x7ae,0x7ae, +0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae, +0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae, +0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7ae,0x7af,0xb83,0x16f9,0x16f9, +0x16f9,0x7bf,0x7bf,0x7bf,0x7bf,0x17ce,0x17ce,0x17ce,0x17ce,0x17ce,0x17ce,0x17ce,0x7c7,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x194d,0xd9b,0x1955, +0x1955,0xd9f,0xecf,0xed7,0xedf,0xe4a,0xe50,0x19fe,0xe58,0x19f6,0xe60,0xe64,0xe6b,0xe73,0xe7a,0xe82, +0xe87,0xe87,0xe87,0xe87,0xe87,0x1a4f,0x1a57,0x1a5f,0x1a63,0x1a6b,0x1a30,0x1a73,0x1a7b,0x1a5f,0x1a83,0x1a8b, +0x1a92,0x1a9a,0x1a38,0x1a5f,0x1a9d,0x1a40,0x1a47,0x1aa5,0x1aab,0x1b27,0x1b2e,0x1b1f,0x1ab3,0x1abb,0x1ac3,0x1acb, +0x1b96,0x1ad3,0x1adb,0xee7,0xeef,0x1a28,0x1a28,0x1a28,0xef7,0x1b4e,0x1b4e,0xfd4,0xfda,0x1b76,0x1b76,0x1b76, +0x1b76,0x1b76,0x1b76,0x1045,0x4ef,0x1c4b,0x1c43,0x116c,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0xf0f,0xf17,0xf1f, +0xf27,0xf2f,0xf37,0xf3e,0xf42,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6,0x1bf6, +0x1bf6,0x1bf6,0x1bf6,0x1bfb,0x1bf6,0x1bf6,0x1bf6,0x10f4,0x10f6,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x11d4,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b, +0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x11dc,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x4ef, +0x4ef,0x4ef,0x4ef,0x4ef,0x4ef,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x122c,0x11e4,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11ec,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709,0x1709, +0x1709,0x1709,0x1709,0x1709,0x1709,0x1234,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11ed,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4,0x11e4, +0x11e4,0x11e4,0x11e4,0x11e4,0x11ed,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x11f5,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9, +0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x11f9,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x123c,0x1ae3,0x1ae3,0x1ae3,0x1ae3,0x1ae3,0x1ae3,0x1244,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x1594,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x159c,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4, +0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15a4,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac, +0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x15ac,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06, +0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1a06,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b, +0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c3b,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63, +0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x1c63,0x4ce,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c7,0x2d0,0x2ca,0x2ca,0x2cd,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x7f5,0x7ef,0x7d4,0x7cb, +0x7c2,0x7bf,0x7b6,0x7d1,0x7bc,0x7c8,0x7cb,0x7e6,0x7dd,0x7ce,0x7f2,0x7c5,0x7b3,0x7b3,0x7b3,0x7b3, +0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7da,0x7d7,0x7e0,0x7e0,0x7e0,0x7ef,0x7b6,0x801,0x801,0x801, +0x801,0x801,0x801,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, +0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7bc,0x7c2,0x7c8,0x7ec,0x7b0,0x7e9,0x7fe,0x7fe,0x7fe, +0x7fe,0x7fe,0x7fe,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, +0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7bc,0x7e3,0x7b9,0x7e0,0x2c4,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x282,0x282,0x282,0x282, -0x282,0x291,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, -0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x285,0x5fa,0x7b6,0x7b9, -0x600,0x7b9,0x7b3,0x5f7,0x5ee,0x28b,0x60c,0x28e,0x7bc,0x5e5,0x603,0x7b0,0x5fd,0x609,0x5eb,0x5eb, -0x5f1,0x288,0x5f7,0x5f4,0x5ee,0x5eb,0x60c,0x28e,0x5e8,0x5e8,0x5e8,0x5fa,0x297,0x297,0x297,0x297, -0x297,0x297,0x615,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x615,0x297,0x297,0x297, -0x297,0x297,0x297,0x606,0x615,0x297,0x297,0x297,0x297,0x297,0x615,0x60f,0x612,0x612,0x294,0x294, -0x294,0x294,0x60f,0x294,0x612,0x612,0x612,0x294,0x612,0x612,0x294,0x294,0x60f,0x294,0x612,0x612, -0x294,0x294,0x294,0x606,0x60f,0x612,0x612,0x294,0x612,0x294,0x60f,0x294,0x2a3,0x61b,0x2a3,0x29a, -0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a0,0x618,0x2a3,0x61b, -0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, -0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x618,0x624,0x61e, -0x2a3,0x29a,0x2a3,0x29a,0x618,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x624,0x61e,0x621,0x618,0x2a3, -0x61b,0x2a3,0x29a,0x2a3,0x61b,0x627,0x621,0x618,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x621,0x618, -0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, -0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, -0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x29d,0x2a6,0x2b2,0x2b2,0x2a6, -0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2b2,0x2b2,0x2b2,0x2b2,0x2a6,0x2b2, -0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2a6, -0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2a6,0x2a6,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2b2,0x2b2, -0x2a6,0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2a6,0x2af,0x2b2,0x2a6,0x2a6,0x2a6,0x2af,0x2af,0x2af,0x2af, -0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5, -0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, -0x2b2,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2a9,0x2b8,0x2b8,0x2ac, -0x2b5,0x2a9,0x990,0x990,0x993,0x98d,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, -0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, -0x993,0x98d,0x993,0x98d,0x990,0x98a,0x993,0x98d,0xb4f,0xc51,0x990,0x98a,0x990,0x98a,0x993,0x98d, -0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0xc51,0xc51,0xc51,0xd4a, -0xd4a,0xd4a,0xd4d,0xd4d,0xd4a,0xd4d,0xd4d,0xd4a,0xd4a,0xd4d,0xe8e,0xe91,0xe91,0xe91,0xe91,0xe8e, -0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, -0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, -0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, -0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2be,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, -0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x996,0x996,0x996, -0x996,0x996,0xc54,0xc54,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2cd,0x2cd,0x2cd, -0x2cd,0x2cd,0x2cd,0x2cd,0x2ca,0x2ca,0x2c1,0x2c1,0x633,0x2c1,0x2cd,0x636,0x2d0,0x636,0x636,0x636, -0x2d0,0x636,0x2cd,0x2cd,0x639,0x2d3,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c7,0x630,0x630,0x630,0x630, -0x2c4,0x630,0x2c1,0xac8,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x99f,0x99f, -0x99c,0x999,0x99c,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57, -0xc57,0xc57,0xc57,0xc57,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, -0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, -0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, -0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, -0x63c,0x63c,0x63c,0x63c,0x63f,0x63f,0x8f4,0x63f,0x63f,0x8f7,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb, -0xacb,0xacb,0xacb,0xc09,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xe55,0xe55,0xe55,0xe55, -0xe58,0xd1d,0xd1d,0xd1d,0x642,0x642,0xace,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e, -0xc4e,0xc4e,0xc4e,0xc4e,0xf3c,0xf39,0xf3c,0xf39,0x2e2,0x2eb,0xf3c,0xf39,9,9,0x2f1,0xe94, -0xe94,0xe94,0x2d9,0x1491,9,9,9,9,0x2ee,0x2dc,0x300,0x2df,0x300,0x300,0x300,9, -0x300,9,0x300,0x300,0x2f7,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648, -0x648,0x648,0x648,0x648,0x648,0x648,9,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x300,0x300, -0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645, -0x645,0x645,0x645,0x645,0x645,0x645,0x2f4,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x2f7,0x2f7, -0x2f7,0x2f7,0x2f7,0xf3c,0x303,0x303,0x306,0x300,0x300,0x303,0x2fa,0x9a2,0xb58,0xb55,0x2fd,0x9a2, -0x2fd,0x9a2,0x2fd,0x9a2,0x2fd,0x9a2,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5, -0x2e8,0x2e5,0x2e8,0x2e5,0x303,0x303,0x2fa,0x2f4,0xb07,0xb04,0xb52,0xc5d,0xc5a,0xc60,0xc5d,0xc5a, -0xd50,0xd53,0xd53,0xd53,0x9b1,0x654,0x312,0x315,0x312,0x312,0x312,0x315,0x312,0x312,0x312,0x312, -0x315,0x9b1,0x315,0x312,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x654,0x651,0x651, -0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651, -0x651,0x651,0x651,0x651,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64e,0x64b,0x64b, -0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, -0x9ab,0x64e,0x30c,0x30f,0x30c,0x30c,0x30c,0x30f,0x30c,0x30c,0x30c,0x30c,0x30f,0x9ab,0x30f,0x30c, -0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, -0x312,0x30c,0x312,0x30c,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, -0x312,0x30c,0x309,0x900,0x903,0x8e5,0x8e5,0x10e6,0x9a5,0x9a5,0xb5e,0xb5b,0x9ae,0x9a8,0x9ae,0x9a8, -0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, -0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, -0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, -0x312,0x315,0x30f,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0xe97, -0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f, -0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x9b1,0x9ab,0x315,0x30f, -0x315,0x30f,0x315,0x30f,0x315,0x30f,0xd59,0xd56,0x315,0x30f,0xe9a,0xe97,0xe9a,0xe97,0xe9a,0xe97, -0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7, -0xec7,0xec4,0xec7,0xec4,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7, -0xfba,0xfb7,0xfba,0xfb7,0x111f,0x111c,0x12f9,0x12f6,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7, -0xc,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324, -0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0xc,0xc,0x327,0x318,0x318, -0x318,0x31b,0x318,0x318,0xc,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, -0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, -0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x321,0xc,0x86a,0x9b4,0xc,0xc,0x1494,0x1494,0x13ad, -0xf,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, -0x924,0x924,0xd5c,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, -0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0xe9d,0x32a,0x32a,0x32a,0x336,0x32a, -0x32d,0x32a,0x32a,0x339,0x927,0xd5f,0xd62,0xd5f,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c, -0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0xf,0xf,0xf,0xf,0xf, -0x33c,0x33c,0x33c,0x333,0x330,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0xc63,0xc63,0xc63,0xc63,0x13b0,0x1497,0xf45,0xf45,0xf45,0xf42,0xf42,0xd6b,0x870,0xc72,0xc6f,0xc6f, -0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0x86d,0x148b,0x12,0xd68,0x873, -0x12c0,0x357,0x35a,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, -0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0xf48,0xf48,0xf48,0xf48,0xf48, -0x876,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, -0x8eb,0x8eb,0x8eb,0xafe,0xafe,0xafe,0xc66,0xc6c,0xc69,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0x12bd, -0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x351,0x34e,0x34b,0x348,0xb61,0xb61, -0x8e8,0x357,0x357,0x363,0x357,0x35d,0x35d,0x35d,0x35d,0x357,0x357,0x357,0x357,0x357,0x357,0x357, -0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, -0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, -0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, -0x357,0x357,0x357,0x357,0x9ba,0x9ba,0x357,0x357,0x357,0x357,0x357,0x9ba,0x35a,0x357,0x35a,0x357, -0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x9ba,0x357,0x357,0x357,0x35a, -0x366,0x357,0x342,0x342,0x342,0x342,0x342,0x342,0x342,0x33f,0x348,0x345,0x345,0x342,0x342,0x342, -0x342,0x360,0x360,0x342,0x342,0x348,0x345,0x345,0x345,0x342,0xc75,0xc75,0x354,0x354,0x354,0x354, -0x354,0x354,0x354,0x354,0x354,0x354,0x9ba,0x9ba,0x9ba,0x9b7,0x9b7,0xc75,0x9d2,0x9d2,0x9d2,0x9cc, -0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9c9,0x9cc,0x9c9,0x15,0x9bd,0x9cf,0x9c0,0x9cf,0x9cf, -0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, -0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xc78,0xc78,0xc78,0x9c6,0x9c6,0x9c6,0x9c6, -0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x15,0x15,0xc78,0xc78,0xc78,0xdcb,0xdcb,0xdcb,0xdcb, -0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb, -0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc, -0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0x9d8,0x9d8,0x9d8,0x9d8, -0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, -0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, -0x9d8,0x9d8,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0xb64,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xedf,0xedf,0xedf,0xedf, -0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, -0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, -0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6, -0xee5,0xee5,0xed9,0xed9,0xedc,0xeeb,0xee8,0x111,0x111,0x111,0x111,0x111,0x17d3,0x17d3,0x17d3,0x17d3, -0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xada,0xada,0xadd,0xadd, -0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0x75,0x75,0x75,0x75,0x1551,0x1551,0x1551,0x1551, -0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x154e,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1fe,0x1fe,0x1fe,0x1fe, -0x1fe,0x1fe,0x1fe,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x20a,0x20a,0x20a,0x20a, -0x20a,0x20a,0x20a,0x20a,0x20a,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x120f,0x120f,0x120f,0x120f, -0x120f,0x120f,0x120f,0x120f,0x120f,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1e0,0x1e0,0x1e0,0x1e0, -0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1467,0x1467,0x1467,0x1467, -0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x173d,0x173d,0x173d,0x173d, -0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1233,0x1233,0x1233,0x1233, -0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x186,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x15f6,0x15f6,0x15f6,0x15f6, -0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1f8,0x1f8,0x1f8,0x1f8,0x15fc,0x15fc,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1548,0x1548,0x1548,0x1548, -0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x16aa,0x16aa,0x16aa,0x16aa, -0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xdc2,0xdc2,0xdbf,0xdbf, -0xdbf,0xdc2,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x234,0x1755,0x1755,0x1755, -0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x17d6,0x17d6,0x240,0x17d6, -0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x240,0x240,0x240,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x2d3,0x2d3,0x2d3,0x2d3, +0x2d3,0x2e2,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3, +0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d6,0x64b,0x80a,0x80d, +0x651,0x80d,0x807,0x648,0x63f,0x2dc,0x65d,0x2df,0x810,0x636,0x654,0x804,0x64e,0x65a,0x63c,0x63c, +0x642,0x2d9,0x648,0x645,0x63f,0x63c,0x65d,0x2df,0x639,0x639,0x639,0x64b,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x2e8,0x666,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x666,0x2e8,0x2e8,0x2e8, +0x2e8,0x2e8,0x2e8,0x657,0x666,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x666,0x660,0x663,0x663,0x2e5,0x2e5, +0x2e5,0x2e5,0x660,0x2e5,0x663,0x663,0x663,0x2e5,0x663,0x663,0x2e5,0x2e5,0x660,0x2e5,0x663,0x663, +0x2e5,0x2e5,0x2e5,0x657,0x660,0x663,0x663,0x2e5,0x663,0x2e5,0x660,0x2e5,0x2f4,0x66c,0x2f4,0x2eb, +0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f1,0x669,0x2f4,0x66c, +0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x66c,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb, +0x2f4,0x2eb,0x672,0x669,0x2f4,0x2eb,0x2f4,0x66c,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x669,0x675,0x66f, +0x2f4,0x2eb,0x2f4,0x2eb,0x669,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x675,0x66f,0x672,0x669,0x2f4, +0x66c,0x2f4,0x2eb,0x2f4,0x66c,0x678,0x672,0x669,0x2f4,0x66c,0x2f4,0x2eb,0x2f4,0x2eb,0x672,0x669, +0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb, +0x2f4,0x2eb,0x672,0x669,0x2f4,0x2eb,0x2f4,0x66c,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb, +0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2f4,0x2eb,0x2f4,0x2eb,0x2f4,0x2eb,0x2ee,0x2f7,0x303,0x303,0x2f7, +0x303,0x2f7,0x303,0x303,0x2f7,0x303,0x303,0x303,0x2f7,0x2f7,0x303,0x303,0x303,0x303,0x2f7,0x303, +0x303,0x2f7,0x303,0x303,0x303,0x2f7,0x2f7,0x2f7,0x303,0x303,0x2f7,0x303,0x306,0x2fa,0x303,0x2f7, +0x303,0x2f7,0x303,0x303,0x2f7,0x303,0x2f7,0x2f7,0x303,0x2f7,0x303,0x306,0x2fa,0x303,0x303,0x303, +0x2f7,0x303,0x2f7,0x303,0x303,0x2f7,0x2f7,0x300,0x303,0x2f7,0x2f7,0x2f7,0x300,0x300,0x300,0x300, +0x309,0x309,0x2fd,0x309,0x309,0x2fd,0x309,0x309,0x2fd,0x306,0x67b,0x306,0x67b,0x306,0x67b,0x306, +0x67b,0x306,0x67b,0x306,0x67b,0x306,0x67b,0x306,0x67b,0x2f7,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa, +0x303,0x2f7,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x2fa,0x309,0x309,0x2fd, +0x306,0x2fa,0x9e4,0x9e4,0x9e7,0x9e1,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa, +0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa,0x306,0x2fa, +0x9e7,0x9e1,0x9e7,0x9e1,0x9e4,0x9de,0x9e7,0x9e1,0xba3,0xca5,0x9e4,0x9de,0x9e4,0x9de,0x9e7,0x9e1, +0x9e7,0x9e1,0x9e7,0x9e1,0x9e7,0x9e1,0x9e7,0x9e1,0x9e7,0x9e1,0x9e7,0x9e1,0xca5,0xca5,0xca5,0xd9e, +0xd9e,0xd9e,0xda1,0xda1,0xd9e,0xda1,0xda1,0xd9e,0xd9e,0xda1,0xee5,0xee8,0xee8,0xee8,0xee8,0xee5, +0xee8,0xee5,0xee8,0xee5,0xee8,0xee5,0xee8,0xee5,0x30c,0x67e,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c, +0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x67e,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c, +0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c, +0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30f,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c, +0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0xca8,0xca8,0x327,0x327,0x327,0x327,0x327,0x327,0x327,0x327,0x327,0x31e,0x31e,0x31e, +0x31e,0x31e,0x31e,0x31e,0x31b,0x31b,0x318,0x318,0x684,0x318,0x31e,0x687,0x321,0x687,0x687,0x687, +0x321,0x687,0x31e,0x31e,0x68a,0x324,0x318,0x318,0x318,0x318,0x318,0x318,0x681,0x681,0x681,0x681, +0x315,0x681,0x318,0xb1c,0x327,0x327,0x327,0x327,0x327,0x312,0x312,0x312,0x312,0x312,0x9f3,0x9f3, +0x9f0,0x9ed,0x9f0,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab, +0xcab,0xcab,0xcab,0xcab,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x690,0x690,0x948,0x690,0x690,0x94b,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xc5d,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xeac,0xeac,0xeac,0xeac, +0xeaf,0xd71,0xd71,0xd71,0x693,0x693,0xb22,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2, +0xca2,0xca2,0xca2,0xca2,0xf93,0xf90,0xf93,0xf90,0x333,0x33c,0xf93,0xf90,0x27,0x27,0x342,0xeeb, +0xeeb,0xeeb,0x32a,0x14e8,0x27,0x27,0x27,0x27,0x33f,0x32d,0x351,0x330,0x351,0x351,0x351,0x27, +0x351,0x27,0x351,0x351,0x348,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699, +0x699,0x699,0x699,0x699,0x699,0x699,0x27,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x351,0x351, +0x348,0x348,0x348,0x348,0x348,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696, +0x696,0x696,0x696,0x696,0x696,0x696,0x345,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x348,0x348, +0x348,0x348,0x348,0xf93,0x354,0x354,0x357,0x351,0x351,0x354,0x34b,0x9f6,0xbac,0xba9,0x34e,0x9f6, +0x34e,0x9f6,0x34e,0x9f6,0x34e,0x9f6,0x339,0x336,0x339,0x336,0x339,0x336,0x339,0x336,0x339,0x336, +0x339,0x336,0x339,0x336,0x354,0x354,0x34b,0x345,0xb5b,0xb58,0xba6,0xcb1,0xcae,0xcb4,0xcb1,0xcae, +0xda4,0xda7,0xda7,0xda7,0xa05,0x6a5,0x363,0x366,0x363,0x363,0x363,0x366,0x363,0x363,0x363,0x363, +0x366,0xa05,0x366,0x363,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a5,0x6a2,0x6a2, +0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2, +0x6a2,0x6a2,0x6a2,0x6a2,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69f,0x69c,0x69c, +0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c, +0x9ff,0x69f,0x35d,0x360,0x35d,0x35d,0x35d,0x360,0x35d,0x35d,0x35d,0x35d,0x360,0x9ff,0x360,0x35d, +0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d, +0x363,0x35d,0x363,0x35d,0x363,0x35d,0x366,0x360,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d, +0x363,0x35d,0x35a,0x954,0x957,0x939,0x939,0x113d,0x9f9,0x9f9,0xbb2,0xbaf,0xa02,0x9fc,0xa02,0x9fc, +0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d, +0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d, +0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d, +0x363,0x366,0x360,0x363,0x35d,0xbb2,0xbaf,0x363,0x35d,0xbb2,0xbaf,0x363,0x35d,0xbb2,0xbaf,0xeee, +0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0x363,0x35d,0x366,0x360,0x366,0x360,0x366,0x360, +0x363,0x35d,0x366,0x360,0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0xa05,0x9ff,0x366,0x360, +0x366,0x360,0x366,0x360,0x366,0x360,0xdad,0xdaa,0x366,0x360,0xef1,0xeee,0xef1,0xeee,0xef1,0xeee, +0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b, +0xf1e,0xf1b,0xf1e,0xf1b,0x1011,0x100e,0x1011,0x100e,0x1011,0x100e,0x1011,0x100e,0x1011,0x100e,0x1011,0x100e, +0x1011,0x100e,0x1011,0x100e,0x1176,0x1173,0x1350,0x134d,0x1521,0x151e,0x1521,0x151e,0x1521,0x151e,0x1521,0x151e, +0x2a,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x2a,0x2a,0x378,0x369,0x369, +0x369,0x36c,0x369,0x369,0x2a,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, +0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, +0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x372,0x2a,0x8be,0xa08,0x2a,0x2a,0x14eb,0x14eb,0x1404, +0x2d,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0xdb0,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0xef4,0x37b,0x37b,0x37b,0x387,0x37b, +0x37e,0x37b,0x37b,0x38a,0x97b,0xdb3,0xdb6,0xdb3,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x38d,0x38d,0x38d,0x384,0x381,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0xcb7,0xcb7,0xcb7,0xcb7,0x1407,0x14ee,0xf9c,0xf9c,0xf9c,0xf99,0xf99,0xdbf,0x8c4,0xcc6,0xcc3,0xcc3, +0xcba,0xcba,0xcba,0xcba,0xcba,0xcba,0xf96,0xf96,0xf96,0xf96,0xf96,0x8c1,0x14e2,0x30,0xdbc,0x8c7, +0x1317,0x3a8,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f, +0x8ca,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x93f,0x93f,0x93f,0x93f,0x93f, +0x93f,0x93f,0x93f,0xb52,0xb52,0xb52,0xcba,0xcc0,0xcbd,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0x1314, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x3a2,0x39f,0x39c,0x399,0xbb5,0xbb5, +0x93c,0x3a8,0x3a8,0x3b4,0x3a8,0x3ae,0x3ae,0x3ae,0x3ae,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0xa0e,0xa0e,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0xa0e,0x3ab,0x3a8,0x3ab,0x3a8, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0xa0e,0x3a8,0x3a8,0x3a8,0x3ab, +0x3b7,0x3a8,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x390,0x399,0x396,0x396,0x393,0x393,0x393, +0x393,0x3b1,0x3b1,0x393,0x393,0x399,0x396,0x396,0x396,0x393,0xcc9,0xcc9,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0xa0e,0xa0e,0xa0e,0xa0b,0xa0b,0xcc9,0xa26,0xa26,0xa26,0xa20, +0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa1d,0xa20,0xa1d,0x33,0xa11,0xa23,0xa14,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xccc,0xccc,0xccc,0xa1a,0xa1a,0xa1a,0xa1a, +0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa17,0xa17,0xa17,0xa17, +0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x33,0x33,0xccc,0xccc,0xccc,0xe22,0xe22,0xe22,0xe22, +0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22, +0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023, +0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0xa2c,0xa2c,0xa2c,0xa2c, +0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c, +0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c, +0xa2c,0xa2c,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xbb8,0x36,0x36, +0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xf36,0xf36,0xf36,0xf36, +0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39, +0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39, +0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, +0xf3c,0xf3c,0xf30,0xf30,0xf33,0xf42,0xf3f,0x14a,0x14a,0x14a,0x14a,0x14a,6,6,6,6, +6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1827,0x1827,0x1827,0x1827, +0x1827,0x1827,0x1827,0x1827,0x1827,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb2e,0xb2e,0xb31,0xb31, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0x9f,0x9f,0x9f,0x9f,0x15a5,0x15a5,0x15a5,0x15a5, +0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x15a2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x23d,0x23d,0x23d,0x23d, +0x23d,0x23d,0x23d,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x249,0x249,0x249,0x249, +0x249,0x249,0x249,0x249,0x249,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1266,0x1266,0x1266,0x1266, +0x1266,0x1266,0x1266,0x1266,0x1266,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x21f,0x21f,0x21f,0x21f, +0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x14be,0x14be,0x14be,0x14be, +0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x204,0x204,0x204,0x204,0x204,0x204,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,3,0xc,0xf,0xf, +0xc,0x12,3,0x15,0,0,0,0,0,0,0,0,6,0x15,0x15,0x15, +0x15,0x15,0x15,0x18,0x18,0x15,0x15,0x15,6,6,6,6,0,0,9,9, +9,9,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x18, +0x15,0x15,0xc,0xf,0xf,0,0x12,0x12,0x12,0xc,0xc,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x921,0x921,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,0x921,0x921, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,0, +6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,0x15,0x15,0x15,0x15,0x15,0x15,0, +0,0,0x15,0,0x15,0x15,0,0x15,0x15,0x15,0x15,0x15,0x15,0x15,9,0x15, +0,0,0,0,0,0,0,0,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, +0x21,0x21,0,0,0,0,0,0,0x1791,0x1791,0x1791,0x1791,0x264,0x264,0x264,0x264, +0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a, +0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x1c2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a, +0x164a,0x164a,0x237,0x237,0x237,0x237,0x1650,0x1650,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0,0,0,0,0x16fe,0x16fe,0x16fe,0x16fe,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe19,0xe19,0xe16,0xe16,0xe16,0xe19,0x111,0x111, +0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x27c,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, +0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x182a,0x182a,0x288,0x182a,0x182a,0x288,0x182a,0x182a, +0x182a,0x182a,0x182a,0x288,0x288,0x288,0x288,0x288,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x975,0x975,6,0x15,0x15,0x15,0x15,0x15,0x15,0x18, +0x18,0x15,0x15,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,0x15,0x15,0x15,0x15,0x15, +0x15,0x18,9,0x15,0x15,0x15,0x15,0x12,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -0x149d,0x37e,0x38d,0x38d,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x1b,0x393, -0x393,0x1b,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, -0x393,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x393,0x1b,0x1b,0x1b,0x393,0x393, -0x393,0x393,0x1b,0x1b,0x381,0xc7e,0x37e,0x38d,0x38d,0x37e,0x37e,0x37e,0x37e,0x1b,0x1b,0x38d, -0x38d,0x1b,0x1b,0x390,0x390,0x384,0xd71,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x37e, -0x1b,0x1b,0x1b,0x1b,0x396,0x396,0x1b,0x396,0x393,0x393,0x37e,0x37e,0x1b,0x1b,0x90c,0x90c, -0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x393,0x393,0x38a,0x38a,0x387,0x387,0x387,0x387, -0x387,0x38a,0x387,0x10f5,0x1b,0x1b,0x1b,0x1b,0x1e,0xc81,0x399,0xc84,0x1e,0x3a5,0x3a5,0x3a5, -0x3a5,0x3a5,0x3a5,0x1e,0x1e,0x1e,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, -0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, -0x3a5,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x39c,0x1e,0x3a2,0x3a2, -0x3a2,0x399,0x399,0x1e,0x1e,0x1e,0x1e,0x399,0x399,0x1e,0x1e,0x399,0x399,0x39f,0x1e,0x1e, -0x1e,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3a8,0x3a8,0x3a8,0x3a5,0x1e,0x3a8,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f, -0x399,0x399,0x3a5,0x3a5,0x3a5,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x21,0x3ab,0x3ab,0x3b4,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0xc8d,0x3b7,0x21,0x3b7, -0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7, -0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7, -0x3b7,0x3b7,0x21,0x21,0x3ae,0x3b7,0x3b4,0x3b4,0x3b4,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x21,0x3ab, -0x3ab,0x3b4,0x21,0x3b4,0x3b4,0x3b1,0x21,0x21,0x3b7,0x21,0x21,0x21,0x21,0x21,0x21,0x21, -0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x3b7,0xc8d,0xc87,0xc87,0x21,0x21,0x912,0x912, -0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x13b3,0xc8a,0x21,0x21,0x21,0x21,0x21,0x21, -0x21,0x16b9,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x3ba,0x3c9,0x3c9,0x24,0x3cf,0x3cf,0x3cf, -0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, -0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, -0x3cf,0x24,0x3cf,0x3cf,0x24,0xc90,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3bd,0x3cf,0x3ba,0x3ba, -0x3c9,0x3ba,0x3ba,0x3ba,0xf54,0x24,0x24,0x3c9,0x3cc,0x24,0x24,0x3cc,0x3cc,0x3c0,0x24,0x24, -0x24,0x24,0x24,0x24,0x24,0x24,0x3ba,0x3ba,0x24,0x24,0x24,0x24,0x3d2,0x3d2,0x24,0x3cf, -0x3cf,0x3cf,0xf54,0xf54,0x24,0x24,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, -0x3c3,0xc90,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, -0x27,0x27,0x3d5,0x3e1,0x27,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1, -0x3e1,0x27,0x3e1,0x3e1,0x3e4,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x3e1,0x27,0x3e1,0x3e1, -0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x91b,0x27,0x27,0x27,0x3e1,0x3e1, -0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x91b,0xd74,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x27,0x3d5,0x3db, -0x3d5,0x3db,0x3db,0x27,0x27,0x27,0x3db,0x3db,0x3db,0x27,0x3de,0x3de,0x3de,0x3d8,0x27,0x27, -0xf57,0x27,0x27,0x27,0x27,0x27,0x27,0x3d5,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, -0x27,0x27,0xe8b,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x915,0x915,0x915,0xc93, -0xc93,0xc93,0xc93,0xc93,0xc93,0xc96,0xc93,0x27,0x27,0x27,0x27,0x27,0x14a0,0x3f3,0x3f3,0x3f3, -0x2a,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, -0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, -0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x14a3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x2a, -0x2a,0xf60,0x3e7,0x3e7,0x3e7,0x3f3,0x3f3,0x3f3,0x3f3,0x2a,0x3e7,0x3e7,0x3ea,0x2a,0x3e7,0x3e7, -0x3e7,0x3ed,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3e7,0x3e7,0x2a,0xf60,0xf60,0x16bc,0x2a, -0x2a,0x2a,0x2a,0x2a,0x3f6,0x3f6,0xf5a,0xf5a,0x2a,0x2a,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0, -0x3f0,0x3f0,0x3f0,0x3f0,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xf5d,0xf5d,0xf5d,0xf5d, -0xf5d,0xf5d,0xf5d,0xf5d,0x1779,0x14a6,0x402,0x402,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408, -0x408,0x2d,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, -0x408,0x408,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, -0x2d,0x408,0x408,0x408,0x408,0x408,0x2d,0x2d,0xc99,0xc9c,0x402,0x3f9,0x405,0x402,0x3f9,0x402, -0x402,0x2d,0x3f9,0x405,0x405,0x2d,0x405,0x405,0x3f9,0x3fc,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, -0x2d,0x3f9,0x3f9,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x408,0x2d,0x408,0x408,0xea3,0xea3, -0x2d,0x2d,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x2d,0xea6,0xea6,0x2d, -0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x30,0x14a9,0x414,0x414, -0x30,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x30,0x41a,0x41a,0x41a,0x30,0x41a,0x41a, -0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x41a,0x41a, -0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x30, -0x30,0xf6c,0x40b,0x414,0x414,0x40b,0x40b,0x40b,0xf63,0x30,0x414,0x414,0x414,0x30,0x417,0x417, -0x417,0x40e,0x12d2,0x177c,0x30,0x30,0x30,0x30,0x177f,0x177f,0x177f,0x40b,0x177c,0x177c,0x177c,0x177c, -0x177c,0x177c,0x177c,0x16bf,0x41a,0x41a,0xf63,0xf63,0x30,0x30,0x411,0x411,0x411,0x411,0x411,0x411, -0x411,0x411,0x411,0x411,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0x177c,0x177c,0x177c,0xf69,0xf6c,0xf6c, -0xf6c,0xf6c,0xf6c,0xf6c,0x33,0x33,0x9e4,0x9e4,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9ea,0x9ea, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, -0x9ea,0x9ea,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x9ea,0x33,0x33, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9de,0x33,0x33,0x33,0x33,0x9db, -0x9e4,0x9e4,0x9db,0x9db,0x9db,0x33,0x9db,0x33,0x9e4,0x9e4,0x9e7,0x9e4,0x9e7,0x9e7,0x9e7,0x9db, -0x33,0x33,0x33,0x33,0x33,0x33,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac, -0x33,0x33,0x9e4,0x9e4,0x9e1,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, -0x36,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, -0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, -0x435,0x420,0x435,0x432,0x420,0x420,0x420,0x420,0x420,0x420,0x426,0x36,0x36,0x36,0x36,0x41d, -0x43b,0x43b,0x43b,0x43b,0x43b,0x435,0x438,0x423,0x423,0x423,0x423,0x423,0x423,0x420,0x423,0x429, -0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42c,0x42c,0x36,0x36,0x36,0x36, -0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, -0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x44a,0x44a,0x39, -0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x39,0x39,0x39,0x39,0x39,0x39, -0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a, -0x39,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x43e,0x44a,0x447, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x39,0x43e,0x43e,0x44a,0x39,0x39,0x453,0x453,0x453,0x453, -0x453,0x39,0x450,0x39,0x441,0x441,0x441,0x441,0x441,0x43e,0x39,0x39,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x444,0x444,0x39,0x39,0x44d,0x44d,0x13b6,0x13b6,0x39,0x39,0x39,0x39, -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x95d,0x95d,0x95d,0x960, -0x95d,0x95d,0x95d,0x95d,0x3c,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d, -0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, -0x95d,0x95d,0x95d,0x95d,0x95d,0x960,0x9f9,0xf78,0xf78,0x3c,0x3c,0x3c,0x3c,0x92a,0x92a,0x92d, -0x92a,0x92d,0x92d,0x936,0x92d,0x936,0x92a,0x92a,0x92a,0x92a,0x92a,0x957,0x92a,0x92d,0x930,0x930, -0x933,0x93c,0x930,0x930,0x95d,0x95d,0x95d,0x95d,0x12db,0x12d5,0x12d5,0x12d5,0x92a,0x92a,0x92a,0x92d, -0x92a,0x92a,0x9ed,0x92a,0x3c,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a, -0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x9ed,0x9ed,0x9ed,0x92a,0x92a,0x92a, -0x92a,0x92a,0x92a,0x92a,0x9ed,0x92d,0x9ed,0x9ed,0x9ed,0x3c,0x9f6,0x9f6,0x9f3,0x9f3,0x9f3,0x9f3, -0x9f3,0x9f3,0x9f0,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x3c,0xf6f,0x9f3,0xd77,0xd77,0xf72,0xf75, -0xf6f,0x10f8,0x10f8,0x10f8,0x10f8,0x12d8,0x12d8,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, -0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, -0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x459,0x459,0x459,0x459,0x459,0x459,0x3f,0x13bc, -0x3f,0x3f,0x3f,0x3f,0x3f,0x13bc,0x3f,0x3f,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, -0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, -0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42, -0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, -0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23, -0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0xa23,0x42,0xa23,0xa23, -0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0x12de,0x12de,0xd80,0xd83,0xa1d,0xa26,0xa1a, -0xa1a,0xa1a,0xa1a,0xa26,0xa26,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa17,0xa17, -0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x42,0x42,0x42,0xa29,0xa29,0xa29,0xa29, -0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, -0xa29,0x16c5,0x45,0x45,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x45,0x45,0xa3b,0xa3e,0xa3e,0xa3e, -0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, -0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa38,0xa35,0x48,0x48,0x48,0xa44,0xa44,0xa44,0xa44, -0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa41,0xa41,0xa41,0xa44,0xa44,0xa44,0x14af,0x14af,0x14af, -0x14af,0x14af,0x14af,0x14af,0x14af,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa65,0xa65,0xa65,0xa65, -0xa65,0xa65,0xa47,0xa65,0xa65,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4d,0xa4a, -0xa5c,0xa5c,0xa5f,0xa68,0xa56,0xa53,0xa5c,0xa59,0xa68,0xc9f,0x4e,0x4e,0xa62,0xa62,0xa62,0xa62, -0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xca2,0xca2,0xca2,0xca2, -0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa77,0xa77,0xaf5,0xaf8, -0xa7d,0xaf2,0xa7a,0xa77,0xa80,0xa8f,0xa83,0xa92,0xa92,0xa92,0xa6e,0x51,0xa86,0xa86,0xa86,0xa86, -0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xa89,0xa71,0xf99,0x51,0x51,0x51,0x51,0x51,0x114c,0x114c,0x114c,0x114c, -0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, -0x477,0x477,0x54,0x54,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x54,0x54,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x54,0x54,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, -0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x471,0x477,0x471,0x471,0x46e,0x477,0x477, -0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, -0x54,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x54,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, -0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x54,0x54,0x477,0x477, -0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x474,0x471,0x54,0xb6a,0xb6d,0xb6d,0xb6d, -0xfa2,0x57,0x148e,0x148e,0x148e,0x148e,0x483,0x483,0x483,0x483,0x483,0x483,0x4ce,0xb7f,0x5a,0x5a, -0x68a,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4d4,0x4e6,0x4d4,0x4e0,0x4da,0x68d,0x4cb,0x687,0x687,0x687, -0x687,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4d1,0x4e3,0x4d1,0x4dd,0x4d7,0x5a,0xd8f,0xd8f,0xd8f,0xd8f, -0xd8f,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x5a,0x5a,0x5a,0x4ec,0x4ec,0x4ec,0x4ec, -0x4ec,0x4ec,0x4ec,0x4e9,0x4ef,0x702,0x4ec,0x966,0x987,0xaa1,0xaa1,0xaa1,0xb82,0xb82,0xd92,0xd92, -0xd92,0xd92,0x1110,0x1113,0x1113,0x12e4,0x1488,0x14b2,0x14b5,0x14b5,0x16c8,0x5d,0x5d,0x5d,0x5d,0x5d, -0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x4f5,0x4f5,0x4f5,0x4f5, -0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f2,0x4f2,0x4f2,0x4f2,0x4f5,0xaa4,0xaa4, -0xb85,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xd95,0xea9,0xea9,0xea9,0xea9,0x10e3,0x60,0x60,0x60, -0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x525,0x525,0x525,0xaad, -0xeb2,0xfa8,0xfa8,0xfa8,0xfa8,0x123f,0x16cb,0x16cb,0x63,0x63,0x63,0x63,0x6b4,0x6b4,0x6b4,0x6b4, -0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x531,0x531,0x52e,0x52e,0x52e,0x52e,0xeb8,0xeb8,0xeb8,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0x1119,0x1365,0x1365,0x1365,0x1365,0x12e7,0x12e7,0x12e7,0x1368,0x12ea,0x12ea,0x1368, -0x14b8,0x14b8,0x14b8,0x14b8,0x14bb,0x14bb,0x14bb,0x1782,0x1782,0x1782,0x1782,0x66,0x558,0x558,0x558,0x558, -0x558,0xab6,0xab6,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, -0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x55b,0x55b,0x55b,0x55b, -0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, -0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0x6f,0xad1,0xad1,0xad1,0xad1,0xad4,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad4, -0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x78,0x7e9,0x7e3,0x7e9, -0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3, -0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9, -0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e6,0xc2d,0xc2d,0x78,0x78,0x8fd,0x8fd,0x8c7,0x8c7,0x7ec,0x7ef,0xc2a,0x7b,0x7b,0x7b,0x7b, -0x7b,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801, -0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x10d1,0x7b,0x7b, -0x7e,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, -0x804,0x804,0x804,0x7e,0x8d0,0x8d0,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3, -0x8d3,0x8d3,0x8d3,0x8d3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0x1374,0x1374,0x1374,0x81, -0x81,0x81,0x81,0x81,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, -0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, -0x80d,0xd2f,0xd2f,0x84,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, -0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, -0x813,0x813,0x813,0x84,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0x87,0x87,0x87,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, -0xaef,0xaef,0xaef,0xaef,0xaef,0xc36,0xaef,0xaef,0xaef,0xc36,0xaef,0x8a,0x8a,0x8a,0x8a,0x8a, -0x8a,0x8a,0x8a,0x8a,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, -0x1173,0x1173,0x1173,0x1173,0x981,0x981,0x981,0x981,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8, -0x11e8,0x11e8,0x11e8,0x11e8,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x90,0x90,0x90,0x90, -0x90,0xac2,0x5a6,0x5ac,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5a9,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x90,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5af,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, -0x5c4,0x5ca,0x5c7,0x5c1,0x12f3,0x12f3,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, -0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7, -0x5c1,0x5c7,0x5c7,0x5c1,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, -0x93,0x93,0x93,0x93,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, -0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1, -0x5c4,0x5c4,0x5c4,0x5c4,0x93,0x93,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x93,0x93,0x93,0x93, -0x93,0x93,0x93,0x93,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0x5c7,0x5c7,0x91e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be, -0xbc1,0xd47,0x93,0x93,0x825,0x837,0x834,0x837,0x834,0xc4b,0xc4b,0xd3b,0xd38,0x828,0x828,0x828, -0x828,0x83a,0x83a,0x83a,0x852,0x855,0x864,0x96,0x858,0x85b,0x867,0x867,0x84f,0x846,0x840,0x846, -0x840,0x846,0x840,0x843,0x843,0x85e,0x85e,0x861,0x85e,0x85e,0x85e,0x96,0x85e,0x84c,0x849,0x843, -0x96,0x96,0x96,0x96,0x5d3,0x5df,0x5d3,0xbc4,0x5d3,0x99,0x5d3,0x5df,0x5d3,0x5df,0x5d3,0x5df, -0x5d3,0x5df,0x5d3,0x5df,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, -0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc, -0x5d6,0x99,0x99,0x5d0,0x723,0x726,0x73b,0x73e,0x71d,0x726,0x726,0x9f,0x705,0x708,0x708,0x708, -0x708,0x705,0x705,0x9f,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0xac5,0xac5,0xac5, -0x984,0x6ff,0x5e2,0x5e2,0x9f,0x74d,0x72c,0x71d,0x726,0x723,0x71d,0x72f,0x720,0x71a,0x71d,0x73b, -0x732,0x729,0x74a,0x71d,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x738,0x735, -0x73b,0x73b,0x73b,0x74d,0x70e,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, -0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, -0x70b,0x70b,0x70b,0x9f,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, -0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, -0x70b,0x9f,0x9f,0x9f,0xb0d,0xb0d,0xb0d,0xb0d,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, -0xa2,0xa2,0xa2,0xa2,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xa5,0xa5,0xa5,0xa5,0xa5,0x161a,0x161a,0x161a,0x161a, -0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xab,0xab,0xfb4,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0x16d1,0x16d1, -0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab, -0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xae,0xb40,0xb40,0xae,0xae,0xb40,0xae, -0xae,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xae,0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xcc0,0xb3d,0xb3d, -0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d, -0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40, -0xb40,0xae,0xb40,0xae,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xdaa,0xdaa,0xae,0xae, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xec1,0xebe,0xae,0xae,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb1,0xb46,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, -0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xb4,0xbd3,0xbd3,0xbd3,0xbd3,0xbcd,0xbcd,0xbd0,0xb4,0xb4,0xb4, -0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc, -0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbd6,0xbd6,0xbd9,0xc3f,0xc3f,0xb7, -0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2, -0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbdf,0xbdf,0xba,0xba,0xba,0xba, -0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, -0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbd,0xbe8,0xbe8,0xbe8,0xbd,0xbe5,0xbe5,0xbd,0xbd,0xbd,0xbd, -0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, -0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, -0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0x14cd,0x14cd,0xc0,0xcc3,0xcc3,0xcc3,0xccf,0xccf,0xccf,0xccf,0xcc3, -0xcc3,0xccf,0xccf,0xccf,0xc0,0xc0,0xc0,0xc0,0xccf,0xccf,0xcc3,0xccf,0xccf,0xccf,0xccf,0xccf, -0xccf,0xcc6,0xcc6,0xcc6,0xc0,0xc0,0xc0,0xc0,0xcc9,0xc0,0xc0,0xc0,0xcd5,0xcd5,0xccc,0xccc, -0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc3,0xc3,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x14d0,0x14d0,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, -0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6, -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x16d4,0x16d4,0x16d4,0x16d4, -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, -0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, -0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xd02,0xd02,0xd02,0xd02, -0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, -0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xcc,0xcc,0xcc,0xcc,0xcc,0xd44,0xd44,0xd44,0xcf, -0xcf,0xcf,0xcf,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, -0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xcf,0xcf,0xcf,0xd41, -0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, -0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, -0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd2,0xd05,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd5,0xd5,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, -0xd0e,0xd0e,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, -0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd8, -0xd14,0xd8,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd14,0xd14,0xd8,0xd8,0xd8, -0xd14,0xd8,0xd8,0xd14,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, -0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xdb,0xdb,0xdb,0xdb,0xdb, -0xdb,0xdb,0xdb,0xdb,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0x14d3, -0x14d3,0x1785,0x1785,0xe1,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0, -0x138,0x138,0x138,0x138,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7, -0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdce,0xdce,0xdd4,0xdd4,0xdce, -0xe4,0xe4,0xdd1,0xdd1,0x10e0,0x10e0,0x10e0,0x10e0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, -0xe7,0xe7,0xe7,0xe7,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, -0xc3c,0xc3c,0xc3c,0xc3c,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6, -0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d9,0xea,0xea,0xea,0xea,0xea,0x1788, -0x12ff,0x1122,0xed0,0xed0,0xde9,0xde6,0xde9,0xde6,0xde6,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0x112b, -0x1128,0x112b,0x1128,0x1125,0x1125,0x1125,0x13c5,0x13c2,0xed,0xed,0xed,0xed,0xed,0xde3,0xde0,0xde0, -0xde0,0xddd,0xde3,0xde0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xf0,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2, -0xdf2,0xdf2,0xdf2,0xdf2,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xf3,0xf3, -0xf3,0xf3,0xf3,0xf3,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xf6,0x13c8,0xf6,0xf6,0xf6,0xf6, -0xf6,0x13c8,0xf6,0xf6,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, -0xe4f,0xe4f,0xe4f,0xe4f,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, -0xdfb,0xdfb,0xdfb,0xf9,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, -0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, -0xdf8,0xdf8,0xdf8,0xf9,0xe0d,0xe01,0xe01,0xe01,0xfc,0xe01,0xe01,0xfc,0xfc,0xfc,0xfc,0xfc, -0xe01,0xe01,0xe01,0xe01,0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d, -0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, -0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xfc,0xfc,0xfc,0xdfe,0xdfe,0xdfe,0xfc,0xfc,0xfc,0xfc,0xe04, -0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe10,0xe10,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0x1131,0x1131,0xff,0xff,0xff,0xff, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1c,0xe1c,0xe1f,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xff,0xff,0xff,0xff,0xff,0xff,0xe19,0xe19,0xe19,0xe19, -0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x112e,0xff,0xff,0xff,0xe16,0xe16,0xe25,0xe25,0xe25,0xe25, -0x102,0x102,0x102,0x102,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe22,0xe25,0xe25,0xe25, -0xe25,0xe25,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x14e2,0x14e8,0x14e5,0x1830, -0x178b,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, -0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, -0x105,0x105,0x105,0x105,0xe4c,0xe4c,0xe4c,0xe49,0xe49,0xe40,0xe40,0xe49,0xe46,0xe46,0xe46,0xe46, -0x108,0x108,0x108,0x108,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129f,0x129f,0x12a2,0x129f,0x15c,0x15c, -0x15c,0x15c,0x15c,0x15c,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0x13d4,0x13d4,0x10b,0x10b,0x10b,0x10b, -0x10b,0x10b,0x10b,0xe52,0x1305,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b, -0x10b,0x10b,0x10b,0x1302,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xe7f,0xe70,0xe6a,0xe7c,0xe79,0xe73,0xe73,0xe82,0xe6d,0xe76,0x10e,0x10e, -0x10e,0x10e,0x10e,0x10e,0xf03,0xf03,0xeee,0xf03,0xf06,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, -0x114,0x114,0x114,0x114,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xf0f,0xf0f, -0xef4,0xefa,0xf0f,0xf0f,0xef7,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4, -0xef4,0x114,0x114,0x114,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x13da,0x14f4, -0x14f4,0x14f4,0x178e,0x117,0x14f4,0x14f4,0x16dd,0x16dd,0x16dd,0x16d7,0x16dd,0x16d7,0x117,0x117,0x117,0x117, -0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, -0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x14f1, -0x13dd,0x13dd,0x1308,0x100b,0x100b,0x100b,0x100b,0x100b,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1b,0xf1b,0xf21,0xf21, -0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a, -0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf24,0xf24, -0xf24,0xf24,0x113a,0x113a,0x11d,0x11d,0x11d,0xf27,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, -0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, -0x14f7,0x16e0,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0x120,0x120,0x120,0x120,0xf33,0xf33,0xf33,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, -0x14fd,0x14fd,0x14fd,0x123,0xf30,0xf30,0xf30,0xf30,0x14fa,0x123,0x123,0x123,0x123,0x123,0x123,0x123, -0x123,0x123,0x123,0x123,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36, -0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126, -0x126,0x126,0x126,0x126,0x1032,0x1032,0x1032,0x1032,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f, -0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x102f,0x102f,0x1026,0x1023,0x129,0x129,0x129,0x1035, -0x1035,0x1029,0x1029,0x1029,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x129,0x129, -0x129,0x1032,0x1032,0x1032,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x103b,0x103b, -0x103b,0x103b,0x103b,0x103b,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x1050,0x1050, -0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, -0x12c,0x12c,0x12c,0x12c,0x1077,0x1077,0x1077,0x1077,0x1071,0x1791,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, -0x12f,0x12f,0x107d,0x107d,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x12f,0x12f, -0x12f,0x12f,0x12f,0x12f,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x108f,0x108f,0x108f,0x108f,0x108f, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1095,0x1098,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, -0x132,0x132,0x132,0x1092,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x109e,0x109e,0x109e, -0x109e,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x135,0x135,0x135,0x135,0x135, -0x135,0x135,0x135,0x135,0x10aa,0x10aa,0x10aa,0x109e,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, -0x109e,0x10a7,0x135,0x135,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x135,0x135, -0x10a1,0x10ad,0x10ad,0x10ad,0x1509,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, -0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, -0x138,0x138,0x138,0x138,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, -0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, -0x10b3,0x10b6,0x13b,0x13b,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, -0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, -0x10b9,0x13e,0x13e,0x13e,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, -0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141, -0x141,0x141,0x141,0x141,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2, -0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x144,0x144, -0x144,0x144,0x144,0x10bf,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, -0x147,0x147,0x147,0x147,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, -0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, -0x14a,0x14a,0x14a,0x14a,0x1140,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140, -0x1140,0x113d,0x14d,0x14d,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146, -0x1146,0x1146,0x1146,0x14d,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, -0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x150,0x150,0x150,0x150,0x150,0x150, -0x150,0x150,0x150,0x150,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, -0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1164,0x114f,0x1164,0x114f,0x114f,0x114f,0x114f, -0x114f,0x114f,0x114f,0x153,0x1158,0x1161,0x114f,0x1161,0x1161,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f, -0x114f,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x114f,0x114f,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155, -0x1155,0x153,0x153,0x1152,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, -0x153,0x153,0x153,0x153,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, -0x153,0x153,0x153,0x153,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x116a,0x116d,0x116d,0x116d,0x116d, -0x115b,0x115b,0x153,0x153,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557, -0x1557,0x1557,0x1554,0x1d1,0x12b1,0x1290,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x1293,0x1293,0x1293, -0x1293,0x12ab,0x1293,0x1293,0x1293,0x1293,0x1299,0x147f,0x1485,0x1482,0x147c,0x156,0x16ad,0x16ad,0x156,0x156, -0x156,0x156,0x156,0x156,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, -0x1182,0x1182,0x1182,0x1182,0x1179,0x1179,0x117c,0x1185,0x117f,0x117f,0x117f,0x1185,0x159,0x159,0x159,0x159, -0x159,0x159,0x159,0x159,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x1188,0x1188,0x1188,0x1188,0x1188,0x12b7,0x118e,0x12ba,0x118e,0x118e,0x118e,0x118e,0x118b,0x118b,0x118b,0x118e, -0x16e6,0x16e9,0x15f,0x15f,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, -0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, -0x127e,0x162,0x162,0x162,0x11a3,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x119a,0x11a9,0x11a9,0x1197,0x1197, -0x1197,0x1197,0x165,0x12a5,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x165,0x165, -0x165,0x165,0x1197,0x1197,0x11c7,0x11bb,0x11c7,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, -0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x11c4, -0x11c4,0x11ca,0x11be,0x11c1,0x11df,0x11df,0x11df,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11e2, -0x11dc,0x11d3,0x16b,0x16b,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x16b,0x16b, -0x16b,0x16b,0x16b,0x16b,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x16e,0x16e,0x16e,0x16e,0x11e5, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x16e,0x16e,0x16e,0x16e, -0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1, -0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x171,0x11ee,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x174,0x174,0x174,0x11fa,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, -0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206, -0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x177,0x177,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203, -0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, -0x120c,0x120c,0x120c,0x17a,0x17a,0x17a,0x17a,0x17a,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212, -0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x180, -0x1230,0x1230,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183, -0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b, -0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x1515,0x1515,0x189,0x189,0x189, -0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, -0x125a,0x125a,0x125a,0x125d,0x125d,0x125d,0x123c,0x189,0x135f,0x1266,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f, -0x135f,0x135f,0x135f,0x135f,0x135f,0x1266,0x135f,0x1266,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, -0x135c,0x135c,0x13ec,0x13ec,0x189,0x189,0x189,0x189,0x1362,0x1362,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, -0x135c,0x1263,0x135c,0x1263,0x1263,0x135c,0x1362,0x1269,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f, -0x180f,0x180f,0x180f,0x180f,0x180f,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, -0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, -0x1314,0x1314,0x1314,0x1314,0x128a,0x137d,0x137a,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, -0x18c,0x18c,0x18c,0x18c,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287,0x1284, -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287, -0x1284,0x1284,0x137d,0x137d,0x137d,0x137d,0x137d,0x137a,0x137d,0x137d,0x137d,0x1812,0x18c,0x18c,0x18c,0x18c, -0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, -0x13aa,0x13aa,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, -0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, -0x18c,0x18c,0x18c,0x18c,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d, -0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x1317,0x1317,0x1317, -0x18f,0x18f,0x131a,0x18f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1320,0x1329,0x1323,0x1323,0x1329,0x1329, -0x1329,0x1323,0x1329,0x1323,0x1323,0x1323,0x132c,0x132c,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192, -0x1326,0x1326,0x1326,0x1326,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x195,0x195,0x195, -0x195,0x195,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x195,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, -0x15b4,0x15b4,0x15b4,0x15b4,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x134a,0x134a,0x133e,0x133e,0x133e, -0x133e,0x133e,0x198,0x198,0x198,0x198,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, -0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x1518, -0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, -0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x1383,0x1380,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, -0x1350,0x1350,0x1350,0x1a1,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, -0x1350,0x1350,0x1350,0x151b,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, -0x1350,0x1350,0x1350,0x1386,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, -0x1350,0x1350,0x1350,0x1350,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b, -0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, -0x1a1,0x1a1,0x1a1,0x1a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1533,0x1533,0x1533,0x1533,0x1533,0x1536, -0x16a4,0x1536,0x1536,0x1536,0x176d,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1533,0x1533,0x1533,0x1536,0x1533,0x16a1, -0x16a1,0x1a4,0x1a4,0x1a4,0x1536,0x1533,0x1533,0x1536,0x181b,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, -0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, -0x1a7,0x1a7,0x1a7,0x1a7,0x13f8,0x153c,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, -0x13f8,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x16f2,0x16f2,0x1aa,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, -0x179d,0x179d,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, -0x179a,0x179a,0x179a,0x179a,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, -0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, -0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, -0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x13fb,0x13fb,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1401,0x1401,0x1401,0x1401,0x1401,0x1410,0x1401,0x1404,0x1404, -0x1401,0x1401,0x1401,0x1407,0x1407,0x1b0,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d, -0x140a,0x1416,0x1416,0x1416,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, -0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, -0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x141f,0x1419,0x1419,0x141f,0x141f, -0x1428,0x1428,0x1422,0x1425,0x1425,0x141f,0x141c,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b, -0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x1b6,0x1b6,0x1b6,0x1b6,0x16f5,0x16f5,0x142b,0x142b, -0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -0x1b6,0x1b6,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -0x1437,0x1437,0x1437,0x1437,0x1437,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, -0x1437,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, -0x1b9,0x1b9,0x1b9,0x1431,0x1431,0x1431,0x1431,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a, -0x143a,0x143a,0x143a,0x143a,0x144c,0x144f,0x1452,0x1452,0x144f,0x1455,0x1455,0x1440,0x1443,0x16fb,0x16f8,0x16f8, -0x16f8,0x1542,0x1bc,0x1bc,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x153f,0x1701, -0x1704,0x16fe,0x1707,0x1707,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1bf,0x1bf,0x1bf, -0x1bf,0x1bf,0x1bf,0x1bf,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1bf,0x1bf, -0x1bf,0x1bf,0x1bf,0x1bf,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x1c2,0x1c2,0x1c2,0x1c2, -0x1c2,0x1c2,0x1c2,0x1c2,0x12ae,0x12ab,0x12ae,0x1296,0x12ab,0x12ab,0x12ab,0x12b1,0x12ab,0x12b1,0x12b4,0x12ab, -0x12b1,0x12b1,0x12ab,0x12ab,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1461, -0x146a,0x1461,0x146a,0x146a,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x146d,0x1464,0x1c5,0x1c5,0x1c5,0x1c5, -0x1c5,0x1c5,0x1c5,0x1c5,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, -0x1548,0x1548,0x1c8,0x1c8,0x1545,0x1545,0x1545,0x1545,0x1545,0x154b,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, -0x1c8,0x1c8,0x1c8,0x1c8,0x16b0,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, -0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, -0x1ce,0x1ce,0x1ce,0x1ce,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, -0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, -0x1d1,0x1d1,0x1d1,0x1d1,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1d4, -0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1d4,0x1d4,0x1560,0x155a,0x155d,0x1566,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, -0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, -0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x1da,0x1da,0x1da, -0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x975,0x975,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x14f4,0x3cf,0x3de,0x3de, +0x39,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x39,0x39,0x3e4,0x3e4,0x39,0x39,0x3e4, +0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x39,0x3e4,0x3e4, +0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x39,0x3e4,0x39,0x39,0x39,0x3e4,0x3e4,0x3e4,0x3e4,0x39,0x39, +0x3d2,0xcd2,0x3cf,0x3de,0x3de,0x3cf,0x3cf,0x3cf,0x3cf,0x39,0x39,0x3de,0x3de,0x39,0x39,0x3e1, +0x3e1,0x3d5,0xdc5,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3cf,0x39,0x39,0x39,0x39, +0x3e7,0x3e7,0x39,0x3e7,0x3e4,0x3e4,0x3cf,0x3cf,0x39,0x39,0x960,0x960,0x960,0x960,0x960,0x960, +0x960,0x960,0x960,0x960,0x3e4,0x3e4,0x3db,0x3db,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3db,0x3d8,0x114c, +0x3f,0x3c,0x39,0x39,0x42,0xcd5,0x3ea,0xcd8,0x42,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x42, +0x42,0x42,0x42,0x3f6,0x3f6,0x42,0x42,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x42,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x42,0x3f6,0x3f9, +0x42,0x3f6,0x3f9,0x42,0x3f6,0x3f6,0x42,0x42,0x3ed,0x42,0x3f3,0x3f3,0x3f3,0x3ea,0x3ea,0x42, +0x42,0x42,0x42,0x3ea,0x3ea,0x42,0x42,0x3ea,0x3ea,0x3f0,0x42,0x42,0x42,0xfa8,0x42,0x42, +0x42,0x42,0x42,0x42,0x42,0x3f9,0x3f9,0x3f9,0x3f6,0x42,0x3f9,0x42,0x42,0x42,0x42,0x42, +0x42,0x42,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x3ea,0x3ea,0x3f6,0x3f6, +0x3f6,0xfa8,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x45,0x3fc,0x3fc,0x405, +0x45,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0xce1,0x408,0x45,0x408,0x408,0x408,0x45,0x408, +0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x45,0x408,0x408, +0x408,0x408,0x408,0x408,0x408,0x45,0x408,0x408,0x45,0x408,0x408,0x408,0x408,0x408,0x45,0x45, +0x3ff,0x408,0x405,0x405,0x405,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x45,0x3fc,0x3fc,0x405,0x45,0x405, +0x405,0x402,0x45,0x45,0x408,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, +0x45,0x45,0x45,0x45,0x408,0xce1,0xcdb,0xcdb,0x45,0x45,0x966,0x966,0x966,0x966,0x966,0x966, +0x966,0x966,0x966,0x966,0x140a,0xcde,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x170d,0x48,0x48, +0x48,0x48,0x48,0x48,0x4b,0x40b,0x41a,0x41a,0x4b,0x420,0x420,0x420,0x420,0x420,0x420,0x420, +0x420,0x4b,0x4b,0x420,0x420,0x4b,0x4b,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420, +0x420,0x420,0x420,0x420,0x420,0x4b,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x4b,0x420,0x420, +0x4b,0xce4,0x420,0x420,0x420,0x420,0x4b,0x4b,0x40e,0x420,0x40b,0x40b,0x41a,0x40b,0x40b,0x40b, +0xfab,0x4b,0x4b,0x41a,0x41d,0x4b,0x4b,0x41d,0x41d,0x411,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, +0x4b,0x4b,0x40b,0x40b,0x4b,0x4b,0x4b,0x4b,0x423,0x423,0x4b,0x420,0x420,0x420,0xfab,0xfab, +0x4b,0x4b,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x414,0xce4,0x1323,0x1323, +0x1323,0x1323,0x1323,0x1323,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4e,0x4e,0x426,0x432, +0x4e,0x432,0x432,0x432,0x432,0x432,0x432,0x4e,0x4e,0x4e,0x432,0x432,0x432,0x4e,0x432,0x432, +0x435,0x432,0x4e,0x4e,0x4e,0x432,0x432,0x4e,0x432,0x4e,0x432,0x432,0x4e,0x4e,0x4e,0x432, +0x432,0x4e,0x4e,0x4e,0x432,0x432,0x96f,0x4e,0x4e,0x4e,0x432,0x432,0x432,0x432,0x432,0x432, +0x432,0x96f,0xdc8,0x432,0x432,0x432,0x4e,0x4e,0x4e,0x4e,0x426,0x42c,0x426,0x42c,0x42c,0x4e, +0x4e,0x4e,0x42c,0x42c,0x42c,0x4e,0x42f,0x42f,0x42f,0x429,0x4e,0x4e,0xfae,0x4e,0x4e,0x4e, +0x4e,0x4e,0x4e,0x426,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xee2,0x96c, +0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x969,0x969,0x969,0xce7,0xce7,0xce7,0xce7,0xce7, +0xce7,0xcea,0xce7,0x4e,0x4e,0x4e,0x4e,0x4e,0x14f7,0x444,0x444,0x444,0x51,0x447,0x447,0x447, +0x447,0x447,0x447,0x447,0x447,0x51,0x447,0x447,0x447,0x51,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x51,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x447,0x447,0x447,0x14fa,0x447,0x447,0x447,0x447,0x447,0x51,0x51,0x51,0xfb7,0x438,0x438, +0x438,0x444,0x444,0x444,0x444,0x51,0x438,0x438,0x43b,0x51,0x438,0x438,0x438,0x43e,0x51,0x51, +0x51,0x51,0x51,0x51,0x51,0x438,0x438,0x51,0xfb7,0xfb7,0x1710,0x51,0x51,0x51,0x51,0x51, +0x447,0x447,0xfb1,0xfb1,0x51,0x51,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441, +0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xfb4,0xfb4,0xfb4,0xfb4,0xfb4,0xfb4,0xfb4,0xfb4, +0x17cd,0x14fd,0x453,0x453,0x54,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x54,0x459,0x459, +0x459,0x54,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, +0x459,0x54,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x54,0x459,0x459,0x459, +0x459,0x459,0x54,0x54,0xced,0xcf0,0x453,0x44a,0x456,0x453,0x44a,0x453,0x453,0x54,0x44a,0x456, +0x456,0x54,0x456,0x456,0x44a,0x44d,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x44a,0x44a,0x54, +0x54,0x54,0x54,0x54,0x54,0x54,0x459,0x54,0x459,0x459,0xefa,0xefa,0x54,0x54,0x450,0x450, +0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x54,0xefd,0xefd,0x54,0x54,0x54,0x54,0x54, +0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5a,0x1500,0x465,0x465,0x57,0x46b,0x46b,0x46b, +0x46b,0x46b,0x46b,0x46b,0x46b,0x57,0x46b,0x46b,0x46b,0x57,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b, +0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x465,0x45c,0x45c,0x45c,0xfba,0x57,0x465,0x465, +0x465,0x57,0x468,0x468,0x468,0x45f,0x1329,0x17d0,0x57,0x57,0x57,0x57,0x17d3,0x17d3,0x17d3,0x45c, +0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x1713,0x46b,0x46b,0xfba,0xfba,0x57,0x57,0x462,0x462, +0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0x17d0,0x17d0, +0x17d0,0xfc0,0xfc3,0xfc3,0xfc3,0xfc3,0xfc3,0xfc3,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b, +0x46b,0x1326,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b, +0x46b,0x46b,0x1326,0x5a,0x5a,0xfc3,0x45c,0x465,0x5d,0x5d,0xa38,0xa38,0x5d,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0x5d, +0x5d,0x5d,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0x5d,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0x5d,0xa3e,0x5d,0x5d,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0x5d,0x5d,0x5d,0xa32,0x5d, +0x5d,0x5d,0x5d,0xa2f,0xa38,0xa38,0xa2f,0xa2f,0xa2f,0x5d,0xa2f,0x5d,0xa38,0xa38,0xa3b,0xa38, +0xa3b,0xa3b,0xa3b,0xa2f,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x1503,0x1503,0x1503,0x1503,0x1503,0x1503, +0x1503,0x1503,0x1503,0x1503,0x5d,0x5d,0xa38,0xa38,0xa35,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, +0x5d,0x5d,0x5d,0x5d,0x60,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, +0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, +0x486,0x486,0x486,0x486,0x486,0x471,0x486,0x483,0x471,0x471,0x471,0x471,0x471,0x471,0x477,0x60, +0x60,0x60,0x60,0x46e,0x48c,0x48c,0x48c,0x48c,0x48c,0x486,0x489,0x474,0x474,0x474,0x474,0x474, +0x474,0x471,0x474,0x47a,0x480,0x480,0x480,0x480,0x480,0x480,0x480,0x480,0x480,0x480,0x47d,0x47d, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, +0x63,0x49b,0x49b,0x63,0x49b,0x63,0x63,0x49b,0x49b,0x63,0x49b,0x63,0x63,0x49b,0x63,0x63, +0x63,0x63,0x63,0x63,0x49b,0x49b,0x49b,0x49b,0x63,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b, +0x63,0x49b,0x49b,0x49b,0x63,0x49b,0x63,0x49b,0x63,0x63,0x49b,0x49b,0x63,0x49b,0x49b,0x49b, +0x49b,0x48f,0x49b,0x498,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x63,0x48f,0x48f,0x49b,0x63,0x63, +0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x63,0x4a1,0x63,0x492,0x492,0x492,0x492,0x492,0x48f,0x63,0x63, +0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x63,0x63,0x49e,0x49e,0x140d,0x140d, +0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63, +0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63, +0x9b1,0x9b1,0x9b1,0x9b4,0x9b1,0x9b1,0x9b1,0x9b1,0x66,0x9b1,0x9b1,0x9b1,0x9b1,0x9b4,0x9b1,0x9b1, +0x9b1,0x9b1,0x9b4,0x9b1,0x9b1,0x9b1,0x9b1,0x9b4,0x9b1,0x9b1,0x9b1,0x9b1,0x9b4,0x9b1,0x9b1,0x9b1, +0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b4,0xa4d,0xfcf,0xfcf,0x66,0x66,0x66, +0x66,0x97e,0x97e,0x981,0x97e,0x981,0x981,0x98a,0x981,0x98a,0x97e,0x97e,0x97e,0x97e,0x97e,0x9ab, +0x97e,0x981,0x984,0x984,0x987,0x990,0x984,0x984,0x9b1,0x9b1,0x9b1,0x9b1,0x1332,0x132c,0x132c,0x132c, +0x97e,0x97e,0x97e,0x981,0x97e,0x97e,0xa41,0x97e,0x66,0x97e,0x97e,0x97e,0x97e,0x981,0x97e,0x97e, +0x97e,0x97e,0x981,0x97e,0x97e,0x97e,0x97e,0x981,0x97e,0x97e,0x97e,0x97e,0x981,0x97e,0xa41,0xa41, +0xa41,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0xa41,0x981,0xa41,0xa41,0xa41,0x66,0xa4a,0xa4a, +0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa44,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0x66,0xfc6,0xa47, +0xdcb,0xdcb,0xfc9,0xfcc,0xfc6,0x114f,0x114f,0x114f,0x114f,0x132f,0x132f,0x66,0x66,0x66,0x66,0x66, +0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, +0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x4aa,0x4aa,0x4aa,0x4aa, +0x4aa,0x4aa,0x69,0x1413,0x69,0x69,0x69,0x69,0x69,0x1413,0x69,0x69,0x4a7,0x4a7,0x4a7,0x4a7, +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xdda,0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0x6c,0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xdda,0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xdda, +0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0x6c, +0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xdda, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xdda,0xa77,0x6c,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xdda,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0x6c,0x6c,0x1335,0x1335,0xdd4, +0xdd7,0xa71,0xa7a,0xa6e,0xa6e,0xa6e,0xa6e,0xa7a,0xa7a,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74, +0xa74,0xa74,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0x6c,0x6c,0x6c, +0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d, +0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x1719,0x6f,0x6f,0x1716,0x1716,0x1716,0x1716,0x1716,0x1716,0x6f,0x6f, +0xa8f,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92, +0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa8c,0xa89,0x72,0x72,0x72, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa95,0xa95,0xa95,0xa98,0xa98, +0xa98,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x75,0x75,0x75,0x75,0x75,0x75,0x75, +0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xa9b,0xab9,0xab9,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e, +0xa9e,0xa9e,0xaa1,0xa9e,0xab0,0xab0,0xab3,0xabc,0xaaa,0xaa7,0xab0,0xaad,0xabc,0xcf3,0x78,0x78, +0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0x78,0x78,0x78,0x78,0x78,0x78, +0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0x78,0x78,0x78,0x78,0x78,0x78, +0xacb,0xacb,0xb49,0xb4c,0xad1,0xb46,0xace,0xacb,0xad4,0xae3,0xad7,0xae6,0xae6,0xae6,0xac2,0x7b, +0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xac5,0xff0,0x7b,0x7b,0x7b,0x7b,0x7b, +0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x7e,0x7e,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x7e,0x7e, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x7e,0x4cb,0x7e,0x4cb,0x7e,0x4cb,0x7e,0x4cb, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x7e,0x7e, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x7e,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4c2,0x4c8,0x4c2, +0x4c2,0x4bf,0x4c8,0x4c8,0x4c8,0x7e,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4bf,0x4bf,0x4bf, +0x4c8,0x4c8,0x4c8,0x4c8,0x7e,0x7e,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x7e,0x4bf,0x4bf,0x4bf, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4bf,0x4bf,0x4bf, +0x7e,0x7e,0x4c8,0x4c8,0x4c8,0x7e,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4c5,0x4c2,0x7e, +0xbbe,0xbc1,0xbc1,0xbc1,0xff9,0x81,0x14e5,0x14e5,0x14e5,0x14e5,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4,0x4d4, +0x51f,0xbd3,0x84,0x84,0x6db,0x51f,0x51f,0x51f,0x51f,0x51f,0x525,0x537,0x525,0x531,0x52b,0x6de, +0x51c,0x6d8,0x6d8,0x6d8,0x6d8,0x51c,0x51c,0x51c,0x51c,0x51c,0x522,0x534,0x522,0x52e,0x528,0x84, +0xde3,0xde3,0xde3,0xde3,0xde3,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x84,0x84,0x84, +0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53a,0x540,0x756,0x53d,0x9ba,0x9db,0xaf5,0xaf5,0xaf5, +0xbd6,0xbd6,0xde6,0xde6,0xde6,0xde6,0x1167,0x116a,0x116a,0x133b,0x14df,0x1509,0x150c,0x150c,0x171c,0x87, +0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87, +0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x543,0x543,0x543, +0x543,0x546,0xaf8,0xaf8,0xbd9,0xbdf,0xbdf,0xbdc,0xbdc,0xbdc,0xbdc,0xde9,0xf00,0xf00,0xf00,0xf00, +0x113a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, +0x576,0x576,0x576,0xb01,0xf09,0xfff,0xfff,0xfff,0xfff,0x1296,0x171f,0x171f,0x8d,0x8d,0x8d,0x8d, +0x705,0x705,0x705,0x705,0x708,0x708,0x708,0x708,0x708,0x708,0x582,0x582,0x57f,0x57f,0x57f,0x57f, +0xf0f,0xf0f,0xf0f,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0x1170,0x13bc,0x13bc,0x13bc,0x13bc,0x133e,0x133e,0x133e, +0x13bf,0x1341,0x1341,0x13bf,0x150f,0x150f,0x150f,0x150f,0x1512,0x1512,0x1512,0x17d6,0x17d6,0x17d6,0x17d6,0x90, +0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0xb0a,0xb0a,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x96,0x96,0x96,0x96,0x96, +0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0x99,0xb25,0xb25,0xb25,0xb25,0xb28, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb28,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, +0xa2,0x83d,0x837,0x83d,0x837,0x83d,0x837,0x83d,0x837,0x83d,0x837,0x837,0x83a,0x837,0x83a,0x837, +0x83a,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837, +0x837,0x837,0x837,0x83d,0x837,0x83d,0x837,0x83d,0x837,0x837,0x837,0x837,0x837,0x837,0x83d,0x837, +0x837,0x837,0x837,0x837,0x83a,0xc81,0xc81,0xa2,0xa2,0x951,0x951,0x91b,0x91b,0x840,0x843,0xc7e, +0xa5,0xa5,0xa5,0xa5,0xa5,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x1128,0xa8,0xa5,0xab,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858, +0x858,0x858,0x858,0x858,0x858,0x858,0x858,0xab,0x924,0x924,0x927,0x927,0x927,0x927,0x927,0x927, +0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37, +0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37, +0x13cb,0x13cb,0x13cb,0xae,0xae,0xae,0xae,0xae,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0x861,0xd83,0xd83,0xb1,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0xb1,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb4,0xb4,0xb4,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xc8a,0xb43,0xb43,0xb43,0xc8a,0xb43,0xb7, +0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x9d5,0x9d5,0x9d5,0x9d5,0xba,0xba,0xba,0xba, +0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f, +0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0xbd, +0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4, +0xbd,0xbd,0xbd,0xbd,0xbd,0xb16,0x5f7,0x5fd,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x5fa,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0xbd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0xbd,0x5fd,0xbd,0x5fd,0x5fd,0xbd,0x5fd,0x5fd,0xbd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612, +0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x134a,0x134a,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, +0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x618,0x612,0x615,0x61b,0x618, +0x612,0x618,0x612,0x618,0x612,0x618,0x618,0x612,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, +0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x615,0x612,0x615,0x615,0x615,0x615,0x615,0x615, +0x612,0x615,0x612,0x612,0x615,0x615,0x612,0x612,0x612,0x612,0x612,0x615,0x612,0x612,0x615,0x612, +0x615,0x615,0x615,0x612,0x615,0x615,0x615,0x615,0xc0,0xc0,0x615,0x615,0x615,0x615,0x612,0x612, +0x615,0x612,0x612,0x612,0x612,0x615,0x612,0x612,0x612,0x612,0x612,0x615,0x615,0x615,0x612,0x612, +0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, +0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0x618,0x618,0x972,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x60f,0x60f,0xc15,0xd9b,0xc0,0xc0,0x879,0x88b,0x888,0x88b,0x888,0xc9f,0xc9f,0xd8f, +0xd8c,0x87c,0x87c,0x87c,0x87c,0x88e,0x88e,0x88e,0x8a6,0x8a9,0x8b8,0xc3,0x8ac,0x8af,0x8bb,0x8bb, +0x8a3,0x89a,0x894,0x89a,0x894,0x89a,0x894,0x897,0x897,0x8b2,0x8b2,0x8b5,0x8b2,0x8b2,0x8b2,0xc3, +0x8b2,0x8a0,0x89d,0x897,0xc3,0xc3,0xc3,0xc3,0x624,0x630,0x624,0xc18,0x624,0xc6,0x624,0x630, +0x624,0x630,0x624,0x630,0x624,0x630,0x624,0x630,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a, +0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62d,0x627,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62d, +0x627,0x62d,0x627,0x62d,0x627,0xc6,0xc6,0x621,0x777,0x77a,0x78f,0x792,0x771,0x77a,0x77a,0xcc, +0x759,0x75c,0x75c,0x75c,0x75c,0x759,0x759,0xcc,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, +0xc9,0xb19,0xb19,0xb19,0x9d8,0x753,0x633,0x633,0xcc,0x7a1,0x780,0x771,0x77a,0x777,0x771,0x783, +0x774,0x76e,0x771,0x78f,0x786,0x77d,0x79e,0x771,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b,0x79b, +0x79b,0x79b,0x78c,0x789,0x78f,0x78f,0x78f,0x7a1,0x762,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0xcc,0xcc,0xcc,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0xcc,0xcc,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0xcc,0xcc,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0xcc,0xcc,0x75f,0x75f,0x75f,0xcc,0xcc,0xcc,0xb61,0xb61,0xb61,0xb61,0xcf,0xcf,0xcf,0xcf, +0xcf,0xcf,0xcf,0xcf,0xcf,0xd2,0xd2,0xd2,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67, +0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xd5,0xd5,0xd5,0xd5,0xd5, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70, +0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xdb,0xdb,0x100b,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xde,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb94,0xb94,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb94,0xde,0xb94,0xb94, +0xde,0xde,0xb94,0xde,0xde,0xb94,0xb94,0xde,0xde,0xb94,0xb94,0xb94,0xb94,0xde,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91,0xb91,0xb91,0xde,0xb91,0xde,0xb91,0xb91,0xb91, +0xb91,0xd14,0xb91,0xb91,0xde,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb91,0xb91,0xb91,0xb91,0xb94,0xb94,0xde,0xb94,0xb94,0xb94,0xb94,0xde,0xde,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xde,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xde,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb94,0xb94,0xde,0xb94,0xb94,0xb94,0xb94,0xde, +0xb94,0xb94,0xb94,0xb94,0xb94,0xde,0xb94,0xde,0xde,0xde,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xde,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xe01,0xe01,0xde,0xde,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91,0xb91,0xb8b, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xf18,0xf15,0xde,0xde,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, +0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xe1,0xb9a,0xe1,0xe1, +0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1, +0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xc27,0xc27,0xc27,0xc27, +0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xe4,0xc27,0xc27,0xc27,0xc27,0xc21,0xc21, +0xc24,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xc30,0xc30,0xc30,0xc30, +0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc2a,0xc2a, +0xc2d,0xc93,0xc93,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xc36,0xc36,0xc36,0xc36, +0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc33,0xc33, +0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xc3c,0xc3c,0xc3c,0xc3c, +0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xed,0xc3c,0xc3c,0xc3c,0xed,0xc39,0xc39, +0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xd26,0xd26,0xd26,0xd26, +0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26, +0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0x1524,0x1524,0xf0,0xd17,0xd17,0xd17,0xd23, +0xd23,0xd23,0xd23,0xd17,0xd17,0xd23,0xd23,0xd23,0xf0,0xf0,0xf0,0xf0,0xd23,0xd23,0xd17,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd1a,0xd1a,0xd1a,0xf0,0xf0,0xf0,0xf0,0xd1d,0xf0,0xf0,0xf0, +0xd29,0xd29,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd2c,0xd2c,0xd2c,0xd2c, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xf3,0xf3, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0xf6,0xf6,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0xf6,0xf6, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0xf6,0xf6,0xf6,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0xf6,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0xf9,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6, +0x1728,0x1728,0x1728,0x1728,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6, +0xf6,0xf6,0xf6,0xf6,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xfc,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xfc,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xfc,0xd53,0xd53,0xfc,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xfc,0xfc, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xfc,0xfc, +0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, +0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xff,0xff,0xff,0xff,0xff, +0xd98,0xd98,0xd98,0x102,0x102,0x102,0x102,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92, +0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92, +0x102,0x102,0x102,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xd5c,0xd5c,0xd5c,0xd5c, +0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c, +0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0x105,0xd59,0xd65,0xd65,0xd65,0xd65, +0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65, +0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0x108,0x108,0xd62,0xd62,0xd62,0xd62, +0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0x108,0x108,0x108,0x108,0x108,0x108,0x1860,0x1860,0x1860,0x1860, +0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0xd68,0xd68,0xd68,0xd68, +0xd68,0xd68,0x10b,0x10b,0xd68,0x10b,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68, +0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0x10b,0xd68, +0xd68,0x10b,0x10b,0x10b,0xd68,0x10b,0x10b,0xd68,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b, +0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0x10e, +0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0x152a,0x152a,0x17d9,0x17d9,0x114,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107, +0x1107,0x1107,0x1107,0x1107,0x171,0x171,0x171,0x171,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e, +0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe25, +0xe25,0xe2b,0xe2b,0xe25,0x117,0x117,0xe28,0xe28,0x1137,0x1137,0x1137,0x1137,0x11a,0x11a,0x11a,0x11a, +0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90, +0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x152d, +0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x1530,0x120,0x120, +0x120,0x120,0x11d,0x17dc,0x1356,0x1179,0xf27,0xf27,0xe40,0xe3d,0xe40,0xe3d,0xe3d,0xe34,0xe34,0xe34, +0xe34,0xe34,0xe34,0x1182,0x117f,0x1182,0x117f,0x117c,0x117c,0x117c,0x141c,0x1419,0x123,0x123,0x123,0x123, +0x123,0xe3a,0xe37,0xe37,0xe37,0xe34,0xe3a,0xe37,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, +0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0x126, +0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0x126, +0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0x126,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0x126, +0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0x126,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49, +0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, +0xe46,0xe46,0x129,0x129,0x129,0x129,0x129,0x129,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0x12c,0x141f, +0x12c,0x12c,0x12c,0x12c,0x12c,0x141f,0x12c,0x12c,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6, +0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0x12f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0x12f,0xe64,0xe58,0xe58,0xe58,0x132,0xe58,0xe58,0x132, +0x132,0x132,0x132,0x132,0xe58,0xe58,0xe58,0xe58,0xe64,0xe64,0xe64,0xe64,0x132,0xe64,0xe64,0xe64, +0x132,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, +0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0x132,0x132,0x132,0x132,0xe55,0xe55,0xe55,0x132, +0x132,0x132,0x132,0xe5b,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0x132,0x132,0x132,0x132, +0x132,0x132,0x132,0x132,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe67,0xe67,0xe5e,0x132,0x132,0x132, +0x132,0x132,0x132,0x132,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0x1188,0x1188, +0x135,0x135,0x135,0x135,0xe73,0xe73,0xe73,0xe73,0xe73,0xe76,0xe76,0xe76,0xe73,0xe73,0xe76,0xe73, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0x135,0x135,0x135,0x135,0x135,0x135, +0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0x1185,0x135,0x135,0x135,0xe6d,0xe6d, +0xe7c,0xe7c,0xe7c,0xe7c,0x138,0x138,0x138,0x138,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, +0xe79,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, +0x1539,0x153f,0x153c,0x1884,0x17df,0x13e,0x13e,0x13e,0x13e,0x13e,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b, +0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b, +0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xea3,0xea3,0xea3,0xea0, +0xea0,0xe97,0xe97,0xea0,0xe9d,0xe9d,0xe9d,0xe9d,0x141,0x141,0x141,0x141,0x12f3,0x12f3,0x12f3,0x12f3, +0x12f3,0x12f3,0x12f6,0x12f6,0x12f9,0x12f6,0x198,0x198,0x198,0x198,0x198,0x198,0xea6,0xea6,0xea6,0xea6, +0xea6,0xea6,0x142b,0x142b,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0xea9,0x135c,0x144,0x144,0x144, +0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x1359,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xed6,0xec7,0xec1,0xed3, +0xed0,0xeca,0xeca,0xed9,0xec4,0xecd,0x147,0x147,0x147,0x147,0x147,0x147,0xf5a,0xf5a,0xf45,0xf5a, +0xf5d,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0x14d,0x14d,0x14d,0x14d,0xf54,0xf54,0xf54,0xf54, +0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf66,0xf66,0xf4b,0xf51,0xf66,0xf66,0xf4e,0xf4b,0xf4b,0xf4b, +0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48, +0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0x14d,0x14d,0x14d,0x1362,0x135f,0x1362,0x135f, +0x1362,0x135f,0x1362,0x135f,0x1362,0x135f,0x1431,0x154b,0x154b,0x154b,0x17e2,0x150,0x154b,0x154b,0x1731,0x1731, +0x1731,0x172b,0x1731,0x172b,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150, +0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x150, +0x150,0x150,0x150,0x150,0x150,0x150,0x150,0x1548,0x1434,0x1434,0x135f,0x1062,0x1062,0x1062,0x1062,0x1062, +0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75, +0xf75,0xf75,0xf75,0xf75,0xf72,0xf72,0xf78,0xf78,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153, +0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81, +0xf81,0xf81,0xf81,0xf81,0xf81,0xf81,0xf7b,0xf7b,0xf7b,0xf7b,0x1191,0x1191,0x156,0x156,0x156,0xf7e, +0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e, +0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x1734,0x159,0x159,0x159,0x159,0x159,0x159, +0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159, +0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0xf8a,0xf8a,0xf8a,0x1554, +0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x1554,0x15c,0xf87,0xf87,0xf87,0xf87, +0x1551,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0xf8d,0xf8d,0xf8d,0xf8d, +0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0x15f,0x15f, +0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x1089,0x1089,0x1089,0x1089, +0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077, +0x1086,0x1086,0x107d,0x107a,0x162,0x162,0x162,0x108c,0x108c,0x1080,0x1080,0x1080,0x1083,0x1083,0x1083,0x1083, +0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x162,0x162,0x162,0x1089,0x1089,0x1089,0x108f,0x108f,0x108f,0x108f, +0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x10a4,0x10a4,0x10a4,0x10a4, +0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a7,0x10a7,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165, +0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x10ce,0x10ce,0x10ce,0x10ce, +0x10c8,0x17e5,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x10d4,0x10d4,0x10cb,0x10cb,0x10cb,0x10cb, +0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x168,0x168,0x168,0x168,0x168,0x168,0x10f2,0x10f2,0x10f2,0x10f2, +0x10f2,0x10f2,0x10f2,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10ec,0x10ef, +0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x16b,0x10e9,0x1101,0x1101,0x1101,0x1101, +0x1101,0x1101,0x1101,0x1101,0x1101,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10fe,0x10fe,0x10f5,0x10f5,0x10fe, +0x10fe,0x10f5,0x10f5,0x16e,0x16e,0x16e,0x16e,0x16e,0x16e,0x16e,0x16e,0x16e,0x1101,0x1101,0x1101,0x10f5, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x10f5,0x10fe,0x16e,0x16e,0x10fb,0x10fb,0x10fb,0x10fb, +0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x16e,0x16e,0x10f8,0x1104,0x1104,0x1104,0x1560,0x171,0x171,0x171, +0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171, +0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110d,0x174,0x174,0x1110,0x1110,0x1110,0x1110, +0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110, +0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x177,0x177,0x177,0x1113,0x1113,0x1113,0x1113, +0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x17a,0x17a,0x17a, +0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x1119,0x1119,0x1119,0x1119, +0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119, +0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x17d,0x17d,0x17d,0x17d,0x17d,0x1116,0x111c,0x111c,0x111c,0x111c, +0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x180,0x180,0x180,0x180,0x111f,0x111f,0x111f,0x111f, +0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f, +0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1197,0x1197,0x1197,0x1197, +0x11a0,0x1197,0x1197,0x1197,0x11a0,0x1197,0x1197,0x1197,0x1197,0x1194,0x186,0x186,0x119d,0x119d,0x119d,0x119d, +0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x186,0x11a3,0x11a3,0x11a3,0x11a3, +0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3, +0x11a3,0x11a3,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x11be,0x11be,0x11be,0x11be, +0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be, +0x11be,0x11bb,0x11a6,0x11bb,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x18c,0x11af,0x11b8,0x11a6,0x11b8, +0x11b8,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11a6, +0x11a6,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x18c,0x18c,0x11a9,0x11b5,0x11b5,0x11b5,0x11b5, +0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x11b5,0x11b5,0x11b5,0x11b5, +0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x11b2,0x11b2,0x11b2,0x11b2, +0x11b2,0x11b2,0x11b2,0x11c1,0x11c4,0x11c4,0x11c4,0x11c4,0x11b2,0x11b2,0x18c,0x18c,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15a8,0x210,0x1308,0x12e7,0x1302,0x1302, +0x1302,0x1302,0x1302,0x1302,0x1302,0x12ea,0x12ea,0x12ea,0x12ea,0x1302,0x12ea,0x12ea,0x12ea,0x12ea,0x12f0,0x14d6, +0x14dc,0x14d9,0x14d3,0x192,0x1701,0x1701,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x11d9,0x11d9,0x11d9,0x11d9, +0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d0,0x11d0,0x11d3,0x11dc, +0x11d6,0x11d6,0x11d6,0x11dc,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x11df,0x11df,0x11df,0x11df, +0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x130e,0x11e5,0x1311, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e2,0x11e2,0x11e2,0x11e5,0x173a,0x173d,0x19b,0x19b,0x12d5,0x12d5,0x12d5,0x12d5, +0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5, +0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x19e,0x19e,0x19e,0x11fa,0x11ee,0x11ee,0x11ee, +0x11ee,0x11ee,0x11ee,0x11f1,0x1200,0x1200,0x11ee,0x11ee,0x11ee,0x11ee,0x1a1,0x12fc,0x11f4,0x11f4,0x11f4,0x11f4, +0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x1a1,0x1a1,0x1a1,0x1a1,0x11ee,0x11ee,0x121e,0x1212,0x121e,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x121b,0x121b,0x1221,0x1215,0x1218,0x1236,0x1236,0x1236,0x1230, +0x1230,0x1227,0x1230,0x1230,0x1227,0x1230,0x1230,0x1239,0x1233,0x122a,0x1a7,0x1a7,0x122d,0x122d,0x122d,0x122d, +0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x123f,0x123f,0x123f,0x123f, +0x123f,0x123f,0x123f,0x1aa,0x1aa,0x1aa,0x1aa,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c, +0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c, +0x123c,0x123c,0x123c,0x123c,0x1aa,0x1aa,0x1aa,0x1aa,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, +0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1ad,0x1245, +0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, +0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1b0,0x1b0, +0x1b0,0x1251,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, +0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1b3,0x1b3, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263, +0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6, +0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269, +0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269, +0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1bc,0x1287,0x1287,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2, +0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b1,0x12b1,0x12b1,0x156c,0x156c,0x1c5,0x1c5,0x1c5,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b4,0x12b4,0x12b4,0x1293,0x1c5, +0x13b6,0x12bd,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x12bd,0x13b6,0x12bd, +0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x1443,0x1443,0x1c5,0x1c5,0x1c5,0x1c5, +0x13b9,0x13b9,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x12ba,0x13b3,0x12ba,0x12ba,0x13b3,0x13b9,0x12c0, +0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1c5,0x1c5,0x1c5, +0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, +0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, +0x1c5,0x1c5,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b, +0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x12e1,0x13d4,0x13d1,0x1c8, +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x12db,0x12db,0x12db,0x12db, +0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12de,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db, +0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12db,0x12de,0x12db,0x12db,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d1, +0x13d4,0x13d4,0x13d4,0x1866,0x1c8,0x1c8,0x1c8,0x1c8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8, +0x12d8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1401,0x1401,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1374,0x1374,0x1374,0x1374, +0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374, +0x1374,0x1374,0x1374,0x1374,0x1374,0x136e,0x136e,0x136e,0x1cb,0x1cb,0x1371,0x1cb,0x1386,0x1386,0x1386,0x1386, +0x1386,0x1386,0x1377,0x1380,0x137a,0x137a,0x1380,0x1380,0x1380,0x137a,0x1380,0x137a,0x137a,0x137a,0x1383,0x1383, +0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x137d,0x137d,0x137d,0x137d,0x1d1,0x1389,0x1389,0x1389, +0x1389,0x1389,0x1389,0x1d1,0x1d1,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1d1,0x1d1,0x1389,0x1389,0x1389, +0x1389,0x1389,0x1389,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1389,0x1389,0x1389,0x1389, +0x1389,0x1389,0x1389,0x1d1,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1d1,0x1608,0x1608,0x1608,0x1608, +0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138f,0x13a1,0x13a1,0x1395,0x1395,0x1395,0x1395,0x1395,0x1d4,0x1d4,0x1d4,0x1d4,0x1392,0x1392, +0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1398,0x1398, +0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, +0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x156f,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x13da,0x13d7,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, 0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, -0x170a,0x156f,0x1575,0x16b6,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x1dd,0x157e, -0x157e,0x1dd,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, -0x157e,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x157e,0x157e,0x1dd,0x157e,0x157e,0x157e, -0x157e,0x157e,0x1dd,0x1dd,0x16b3,0x157e,0x156f,0x1575,0x156f,0x1575,0x1575,0x1575,0x1575,0x1dd,0x1dd,0x1575, -0x1575,0x1dd,0x1dd,0x1578,0x1578,0x157b,0x1dd,0x1dd,0x170d,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x156f, -0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1581,0x157e,0x157e,0x157e,0x157e,0x1575,0x1575,0x1dd,0x1dd,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd,0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd, -0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, -0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1e0,0x1596,0x1596,0x1596,0x1596,0x1596, -0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,0x1584,0x1584,0x1584,0x1590,0x1590, -0x1584,0x1593,0x1587,0x1584,0x1599,0x1599,0x158d,0x1599,0x1599,0x158a,0x17a0,0x1e0,0x15a8,0x15a8,0x15a8,0x159c, -0x159c,0x159c,0x159c,0x159c,0x159c,0x159f,0x15a2,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1710,0x1710,0x1710,0x1710, -0x15b4,0x15b1,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15c6,0x15c6,0x15c6,0x15c6, -0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15bd, -0x15c0,0x15c3,0x15c6,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15c9,0x15c9,0x1ef,0x1ef,0x1ef,0x1ef,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15d2,0x15d2,0x15d2,0x15d2, -0x15d2,0x15d2,0x15cf,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15de,0x15de,0x15de,0x15de, -0x15de,0x1f2,0x1f2,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15d8,0x15d8,0x15d8,0x15d8, -0x15d8,0x15d8,0x15d8,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x15e1,0x15f3,0x15f3,0x15e7, -0x15f0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15ea,0x15ea,0x15ea,0x15ea, -0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x1f8,0x1605,0x1605,0x1605,0x1605, -0x1605,0x15ff,0x1608,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1602,0x1602,0x1602,0x1602, -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1605,0x1605,0x1605,0x1605,0x1605,0x1fb,0x160e,0x160e,0x160e,0x160e, -0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, -0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1fe,0x161a,0x161a,0x161a,0x161a, -0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a, -0x161a,0x161a,0x1617,0x1617,0x1617,0x1617,0x1617,0x201,0x201,0x201,0x201,0x201,0x1632,0x1632,0x1635,0x1635, -0x1638,0x1629,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x162f,0x162f,0x162f,0x162f, -0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x204,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x204,0x1632, -0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x204,0x204,0x204,0x204,0x204,0x1632,0x1632,0x1632,0x1641,0x1641,0x1641,0x1641, -0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, -0x1641,0x1641,0x1641,0x1641,0x1641,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x164a,0x164a,0x164a,0x164a, -0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x20a,0x20a, -0x20a,0x20a,0x20a,0x20a,0x20a,0x1647,0x1647,0x1647,0x1647,0x20a,0x20a,0x20a,0x1665,0x1665,0x1665,0x1665, -0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x164d,0x165f,0x165f,0x164d,0x164d, -0x164d,0x164d,0x210,0x210,0x165f,0x165f,0x1662,0x1662,0x164d,0x164d,0x165f,0x1653,0x1650,0x1656,0x1668,0x1668, -0x1659,0x1659,0x165c,0x165c,0x165c,0x1668,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1716,0x1716,0x1716,0x1716,0x1713,0x1713,0x210,0x210,0x210,0x210,0x210,0x210, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1dd,0x1dd,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1572,0x1dd,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13dd,0x1dd,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1572,0x1572,0x1572,0x1572, +0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, +0x1572,0x1572,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x13fb,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x1587,0x1587,0x1587,0x1587,0x1587,0x158a,0x16f8,0x158a,0x158a,0x158a,0x17c1,0x186f,0x186f,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x158a,0x158a,0x158a,0x158a, +0x158a,0x158a,0x1587,0x1587,0x1587,0x158a,0x1587,0x16f5,0x16f5,0x1e0,0x1e0,0x1e0,0x158a,0x1587,0x1587,0x158a, +0x186f,0x186f,0x186f,0x1e3,0x1e3,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x13aa,0x13aa,0x13aa,0x13aa, +0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa, +0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x144f,0x1590,0x144f,0x144f, +0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1746, +0x1746,0x1e9,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x1455,0x1455,0x1455,0x1455, +0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455, +0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1ec, +0x1455,0x1ec,0x1ec,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec, +0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1455,0x1ec, +0x1ec,0x1ec,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1ec, +0x1455,0x1ec,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1455,0x1ec, +0x1455,0x1ec,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec, +0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455, +0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455, +0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1455,0x1455,0x1455, +0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455, +0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1452,0x1452,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x1458, +0x1458,0x1458,0x1458,0x1458,0x1467,0x1458,0x145b,0x145b,0x1458,0x1458,0x1458,0x145e,0x145e,0x1ef,0x1464,0x1464, +0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1461,0x146d,0x146d,0x146d,0x1ef,0x1ef,0x1ef,0x1ef, +0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x1479,0x1479,0x1479,0x1479,0x1479,0x1479,0x1479,0x1479, +0x1479,0x1479,0x1479,0x1476,0x1470,0x1470,0x1476,0x1476,0x147f,0x147f,0x1479,0x147c,0x147c,0x1476,0x1473,0x1f2, +0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482, +0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482, +0x1f5,0x1f5,0x1f5,0x1f5,0x1749,0x1749,0x1482,0x1482,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749, +0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1f5,0x1f5,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749, +0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x148e,0x148e,0x148e,0x148e,0x148e,0x1f8,0x1f8,0x1f8, +0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x148e,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, +0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, +0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8, +0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1488,0x1488,0x1488,0x1488,0x1491, +0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x14a3,0x14a6,0x14a9,0x14a9, +0x14a6,0x14ac,0x14ac,0x1497,0x149a,0x174f,0x174c,0x174c,0x174c,0x1596,0x1fb,0x1fb,0x149d,0x149d,0x149d,0x149d, +0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x1593,0x1755,0x1758,0x1752,0x175b,0x175b,0x14b2,0x14b2,0x14b2,0x14b2, +0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x14af,0x14af,0x14af,0x14af, +0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x14b5,0x14b5,0x14b5,0x14b5, +0x14b5,0x14b5,0x14b5,0x14b5,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x1305,0x1302,0x1305,0x12ed, +0x1302,0x1302,0x1302,0x1308,0x1302,0x1308,0x130b,0x1302,0x1308,0x1308,0x1302,0x1302,0x14c7,0x14c7,0x14c7,0x14c7, +0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14b8,0x14c1,0x14b8,0x14c1,0x14c1,0x14b8,0x14b8,0x14b8,0x14b8, +0x14b8,0x14b8,0x14c4,0x14bb,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x159c,0x159c,0x159c,0x159c, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x207,0x207,0x1599,0x1599,0x1599,0x1599, +0x1599,0x159f,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x1704,0x16fb,0x16fb,0x16fb, +0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb, +0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x20d,0x20d,0x20d,0x20d,0x210,0x210,0x210,0x210, 0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x213,0x166b,0x166b,0x166b, -0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b, -0x166b,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x166e,0x166e,0x166e,0x166e, -0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e, -0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216, -0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, -0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x1671,0x1680,0x1677,0x1674,0x1686,0x1686,0x167a,0x1686, -0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d, -0x167d,0x167d,0x219,0x219,0x219,0x219,0x219,0x219,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, -0x168c,0x168c,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x21c,0x21c,0x21c,0x21c,0x21c, -0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x1692,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, -0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, -0x172b,0x172b,0x21f,0x21f,0x21f,0x171c,0x171c,0x171c,0x1728,0x1728,0x171c,0x171c,0x171c,0x171c,0x1728,0x171c, -0x171c,0x171c,0x171c,0x171f,0x21f,0x21f,0x21f,0x21f,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725, -0x1725,0x1725,0x1722,0x1722,0x172e,0x172e,0x172e,0x1722,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x222, -0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, -0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, -0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743, -0x1743,0x1743,0x1743,0x228,0x1743,0x1743,0x228,0x228,0x228,0x228,0x228,0x1740,0x1740,0x1740,0x1740,0x1740, -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746,0x22b,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1749,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, -0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, -0x1752,0x1752,0x1752,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e, -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, -0x174f,0x174f,0x174f,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x174c,0x174c,0x174c,0x174c,0x174c,0x174c, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1776,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x231, -0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1824,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x1824,0x231,0x231,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1821,0x181e,0x1824,0x1824,0x1824,0x231, -0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x181e,0x1821,0x1821,0x1821,0x1821,0x1821,0x231,0x231,0x231,0x231, -0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x1773,0x1773,0x1773,0x1773,0x1773,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, -0x1821,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x1773,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x175b,0x175e,0x175b,0x175b,0x1758,0x234,0x234,0x234,0x234, -0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1755,0x1755,0x1755,0x1755,0x1755, -0x17b2,0x17b2,0x17b2,0x17b2,0x17a9,0x17a9,0x17a9,0x17a3,0x17a6,0x17a6,0x17a6,0x237,0x237,0x237,0x237,0x237, -0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x237,0x237,0x237,0x237,0x17ac,0x17ac, -0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x23a,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, -0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, -0x17cd,0x17cd,0x17cd,0x17ca,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x23a,0x17b8,0x17b8,0x17b8,0x17b8, -0x17b8,0x17b8,0x17ca,0x17bb,0x17cd,0x17d0,0x17d0,0x17c4,0x17c1,0x17c1,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, -0x23a,0x23a,0x23a,0x23a,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17be,0x17be, -0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x23a,0x23a,0x23a, -0x17dc,0x17df,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, -0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, -0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, -0x1827,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, -0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, -0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, -0x246,0x246,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9, -0x246,0x17e2,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x246, -0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8, -0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249, -0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x1800,0x1800,0x17f1,0x17eb,0x17eb,0x1800,0x17ee,0x1803, -0x1803,0x1803,0x1803,0x1806,0x1806,0x17fa,0x17f7,0x17f4,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd, -0x17fd,0x17fd,0x24c,0x17fa,0x24c,0x17f4,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, -0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, -0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, -0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x24f,0x24f,0x24f,0x24f, -0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809, -0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x24f,0x24f,0x24f,0x24f, -0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x252,0x252,0x252, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, -0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, -0x182d,0x182d,0x182d,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255, -0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, -0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, -0x1770,0x1770,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, -0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, -0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x921,0x921, -0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, -0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b, -0x10d4,0x10d4,0x10d4,0x10d4,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1473,0x1761,0x1761,0x1761, -0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, -0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, -0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, -0xc39,0xc39,0xc39,0x1278,0x1278,0x1278,0x261,0x261,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, -0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, -0xe67,0xe67,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x15b7,0x15b7,0x15b7,0x15b7, +0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x213,0x213,0x213,0x213,0x213,0x15b7,0x15b7,0x15b7,0x15b7, +0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x213,0x213,0x213,0x213,0x213,0x213,0x213, +0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x213,0x213,0x15b4,0x15ae,0x15b1,0x15ba, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219, +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219, +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x175e,0x15c3,0x15c9,0x170a,0x21c,0x15d2,0x15d2,0x15d2, +0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x21c,0x21c,0x15d2,0x15d2,0x21c,0x21c,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2, +0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x21c,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2, +0x15d2,0x21c,0x15d2,0x15d2,0x21c,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x21c,0x21c,0x1707,0x15d2,0x15c3,0x15c9, +0x15c3,0x15c9,0x15c9,0x15c9,0x15c9,0x21c,0x21c,0x15c9,0x15c9,0x21c,0x21c,0x15cc,0x15cc,0x15cf,0x21c,0x21c, +0x1761,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x15c3,0x21c,0x21c,0x21c,0x21c,0x21c,0x15d5,0x15d2,0x15d2, +0x15d2,0x15d2,0x15c9,0x15c9,0x21c,0x21c,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x21c,0x21c,0x21c, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, +0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea, +0x15ea,0x15ea,0x21f,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea, +0x15e4,0x15e4,0x15e4,0x15d8,0x15d8,0x15d8,0x15e4,0x15e4,0x15d8,0x15e7,0x15db,0x15d8,0x15ed,0x15ed,0x15e1,0x15ed, +0x15ed,0x15de,0x17f4,0x21f,0x15fc,0x15fc,0x15fc,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f3,0x15f6,0x222, +0x222,0x222,0x222,0x222,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x222,0x222, +0x222,0x222,0x222,0x222,0x1764,0x1764,0x1764,0x1764,0x1608,0x1605,0x225,0x225,0x225,0x225,0x225,0x225, +0x225,0x225,0x225,0x225,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e, +0x178e,0x178e,0x178e,0x178e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x1611,0x1614,0x1617,0x161a,0x22b,0x22b,0x22b,0x22b,0x22b, +0x22b,0x22b,0x22b,0x22b,0x1629,0x1629,0x1629,0x1629,0x1629,0x161d,0x161d,0x22e,0x22e,0x22e,0x22e,0x1620, +0x1620,0x1620,0x1620,0x1620,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1623,0x22e,0x22e,0x22e,0x22e,0x22e, +0x22e,0x22e,0x22e,0x22e,0x1632,0x1632,0x1632,0x1632,0x1632,0x231,0x231,0x162f,0x162f,0x162f,0x162f,0x162f, +0x162f,0x162f,0x162f,0x162f,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x231,0x231,0x231,0x231,0x231, +0x231,0x231,0x231,0x231,0x1635,0x1647,0x1647,0x163b,0x1644,0x234,0x234,0x234,0x234,0x234,0x234,0x234, +0x234,0x234,0x234,0x234,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x234,0x234, +0x234,0x234,0x234,0x234,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, +0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, +0x164d,0x164d,0x164d,0x237,0x1659,0x1659,0x1659,0x1659,0x1659,0x1653,0x165c,0x1659,0x1659,0x1659,0x1659,0x1659, +0x1659,0x1659,0x1659,0x1659,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1659,0x1659, +0x1659,0x1659,0x1659,0x23a,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662, +0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662, +0x1662,0x1662,0x1662,0x23d,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166b,0x166b,0x166b,0x166b,0x166b,0x240, +0x240,0x240,0x240,0x240,0x1686,0x1686,0x1689,0x1689,0x168c,0x167d,0x243,0x243,0x243,0x243,0x243,0x243, +0x243,0x243,0x243,0x243,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x243,0x167d, +0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x243,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x243,0x243,0x243,0x243, +0x243,0x1686,0x1686,0x1686,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x246,0x246,0x246, +0x246,0x246,0x246,0x246,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e, +0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x169b,0x169b,0x169b, +0x169b,0x249,0x249,0x249,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16a1,0x16b3,0x16b3,0x16a1,0x16a1,0x16a1,0x16a1,0x24f,0x24f,0x16b3,0x16b3,0x16b6,0x16b6, +0x16a1,0x16a1,0x16b3,0x16a7,0x16a4,0x16aa,0x16bc,0x16bc,0x16ad,0x16ad,0x16b0,0x16b0,0x16b0,0x16bc,0x176d,0x176d, +0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176a,0x176a,0x176a,0x176a, +0x1767,0x1767,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f, +0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f, +0x24f,0x24f,0x24f,0x24f,0x252,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf, +0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x252,0x252,0x252,0x252,0x252,0x252,0x252, +0x252,0x252,0x252,0x252,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2, +0x255,0x255,0x255,0x255,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x255,0x255,0x255,0x255,0x255,0x255,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x255,0x255, +0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255, +0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255, +0x16c5,0x16d4,0x16cb,0x16c8,0x16da,0x16da,0x16ce,0x16da,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x258,0x258,0x258,0x258,0x258,0x258, +0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16e0,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, +0x16dd,0x16dd,0x16dd,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x16e6, +0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f, +0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x25e,0x25e,0x25e,0x1770,0x1770,0x1770, +0x177c,0x177c,0x1770,0x1770,0x1770,0x1770,0x177c,0x1770,0x1770,0x1770,0x1770,0x1773,0x25e,0x25e,0x25e,0x25e, +0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1776,0x1776,0x1782,0x1782,0x1782,0x1776, +0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, 0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, -0x261,0x261,0x261,0x261,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, -0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x264,0x264,0x264,0x264,0x264, -0x264,0x264,0x264,0x264,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0x267,0x267,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, -0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, -0x26a,0x26a,0x26a,0x26a,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a7,0x26d,0x26d,0x10ec,0x369,0x369,0x375,0xc7b,0x378,0x378,0x378,0x378,0x378,0x378,0x378, -0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378, -0x378,0x378,0x378,0x378,0x375,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x375,0x375,0x375, -0x375,0x36f,0x10ef,0x12c6,0x378,0x8ee,0x8f1,0x36c,0x36c,0x10ec,0x12c3,0x12c3,0x37b,0x37b,0x37b,0x37b, -0x37b,0x37b,0x37b,0x37b,0x378,0x378,0x369,0x369,0x879,0x87c,0x909,0x909,0x909,0x909,0x909,0x909, -0x909,0x909,0x909,0x909,0x372,0xf4e,0xf4b,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x149a,0x10f2,0x10f2,0xea0, -0xea0,0xd6e,0xea0,0xea0,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378, -0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378,0x37b,0x378,0x378,0x378,0x378,0x378,0x12c3,0x12c6, -0x36c,0x378,0x375,0x375,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, -0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xb67,0xb67,0xd7a,0xd7a,0x87f, -0xd7d,0x13b9,0x13b9,0x13b9,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, -0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, -0x459,0x459,0x459,0x459,0x45f,0x45f,0x45f,0x1107,0x1107,0x1107,0x1107,0x1107,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x1104,0x1104, -0x1104,0x1104,0x1104,0x1104,0x462,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, -0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, -0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x465,0x465,0x465,0x465,0x468,0x963, -0xf9c,0xf9c,0xf9f,0xf9c,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, -0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0xf9f,0xf9c, -0xf9f,0xf9c,0xf9f,0xf9c,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, -0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, -0x47a,0x47a,0x47a,0x47a,0x657,0x657,0x65a,0x495,0x666,0x663,0x663,0x660,0x4bf,0x4bf,0x47d,0x47d, -0x47d,0x47d,0x47d,0xa95,0x669,0x4a1,0x681,0x684,0x4b6,0x669,0x4a4,0x4a4,0x495,0x4b0,0x4b0,0x657, -0x4bc,0x4b9,0x65d,0x48f,0x486,0x486,0x489,0x489,0x489,0x489,0x489,0x48c,0x489,0x489,0x489,0x480, -0x4c8,0x4c5,0x4c2,0x4c2,0x675,0x4aa,0x4a7,0x672,0x66f,0x66c,0x67e,0x498,0x67b,0x67b,0x4ad,0x4b0, -0x678,0x678,0x4ad,0x4b0,0x492,0x495,0x495,0x495,0x4b3,0x49e,0x49b,0xb7c,0xa9b,0xa9e,0xa98,0xa98, -0xa98,0xa98,0xb73,0xb73,0xb73,0xb73,0xb79,0xca8,0xca5,0xd89,0xd8c,0xb76,0xd8c,0xd8c,0xd8c,0xd8c, -0xd89,0xd8c,0xd8c,0xb70,0x4fb,0x4fb,0x513,0x693,0x4f8,0x690,0x4fb,0x510,0x4f8,0x693,0x50a,0x513, -0x513,0x513,0x50a,0x50a,0x513,0x513,0x513,0x69c,0x4f8,0x513,0x696,0x4f8,0x507,0x513,0x513,0x513, -0x513,0x513,0x4f8,0x4f8,0x4fe,0x690,0x699,0x4f8,0x513,0x4f8,0x69f,0x4f8,0x513,0x501,0x519,0x6a2, -0x513,0x513,0x504,0x50a,0x513,0x513,0x516,0x513,0x50a,0x50d,0x50d,0x50d,0x50d,0xaaa,0xaa7,0xcab, -0xd9b,0xb97,0xb9a,0xb9a,0xb94,0xb91,0xb91,0xb91,0xb91,0xb9a,0xb97,0xb97,0xb97,0xb97,0xb8e,0xb91, -0xd98,0xeac,0xeaf,0xfa5,0x1116,0x1116,0x1116,0x6a8,0x6a5,0x51c,0x51f,0x51f,0x51f,0x51f,0x51f,0x6a5, -0x6a8,0x6a8,0x6a5,0x51f,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, -0x528,0x528,0x528,0x528,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x522,0x522, -0x522,0x522,0x522,0x522,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x534,0x534,0x52e, -0x52e,0x52e,0x531,0x52b,0x52e,0x52e,0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x6b1,0x6b1,0x52b,0x52b, -0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x531,0x531,0x531, -0x52e,0x52e,0x6b4,0x52e,0x6b4,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x52e,0x52b,0x52b, -0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x52b,0x6b1,0x52b,0x52b,0x52b,0xab0,0xab0,0xab0,0xab0,0xab0, -0xab0,0xab0,0xab0,0xab0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, -0x6ba,0x537,0x6ba,0x6ba,0x53a,0x537,0x537,0x6ba,0x6ba,0x53a,0x537,0x6ba,0x53a,0x537,0x537,0x6ba, -0x537,0x6ba,0x546,0x543,0x537,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x6ba,0x6ba,0x6ba, -0x6ba,0x537,0x537,0x6ba,0x53a,0x6ba,0x53a,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6c0,0x53d,0x6ba,0x53d, -0x53d,0x537,0x537,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x6ba,0x537,0x537, -0x537,0x53a,0x537,0x537,0x53a,0x537,0x537,0x53a,0x6ba,0x53a,0x537,0x537,0x6ba,0x537,0x537,0x537, -0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, -0x6bd,0x6ba,0x53a,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x6ba,0x6ba,0x537,0x53a,0x6bd,0x6bd, -0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, -0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, -0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537, -0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x537,0x537,0x537, -0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537, -0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, -0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a, -0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x540,0x537,0x537,0xba0,0xba0, -0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0x549,0xab3,0x549,0x549, -0x549,0x549,0x549,0x549,0x555,0x552,0x555,0x552,0x549,0x549,0x549,0x549,0x549,0x549,0x6c3,0x549, -0x549,0x549,0x549,0x549,0x549,0x549,0x7c5,0x7c5,0x549,0x549,0x549,0x549,0x54f,0x54f,0x549,0x549, -0x549,0x549,0x549,0x549,0x54c,0x7cb,0x7c8,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, -0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, -0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xab3,0xba6,0xab3,0xab3,0xab3, -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, -0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x55e,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c, -0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xd20, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d5,0x6d5,0x6d5,0x6d5,0x561,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x564,0x564,0x564,0x564, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8, -0x567,0x567,0x6d8,0x6d8,0x6d8,0x6d8,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, -0x6de,0x6de,0x56a,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x56d,0x56d,0x56a,0x56a,0x570,0x570, -0x570,0x570,0x6de,0x6de,0x570,0x570,0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x570,0x570, -0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x6db,0x56a,0x570,0x6de,0x56a,0x56a,0x6db,0x6de, -0x6de,0x6de,0x570,0x570,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a, -0x56a,0x56a,0x6de,0x6db,0x6de,0x6db,0x56a,0x570,0x570,0x570,0x570,0x570,0x570,0x56a,0x56a,0x6db, -0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xc24,0xc24,0xbac, -0x57c,0x57c,0x57c,0x57c,0x579,0x6f0,0x6f0,0x573,0x573,0x6e4,0x573,0x573,0x573,0x573,0x6ea,0x6e4, -0x573,0x579,0x573,0x573,0xd29,0xd29,0xbb2,0xbb2,0xda7,0xabc,0x576,0x576,0x6e7,0x57f,0x6e7,0x576, -0x579,0x573,0x579,0x579,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x579, -0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x579,0x57c,0x57c,0x576,0x573,0x573,0x573,0x573, -0x6f3,0x573,0x6f3,0x573,0x573,0x573,0x573,0x573,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce, -0x7ce,0x7ce,0x7ce,0x7ce,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573, -0x6f3,0x6f0,0x582,0x6f3,0x6e4,0x6ea,0x579,0x6e4,0x6ed,0x6e4,0x6e4,0x573,0x6e4,0x6f0,0x582,0x6f0, -0xabc,0xabc,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb8,0xbb5,0xbb5,0xda1,0xe5e, -0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, -0x585,0x585,0x585,0x585,0x588,0x136e,0x136e,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, -0x14be,0x58e,0x59a,0x58e,0x58e,0x136e,0x588,0x588,0x59a,0x59a,0x1371,0x1371,0x5a0,0x5a0,0x588,0x594, -0x588,0x588,0x594,0x588,0x594,0x588,0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x594,0x588,0x588, -0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x594, -0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x6f9,0x588,0x588,0x588,0x588,0x588,0x588, -0x594,0x588,0x588,0x594,0x588,0x588,0x588,0x588,0x136e,0x588,0x136e,0x588,0x588,0x588,0x588,0x136e, -0x136e,0x136e,0x588,0x1272,0x588,0x588,0x588,0x591,0x591,0x591,0x591,0x12f0,0x12f0,0x588,0x58b,0x597, -0x59d,0x588,0x588,0x588,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb, -0xbbe,0xbbb,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x588,0x594,0x588,0x588, -0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588, -0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x5c1,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, -0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5c1,0x5c7,0x5b8,0x5bb,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, -0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, -0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, -0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, -0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1, -0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3, -0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca, -0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, -0x5c4,0x5c7,0x5c1,0x5c4,0x5c7,0x5c1,0x5c4,0x5ca,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4, -0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, -0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c4, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1, -0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, -0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, -0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5ca,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5ca,0x5ca,0x5ca,0x5ca, -0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca, -0x5ca,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5cd,0x5cd,0x5cd,0x5cd, -0xfb1,0xfb1,0xfb1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x16ce,0x16ce,0x82b,0x831,0x831,0x83d, -0x83d,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x5dc,0x5dc,0x5d6,0x5dc, -0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc, -0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc, -0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, -0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, -0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9, -0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c6,0x6c6,0x6c6,0x6c6, -0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6, -0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6cf,0x6cf, -0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6d2,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf, -0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc, -0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, -0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, -0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0xc12,0x891,0x88b,0x888,0x88e,0x885,0x711,0x714, -0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x897,0x711,0x711,0x711,0x711,0x711,0x711,0x711, -0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, -0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x894,0x894,0x717,0x8a6,0x8a9,0x8af, -0x7d1,0x7dd,0x8c4,0x7da,0x89d,0x89a,0x89d,0x89a,0x8a3,0x8a0,0x8a3,0x8a0,0x89d,0x89a,0x7d7,0x8af, -0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x8b2,0x8bb,0x8b8,0x8b8,0x71d,0x759,0x759,0x759, -0x759,0x759,0x759,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753, -0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x720,0x73b,0x71a,0x741,0x744,0x73e,0x756,0x756,0x756, -0x756,0x756,0x756,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, -0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x720,0x73b,0x71a,0x73b,0xc15,0x7bf,0x7bf,0x7bf,0x7bf, -0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, -0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x126c,0x126c, -0x126c,0x126c,0x126c,0x7c2,0x7d7,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x8fa,0x8fa, -0x8fa,0x8fa,0x7e0,0x7e0,0x8b5,0x8c1,0x8c1,0x8c1,0x8c1,0x8be,0x7d4,0x8ac,0xae0,0xae0,0xae0,0xc27, -0xc45,0xc42,0xafb,0x882,0x7e6,0x7e3,0x7e6,0x7e9,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3, -0x7e6,0x7e6,0x7e3,0x7e3,0xc48,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2, -0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2, -0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f8,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2, -0x7f5,0x7f5,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f8,0x7f8,0x7f5,0x7f5,0x7f5,0x7f5,0x8ca, -0x8cd,0x7fb,0x7fe,0xc30,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, -0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, -0x804,0x804,0x804,0x804,0x807,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, -0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, -0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810, -0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0xd32,0xd32,0xe61,0x80a, -0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0xd2c,0xd2c,0xd2c,0xd2c, +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797, +0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x267,0x1797,0x1797,0x267,0x267, +0x267,0x267,0x267,0x1794,0x1794,0x1794,0x1794,0x1794,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x26a, +0x179a,0x26a,0x179a,0x179a,0x179a,0x179a,0x26a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x26a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179d,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff, +0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, +0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x26d,0x26d,0x26d,0x26d,0x26d, +0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3, +0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x26d,0x26d,0x26d,0x26d,0x26d, +0x26d,0x26d,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, +0x270,0x270,0x270,0x270,0x273,0x273,0x273,0x273,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7, +0x17ca,0x1878,0x1878,0x1878,0x1878,0x1875,0x1878,0x279,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1878,0x1875, +0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x1878,0x279,0x279,0x1878,0x1878,0x1878,0x1878,0x1878, +0x1878,0x1878,0x1875,0x1872,0x1875,0x1878,0x1878,0x273,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1872,0x1875, +0x1875,0x1875,0x1875,0x1875,0x276,0x273,0x273,0x273,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875, +0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, +0x276,0x276,0x276,0x276,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x1875,0x1875,0x1875, +0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x276,0x276,0x276,0x276,0x276,0x276, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x17c7,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x276,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x276,0x276, +0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x17ac,0x17ac,0x17ac,0x17ac,0x17a9,0x17ac,0x17ac,0x17af,0x17b2,0x17af,0x17af,0x17ac,0x27c,0x27c,0x27c,0x27c, +0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, +0x1806,0x1806,0x1806,0x1806,0x17fd,0x17fd,0x17fd,0x17f7,0x17fa,0x17fa,0x17fa,0x27f,0x27f,0x27f,0x27f,0x27f, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x27f,0x27f,0x27f,0x27f,0x1800,0x1800, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x282,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, +0x1821,0x1821,0x1821,0x181e,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x282,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x181e,0x180f,0x1821,0x1824,0x1824,0x1818,0x1815,0x1815,0x282,0x282,0x282,0x282,0x282,0x282, +0x282,0x282,0x282,0x282,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x1812,0x1812, +0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x282,0x282,0x282, +0x1830,0x1833,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x288,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x288,0x288,0x182a,0x182a,0x182a,0x182a,0x182a, +0x187b,0x28e,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b, +0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b, +0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839, +0x291,0x291,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x291,0x1836,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x1836,0x182d,0x182d,0x1836,0x182d,0x182d,0x291, +0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c, +0x183c,0x183c,0x183c,0x183c,0x183c,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294, +0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x1854,0x1854,0x1845,0x183f,0x183f,0x1854,0x1842,0x1857, +0x1857,0x1857,0x1857,0x185a,0x185a,0x184e,0x184b,0x1848,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851, +0x1851,0x1851,0x297,0x184e,0x297,0x1848,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297, +0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297, +0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860, +0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x29a,0x29a,0x29a,0x29a, +0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d, +0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x29a,0x29a,0x29a,0x29a, +0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881, +0x1881,0x1881,0x1881,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3, +0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3, +0x2a6,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3, +0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3, +0x2a3,0x2a3,0x975,0x975,0x17c4,0x17c4,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1, +0x2c1,0x2c1,0x2c1,0x2c1,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6, +0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6, +0x2a6,0x2a6,0x2a6,0x2a6,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9, +0x2a9,0x2a9,0x2a9,0x2a9,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2ac, +0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, +0x2ac,0x2ac,0x2ac,0x2ac,0x112b,0x112b,0x112b,0x112b,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc, +0x14ca,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af, +0x2af,0x2af,0x2af,0x2af,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0x12cf, +0x12cf,0x12cf,0x2b2,0x2b2,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe, +0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0x2b2,0x2b2, +0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2, +0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2, +0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, +0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5, +0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0, +0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0x2b8,0x2b8, +0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4, +0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x2be,0x2be, +0x1143,0x3ba,0x3ba,0x3c6,0xccf,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9, +0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9, +0x3c6,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3c6,0x3c6,0x3c6,0x3c6,0x3c0,0x1146,0x131d, +0x3c9,0x942,0x945,0x3bd,0x3bd,0x1143,0x131a,0x131a,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc, +0x3c9,0x3c9,0x3ba,0x3ba,0x8cd,0x8d0,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x3c3,0xfa5,0xfa2,0x1320,0x1320,0x1320,0x1320,0x1320,0x14f1,0x1149,0x1149,0xef7,0xef7,0xdc2,0xef7,0xef7, +0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3cc,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9, +0x3c9,0x3cc,0x3c9,0x3c9,0x3cc,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x131a,0x131d,0x3bd,0x3c9,0x3c6,0x3c6, +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7, +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0xbbb,0xbbb,0xdce,0xdce,0x8d3,0xdd1,0x1410,0x1410,0x1410, +0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa, +0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa, +0x4b0,0x4b0,0x4b0,0x115e,0x115e,0x115e,0x115e,0x115e,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad, +0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad, +0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b, +0x4b3,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0, +0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0, +0x4b0,0x4b0,0x4b0,0x4b0,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6, +0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6, +0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b9,0x9b7,0xff3,0xff3,0xff6,0xff3, +0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6, +0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0x4bc,0x4b6,0xff6,0xff3,0xff6,0xff3,0xff6,0xff3, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb, +0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4c8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb, +0x6a8,0x6a8,0x6ab,0x4e6,0x6b7,0x6b4,0x6b4,0x6b1,0x510,0x510,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0xae9, +0x6ba,0x4f2,0x6d2,0x6d5,0x507,0x6ba,0x4f5,0x4f5,0x4e6,0x501,0x501,0x6a8,0x50d,0x50a,0x6ae,0x4e0, +0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4dd,0x4da,0x4da,0x4da,0x4d1,0x519,0x516,0x513,0x513, +0x6c6,0x4fb,0x4f8,0x6c3,0x6c0,0x6bd,0x6cf,0x4e9,0x6cc,0x6cc,0x4fe,0x501,0x6c9,0x6c9,0x4fe,0x501, +0x4e3,0x4e6,0x4e6,0x4e6,0x504,0x4ef,0x4ec,0xbd0,0xaef,0xaf2,0xaec,0xaec,0xaec,0xaec,0xbc7,0xbc7, +0xbc7,0xbc7,0xbcd,0xcfc,0xcf9,0xddd,0xde0,0xbca,0xde0,0xde0,0xde0,0xde0,0xddd,0xde0,0xde0,0xbc4, +0x54c,0x54c,0x564,0x6e4,0x549,0x6e1,0x54c,0x561,0x549,0x6e4,0x55b,0x564,0x564,0x564,0x55b,0x55b, +0x564,0x564,0x564,0x6ed,0x549,0x564,0x6e7,0x549,0x558,0x564,0x564,0x564,0x564,0x564,0x549,0x549, +0x54f,0x6e1,0x6ea,0x549,0x564,0x549,0x6f0,0x549,0x564,0x552,0x56a,0x6f3,0x564,0x564,0x555,0x55b, +0x564,0x564,0x567,0x564,0x55b,0x55e,0x55e,0x55e,0x55e,0xafe,0xafb,0xcff,0xdef,0xbeb,0xbee,0xbee, +0xbe8,0xbe5,0xbe5,0xbe5,0xbe5,0xbee,0xbeb,0xbeb,0xbeb,0xbeb,0xbe2,0xbe5,0xdec,0xf03,0xf06,0xffc, +0x116d,0x116d,0x116d,0x6f9,0x6f6,0x56d,0x570,0x570,0x570,0x570,0x570,0x6f6,0x6f9,0x6f9,0x6f6,0x570, +0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x579,0x579,0x579,0x579, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x573,0x573,0x573,0x573,0x573,0x573, +0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57c,0x585,0x585,0x57f,0x57f,0x57f,0x582,0x57c, +0x57f,0x57f,0x57c,0x57c,0x57c,0x57c,0x57f,0x57f,0x702,0x702,0x57c,0x57c,0x57f,0x57f,0x57f,0x57f, +0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x582,0x582,0x582,0x57f,0x57f,0x705,0x57f, +0x705,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57c,0x57f,0x57c,0x57c,0x57c,0x57c,0x57c,0x57c, +0x57f,0x57f,0x57c,0x702,0x57c,0x57c,0x57c,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0x70b,0x588,0x70b,0x70b, +0x58b,0x588,0x588,0x70b,0x70b,0x58b,0x588,0x70b,0x58b,0x588,0x588,0x70b,0x588,0x70b,0x597,0x594, +0x588,0x70b,0x588,0x588,0x588,0x588,0x70b,0x588,0x588,0x70b,0x70b,0x70b,0x70b,0x588,0x588,0x70b, +0x58b,0x70b,0x58b,0x70b,0x70b,0x70b,0x70b,0x70b,0x711,0x58e,0x70b,0x58e,0x58e,0x588,0x588,0x588, +0x70b,0x70b,0x70b,0x70b,0x588,0x588,0x588,0x588,0x70b,0x70b,0x588,0x588,0x588,0x58b,0x588,0x588, +0x58b,0x588,0x588,0x58b,0x70b,0x58b,0x588,0x588,0x70b,0x588,0x588,0x588,0x588,0x588,0x70b,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x70e,0x70b,0x58b,0x588, +0x70b,0x70b,0x70b,0x70b,0x588,0x588,0x70b,0x70b,0x588,0x58b,0x70e,0x70e,0x58b,0x58b,0x588,0x588, +0x58b,0x58b,0x588,0x588,0x58b,0x58b,0x588,0x588,0x588,0x588,0x588,0x588,0x58b,0x58b,0x70b,0x70b, +0x58b,0x58b,0x70b,0x70b,0x58b,0x58b,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x588,0x70b,0x588,0x588,0x588,0x70b,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x70b,0x588,0x588, +0x588,0x588,0x588,0x588,0x58b,0x58b,0x58b,0x58b,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x70b,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x58b,0x58b,0x58b,0x58b,0x588,0x588,0x588,0x588, +0x588,0x588,0x58b,0x58b,0x58b,0x58b,0x588,0x591,0x588,0x588,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, +0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0x59a,0xb07,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a, +0x5a6,0x5a3,0x5a6,0x5a3,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x714,0x59a,0x59a,0x59a,0x59a,0x59a, +0x59a,0x59a,0x819,0x819,0x59a,0x59a,0x59a,0x59a,0x5a0,0x5a0,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a, +0x59d,0x81f,0x81c,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a, +0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a, +0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0xb07,0xbfa,0xb07,0xb07,0xb07,0x5a9,0x5a9,0x5a9,0x5a9, +0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, +0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x71d,0x71d,0x71d,0x71d, +0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x5af,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60, +0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xd74,0x726,0x726,0x726,0x726, +0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726, +0x5b2,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x726,0x726,0x726,0x726, +0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x5b5,0x5b5,0x5b5,0x5b5,0x726,0x726,0x726,0x726, +0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x729,0x729,0x729,0x729, +0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x5b8,0x5b8,0x729,0x729, +0x729,0x729,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0x72f,0x72f,0x5bb,0x72c, +0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x5be,0x5be,0x5bb,0x5bb,0x5c1,0x5c1,0x5c1,0x5c1,0x72f,0x72f, +0x5c1,0x5c1,0x732,0x72f,0x5bb,0x5bb,0x5bb,0x5bb,0x72f,0x72f,0x5c1,0x5c1,0x732,0x72f,0x5bb,0x5bb, +0x5bb,0x5bb,0x72f,0x72f,0x72c,0x5bb,0x5c1,0x72f,0x5bb,0x5bb,0x72c,0x72f,0x72f,0x72f,0x5c1,0x5c1, +0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x72f,0x72c, +0x72f,0x72c,0x5bb,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5bb,0x5bb,0x72c,0xb0d,0xb0d,0xb0d,0xb0d, +0xb0d,0xb0d,0xb0d,0xb0d,0xc00,0xc00,0xc00,0xc03,0xc03,0xc78,0xc78,0xc00,0x5cd,0x5cd,0x5cd,0x5cd, +0x5ca,0x741,0x741,0x5c4,0x5c4,0x735,0x5c4,0x5c4,0x5c4,0x5c4,0x73b,0x735,0x5c4,0x5ca,0x5c4,0x5c4, +0xd7d,0xd7d,0xc06,0xc06,0xdfe,0xb10,0x5c7,0x5c7,0x738,0x5d0,0x738,0x5c7,0x5ca,0x5c4,0x5ca,0x5ca, +0x5c4,0x5c4,0x5ca,0x5c4,0x5c4,0x5c4,0x5ca,0x5c4,0x5c4,0x5c4,0x5ca,0x5ca,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5ca,0x5cd,0x5cd,0x5c7,0x5c4,0x5c4,0x5c4,0x5c4,0x747,0x5c4,0x747,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x744,0x741,0x5d3,0x744, +0x735,0x73b,0x5ca,0x735,0x73e,0x735,0x735,0x5c4,0x735,0x741,0x5d3,0x741,0xb10,0xb10,0xc09,0xc09, +0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc0c,0xc09,0xc09,0xdf5,0xeb5,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d9,0x13c5,0x13c5,0x13c5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x1515,0x5df,0x5eb,0x5df, +0x5df,0x13c5,0x5d9,0x5d9,0x5ee,0x5eb,0x13c8,0x13c8,0x5f1,0x5f1,0x5d9,0x5e5,0x5d9,0x5d9,0x5e5,0x5d9, +0x5e5,0x5d9,0x5e5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5e5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9, +0x13c5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5e5,0x5e5,0x5d9,0x5d9,0x5d9, +0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x74d,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5e5,0x5d9,0x5d9,0x5e5, +0x5d9,0x5d9,0x5d9,0x5d9,0x13c5,0x5d9,0x13c5,0x5d9,0x5d9,0x5d9,0x5d9,0x13c5,0x13c5,0x13c5,0x5d9,0x12c9, +0x5d9,0x5d9,0x5d9,0x5e2,0x5e2,0x5e2,0x5e2,0x1347,0x1347,0x5d9,0x5dc,0x5e8,0x5ee,0x5d9,0x5d9,0x5d9, +0xc12,0xc0f,0xc12,0xc0f,0xc12,0xc0f,0xc12,0xc0f,0xc12,0xc0f,0xc12,0xc0f,0xc12,0xc0f,0x74a,0x74a, +0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x5d9,0x5e5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9, +0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x13c5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9, +0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x13c5,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x612,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x61b,0x61b,0x61b,0x61b, +0x61b,0x61b,0x61b,0x61b,0x612,0x618,0x609,0x60c,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x618,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612, +0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612, +0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612, +0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612, +0x615,0x61b,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612, +0x615,0x61b,0x618,0x612,0x618,0x612,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a, +0x134a,0x134a,0x134a,0x134a,0x618,0x612,0x618,0x612,0x618,0x612,0x615,0x61b,0x615,0x61b,0x618,0x612, +0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x615,0x618,0x612,0x615, +0x618,0x612,0x615,0x61b,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x615,0x615,0x615,0x615,0x615, +0x615,0x615,0x615,0x615,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x615,0x615,0x612,0x615,0x612,0x615,0x612,0x612,0x615,0x612,0x612,0x615, +0x612,0x615,0x612,0x612,0x615,0x612,0x615,0x615,0x612,0x612,0x612,0x615,0x612,0x612,0x612,0x612, +0x612,0x615,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612, +0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x615,0x615,0x612,0x612,0x615,0x612,0x615,0x612, +0x612,0x612,0x612,0x612,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615, +0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615, +0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x61b,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b, +0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x618,0x618,0x618, +0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61e,0x61e,0x61e,0x61e,0x1008,0x1008,0x1008,0x1518, +0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1722,0x1722,0x87f,0x885,0x885,0x891,0x891,0x882,0x879,0x882, +0x879,0x882,0x879,0x882,0x879,0x882,0x879,0x882,0x62d,0x62d,0x627,0x62d,0x627,0x62d,0x627,0x62d, +0x627,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62d,0x627,0x62a, +0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62d,0x627,0x62d,0x627,0x62d, +0x627,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a, +0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a,0x630,0x62d,0x627,0x62a, +0x630,0x62d,0x627,0x62a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a, +0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717, +0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717, +0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x720,0x720,0x720,0x720,0x720,0x720, +0x720,0x720,0x720,0x720,0x720,0x720,0x723,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720, +0x720,0x720,0x720,0x720,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d, +0x71d,0x71d,0x71d,0x71d,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726, +0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726, +0x726,0x726,0x726,0x726,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x750,0xc66,0x8e5,0x8df,0x8dc,0x8e2,0x8d9,0x765,0x768,0x768,0x768,0x768,0x768, +0x768,0x768,0x768,0x768,0x8eb,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765, +0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765, +0x765,0x765,0x765,0x765,0x765,0x765,0x8e8,0x8e8,0x76b,0x8fa,0x8fd,0x903,0x825,0x831,0x918,0x82e, +0x8f1,0x8ee,0x8f1,0x8ee,0x8f7,0x8f4,0x8f7,0x8f4,0x8f1,0x8ee,0x82b,0x903,0x8f1,0x8ee,0x8f1,0x8ee, +0x8f1,0x8ee,0x8f1,0x8ee,0x906,0x90f,0x90c,0x90c,0x771,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x774,0x78f,0x76e,0x795,0x798,0x792,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x774,0x78f,0x76e,0x78f,0xc69,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, 0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, -0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, -0x8df,0x816,0x816,0x816,0x816,0x816,0x816,0xd35,0xd35,0xd35,0xd35,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2, -0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, -0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, -0x816,0x816,0xd35,0xd35,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, -0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, -0x819,0x819,0x819,0x819,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x81c,0x81c,0x81c,0x81c, -0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c, -0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0xe64,0xe64, -0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, -0xe64,0xe64,0xe64,0xe64,0x10d4,0x10d4,0x10d4,0x10d4,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, -0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, -0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x822,0x81f,0x822,0x81f,0x822, -0x822,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x81f,0x822,0x81f,0x822, -0x822,0x81f,0x81f,0x822,0x822,0x822,0x81f,0x81f,0x81f,0x81f,0x1476,0x1476,0xc39,0xc39,0xc39,0xc39, -0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0x8d6,0x8d6,0x8d6,0x8d6, -0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, -0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x12a8,0x12a8,0x12a8,0x12a8, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0xd2c,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, -0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, -0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8dc, -0x8d9,0x8dc,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, -0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, -0xc33,0xc33,0xc33,0xc33,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, -0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, -0x8df,0x8df,0x8df,0xd35,0x95d,0x93f,0x93f,0x93f,0x93f,0x939,0x93f,0x93f,0x951,0x93f,0x93f,0x93c, -0x948,0x94e,0x94e,0x94e,0x94e,0x94e,0x951,0x939,0x945,0x939,0x939,0x939,0x930,0x930,0x939,0x939, -0x939,0x939,0x939,0x939,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x939,0x939, -0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x93c,0x930,0x939,0x930,0x939,0x930,0x94b,0x942, -0x94b,0x942,0x95a,0x95a,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, -0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, -0x969,0x969,0x969,0x969,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, -0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, -0x96c,0x96c,0x96c,0x96c,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, -0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, -0x96f,0x96f,0x96f,0x96f,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, -0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, -0x978,0x978,0x972,0x972,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x975,0x975,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, -0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, -0x978,0x978,0x978,0x978,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x97b,0x97b,0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, -0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, -0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, -0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0xa0e,0xa0e,0xf96,0xa0e, -0xa0e,0xa0e,0xa11,0xa0e,0xf96,0xa0e,0xa0e,0xf8d,0xa08,0x9fc,0x9fc,0x9fc,0x9fc,0xa0b,0x9fc,0xf7b, -0xf7b,0xf7b,0x9fc,0x9ff,0xa08,0xa02,0xf81,0xf90,0xf90,0xf7b,0xf7b,0xf96,0xb01,0xb01,0xb01,0xb01, -0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xa14,0xa14,0xa05,0xa05,0xa05,0xa05,0xa0e,0xa0e,0xa0e,0xa0e, -0xa0e,0xa0e,0xa0b,0xa0b,0x9fc,0x9fc,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xa0e,0xa0e,0xa0e,0xa0e, -0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e, -0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, -0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, -0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, -0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, -0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2c,0xa32,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0x110d, -0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110a,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, -0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, -0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa44,0xa44,0xa44,0xa44, -0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44, -0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa68,0xa68,0xa68,0xa6b, -0xa6b,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, -0xa50,0xa50,0xa65,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa65,0xa65,0xa68,0xa68,0xa68,0xa68, -0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, -0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa74,0xa74,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa8c,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xa89,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3, -0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xba6, -0xba6,0xba6,0xba6,0xba6,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0xad7,0xad7,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, -0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, -0xae6,0xae6,0xae6,0xae6,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaec,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaef,0xaef,0xc36,0xc36, -0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, -0xc36,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0x14c4,0xb19,0xb19,0xb19,0xb19, -0xb19,0xb19,0xcbd,0xcbd,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xcba,0xcba, -0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, -0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, -0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb22,0xb2e,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb31,0xb25,0xb25, -0xb25,0xb25,0xb25,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb34,0xb34,0xb34,0xb34,0xb34, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb2b,0xb2b,0xb34,0xb34,0xb34,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0xb40,0xb37,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x12c3,0x12c3,0x12c3,0x12c3,0x12c3,0x816, +0x82b,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x94e,0x94e,0x94e,0x94e,0x834,0x834, +0x909,0x915,0x915,0x915,0x915,0x912,0x828,0x900,0xb34,0xb34,0xb34,0xc7b,0xc99,0xc96,0xb4f,0x8d6, +0x83a,0x837,0x83a,0x83d,0x837,0x83a,0x837,0x83a,0x837,0x83a,0x837,0x837,0x837,0x837,0x837,0x837, +0x83a,0x83a,0x837,0x83a,0x83a,0x837,0x83a,0x83a,0x837,0x83a,0x83a,0x837,0x83a,0x83a,0x837,0x837, +0xc9c,0x84c,0x846,0x84c,0x846,0x84c,0x846,0x84c,0x846,0x84c,0x846,0x846,0x849,0x846,0x849,0x846, +0x849,0x846,0x849,0x846,0x849,0x846,0x849,0x846,0x849,0x846,0x849,0x846,0x849,0x846,0x849,0x846, +0x849,0x846,0x849,0x84c,0x846,0x849,0x846,0x849,0x846,0x849,0x846,0x846,0x846,0x846,0x846,0x846, +0x849,0x849,0x846,0x849,0x849,0x846,0x849,0x849,0x846,0x849,0x849,0x846,0x849,0x849,0x846,0x846, +0x846,0x846,0x846,0x84c,0x846,0x84c,0x846,0x84c,0x846,0x846,0x846,0x846,0x846,0x846,0x84c,0x846, +0x846,0x846,0x846,0x846,0x849,0x84c,0x84c,0x849,0x849,0x849,0x849,0x91e,0x921,0x84f,0x852,0xc84, +0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858, +0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858, +0x85b,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858, +0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x864,0x864,0x864,0x864, +0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864, +0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0xd86,0xd86,0xeb8,0x85e,0x92a,0x92a,0x92a,0x92a, +0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0xd80,0xd80,0xd80,0xd80,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x933,0x933,0x933,0x933, +0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0xd89,0xd89,0xd89,0xd89,0x936,0x936,0x936,0x936,0x936,0x86a,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0xd89,0xd89, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870, +0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870, +0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb, +0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb,0xebb, +0x112b,0x112b,0x112b,0x112b,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873, +0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873, +0x873,0x873,0x873,0x873,0x873,0x873,0x876,0x876,0x873,0x876,0x873,0x876,0x876,0x873,0x873,0x873, +0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x876,0x873,0x876,0x873,0x876,0x876,0x873,0x873,0x876, +0x876,0x876,0x873,0x873,0x873,0x873,0x14cd,0x14cd,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d, +0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a, +0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a, +0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x12ff,0x12ff,0x12ff,0x12ff,0x12a8,0x12a8,0x12a8,0x12a8, +0x12a8,0x12a8,0x12a8,0x12a8,0xd80,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, +0xc87,0xc87,0xc87,0xc87,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d, +0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x930,0x92d,0x930,0x92d,0x92d, +0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d, +0x92d,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, +0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933, +0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0x933,0xd89, +0x9b1,0x993,0x993,0x993,0x993,0x98d,0x993,0x993,0x9a5,0x993,0x993,0x990,0x99c,0x9a2,0x9a2,0x9a2, +0x9a2,0x9a2,0x9a5,0x98d,0x999,0x98d,0x98d,0x98d,0x984,0x984,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, +0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, +0x98d,0x98d,0x98d,0x98d,0x990,0x984,0x98d,0x984,0x98d,0x984,0x99f,0x996,0x99f,0x996,0x9ae,0x9ae, +0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd, +0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd, +0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, +0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, +0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, +0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9c6,0x9c6, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9c9,0x9c9, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, +0x9d2,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5, +0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d2,0x9d5,0x9d5,0x9d5, +0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5, +0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0xa62,0xa62,0xfed,0xa62,0xa62,0xa62,0xa65,0xa62, +0xfed,0xa62,0xa62,0xfe4,0xa5c,0xa50,0xa50,0xa50,0xa50,0xa5f,0xa50,0xfd2,0xfd2,0xfd2,0xa50,0xa53, +0xa5c,0xa56,0xfd8,0xfe7,0xfe7,0xfd2,0xfd2,0xfed,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, +0xb55,0xb55,0xa68,0xa68,0xa59,0xa59,0xa59,0xa59,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa5f,0xa5f, +0xa50,0xa50,0xfed,0xfed,0xfed,0xfed,0xfd2,0xfd2,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xdda, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xdda,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d, +0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d, +0xa7d,0xa7d,0xa7d,0xa7d,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83, +0xa83,0xa80,0xa86,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0x1164,0x1164,0x1164,0x1164,0x1164, +0x1164,0x1164,0x1164,0x1164,0x1161,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83, +0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83, +0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xabc,0xabc,0xabc,0xabf,0xabf,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xaa4,0xaa4,0xab9,0xa9b, +0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xab9,0xab9,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xadd,0xadd,0xadd,0xadd,0xadd,0xac8,0xac8,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xae0,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07, +0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xb07,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, 0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, 0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, 0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, -0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, 0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, -0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, -0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, -0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, -0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, -0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6, -0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba3,0xba6, -0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xcae, -0xcb1,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xeb8,0xeb8,0xeb8,0xeb8, -0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0xda4,0xe5b,0xda4,0xda4,0xda4,0xda4,0xda1,0xda4,0xda1,0xda4,0xda4,0xfab,0x1242,0x1242, -0xdad,0xdad,0xdad,0xdad,0xdad,0xdb3,0xdb0,0xeca,0xeca,0xeca,0xeca,0x13bf,0xfbd,0x13bf,0x12fc,0x12fc, -0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb, -0xbeb,0xbeb,0xc1b,0xc18,0xc1b,0xc18,0xc1b,0xc18,0x10ce,0x10cb,0xfc3,0xfc0,0xbee,0xbee,0xbee,0xbee, -0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbf1,0xbf1,0xbf1,0xbf1, -0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1, -0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4,0xbf4,0xbf1,0xbf1, -0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xc21,0xc1e,0xbfd, -0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd, -0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, -0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, -0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbfd,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, -0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, -0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbf7,0xbf7,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc06,0xc06,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc03,0xc00,0xc00,0xc00,0xc39,0xc39,0xc39,0xc39, -0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, -0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xcb7,0xd26,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xe5b,0xe5b,0xda1,0xda1,0xda1,0xda1,0xda4,0xda4,0xebb,0xfab, -0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0x126f,0x126f,0x1245,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xce1,0xce1,0xce1,0xce1,0xce1,0xcde,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3, -0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xcf0,0xcf0, -0xcf0,0xcf0,0xce4,0xce4,0xce4,0xce4,0xce4,0xcea,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9, -0xdb9,0xdb9,0xdb9,0xdb9,0xdb6,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xcf3,0xcf3,0xcf3,0xcf3, -0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, -0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xce7,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcf6,0xcf6,0xcf6,0xcf6, -0xcf6,0xcf9,0xcf9,0xcf9,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc, -0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0x10d7,0x10d7,0xfc6,0xfc6,0xfc6,0xcfc,0xcfc,0xcfc,0xcfc, -0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc, -0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xd02,0xd02,0xd02,0xd02, -0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, -0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd0b,0xd0b,0xd0b,0xd0b, -0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, -0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd17,0xd17,0xd17,0xd17, -0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, -0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd23,0xd23,0xd23,0xd23, -0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, -0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xdc2,0xdc2,0xdc2,0xdc2, -0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2, -0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc8,0xdc8,0xdc8,0xdc8, -0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, -0xdc8,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc8,0xdc8,0xdc8,0xdc8, -0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, -0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xe88,0xe88,0xdda,0xdda, -0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfcf,0xfcf,0xfcf,0xfcf, -0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xde9,0xde6,0xde9,0xde6, -0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6, -0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdfb,0xdfb,0xdfb,0xdfb, -0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, -0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xe13,0xe13,0xe13,0xe13, -0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, -0xe13,0xe13,0xe13,0xed3,0xed3,0xed3,0xed3,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xe1c,0xe1c,0xe1c,0xe1c, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe25,0xe25,0xe25,0xe25, -0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25, -0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe2e,0xe2e,0xe2e,0xe2e, -0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e, -0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe28,0xe2b,0xe2b,0xe2b,0xe2b, -0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b, -0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe37,0xe37,0xe37,0xe37, -0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34, -0xe34,0xe34,0xe31,0xe3a,0xfe1,0xfdb,0xfea,0xfd8,0xe37,0xe37,0xfd8,0xfd8,0xe4c,0xe4c,0xe3d,0xe4c, -0xe4c,0xe4c,0xe43,0xe4c,0xe4c,0xe4c,0xe4c,0xe3d,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, -0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4f,0xe4f,0xe4f,0xe4f, -0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, -0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe67,0xe67,0xe67,0xe67, -0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, -0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe85,0xe85,0xe85,0xe85, -0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0x10e0,0x10e0,0x10e0,0x10e0, -0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0xecd,0xecd,0xecd,0xecd, -0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9, -0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xeee,0xeee,0xeee,0xeee, -0xf00,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf09,0xf09,0xf0c,0xf09, -0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, -0xf09,0xf09,0xf09,0xf09,0xef1,0xf00,0xeee,0xeee,0xeee,0xeee,0xeee,0xf03,0xeee,0xf03,0xf00,0xf00, -0xf15,0xf12,0xf15,0xf15,0xf15,0xf12,0xf12,0xf15,0xf12,0xf15,0xf12,0xf15,0xf12,0xffc,0xffc,0xffc, -0x1137,0xff3,0xffc,0xff3,0xf12,0xf15,0xf12,0xf12,0xff3,0xff3,0xff3,0xff3,0xff6,0xff9,0x1137,0x1137, -0xf18,0xf18,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, -0x1005,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, -0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, -0xf2d,0xf2d,0xf2d,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, -0x14f7,0x14f7,0x14f7,0x14f7,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf7b,0xf96,0xf8d,0xf8a,0xf8a,0xf96,0xf96,0xf8d,0xf8d,0xf8a,0xf8a,0xf8a, -0xf8a,0xf8a,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xf7b,0xf7b,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96, -0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf8d,0xf90,0xf7b,0xf7b,0xf93,0xf93,0xf93,0xf93,0xf93, -0xf93,0xf7e,0xf96,0xf93,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0x1101,0x1101, -0x10fe,0x10fb,0xf84,0xf84,0xfae,0xfae,0xfae,0xfae,0x126f,0x126f,0x1245,0x1245,0x124b,0x1242,0x1242,0x1242, -0x1242,0x1245,0x136b,0x124b,0x1245,0x124b,0x1242,0x124b,0x126f,0x1242,0x1242,0x1242,0x1245,0x1245,0x1242,0x1242, -0x1245,0x1242,0x1242,0x1245,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9, -0xfc9,0x14d0,0x14d0,0x14d0,0x10d7,0xfc6,0xfc6,0xfc6,0xfc6,0x127b,0x1254,0x1254,0x1254,0x1254,0x14d0,0x14d0, -0x14d0,0x14d0,0x14d0,0x14d0,0xfe7,0xfe7,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfdb,0xfdb, -0xfdb,0xfdb,0xff0,0xfed,0xfdb,0x1134,0x13cb,0x13ce,0x13ce,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13d1,0x13d1, -0x14eb,0x14df,0x14df,0x14dc,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x1002,0xfff,0xfff,0x100e, -0x1005,0x130b,0x1308,0x16da,0x130b,0x1308,0x13da,0x13d7,0x14ee,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee, -0x14f4,0x14ee,0x14f4,0x14ee,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, -0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, -0x100e,0x1005,0x100e,0x1005,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x100e,0x1005,0x100e, -0x1005,0x100e,0x100e,0x1005,0x1011,0x1011,0x1017,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, -0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, -0x101d,0x101d,0x101d,0x101d,0x101d,0x1017,0x1011,0x1011,0x1011,0x1011,0x1017,0x1017,0x1011,0x1011,0x101a,0x13e3, -0x13e0,0x13e0,0x101d,0x101d,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x13e6,0x13e6, -0x13e6,0x13e6,0x13e6,0x13e6,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, -0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, -0x1032,0x1032,0x1032,0x1032,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b, -0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103e,0x103e,0x103e,0x1041, -0x103e,0x103e,0x1044,0x1044,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, -0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, -0x1047,0x1047,0x1047,0x1047,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1053,0x104a,0x1059,0x1056,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x1311,0x130e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, -0x106b,0x1065,0x1068,0x10e9,0x105c,0x105c,0x105c,0x1062,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, -0x105f,0x105f,0x1062,0x106e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, -0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, -0x106b,0x1065,0x106b,0x1065,0x1503,0x1500,0x1503,0x1500,0x1506,0x1506,0x16e3,0x13e9,0x1077,0x1077,0x107a,0x107a, -0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a, -0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x1077,0x1077,0x1077,0x1077, -0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1080,0x1080, -0x1080,0x1080,0x1080,0x1083,0x1083,0x1083,0x10dd,0x108c,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086, -0x1086,0x1086,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, -0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, -0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, -0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, -0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, -0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10c5,0x10c5,0x10c5,0x10c5,0x10da,0x10c5,0x10c5,0x10c5, -0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, -0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, -0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, -0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, -0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1140,0x1140, -0x1143,0x1143,0x1149,0x1140,0x1140,0x1140,0x1140,0x1140,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, -0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, -0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, -0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, -0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, -0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, -0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1170,0x1176,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, -0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, -0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1191,0x1191,0x1191,0x11a0,0x11a6,0x11a6,0x11a6,0x11a6, -0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6, -0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x1194,0x11a0,0x11a0,0x1191,0x1191, -0x1191,0x1191,0x11a0,0x11a0,0x1191,0x11a0,0x11a0,0x11a0,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2, -0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b5,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11ac, -0x11ac,0x11ac,0x11b2,0x11af,0x150c,0x150f,0x1512,0x1512,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, -0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11b8,0x11c4,0x11b8,0x11b8,0x11b8,0x11cd,0x11cd,0x11b8, -0x11b8,0x11cd,0x11c4,0x11cd,0x11cd,0x11c4,0x11b8,0x11bb,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, -0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, -0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, -0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, -0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, -0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, -0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f4,0x11f4,0x11f4,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, -0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, -0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, -0x122a,0x122a,0x122a,0x122d,0x122a,0x122a,0x122a,0x122a,0x1227,0x1227,0x1227,0x121b,0x121b,0x121b,0x121b,0x1227, -0x1227,0x1221,0x121e,0x1224,0x1224,0x1215,0x1230,0x1230,0x1218,0x1218,0x1227,0x122a,0x122a,0x122a,0x122a,0x122a, -0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, -0x122a,0x122a,0x122d,0x122a,0x122d,0x122a,0x122a,0x122a,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, -0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, -0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1239,0x1239,0x1236,0x1236,0x1236,0x1233,0x1233, -0x1233,0x1233,0x1236,0x1233,0x1233,0x1233,0x1239,0x1236,0x1239,0x1236,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, -0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, -0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1236,0x1236,0x1233,0x1233,0x1233,0x1233,0x1245,0x1245,0x12ed,0x1242, -0x12ed,0x12ed,0x12ed,0x12ed,0x1242,0x1248,0x126f,0x1242,0x1242,0x1242,0x1242,0x1242,0x1248,0x124b,0x126f,0x126f, -0x124b,0x126f,0x1242,0x124b,0x124b,0x124e,0x126f,0x1242,0x1242,0x126f,0x1245,0x1245,0x135c,0x135c,0x135c,0x135c, -0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1257,0x1257,0x1257,0x1257,0x1377,0x1356,0x1260,0x1377,0x1377,0x1377, -0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x180f,0x180f,0x180f,0x180f,0x180f,0x135f,0x135f,0x1266,0x135f, -0x135f,0x135f,0x1266,0x135f,0x135f,0x135f,0x1260,0x1260,0x1260,0x1260,0x1260,0x1359,0x135c,0x135c,0x135c,0x135c, -0x135c,0x135c,0x135c,0x1263,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1263,0x128d,0x128d,0x128d,0x128d, -0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, -0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x132f,0x132f,0x132f,0x132f, -0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f, -0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1344,0x1335,0x1344,0x1347, -0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, -0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, -0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, -0x134d,0x134d,0x134d,0x134d,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, -0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, -0x1353,0x1353,0x1353,0x1353,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, -0x1389,0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x138c,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c, -0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389, -0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x151e,0x151e, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x1527,0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1764,0x1764,0x1764, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x1764,0x1764,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1527, -0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x1527,0x1527,0x138c,0x138c,0x1392,0x1395,0x1395,0x1698,0x138c,0x1392, -0x138c,0x138c,0x1395,0x1530,0x152d,0x1527,0x1527,0x1764,0x1764,0x1764,0x1764,0x1764,0x1527,0x1527,0x1527,0x1527, -0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1698,0x1527,0x1521,0x1527, -0x1764,0x1764,0x1764,0x1767,0x1767,0x1767,0x1767,0x1767,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x1527,0x1395,0x1395,0x138c,0x138c,0x1395,0x1395, -0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1398,0x1398,0x1398,0x1398,0x1392,0x1392, -0x1392,0x1392,0x1395,0x1392,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c, -0x1395,0x138c,0x138c,0x138c,0x138c,0x1395,0x1395,0x1395,0x138c,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138f, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1698,0x138c,0x138c,0x138c,0x138c,0x1527,0x1521,0x1764, -0x13ef,0x13ef,0x13ef,0x13ef,0x151e,0x151e,0x151e,0x151e,0x151e,0x1524,0x1527,0x1764,0x1764,0x1764,0x1764,0x16ec, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1527,0x152d,0x1530,0x1527,0x1527, -0x1527,0x1527,0x1818,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1527,0x1521,0x1521,0x1521,0x1521, -0x152a,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521,0x1527,0x151e,0x151e,0x151e,0x151e, -0x151e,0x151e,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b, -0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479, -0x139b,0x1479,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x1479, -0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479,0x1479,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b, -0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x169e,0x169e,0x176a,0x176a,0x139e,0x139e,0x139e, -0x139b,0x139b,0x139b,0x139e,0x139e,0x139e,0x139e,0x139e,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1797,0x1797,0x1794,0x16ef,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x1539,0x1401,0x1401,0x1401,0x1413,0x1413,0x1413,0x1413,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, -0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, -0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, -0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, -0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x143d,0x143d,0x1449,0x144f,0x144f,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1449,0x1449,0x1449,0x143d,0x143d, -0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x1449,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, -0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, -0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1521,0x1521,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x151e,0x151e, -0x151e,0x151e,0x151e,0x151e,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527, -0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1521,0x1521,0x1530,0x1521,0x1521,0x1521,0x1521,0x169b,0x169b,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1815,0x1527,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1527,0x1521,0x1521,0x1521,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, -0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, -0x1551,0x1551,0x1551,0x1551,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1563,0x1563,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, -0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, -0x1569,0x1569,0x1569,0x1569,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x156c,0x156c,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, -0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, -0x15ab,0x15ab,0x15ab,0x159c,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, -0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15ae, -0x15b7,0x15b7,0x15b7,0x15b7,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15cc,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, -0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, -0x15de,0x15de,0x15de,0x15de,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15ed,0x15ed,0x15ed,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15ed, -0x15ed,0x15e1,0x15ed,0x15e4,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, -0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, -0x1614,0x1611,0x1611,0x1611,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1623,0x1623,0x1623,0x1620,0x1620,0x1620, -0x161d,0x161d,0x161d,0x161d,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1638,0x1638,0x162c,0x1629,0x1629, -0x1629,0x1629,0x1629,0x1629,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb43,0xb43,0xc8a,0xc8a,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xc8a,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64, +0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64, +0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0x151b,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xd11,0xd11, +0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a, +0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xd0e,0xd0e,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xb6d,0xb6d,0xb6d,0xb6d, +0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d, +0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb70,0xb70,0xb70,0xb70, +0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70, +0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb7f,0xb7f,0xb7f,0xb7f, +0xb7f,0xb76,0xb82,0xb88,0xb88,0xb88,0xb7c,0xb7c,0xb7c,0xb85,0xb79,0xb79,0xb79,0xb79,0xb79,0xb73, +0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb88,0xb88,0xb88,0xb88,0xb88,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7f,0xb7f, +0xb88,0xb88,0xb88,0xb7c,0xb7c,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb88,0xb88,0xb88,0xb88,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0x1725,0x1725,0xb94,0xb8b,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb8b,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb8b,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb8b,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb8b,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb8e,0xb8e,0xb8e,0xb8e, +0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, +0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91, +0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, +0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, +0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0, +0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0, +0xba0,0xba0,0xba0,0xba0,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa, +0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbf7,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xd02,0xd05,0xdf2,0xdf2,0xdf2, +0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xf0f,0xf0f,0xf0f,0xf0f,0xc09,0xc09,0xc09,0xc09, +0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xdf8,0xeb2, +0xdf8,0xdfb,0xdfb,0xdf8,0xdf5,0xdf8,0xdf5,0xdf8,0xdf8,0x1002,0x1299,0x1299,0xe04,0xe04,0xe04,0xe04, +0xe04,0xe0a,0xe07,0xf21,0xf21,0xf21,0xf21,0x1416,0x1014,0x1416,0x1353,0x1353,0xc3f,0xc3f,0xc3f,0xc3f, +0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc6f,0xc6c, +0xc6f,0xc6c,0xc6f,0xc6c,0x1125,0x1122,0x101a,0x1017,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42, +0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, +0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, +0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc48,0xc48,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, +0xc45,0xc45,0xc45,0xc45,0xc4b,0xc4b,0xc4b,0xc51,0xc4e,0xc75,0xc72,0xc51,0xc4e,0xc51,0xc4e,0xc51, +0xc4e,0xc51,0xc4e,0xc51,0xc4e,0xc51,0xc4e,0xc51,0xc4e,0xc51,0xc4e,0xc51,0xc4e,0xc4b,0xc4b,0xc4b, +0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, +0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, +0xc51,0xc4e,0xc51,0xc4e,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, +0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, +0xc51,0xc4e,0xc4b,0xc4b,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc5a,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc54,0xc54,0xc54,0xc54,0xc5a,0xc5a,0xc5a,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc54,0xc54,0xc54,0xc54,0xc57,0xc54,0xc54,0xc54,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d, +0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d, +0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xd0b,0xd7a,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, +0xdf5,0xdf5,0xeb2,0xeb2,0xdf5,0xdf5,0xdf5,0xdf5,0xdf8,0xdf8,0xf12,0x1002,0x1002,0x1002,0x1002,0x1002, +0x1002,0x1002,0x1002,0x1002,0x1002,0x12c6,0x12c6,0x129c,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f, +0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f, +0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd35,0xd35, +0xd35,0xd35,0xd35,0xd32,0xd47,0xd47,0xd47,0xd41,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47, +0xd47,0xd47,0xd47,0xd41,0xd47,0xd47,0xd47,0xd47,0xd3b,0xd3b,0xd44,0xd44,0xd44,0xd44,0xd38,0xd38, +0xd38,0xd38,0xd38,0xd3e,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, +0xe0d,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47, +0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd41,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47,0xd47, +0xd47,0xd47,0xd47,0xd47,0xd47,0xd3b,0xd3b,0xd3b,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4d,0xd4d,0xd4d, +0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xf24,0xf24,0xf24,0xf24, +0xf24,0xf24,0xf24,0x112e,0x112e,0x101d,0x101d,0x101d,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, +0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, +0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, +0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, +0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b, +0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b, +0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, +0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, +0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f, +0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f, +0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f, +0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xedf,0xedf,0xe31,0xe31,0xf27,0xf27,0xf27,0xf27, +0xf27,0xf27,0xf27,0x1029,0x1029,0x1029,0x1029,0x1029,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026, +0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d, +0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d, +0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe40,0xe3d,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, +0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, +0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a, +0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xf2a, +0xf2a,0xf2a,0xf2a,0x102c,0x102c,0x102c,0x102c,0x102c,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, +0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, +0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85, +0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85, +0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe7f,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82, +0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82, +0xe82,0xe82,0xe82,0xe85,0xe85,0xe85,0xe85,0xe85,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e, +0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8b,0xe8b,0xe8b,0xe8b,0xe8b,0xe8b,0xe8b,0xe8b,0xe88,0xe91, +0x1038,0x1032,0x1041,0x102f,0xe8e,0xe8e,0x102f,0x102f,0xea3,0xea3,0xe94,0xea3,0xea3,0xea3,0xe9a,0xea3, +0xea3,0xea3,0xea3,0xe94,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3, +0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6, +0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6, +0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe, +0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe, +0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xebe,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc, +0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137, +0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0xf24,0xf24,0xf24,0xf24,0x101d,0x101d,0x101d,0x101d, +0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020, +0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0xf45,0xf45,0xf45,0xf45,0xf57,0xf60,0xf63,0xf60, +0xf63,0xf60,0xf63,0xf60,0xf63,0xf60,0xf63,0xf60,0xf60,0xf60,0xf63,0xf60,0xf60,0xf60,0xf60,0xf60, +0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60, +0xf48,0xf57,0xf45,0xf45,0xf45,0xf45,0xf45,0xf5a,0xf45,0xf5a,0xf57,0xf57,0xf6c,0xf69,0xf6c,0xf6c, +0xf6c,0xf69,0xf69,0xf6c,0xf69,0xf6c,0xf69,0xf6c,0xf69,0x1053,0x1053,0x1053,0x118e,0x104a,0x1053,0x104a, +0xf69,0xf6c,0xf69,0xf69,0x104a,0x104a,0x104a,0x104a,0x104d,0x1050,0x118e,0x118e,0xf6f,0xf6f,0x1065,0x105c, +0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x105c,0x105c,0x1065,0x105c, +0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0xf75,0xf75,0xf75,0xf75, +0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75, +0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf84,0xf84,0xf84,0xf84, +0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84, +0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0x154e, +0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e, +0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a, +0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a, +0xfd2,0xfed,0xfe4,0xfe1,0xfe1,0xfed,0xfed,0xfe4,0xfe4,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfed,0xfed, +0xfed,0xfd2,0xfd2,0xfd2,0xfd2,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed,0xfed, +0xfed,0xfed,0xfd2,0xfe4,0xfe7,0xfd2,0xfd2,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfd5,0xfed,0xfea, +0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0x1158,0x1158,0x1155,0x1152,0xfdb,0xfdb, +0x1005,0x1005,0x1005,0x1005,0x12c6,0x12c6,0x129c,0x129c,0x12a2,0x1299,0x1299,0x1299,0x1299,0x129c,0x13c2,0x12a2, +0x129c,0x12a2,0x1299,0x12a2,0x12c6,0x1299,0x1299,0x1299,0x129c,0x129c,0x1299,0x1299,0x129c,0x1299,0x1299,0x129c, +0x1020,0x1020,0x1020,0x1020,0x1020,0x101d,0x101d,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1527,0x1527,0x1527, +0x112e,0x101d,0x101d,0x101d,0x101d,0x12d2,0x12ab,0x12ab,0x12ab,0x12ab,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x103e,0x103e,0x103b,0x1035,0x103b,0x1035,0x103b,0x1035,0x103b,0x1035,0x1032,0x1032,0x1032,0x1032,0x1047,0x1044, +0x1032,0x118b,0x1422,0x1425,0x1425,0x1422,0x1422,0x1422,0x1422,0x1422,0x1428,0x1428,0x1542,0x1536,0x1536,0x1533, +0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1059,0x1056,0x1056,0x1065,0x105c,0x1362,0x135f,0x172e, +0x1362,0x135f,0x1431,0x142e,0x1545,0x1545,0x154b,0x1545,0x154b,0x1545,0x154b,0x1545,0x154b,0x1545,0x154b,0x1545, +0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c, +0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x105c, +0x105f,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x1065,0x105c,0x1065,0x105c,0x1065,0x1065,0x105c, +0x1068,0x1068,0x106e,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074, +0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074, +0x1074,0x106e,0x1068,0x1068,0x1068,0x1068,0x106e,0x106e,0x1068,0x1068,0x1071,0x143a,0x1437,0x1437,0x1074,0x1074, +0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d, +0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, +0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, +0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, +0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1095,0x1095,0x1095,0x1098,0x1095,0x1095,0x109b,0x109b, +0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e, +0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e, +0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10aa,0x10a1,0x10b0,0x10ad, +0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7, +0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7, +0x1368,0x1365,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10bf,0x1140, +0x10b3,0x10b3,0x10b3,0x10b9,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x10b6,0x10b6,0x10b9,0x10c5, +0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc, +0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc,0x10c2,0x10bc, +0x155a,0x1557,0x155a,0x1557,0x155d,0x155d,0x1737,0x1440,0x10ce,0x10ce,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1, +0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1, +0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce, +0x10ce,0x10ce,0x10ce,0x10ce,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10da, +0x10da,0x10da,0x1134,0x10e3,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2, +0x10f2,0x10f2,0x10f2,0x10f2,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10e0,0x10e0, +0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0, +0x10e0,0x10e0,0x10e0,0x10e0,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101, +0x1101,0x1101,0x1101,0x1101,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113, +0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113, +0x1113,0x1113,0x1113,0x1113,0x111c,0x111c,0x111c,0x111c,0x1131,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c, +0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c, +0x111c,0x111c,0x111c,0x111c,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f, +0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f, +0x111f,0x111f,0x111f,0x111f,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0, +0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x1197,0x1197,0x119a,0x119a,0x11a0,0x1197, +0x1197,0x1197,0x1197,0x1197,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3, +0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3, +0x11a3,0x11a3,0x11a3,0x11a3,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be, +0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be, +0x11be,0x11be,0x11be,0x11be,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +0x11ca,0x11ca,0x11c7,0x11cd,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, +0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, +0x11d9,0x11d9,0x11d9,0x11d9,0x11e8,0x11e8,0x11e8,0x11f7,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, +0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, +0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11eb,0x11f7,0x11f7,0x11e8,0x11e8,0x11e8,0x11e8,0x11f7,0x11f7, +0x11e8,0x11f7,0x11f7,0x11f7,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, +0x1209,0x1209,0x1209,0x1209,0x120c,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1203,0x1203,0x1203,0x1209,0x1206, +0x1563,0x1566,0x1569,0x1569,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b, +0x121b,0x121b,0x121b,0x121b,0x120f,0x121b,0x120f,0x120f,0x120f,0x1224,0x1224,0x120f,0x120f,0x1224,0x121b,0x1224, +0x1224,0x121b,0x120f,0x1212,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b, +0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b, +0x121b,0x121b,0x121b,0x121b,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236, +0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236, +0x1236,0x1236,0x1236,0x1236,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e, +0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e, +0x124e,0x124b,0x124b,0x124b,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, +0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, +0x1257,0x1257,0x1257,0x1257,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, +0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, +0x1266,0x1266,0x1266,0x1266,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1284, +0x1281,0x1281,0x1281,0x1281,0x127e,0x127e,0x127e,0x1272,0x1272,0x1272,0x1272,0x127e,0x127e,0x1278,0x1275,0x127b, +0x127b,0x126c,0x1287,0x1287,0x126f,0x126f,0x127e,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281, +0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1284,0x1281, +0x1284,0x1281,0x1281,0x1281,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a, +0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a, +0x128a,0x128a,0x128a,0x128a,0x1290,0x1290,0x1290,0x128d,0x128d,0x128d,0x128a,0x128a,0x128a,0x128a,0x128d,0x128a, +0x128a,0x128a,0x1290,0x128d,0x1290,0x128d,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a, +0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a, +0x128a,0x1290,0x128d,0x128d,0x128a,0x128a,0x128a,0x128a,0x129c,0x129c,0x1344,0x1299,0x1344,0x1344,0x1344,0x1344, +0x1299,0x129f,0x12c6,0x1299,0x1299,0x1299,0x1299,0x1299,0x129f,0x12a2,0x12c6,0x12c6,0x12a2,0x12c6,0x1299,0x12a2, +0x12a2,0x12a5,0x12c6,0x1299,0x1299,0x12c6,0x129c,0x129c,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3, +0x13b3,0x13b3,0x12ae,0x12ae,0x12ae,0x12ae,0x13ce,0x13ad,0x12b7,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce, +0x13ce,0x13ce,0x13ce,0x1863,0x1863,0x1863,0x1863,0x1863,0x13b6,0x13b6,0x12bd,0x13b6,0x13b6,0x13b6,0x12bd,0x13b6, +0x13b6,0x13b6,0x12b7,0x12b7,0x12b7,0x12b7,0x12b7,0x13b0,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x12ba, +0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x12ba,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4, +0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4, +0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386, +0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386, +0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x139b,0x138c,0x139b,0x139e,0x139e,0x139e,0x139e,0x139e, +0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e, +0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa, +0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e0,0x13e0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e0,0x13e3,0x13e3,0x13e3, +0x13e0,0x13e3,0x13e0,0x13e3,0x13e0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e9,0x13e3,0x13e3,0x13e3,0x13e3,0x13e0, +0x13e3,0x13e0,0x13e0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e6,0x13e3,0x13e3,0x13e3, +0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0, +0x13e0,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e0,0x13e0, +0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x1575,0x1575,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x157e,0x1578,0x1578, +0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x17b8,0x17b8,0x17b8,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x157e,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x157e,0x17b8,0x17b8,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e9,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6, +0x1578,0x1578,0x157e,0x157e,0x1578,0x157e,0x157e,0x157e,0x1575,0x1575,0x157e,0x157e,0x13e3,0x13e3,0x13e9,0x13e9, +0x13e9,0x16ec,0x13e3,0x13e9,0x13e3,0x13e3,0x13e9,0x1584,0x1584,0x157e,0x157e,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8, +0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x1578,0x1578,0x157e, +0x16ec,0x157e,0x1578,0x157e,0x17b8,0x17b8,0x17b8,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x157e,0x13e3,0x157e,0x13e9,0x13e9, +0x13e3,0x13e3,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13ec,0x13ec, +0x13ec,0x13ec,0x13e3,0x13e3,0x13e3,0x13e3,0x13e9,0x13e3,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, +0x13e9,0x13e3,0x13e3,0x13e3,0x13e9,0x13e3,0x13e3,0x13e3,0x13e3,0x13e9,0x13e9,0x13e9,0x13e3,0x13e9,0x13e9,0x13e9, +0x13e3,0x13e3,0x13e3,0x13e6,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x16ec,0x13e3,0x13e3,0x13e3, +0x13e3,0x157e,0x1578,0x17b8,0x1446,0x1446,0x1446,0x1446,0x1575,0x1575,0x1575,0x1575,0x1575,0x157b,0x157e,0x17b8, +0x17b8,0x17b8,0x17b8,0x1740,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x157e,0x157e,0x1578,0x1578,0x157e, +0x1584,0x1584,0x157e,0x157e,0x157e,0x157e,0x186c,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x157e,0x1578,0x157e, +0x1578,0x1578,0x1578,0x1578,0x1581,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x157e,0x1578,0x1578,0x1578,0x157e, +0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x157e,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x14d0,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x14d0,0x13ef,0x13ef, +0x13ef,0x14d0,0x13ef,0x14d0,0x13ef,0x14d0,0x13ef,0x14d0,0x13ef,0x13ef,0x13ef,0x14d0,0x13ef,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x14d0,0x14d0,0x13ef,0x13ef,0x13ef,0x13ef,0x14d0,0x13ef,0x14d0,0x14d0,0x13ef,0x13ef,0x13ef,0x13ef, +0x14d0,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x16f2,0x16f2,0x17be, +0x17be,0x13f2,0x13f2,0x13f2,0x13ef,0x13ef,0x13ef,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x1671,0x1671,0x1671,0x1671, +0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x13f8,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f8,0x13f5, +0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13fb, +0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, +0x13fb,0x13fb,0x13fb,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x17eb,0x17eb,0x17e8,0x1743, +0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x144c,0x144c,0x144c,0x144c, +0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x158d,0x1458,0x1458,0x1458,0x146a, +0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a, +0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x1485,0x1485,0x1485,0x1485, +0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485, +0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x148e,0x148e,0x148e,0x148e, +0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e, +0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x1494,0x1494,0x14a0,0x14a6, +0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6, +0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a0, +0x14a0,0x14a0,0x1494,0x1494,0x1494,0x1494,0x1494,0x1494,0x1494,0x1494,0x1494,0x14a0,0x14c7,0x14c7,0x14c7,0x14c7, +0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7, +0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x1578,0x1578,0x157e,0x157e, +0x157e,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x157e,0x157e,0x157e, +0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x157e,0x157e,0x157e,0x1578,0x1578,0x1578,0x1578,0x1578, +0x1578,0x1578,0x1578,0x157e,0x1578,0x1578,0x157e,0x157e,0x157e,0x157e,0x1578,0x1578,0x1584,0x1578,0x1578,0x1578, +0x1578,0x16ef,0x16ef,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1869,0x157e,0x1578,0x1578, +0x157e,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x157e,0x157e,0x1578,0x1578,0x1578,0x1578,0x1578, +0x1578,0x1578,0x1578,0x1578,0x157e,0x1578,0x1578,0x1578,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, +0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, +0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff, +0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff, +0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15f0,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, +0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, +0x1608,0x1608,0x1608,0x1602,0x160b,0x160b,0x160b,0x160b,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629, +0x1620,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629, +0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, 0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, -0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163b,0x163b,0x163b,0x163b,0x163b, -0x163b,0x163b,0x163b,0x163b,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, -0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, -0x1641,0x1641,0x1641,0x1641,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, -0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, -0x1665,0x1665,0x1665,0x1665,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, -0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, -0x166e,0x166e,0x166e,0x166e,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, -0x1686,0x1686,0x1686,0x1686,0x1671,0x1680,0x1680,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1680,0x1671,0x1683, -0x1683,0x1671,0x1683,0x1671,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, +0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1641,0x1641,0x1641,0x1635,0x1635,0x1635,0x1635,0x1635, +0x1635,0x1635,0x1635,0x1641,0x1641,0x1635,0x1641,0x1638,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, +0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, +0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, +0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, +0x1668,0x1668,0x1668,0x1668,0x1668,0x1665,0x1665,0x1665,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671, +0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1677,0x1677, +0x1677,0x1674,0x1674,0x1674,0x1671,0x1671,0x1671,0x1671,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x168c, +0x168c,0x1680,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, 0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, -0x1686,0x1686,0x1686,0x1686,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x168f,0x168f,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692, +0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x168f, +0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, 0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, -0x1695,0x1695,0x1695,0x1695,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -0x16f5,0x16f5,0x16f5,0x16f5,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, -0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, -0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1737,0x1734,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, -0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, -0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, -0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, -0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, -0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, -0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, -0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758,0x1758,0x1755, -0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758, -0x1758,0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, -0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, -0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, -0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, -0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x17b5,0x17b5,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, -0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, -0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, -0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, -0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, -0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1800,0x1800,0x1800, -0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, -0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, -0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, -0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, -0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, -0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, -0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0,0,0,0 +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da, +0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16c5,0x16d4,0x16d4,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5, +0x16c5,0x16d4,0x16c5,0x16d7,0x16d7,0x16c5,0x16d7,0x16c5,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da, +0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da, +0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3, +0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3, +0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, +0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, +0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749, +0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749, +0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785, +0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785, +0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x178b,0x1788,0x1785,0x1785,0x1785,0x1785, +0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x178e,0x178e,0x178e,0x178e, +0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e, +0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x1791,0x1791,0x1791,0x1791, +0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791, +0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x17a3,0x17a3,0x17a3,0x17a3, +0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3, +0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a6,0x17a6,0x17a6,0x17a6, +0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, +0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9, +0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, +0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17ac, +0x17ac,0x17ac,0x17ac,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, +0x17a9,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17a9,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17c4,0x17c4,0x17c4,0x17c4, +0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4, +0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x1809,0x1809,0x1806,0x1806, +0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806, +0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1809,0x1809,0x1809,0x1809, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1857,0x1857,0x1857,0x1857, +0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857, +0x1857,0x1854,0x1854,0x1854,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x1857,0x1857,0x1857,0x1857, +0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857, +0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x187e,0x187e,0x187e,0x187e, +0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, +0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x1881,0x1881,0x1881,0x1881, +0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881, +0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0,0,0,0 }; static const UTrie2 propsVectorsTrie={ propsVectorsTrie_index, - propsVectorsTrie_index+4844, + propsVectorsTrie_index+4924, NULL, - 4844, - 23696, + 4924, + 24212, 0xa40, - 0x136c, + 0x13bc, 0x0, 0x0, 0x110000, - 0x6f78, + 0x71cc, NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint32_t propsVectors[6195]={ -0x67,0,0,0x67,0,0xe00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67, -0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0, -0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0, -0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67, -0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0, -0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000, -0x2b67,0,0,0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67, -0,0,0x3b67,0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0, -0,0x4367,0,0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0, -0x5067,0,0,0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767, -0,0,0x5867,0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0, +static const uint32_t propsVectors[6279]={ +0x67,0,0,0x67,0,0x200000,0x67,0,0x230400,0x67,0,0x230560,0x67,0,0x400000,0x67, +0,0x448000,0x67,0,0x500000,0x67,0,0x962460,0x67,0,0x962540,0x67,0,0xe00000,0x67,0, +0xe30000,0x67,0,0x1329800,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,0,0, +0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1067,0,0x200000,0x1067, +0,0x230400,0x1167,0,0,0x1267,0,0,0x1267,0,0x962460,0x1367,0,0,0x1467,0, +0,0x1567,0,0,0x1667,0,0,0x1767,0,0,0x1767,0,0x962460,0x1867,0,0, +0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,0,0,0x1f67,0,0,0x2067, +0,0,0x2267,0,0,0x2367,0,0,0x2467,0,0,0x2567,0,0,0x2767,0, +0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,0x2b67,0,0,0x2d67,0,0, +0x3067,0x20000000,0x200000,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67,0,0,0x3c67, +0,0,0x3e67,0,0,0x4067,0,0,0x4067,0,0xe30400,0x4167,0,0,0x4367,0, +0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0, +0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867, +0,0,0x5867,0,0x230400,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0, 0,0x6067,0x80000,0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0, -0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767, -0,0,0x7867,0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0, -0,0x7f67,0,0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0, -0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67, -0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0, -0,0x9267,0,0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0, -0x9867,0,0,0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167, -0,0,0xa367,0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0, -0,0xa867,0,0,0xa967,0,0,0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,0, -0xad67,0,0,0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367, -0,0,0xb467,0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0, -0,0xba67,0,0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0, -0xc067,0,0,0xc167,0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667, -0,0,0xc767,0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0, -0,0xcc67,0,0xe00000,0xcf67,0,0xe00000,0xd067,0,0xe00000,0xd267,0,0,0xd367,0,0, -0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,0xd967,0,0,0xda67, -0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,0, -0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0xe00000,0xe467,0,0, -0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,0xea67, -0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,0, -0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,0, -0xf867,0,0,0xf967,0,0,0xfa67,0,0xe00000,0xfb67,0,0,0xfc67,0,0,0xfd67, -0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,0, -0,0x10567,0,0xe00000,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,0,0, -0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,0x10f67, -0,0,0x11067,0,0,0x11167,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0, -0xe00000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000, -0xb0067,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100, -0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008, -0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402, -0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419, -0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100, -0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x201000,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400, -0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800, -0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400, -0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400, -0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908, -0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100, -0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000, -0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00, -0,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000, -0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402, -0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a, -0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100, -0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540, -0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110, -0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400, -0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460, -0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f, -0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100, -0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460, -0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615, -0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400, -0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000, -0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926, -0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100, -0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002, -0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12, -0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400, -0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820, -0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800, -0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000, -0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000, -0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800, -0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000, -0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e, -0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00, -0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000, -0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402, -0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00, -0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020, -0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002, -0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x10200000,0x11003000, -0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000, -0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x10200000, -0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000,0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700, -0x24000000,0x928045a0,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000, -0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800,0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x10e05200, -0x11003800,0x24000000,0x928045a0,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013, -0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100, -0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460, -0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502, -0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400, -0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000, -0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219, -0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100, -0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400, -0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701, -0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100, -0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002, -0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800, -0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020, -0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f, -0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e, -0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100, -0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001, -0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300, -0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020, -0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000, -0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600, -0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100, -0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011, -0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700, -0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400, -0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011, -0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100, -0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000, -0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00, -0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100, -0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010, -0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400, -0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12, -0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000, -0x30200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400, -0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14, -0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900, -0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002, -0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11, -0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000, -0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10, -0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400, -0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020, -0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000, -0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f34,0xc000010,0x448000,0x11400f44,0xc000010,0x448000,0x11401d70, -0x4000000,0x200000,0x11403d92,0x4000000,0xe00000,0x11445787,0x4000004,0x120000a,0x11445787,0x4000008,0x81000a,0x11445787,0x4000008,0x141000a,0x11445787,0x4000010, -0x87000a,0x11445787,0xc000010,0x84800a,0x11445790,0x3802500,0x126246a,0x11445790,0x7c00d00,0x2530c0a,0x114a3d87,0x24000000,0x810000,0x114a3d87,0x24000000,0x1410000, -0x114a3d87,0x24000008,0x810000,0x114a3d87,0x24000008,0x1410000,0x114a3d87,0x24000010,0x870000,0x114a3d87,0x2c000010,0x848000,0x114a3d8d,0x4000000,0xe00000,0x114a3d8d, -0x24000000,0xe00000,0x114a3d8d,0x24000002,0x1200000,0x114a3d8d,0x24000002,0x10e00000,0x114a3d8d,0x24000008,0x810000,0x114a3d8d,0x24000008,0x1410000,0x114a3d90,0x7c00900, -0x930c00,0x114a3d90,0x7c00900,0xe30c00,0x114a3d92,0x7c00300,0xe30000,0x114a3e90,0x7000400,0x1200c02,0x114a3f87,0x4000004,0x1200000,0x114a3f90,0x7c00d00,0x2530c00, -0x114a4292,0x4000000,0xe00000,0x114a4292,0x4000000,0xe0000f,0x114a4492,0x4000000,0xe00002,0x114a4492,0x4000000,0xe00003,0x114a4492,0x4000000,0x10e00003,0x114a4592, -0x4000000,0xe00002,0x114a4592,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c17,0x2802100,0x962460,0x11800c17,0x2802500,0x962460,0x11800f1d,0x2802400, -0x962460,0x11800f29,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d93,0x2802400,0x962460,0x118a3e90,0x2802400,0x962460, -0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1b,0x6800000,0x1329800,0x11c00f58,0x6800000,0x1329800,0x11c0105d,0x6800000,0x1329800,0x11c01161, -0x6800000,0x1329800,0x11c01265,0x6800000,0x1329800,0x11c01469,0x4000000,0x200000,0x11c01469,0x6800000,0x1329800,0x11c01469,0x7c00100,0x230400,0x11c0511b,0x7c00100, -0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461, -0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27, -0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010, -0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400, -0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67, -0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100, -0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401, -0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605, -0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100, -0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218960, -0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22, -0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400, -0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460, -0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c, -0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100, -0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000, -0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128, -0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100, -0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460, -0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417, -0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000, -0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000, -0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b, -0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010, -0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400, -0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e, -0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400, -0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000, -0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929, -0x4000000,0xe00000,0x30402576,0x4000010,0x400000,0x30402576,0x4000010,0xb70000,0x30402576,0xc000010,0xb48000,0x304a3d92,0x4000000,0xe00000,0x30800c17,0x2802100, -0x962460,0x30c01c6e,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000, -0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00, -0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000, -0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405, -0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419, -0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100, -0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820, -0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919, -0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000, -0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000, -0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600, -0x24000020,0x10200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000, -0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460, -0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c, -0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020, -0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000, -0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01, -0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020, -0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000, -0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406372, -0xc000010,0x448000,0x324a3d95,0x4000000,0x10e00000,0x324a3d95,0x7c00100,0x1230400,0x324a3f90,0x4000002,0x1200c00,0x324a538d,0x24000000,0xe00000,0x32820701,0x2802000, -0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400, -0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218960,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02, -0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100, -0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400, -0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417, -0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000, -0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400, -0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30, -0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100, -0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400, -0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531, -0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000, -0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460, -0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412, -0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077b8,0x4000000, -0x200000,0x404077bb,0x4000000,0x200000,0x404077bb,0x4000000,0x400000,0x40c0511b,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400, -0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13, -0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100, -0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f, -0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919, -0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000, -0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000, -0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e, -0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100, -0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000, -0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b, -0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000, -0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400, -0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b, -0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100, -0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460, -0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c, -0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x30200000,0x410a3700,0x24000000, -0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010, -0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100, -0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8292,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01469,0x6800000,0x1329800,0x50000419,0x7c00100, -0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460, -0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19, -0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120, -0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000, -0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257, -0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100, -0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800, -0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e, -0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100, -0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400, -0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a92,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02, -0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500, -0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000, -0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27, -0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400, -0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400, -0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619, -0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000, -0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000, -0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301, -0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000, -0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400, -0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500, -0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100, -0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400, -0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52, -0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500, -0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800, -0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008, -0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500, -0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000, -0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e, -0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100, -0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000, -0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c, -0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020, -0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x30200000,0x510aaa00,0x4000000,0x30e00000,0x5140a2b3,0x4000400,0x400000, -0x514a8292,0x4000000,0xe00000,0x51802b84,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a, -0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100, -0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400, -0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108, -0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000, -0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460, -0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a, -0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000, -0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000, -0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182, -0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100, -0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800, -0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c, -0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000, -0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000, -0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873, -0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010, -0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000, -0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58, -0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218960,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400, -0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401, -0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00, -0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000, -0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003, -0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700, -0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x30100000,0x520ab412,0x7c00100, -0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000, -0x5240af78,0x6800400,0x962540,0x5240af78,0x7c00100,0x230400,0x5240af79,0x4000400,0x200000,0x5240af79,0x6800100,0x962540,0x5240b298,0x4000000,0x200000,0x5240b2a2, -0x4000000,0x200000,0x5240b2a2,0x4000000,0x1500000,0x5240b5b6,0x7c00900,0x230400,0x524a4492,0x4000000,0xe00003,0x5280af78,0x2802400,0x962460,0x5280af79,0x2802400, -0x962460,0x5280af7b,0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x52c0b3ad,0x2802400,0x962460,0x52c0b3b1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460, -0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a, -0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000, -0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003700,0x24000000,0x200000, -0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301, -0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100, -0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400, -0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f, -0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010, -0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400, -0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300, -0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000,0x24000000,0x30e00000,0x600a3700,0x24000000,0x30200000,0x600a3800,0x24000000, -0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x30100000,0x600ac400,0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e0000d, -0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30200000,0x600acd00,0x4000000,0x30e00000,0x600acd00, -0x4000000,0x30e05200,0x600acd00,0x4000000,0xb0e00000,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00,0x4000000,0x30e00000,0x600ace00,0x4000000, -0xb28045a0,0x600acf00,0x4000000,0x30e00000,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300,0xe30000,0x604ac492,0x4000000,0x30e00003,0x61000a03,0x4000000,0x1600000, -0x61000c02,0,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600, -0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000, -0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f, -0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00, -0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120, -0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800, -0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573, -0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100, -0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460, -0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997, -0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000, -0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540, -0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x30e00000,0x6140af78,0x7c00100,0x230400,0x6140af79, -0x6800100,0x962540,0x6140af82,0x7c00100,0x230400,0x6180af79,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800,0x80000, -0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400, -0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320, -0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800,0x24000000, -0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400, -0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00, -0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100, -0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400, -0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c, -0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000, -0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x10e05200,0x7000cd00,0x4000000,0x90e00000, -0x7000cd00,0x4000000,0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997, -0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000, -0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460, -0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489, -0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100, -0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000, -0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691, -0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400, -0x200000,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460, -0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79, -0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100, -0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540, -0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c, -0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100, -0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000, -0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b, -0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100, -0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460, -0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6, -0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000, -0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800, -0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92, -0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00,0x4000000,0xb28045a0,0x700ace00,0x4000000, -0x30e00000,0x700acf00,0x4000000,0x30e00000,0x700acf00,0x4000000,0xb0e00000,0x7040dfbd,0x4000000,0x200000,0x7040f7c1,0x80000,0x918820,0x7080af79,0x2802400,0x962460, -0x7080dfbd,0x2802400,0x962460,0x70c0e4bf,0x2802400,0x962460,0x70c0e4bf,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a, -0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400, -0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400, -0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0xe00000,0x8000d202, -0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000, -0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400, -0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1, -0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010, -0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400, -0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c, -0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010, -0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x72904de0,0x800ace00,0x4000000,0x30e00000,0x800acf00,0x4000000,0x30e00000, -0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a, -0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100, -0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400, -0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7, -0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000, -0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400, -0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9, -0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400, -0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800, -0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300, -0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0,0x900acf00,0x4000000,0x30e00000,0x900b0500,0x4000000, -0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000, -0x90408e06,0x24000000,0x400000}; +0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,0x7367,0x20000000,0x200000,0x7567,0,0,0x7667, +0,0,0x7767,0,0,0x7867,0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0, +0,0x7e67,0,0,0x7f67,0,0,0x8167,0,0,0x8267,0,0,0x8367,0,0, +0x8367,0,0x962460,0x8467,0,0,0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8867, +0,0,0x8967,0,0,0x8b67,0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8e67,0x20000000, +0x400000,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0,0,0x9367,0,0, +0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0,0x9967,0,0,0x9a67, +0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367,0,0,0xa467,0, +0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,0,0xa967,0,0, +0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,0,0xad67,0,0,0xae67,0,0,0xaf67, +0,0,0xaf67,0,0x962540,0xb167,0,0,0xb267,0,0,0xb367,0,0,0xb467,0, +0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0,0, +0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0,0xc167, +0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667,0,0,0xc767,0, +0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0,0xe30000,0xcc67,0,0xe00000, +0xcf67,0,0xe00000,0xcf67,0,0x30e00000,0xd067,0,0xe00000,0xd267,0,0,0xd367,0,0,0xd467, +0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,0xd967,0,0,0xda67,0, +0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,0,0, +0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0xe00000,0xe467,0,0,0xe567, +0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,0xea67,0, +0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,0,0, +0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,0,0xf867, +0,0,0xf967,0,0,0xfa67,0,0xe00000,0xfb67,0,0,0xfc67,0,0,0xfd67,0, +0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,0,0, +0x10567,0,0x200000,0x10567,0,0xe00000,0x10567,0,0x30e00000,0x10567,0,0xb28045a0,0x10667,0,0,0x10767, +0,0,0x10867,0,0,0x10967,0,0,0x10a67,0,0,0x10b67,0,0,0x10b67,0, +0x1230400,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,0x10f67,0,0,0x11067,0,0, +0x11167,0,0,0xa0067,0,0xe00000,0xa0067,0,0xe30000,0xa4667,0,0xe00000,0xa4767,0,0xe00000,0xa4767, +0,0xe30000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0, +0xe00000,0xb0067,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040, +0x11000100,0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200, +0x24000008,0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100, +0x220402,0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402, +0x11000419,0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519, +0x7c00100,0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500, +0x230400,0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001, +0x11000800,0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e, +0x4000400,0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100, +0x250400,0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400, +0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03, +0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000, +0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800, +0x11000c00,0,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02, +0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100, +0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460, +0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004, +0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100, +0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460, +0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f, +0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400, +0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541, +0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423, +0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400, +0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460, +0x11001615,0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a, +0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000, +0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000, +0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18, +0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100, +0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500, +0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e, +0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000, +0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b, +0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800, +0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008, +0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x11248002, +0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900, +0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020, +0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000, +0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00, +0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120, +0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006, +0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00, +0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020, +0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x10200000, +0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300, +0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000, +0x10200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000,0x10200000,0x11003700,0x24000000,0x10e00000, +0x11003700,0x24000000,0x928045a0,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800, +0x24000000,0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800,0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000, +0x10e05200,0x11003800,0x24000000,0x928045a0,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801, +0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102, +0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400, +0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408, +0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200, +0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000, +0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f, +0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319, +0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100, +0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460, +0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908, +0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000, +0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000, +0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800, +0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100, +0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405, +0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19, +0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020, +0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403, +0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600, +0x24000020,0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000, +0x10e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023700,0x24000020,0x10105200,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000, +0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712, +0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700,0x4000000, +0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011, +0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700, +0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010, +0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411, +0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100, +0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100,0x24000006, +0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400, +0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100, +0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0, +0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000, +0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000, +0x24100000,0x1410001,0x110a3700,0x24000000,0x30200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300, +0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000, +0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16, +0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000, +0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d, +0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300, +0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000, +0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c, +0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400, +0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010, +0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f34,0xc000010,0x448000, +0x11400f44,0xc000010,0x448000,0x11401d70,0x4000000,0x200000,0x11403d92,0x4000000,0xe00000,0x11445787,0x4000004,0x120000a,0x11445787,0x4000008,0x81000a,0x11445787, +0x4000008,0x141000a,0x11445787,0x4000010,0x87000a,0x11445787,0xc000010,0x84800a,0x11445790,0x3802500,0x126246a,0x11445790,0x7c00d00,0x2530c0a,0x114a3d87,0x24000000, +0x810000,0x114a3d87,0x24000000,0x1410000,0x114a3d87,0x24000008,0x810000,0x114a3d87,0x24000008,0x1410000,0x114a3d87,0x24000010,0x870000,0x114a3d87,0x2c000010,0x848000, +0x114a3d8d,0x4000000,0xe00000,0x114a3d8d,0x24000000,0xe00000,0x114a3d8d,0x24000002,0x1200000,0x114a3d8d,0x24000002,0x10e00000,0x114a3d8d,0x24000008,0x810000,0x114a3d8d, +0x24000008,0x1410000,0x114a3d90,0x7c00900,0x930c00,0x114a3d90,0x7c00900,0xe30c00,0x114a3d92,0x7c00300,0xe30000,0x114a3e90,0x7000400,0x1200c02,0x114a3f87,0x4000004, +0x1200000,0x114a3f90,0x7c00d00,0x2530c00,0x114a4292,0x4000000,0xe00000,0x114a4292,0x4000000,0xe0000f,0x114a4492,0x4000000,0xe00002,0x114a4492,0x4000000,0xe00003, +0x114a4492,0x4000000,0x10e00003,0x114a4592,0x4000000,0xe00002,0x114a4592,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c17,0x2802100,0x962460,0x11800c17, +0x2802500,0x962460,0x11800f1d,0x2802400,0x962460,0x11800f29,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d93,0x2802400, +0x962460,0x118a3e90,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1b,0x6800000,0x1329800,0x11c00f58,0x6800000,0x1329800, +0x11c0105d,0x6800000,0x1329800,0x11c01161,0x6800000,0x1329800,0x11c01265,0x6800000,0x1329800,0x11c01469,0x4000000,0x200000,0x11c01469,0x6800000,0x1329800,0x11c01469, +0x7c00100,0x230400,0x11c0511b,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100, +0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000, +0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27, +0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400, +0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020, +0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67, +0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100, +0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400, +0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908, +0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100, +0x230400,0x30000d22,0,0x218960,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000, +0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821, +0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100, +0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400, +0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c, +0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010, +0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400, +0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d, +0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400, +0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000, +0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417, +0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006, +0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400, +0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800, +0x2c000010,0x1248002,0x30002800,0x2c000010,0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100, +0x10220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000, +0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701, +0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000, +0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400, +0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402576,0x4000010,0x400000,0x30402576,0x4000010,0xb70000,0x30402576,0xc000010,0xb48000,0x304a3d92, +0x4000000,0xe00000,0x30800c17,0x2802100,0x962460,0x30c01c6e,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000, +0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400, +0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00, +0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020, +0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000, +0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908, +0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000, +0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000, +0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01, +0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120, +0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000, +0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x10200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800, +0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100, +0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460, +0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600, +0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020, +0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460, +0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600, +0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100, +0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001, +0x320a6b16,0x7c00100,0x2530c00,0x32406372,0xc000010,0x448000,0x324a3d95,0x4000000,0x10e00000,0x324a3d95,0x7c00100,0x1230400,0x324a3f90,0x4000002,0x1200c00,0x324a538d, +0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100, +0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218960,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460, +0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a, +0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000, +0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460, +0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00, +0x4000000,0x200002,0x40003000,0x24000000,0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100, +0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000, +0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117, +0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100, +0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000, +0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933, +0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400, +0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000, +0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300, +0x4000000,0x1410010,0x404077b8,0x4000000,0x200000,0x404077bb,0x4000000,0x200000,0x404077bb,0x4000000,0x400000,0x40c0511b,0x4000000,0x200000,0x41000419,0x7c00100, +0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400, +0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02, +0x4000000,0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100, +0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000, +0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00, +0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10205200,0x41003700,0x24000000, +0x10e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f, +0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e, +0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100, +0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400, +0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838, +0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000, +0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000, +0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e, +0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000, +0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000, +0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701, +0x2802000,0xc62460,0x410a3700,0x24000000,0x30200000,0x410a3700,0x24000000,0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300, +0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010, +0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8292,0x4000000,0xe00000,0x41808300, +0x2802000,0x962460,0x41c01469,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100, +0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400, +0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000, +0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100, +0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460, +0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257, +0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000, +0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540, +0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500, +0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010, +0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a92,0x4000000,0x200000, +0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02, +0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100, +0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000, +0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27, +0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000, +0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000, +0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19, +0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100, +0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000, +0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00, +0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000, +0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e, +0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200400,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519, +0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100, +0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460, +0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d, +0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100, +0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000, +0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008, +0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100, +0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800, +0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e, +0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100, +0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460, +0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00, +0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000, +0x30200000,0x510aaa00,0x4000000,0x30e00000,0x5140a2b3,0x4000400,0x400000,0x514a8292,0x4000000,0xe00000,0x51802b84,0x2802000,0x962460,0x51c00908,0x2802400,0x962460, +0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00, +0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100, +0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006, +0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407, +0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100, +0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000, +0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a, +0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100, +0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000, +0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a, +0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000, +0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400, +0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f, +0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500, +0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800, +0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912, +0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100, +0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400, +0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218960,0x5200c178, +0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100, +0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400, +0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700, +0x24000000,0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000,0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000, +0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d, +0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11, +0x7c00300,0xe30001,0x520a7300,0x24000000,0x30100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000, +0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af78,0x6800400,0x962540,0x5240af78,0x7c00100,0x230400,0x5240af79,0x4000400,0x200000, +0x5240af79,0x6800100,0x962540,0x5240b298,0x4000000,0x200000,0x5240b2a2,0x4000000,0x200000,0x5240b2a2,0x4000000,0x1500000,0x5240b5b6,0x7c00900,0x230400,0x524a4492, +0x4000000,0xe00003,0x5280af78,0x2802400,0x962460,0x5280af79,0x2802400,0x962460,0x5280af7b,0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x52c0b3ad,0x2802400, +0x962460,0x52c0b3b1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540, +0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27, +0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000, +0x10200000,0x60003000,0x24000000,0x10e00000,0x60003700,0x24000000,0x200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400, +0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519, +0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000, +0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000, +0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941, +0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100, +0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000, +0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000, +0x24000000,0x30e00000,0x600a3700,0x24000000,0x30200000,0x600a3800,0x24000000,0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000, +0x30100000,0x600ac400,0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000, +0x600acd00,0x4000000,0x30200000,0x600acd00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30e05200,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00, +0x4000000,0x30e00000,0x600ace00,0x4000000,0xb28045a0,0x600acf00,0x4000000,0x30e00000,0x600acf00,0x4000000,0x30e05200,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300, +0xe30000,0x604ac492,0x4000000,0x30e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,0,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000, +0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c, +0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100, +0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400, +0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202, +0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400, +0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000, +0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573, +0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100, +0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800, +0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98, +0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000, +0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001, +0x610ace00,0x4000000,0x30e00000,0x6140af78,0x7c00100,0x230400,0x6140af79,0x6800100,0x962540,0x6140af82,0x7c00100,0x230400,0x6180af79,0x2802400,0x962460,0x62002a00, +0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0, +0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460, +0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000, +0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800,0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100, +0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460, +0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00, +0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100, +0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f, +0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941, +0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000, +0x10e00000,0x7000cd00,0x4000000,0x10e05200,0x7000cd00,0x4000000,0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460, +0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86, +0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000, +0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400, +0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489, +0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000, +0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000, +0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691, +0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100, +0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460, +0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c, +0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000, +0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400, +0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f, +0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100, +0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460,0x7000f34b,0x4000000,0x200000, +0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490, +0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100, +0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000, +0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921, +0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000, +0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000, +0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00, +0x4000000,0xb28045a0,0x700ace00,0x4000000,0x30e00000,0x700acf00,0x4000000,0x30e00000,0x700acf00,0x4000000,0xb28045a0,0x7040dfbd,0x4000000,0x200000,0x7040f7c1,0x80000, +0x918820,0x7080af79,0x2802400,0x962460,0x7080dfbd,0x2802400,0x962460,0x70c0e4bf,0x2802400,0x962460,0x70c0e4bf,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400, +0x80001524,0x7c00100,0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00, +0x4000000,0x200000,0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100, +0x230400,0x80009519,0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400, +0x8000cd00,0x4000000,0xe00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997, +0x4000000,0x200000,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100, +0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000, +0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1, +0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100, +0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000, +0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670, +0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x72904de0,0x800ace00,0x4000000, +0x30e00000,0x800acf00,0x4000000,0x30e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100,0x230400, +0x9000171a,0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00, +0x24000000,0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100, +0x962460,0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460, +0x900107a7,0x4000000,0x1400000,0x900107a7,0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8, +0x2806400,0x962460,0x900108a8,0x4000000,0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100, +0x962540,0x900108a8,0x7c00100,0x230400,0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460, +0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa, +0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010, +0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400, +0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0,0x900acf00, +0x4000000,0x30e00000,0x900b0500,0x4000000,0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300, +0xe30000,0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000}; -static const int32_t countPropsVectors=6195; +static const int32_t countPropsVectors=6279; static const int32_t propsVectorsColumns=3; static const uint16_t scriptExtensions[194]={ 0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,3,0x800c,2,0x22, @@ -3539,6 +3581,6 @@ static const uint16_t scriptExtensions[194]={ 0x8023,0xa,0xaf,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x31,0x8053,0x2f,0x8031,2,0x8007,0x89, 0x67,0x8087}; -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x28aa,0x28aa,0x28aa,0x28aa,0x606c,3,0x789f,0x7900,0x7900,0x7900,0xb11ae,0x2a75631,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x28aa,0x28aa,0x28aa,0x28aa,0x6196,3,0x7a1d,0x7a7e,0x7a7e,0x7a7e,0xb11ae,0x2a75631,0,0,0,0}; #endif // INCLUDED_FROM_UCHAR_C diff --git a/source/common/ucharstrie.cpp b/source/common/ucharstrie.cpp index d04d315..e0b33af 100644 --- a/source/common/ucharstrie.cpp +++ b/source/common/ucharstrie.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucharstrie.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -175,7 +175,8 @@ UCharsTrie::next(int32_t uchar) { } UStringTrieResult -UCharsTrie::next(const UChar *s, int32_t sLength) { +UCharsTrie::next(ConstChar16Ptr ptr, int32_t sLength) { + const UChar *s=ptr; if(sLength<0 ? *s==0 : sLength==0) { // Empty input. return current(); diff --git a/source/common/ucharstriebuilder.cpp b/source/common/ucharstriebuilder.cpp index 412a58a..694648d 100644 --- a/source/common/ucharstriebuilder.cpp +++ b/source/common/ucharstriebuilder.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucharstriebuilder.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucharstrieiterator.cpp b/source/common/ucharstrieiterator.cpp index 68ba8c2..b313224 100644 --- a/source/common/ucharstrieiterator.cpp +++ b/source/common/ucharstrieiterator.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucharstrieiterator.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -21,7 +21,7 @@ U_NAMESPACE_BEGIN -UCharsTrie::Iterator::Iterator(const UChar *trieUChars, int32_t maxStringLength, +UCharsTrie::Iterator::Iterator(ConstChar16Ptr trieUChars, int32_t maxStringLength, UErrorCode &errorCode) : uchars_(trieUChars), pos_(uchars_), initialPos_(uchars_), diff --git a/source/common/uchriter.cpp b/source/common/uchriter.cpp index fd0a407..822168f 100644 --- a/source/common/uchriter.cpp +++ b/source/common/uchriter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -25,14 +25,14 @@ UCharCharacterIterator::UCharCharacterIterator() // never default construct! } -UCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, +UCharCharacterIterator::UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length) : CharacterIterator(textPtr != 0 ? (length>=0 ? length : u_strlen(textPtr)) : 0), text(textPtr) { } -UCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, +UCharCharacterIterator::UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, int32_t position) : CharacterIterator(textPtr != 0 ? (length>=0 ? length : u_strlen(textPtr)) : 0, position), @@ -40,7 +40,7 @@ UCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, { } -UCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, +UCharCharacterIterator::UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, int32_t textBegin, int32_t textEnd, @@ -349,7 +349,7 @@ UCharCharacterIterator::move32(int32_t delta, CharacterIterator::EOrigin origin) return pos; } -void UCharCharacterIterator::setText(const UChar* newText, +void UCharCharacterIterator::setText(ConstChar16Ptr newText, int32_t newTextLength) { text = newText; if(newText == 0 || newTextLength < 0) { diff --git a/source/common/ucln.h b/source/common/ucln.h index 3c8c66a..fe6666e 100644 --- a/source/common/ucln.h +++ b/source/common/ucln.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucln.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucln_cmn.cpp b/source/common/ucln_cmn.cpp index e089fb2..8cabf13 100644 --- a/source/common/ucln_cmn.cpp +++ b/source/common/ucln_cmn.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: ucln_cmn.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucln_cmn.h b/source/common/ucln_cmn.h index 56fa730..a6ecfd5 100644 --- a/source/common/ucln_cmn.h +++ b/source/common/ucln_cmn.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: ucln_cmn.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucln_imp.h b/source/common/ucln_imp.h index 352776a..1bfcde0 100644 --- a/source/common/ucln_imp.h +++ b/source/common/ucln_imp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucln_imp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -121,7 +121,9 @@ U_CAPI void U_EXPORT2 UCLN_FINI () /* READ READ READ READ! Are you getting compilation errors from windows.h? Any source file which includes this (ucln_imp.h) header MUST be defined with language extensions ON. */ +#ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN +#endif # define VC_EXTRALEAN # define NOUSER # define NOSERVICE diff --git a/source/common/ucmndata.c b/source/common/ucmndata.c deleted file mode 100644 index 6b7d78d..0000000 --- a/source/common/ucmndata.c +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************/ - - -/*------------------------------------------------------------------------------ - * - * UCommonData An abstract interface for dealing with ICU Common Data Files. - * ICU Common Data Files are a grouping of a number of individual - * data items (resources, converters, tables, anything) into a - * single file or dll. The combined format includes a table of - * contents for locating the individual items by name. - * - * Two formats for the table of contents are supported, which is - * why there is an abstract inteface involved. - * - */ - -#include "unicode/utypes.h" -#include "unicode/udata.h" -#include "cstring.h" -#include "ucmndata.h" -#include "udatamem.h" - -#if defined(UDATA_DEBUG) || defined(UDATA_DEBUG_DUMP) -# include -#endif - -U_CFUNC uint16_t -udata_getHeaderSize(const DataHeader *udh) { - if(udh==NULL) { - return 0; - } else if(udh->info.isBigEndian==U_IS_BIG_ENDIAN) { - /* same endianness */ - return udh->dataHeader.headerSize; - } else { - /* opposite endianness */ - uint16_t x=udh->dataHeader.headerSize; - return (uint16_t)((x<<8)|(x>>8)); - } -} - -U_CFUNC uint16_t -udata_getInfoSize(const UDataInfo *info) { - if(info==NULL) { - return 0; - } else if(info->isBigEndian==U_IS_BIG_ENDIAN) { - /* same endianness */ - return info->size; - } else { - /* opposite endianness */ - uint16_t x=info->size; - return (uint16_t)((x<<8)|(x>>8)); - } -} - -/*-----------------------------------------------------------------------------* - * * - * Pointer TOCs. TODO: This form of table-of-contents should be removed * - * because DLLs must be relocated on loading to correct the * - * pointer values and this operation makes shared memory * - * mapping of the data much less likely to work. * - * * - *-----------------------------------------------------------------------------*/ -typedef struct { - const char *entryName; - const DataHeader *pHeader; -} PointerTOCEntry; - - -typedef struct { - uint32_t count; - uint32_t reserved; - PointerTOCEntry entry[2]; /* Actual size is from count. */ -} PointerTOC; - - -/* definition of OffsetTOC struct types moved to ucmndata.h */ - -/*-----------------------------------------------------------------------------* - * * - * entry point lookup implementations * - * * - *-----------------------------------------------------------------------------*/ - -#ifndef MIN -#define MIN(a,b) (((a)<(b)) ? (a) : (b)) -#endif - -/** - * Compare strings where we know the shared prefix length, - * and advance the prefix length as we find that the strings share even more characters. - */ -static int32_t -strcmpAfterPrefix(const char *s1, const char *s2, int32_t *pPrefixLength) { - int32_t pl=*pPrefixLength; - int32_t cmp=0; - s1+=pl; - s2+=pl; - for(;;) { - int32_t c1=(uint8_t)*s1++; - int32_t c2=(uint8_t)*s2++; - cmp=c1-c2; - if(cmp!=0 || c1==0) { /* different or done */ - break; - } - ++pl; /* increment shared same-prefix length */ - } - *pPrefixLength=pl; - return cmp; -} - -static int32_t -offsetTOCPrefixBinarySearch(const char *s, const char *names, - const UDataOffsetTOCEntry *toc, int32_t count) { - int32_t start=0; - int32_t limit=count; - /* - * Remember the shared prefix between s, start and limit, - * and don't compare that shared prefix again. - * The shared prefix should get longer as we narrow the [start, limit[ range. - */ - int32_t startPrefixLength=0; - int32_t limitPrefixLength=0; - if(count==0) { - return -1; - } - /* - * Prime the prefix lengths so that we don't keep prefixLength at 0 until - * both the start and limit indexes have moved. - * At the same time, we find if s is one of the start and (limit-1) names, - * and if not, exclude them from the actual binary search. - */ - if(0==strcmpAfterPrefix(s, names+toc[0].nameOffset, &startPrefixLength)) { - return 0; - } - ++start; - --limit; - if(0==strcmpAfterPrefix(s, names+toc[limit].nameOffset, &limitPrefixLength)) { - return limit; - } - while(starttoc; - if (toc != NULL) { - retVal = toc->count; - } - return retVal; -} - -static const DataHeader * -offsetTOCLookupFn(const UDataMemory *pData, - const char *tocEntryName, - int32_t *pLength, - UErrorCode *pErrorCode) { - const UDataOffsetTOC *toc = (UDataOffsetTOC *)pData->toc; - if(toc!=NULL) { - const char *base=(const char *)toc; - int32_t number, count=(int32_t)toc->count; - - /* perform a binary search for the data in the common data's table of contents */ -#if defined (UDATA_DEBUG_DUMP) - /* list the contents of the TOC each time .. not recommended */ - for(number=0; numberentry[number].nameOffset]); - } -#endif - number=offsetTOCPrefixBinarySearch(tocEntryName, base, toc->entry, count); - if(number>=0) { - /* found it */ - const UDataOffsetTOCEntry *entry=toc->entry+number; -#ifdef UDATA_DEBUG - fprintf(stderr, "%s: Found.\n", tocEntryName); -#endif - if((number+1) < count) { - *pLength = (int32_t)(entry[1].dataOffset - entry->dataOffset); - } else { - *pLength = -1; - } - return (const DataHeader *)(base+entry->dataOffset); - } else { -#ifdef UDATA_DEBUG - fprintf(stderr, "%s: Not found.\n", tocEntryName); -#endif - return NULL; - } - } else { -#ifdef UDATA_DEBUG - fprintf(stderr, "returning header\n"); -#endif - - return pData->pHeader; - } -} - - -static uint32_t pointerTOCEntryCount(const UDataMemory *pData) { - const PointerTOC *toc = (PointerTOC *)pData->toc; - return (uint32_t)((toc != NULL) ? (toc->count) : 0); -} - - -static const DataHeader *pointerTOCLookupFn(const UDataMemory *pData, - const char *name, - int32_t *pLength, - UErrorCode *pErrorCode) { - if(pData->toc!=NULL) { - const PointerTOC *toc = (PointerTOC *)pData->toc; - int32_t number, count=(int32_t)toc->count; - -#if defined (UDATA_DEBUG_DUMP) - /* list the contents of the TOC each time .. not recommended */ - for(number=0; numberentry[number].entryName); - } -#endif - number=pointerTOCPrefixBinarySearch(name, toc->entry, count); - if(number>=0) { - /* found it */ -#ifdef UDATA_DEBUG - fprintf(stderr, "%s: Found.\n", toc->entry[number].entryName); -#endif - *pLength=-1; - return UDataMemory_normalizeDataPointer(toc->entry[number].pHeader); - } else { -#ifdef UDATA_DEBUG - fprintf(stderr, "%s: Not found.\n", name); -#endif - return NULL; - } - } else { - return pData->pHeader; - } -} - -static const commonDataFuncs CmnDFuncs = {offsetTOCLookupFn, offsetTOCEntryCount}; -static const commonDataFuncs ToCPFuncs = {pointerTOCLookupFn, pointerTOCEntryCount}; - - - -/*----------------------------------------------------------------------* - * * - * checkCommonData Validate the format of a common data file. * - * Fill in the virtual function ptr based on TOC type * - * If the data is invalid, close the UDataMemory * - * and set the appropriate error code. * - * * - *----------------------------------------------------------------------*/ -U_CFUNC void udata_checkCommonData(UDataMemory *udm, UErrorCode *err) { - if (U_FAILURE(*err)) { - return; - } - - if(udm==NULL || udm->pHeader==NULL) { - *err=U_INVALID_FORMAT_ERROR; - } else if(!(udm->pHeader->dataHeader.magic1==0xda && - udm->pHeader->dataHeader.magic2==0x27 && - udm->pHeader->info.isBigEndian==U_IS_BIG_ENDIAN && - udm->pHeader->info.charsetFamily==U_CHARSET_FAMILY) - ) { - /* header not valid */ - *err=U_INVALID_FORMAT_ERROR; - } - else if (udm->pHeader->info.dataFormat[0]==0x43 && - udm->pHeader->info.dataFormat[1]==0x6d && - udm->pHeader->info.dataFormat[2]==0x6e && - udm->pHeader->info.dataFormat[3]==0x44 && - udm->pHeader->info.formatVersion[0]==1 - ) { - /* dataFormat="CmnD" */ - udm->vFuncs = &CmnDFuncs; - udm->toc=(const char *)udm->pHeader+udata_getHeaderSize(udm->pHeader); - } - else if(udm->pHeader->info.dataFormat[0]==0x54 && - udm->pHeader->info.dataFormat[1]==0x6f && - udm->pHeader->info.dataFormat[2]==0x43 && - udm->pHeader->info.dataFormat[3]==0x50 && - udm->pHeader->info.formatVersion[0]==1 - ) { - /* dataFormat="ToCP" */ - udm->vFuncs = &ToCPFuncs; - udm->toc=(const char *)udm->pHeader+udata_getHeaderSize(udm->pHeader); - } - else { - /* dataFormat not recognized */ - *err=U_INVALID_FORMAT_ERROR; - } - - if (U_FAILURE(*err)) { - /* If the data is no good and we memory-mapped it ourselves, - * close the memory mapping so it doesn't leak. Note that this has - * no effect on non-memory mapped data, other than clearing fields in udm. - */ - udata_close(udm); - } -} - -/* - * TODO: Add a udata_swapPackageHeader() function that swaps an ICU .dat package - * header but not its sub-items. - * This function will be needed for automatic runtime swapping. - * Sub-items should not be swapped to limit the swapping to the parts of the - * package that are actually used. - * - * Since lengths of items are implicit in the order and offsets of their - * ToC entries, and since offsets are relative to the start of the ToC, - * a swapped version may need to generate a different data structure - * with pointers to the original data items and with their lengths - * (-1 for the last one if it is not known), and maybe even pointers to the - * swapped versions of the items. - * These pointers to swapped versions would establish a cache; - * instead, each open data item could simply own the storage for its swapped - * data. This fits better with the current design. - * - * markus 2003sep18 Jitterbug 2235 - */ diff --git a/source/common/ucmndata.h b/source/common/ucmndata.h index 9e87fad..cc126d5 100644 --- a/source/common/ucmndata.h +++ b/source/common/ucmndata.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/ucnv.c b/source/common/ucnv.c deleted file mode 100644 index 527f86f..0000000 --- a/source/common/ucnv.c +++ /dev/null @@ -1,2918 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1998-2016, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* ucnv.c: -* Implements APIs for the ICU's codeset conversion library; -* mostly calls through internal functions; -* created by Bertrand A. Damiba -* -* Modification History: -* -* Date Name Description -* 04/04/99 helena Fixed internal header inclusion. -* 05/09/00 helena Added implementation to handle fallback mappings. -* 06/20/2000 helena OS/400 port changes; mostly typecast. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ustring.h" -#include "unicode/ucnv.h" -#include "unicode/ucnv_err.h" -#include "unicode/uset.h" -#include "unicode/utf.h" -#include "unicode/utf16.h" -#include "putilimp.h" -#include "cmemory.h" -#include "cstring.h" -#include "uassert.h" -#include "utracimp.h" -#include "ustr_imp.h" -#include "ucnv_imp.h" -#include "ucnv_cnv.h" -#include "ucnv_bld.h" - -/* size of intermediate and preflighting buffers in ucnv_convert() */ -#define CHUNK_SIZE 1024 - -typedef struct UAmbiguousConverter { - const char *name; - const UChar variant5c; -} UAmbiguousConverter; - -static const UAmbiguousConverter ambiguousConverters[]={ - { "ibm-897_P100-1995", 0xa5 }, - { "ibm-942_P120-1999", 0xa5 }, - { "ibm-943_P130-1999", 0xa5 }, - { "ibm-946_P100-1995", 0xa5 }, - { "ibm-33722_P120-1999", 0xa5 }, - { "ibm-1041_P100-1995", 0xa5 }, - /*{ "ibm-54191_P100-2006", 0xa5 },*/ - /*{ "ibm-62383_P100-2007", 0xa5 },*/ - /*{ "ibm-891_P100-1995", 0x20a9 },*/ - { "ibm-944_P100-1995", 0x20a9 }, - { "ibm-949_P110-1999", 0x20a9 }, - { "ibm-1363_P110-1997", 0x20a9 }, - { "ISO_2022,locale=ko,version=0", 0x20a9 }, - { "ibm-1088_P100-1995", 0x20a9 } -}; - -/*Calls through createConverter */ -U_CAPI UConverter* U_EXPORT2 -ucnv_open (const char *name, - UErrorCode * err) -{ - UConverter *r; - - if (err == NULL || U_FAILURE (*err)) { - return NULL; - } - - r = ucnv_createConverter(NULL, name, err); - return r; -} - -U_CAPI UConverter* U_EXPORT2 -ucnv_openPackage (const char *packageName, const char *converterName, UErrorCode * err) -{ - return ucnv_createConverterFromPackage(packageName, converterName, err); -} - -/*Extracts the UChar* to a char* and calls through createConverter */ -U_CAPI UConverter* U_EXPORT2 -ucnv_openU (const UChar * name, - UErrorCode * err) -{ - char asciiName[UCNV_MAX_CONVERTER_NAME_LENGTH]; - - if (err == NULL || U_FAILURE(*err)) - return NULL; - if (name == NULL) - return ucnv_open (NULL, err); - if (u_strlen(name) >= UCNV_MAX_CONVERTER_NAME_LENGTH) - { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - return ucnv_open(u_austrcpy(asciiName, name), err); -} - -/* Copy the string that is represented by the UConverterPlatform enum - * @param platformString An output buffer - * @param platform An enum representing a platform - * @return the length of the copied string. - */ -static int32_t -ucnv_copyPlatformString(char *platformString, UConverterPlatform pltfrm) -{ - switch (pltfrm) - { - case UCNV_IBM: - uprv_strcpy(platformString, "ibm-"); - return 4; - case UCNV_UNKNOWN: - break; - } - - /* default to empty string */ - *platformString = 0; - return 0; -} - -/*Assumes a $platform-#codepage.$CONVERTER_FILE_EXTENSION scheme and calls - *through createConverter*/ -U_CAPI UConverter* U_EXPORT2 -ucnv_openCCSID (int32_t codepage, - UConverterPlatform platform, - UErrorCode * err) -{ - char myName[UCNV_MAX_CONVERTER_NAME_LENGTH]; - int32_t myNameLen; - - if (err == NULL || U_FAILURE (*err)) - return NULL; - - /* ucnv_copyPlatformString could return "ibm-" or "cp" */ - myNameLen = ucnv_copyPlatformString(myName, platform); - T_CString_integerToString(myName + myNameLen, codepage, 10); - - return ucnv_createConverter(NULL, myName, err); -} - -/* Creating a temporary stack-based object that can be used in one thread, -and created from a converter that is shared across threads. -*/ - -U_CAPI UConverter* U_EXPORT2 -ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status) -{ - UConverter *localConverter, *allocatedConverter; - int32_t stackBufferSize; - int32_t bufferSizeNeeded; - char *stackBufferChars = (char *)stackBuffer; - UErrorCode cbErr; - UConverterToUnicodeArgs toUArgs = { - sizeof(UConverterToUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - UConverterFromUnicodeArgs fromUArgs = { - sizeof(UConverterFromUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - - UTRACE_ENTRY_OC(UTRACE_UCNV_CLONE); - - if (status == NULL || U_FAILURE(*status)){ - UTRACE_EXIT_STATUS(status? *status: U_ILLEGAL_ARGUMENT_ERROR); - return NULL; - } - - if (cnv == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - UTRACE_EXIT_STATUS(*status); - return NULL; - } - - UTRACE_DATA3(UTRACE_OPEN_CLOSE, "clone converter %s at %p into stackBuffer %p", - ucnv_getName(cnv, status), cnv, stackBuffer); - - if (cnv->sharedData->impl->safeClone != NULL) { - /* call the custom safeClone function for sizing */ - bufferSizeNeeded = 0; - cnv->sharedData->impl->safeClone(cnv, NULL, &bufferSizeNeeded, status); - if (U_FAILURE(*status)) { - UTRACE_EXIT_STATUS(*status); - return NULL; - } - } - else - { - /* inherent sizing */ - bufferSizeNeeded = sizeof(UConverter); - } - - if (pBufferSize == NULL) { - stackBufferSize = 1; - pBufferSize = &stackBufferSize; - } else { - stackBufferSize = *pBufferSize; - if (stackBufferSize <= 0){ /* 'preflighting' request - set needed size into *pBufferSize */ - *pBufferSize = bufferSizeNeeded; - UTRACE_EXIT_VALUE(bufferSizeNeeded); - return NULL; - } - } - - - /* Pointers on 64-bit platforms need to be aligned - * on a 64-bit boundary in memory. - */ - if (U_ALIGNMENT_OFFSET(stackBuffer) != 0) { - int32_t offsetUp = (int32_t)U_ALIGNMENT_OFFSET_UP(stackBufferChars); - if(stackBufferSize > offsetUp) { - stackBufferSize -= offsetUp; - stackBufferChars += offsetUp; - } else { - /* prevent using the stack buffer but keep the size > 0 so that we do not just preflight */ - stackBufferSize = 1; - } - } - - stackBuffer = (void *)stackBufferChars; - - /* Now, see if we must allocate any memory */ - if (stackBufferSize < bufferSizeNeeded || stackBuffer == NULL) - { - /* allocate one here...*/ - localConverter = allocatedConverter = (UConverter *) uprv_malloc (bufferSizeNeeded); - - if(localConverter == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - UTRACE_EXIT_STATUS(*status); - return NULL; - } - *status = U_SAFECLONE_ALLOCATED_WARNING; - - /* record the fact that memory was allocated */ - *pBufferSize = bufferSizeNeeded; - } else { - /* just use the stack buffer */ - localConverter = (UConverter*) stackBuffer; - allocatedConverter = NULL; - } - - uprv_memset(localConverter, 0, bufferSizeNeeded); - - /* Copy initial state */ - uprv_memcpy(localConverter, cnv, sizeof(UConverter)); - localConverter->isCopyLocal = localConverter->isExtraLocal = FALSE; - - /* copy the substitution string */ - if (cnv->subChars == (uint8_t *)cnv->subUChars) { - localConverter->subChars = (uint8_t *)localConverter->subUChars; - } else { - localConverter->subChars = (uint8_t *)uprv_malloc(UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); - if (localConverter->subChars == NULL) { - uprv_free(allocatedConverter); - UTRACE_EXIT_STATUS(*status); - return NULL; - } - uprv_memcpy(localConverter->subChars, cnv->subChars, UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); - } - - /* now either call the safeclone fcn or not */ - if (cnv->sharedData->impl->safeClone != NULL) { - /* call the custom safeClone function */ - localConverter = cnv->sharedData->impl->safeClone(cnv, localConverter, pBufferSize, status); - } - - if(localConverter==NULL || U_FAILURE(*status)) { - if (allocatedConverter != NULL && allocatedConverter->subChars != (uint8_t *)allocatedConverter->subUChars) { - uprv_free(allocatedConverter->subChars); - } - uprv_free(allocatedConverter); - UTRACE_EXIT_STATUS(*status); - return NULL; - } - - /* increment refcount of shared data if needed */ - if (cnv->sharedData->isReferenceCounted) { - ucnv_incrementRefCount(cnv->sharedData); - } - - if(localConverter == (UConverter*)stackBuffer) { - /* we're using user provided data - set to not destroy */ - localConverter->isCopyLocal = TRUE; - } - - /* allow callback functions to handle any memory allocation */ - toUArgs.converter = fromUArgs.converter = localConverter; - cbErr = U_ZERO_ERROR; - cnv->fromCharErrorBehaviour(cnv->toUContext, &toUArgs, NULL, 0, UCNV_CLONE, &cbErr); - cbErr = U_ZERO_ERROR; - cnv->fromUCharErrorBehaviour(cnv->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_CLONE, &cbErr); - - UTRACE_EXIT_PTR_STATUS(localConverter, *status); - return localConverter; -} - - - -/*Decreases the reference counter in the shared immutable section of the object - *and frees the mutable part*/ - -U_CAPI void U_EXPORT2 -ucnv_close (UConverter * converter) -{ - UErrorCode errorCode = U_ZERO_ERROR; - - UTRACE_ENTRY_OC(UTRACE_UCNV_CLOSE); - - if (converter == NULL) - { - UTRACE_EXIT(); - return; - } - - UTRACE_DATA3(UTRACE_OPEN_CLOSE, "close converter %s at %p, isCopyLocal=%b", - ucnv_getName(converter, &errorCode), converter, converter->isCopyLocal); - - /* In order to speed up the close, only call the callbacks when they have been changed. - This performance check will only work when the callbacks are set within a shared library - or from user code that statically links this code. */ - /* first, notify the callback functions that the converter is closed */ - if (converter->fromCharErrorBehaviour != UCNV_TO_U_DEFAULT_CALLBACK) { - UConverterToUnicodeArgs toUArgs = { - sizeof(UConverterToUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - - toUArgs.converter = converter; - errorCode = U_ZERO_ERROR; - converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_CLOSE, &errorCode); - } - if (converter->fromUCharErrorBehaviour != UCNV_FROM_U_DEFAULT_CALLBACK) { - UConverterFromUnicodeArgs fromUArgs = { - sizeof(UConverterFromUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - fromUArgs.converter = converter; - errorCode = U_ZERO_ERROR; - converter->fromUCharErrorBehaviour(converter->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_CLOSE, &errorCode); - } - - if (converter->sharedData->impl->close != NULL) { - converter->sharedData->impl->close(converter); - } - - if (converter->subChars != (uint8_t *)converter->subUChars) { - uprv_free(converter->subChars); - } - - if (converter->sharedData->isReferenceCounted) { - ucnv_unloadSharedDataIfReady(converter->sharedData); - } - - if(!converter->isCopyLocal){ - uprv_free(converter); - } - - UTRACE_EXIT(); -} - -/*returns a single Name from the list, will return NULL if out of bounds - */ -U_CAPI const char* U_EXPORT2 -ucnv_getAvailableName (int32_t n) -{ - if (0 <= n && n <= 0xffff) { - UErrorCode err = U_ZERO_ERROR; - const char *name = ucnv_bld_getAvailableConverter((uint16_t)n, &err); - if (U_SUCCESS(err)) { - return name; - } - } - return NULL; -} - -U_CAPI int32_t U_EXPORT2 -ucnv_countAvailable () -{ - UErrorCode err = U_ZERO_ERROR; - return ucnv_bld_countAvailableConverters(&err); -} - -U_CAPI void U_EXPORT2 -ucnv_getSubstChars (const UConverter * converter, - char *mySubChar, - int8_t * len, - UErrorCode * err) -{ - if (U_FAILURE (*err)) - return; - - if (converter->subCharLen <= 0) { - /* Unicode string or empty string from ucnv_setSubstString(). */ - *len = 0; - return; - } - - if (*len < converter->subCharLen) /*not enough space in subChars */ - { - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return; - } - - uprv_memcpy (mySubChar, converter->subChars, converter->subCharLen); /*fills in the subchars */ - *len = converter->subCharLen; /*store # of bytes copied to buffer */ -} - -U_CAPI void U_EXPORT2 -ucnv_setSubstChars (UConverter * converter, - const char *mySubChar, - int8_t len, - UErrorCode * err) -{ - if (U_FAILURE (*err)) - return; - - /*Makes sure that the subChar is within the codepages char length boundaries */ - if ((len > converter->sharedData->staticData->maxBytesPerChar) - || (len < converter->sharedData->staticData->minBytesPerChar)) - { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - uprv_memcpy (converter->subChars, mySubChar, len); /*copies the subchars */ - converter->subCharLen = len; /*sets the new len */ - - /* - * There is currently (2001Feb) no separate API to set/get subChar1. - * In order to always have subChar written after it is explicitly set, - * we set subChar1 to 0. - */ - converter->subChar1 = 0; - - return; -} - -U_CAPI void U_EXPORT2 -ucnv_setSubstString(UConverter *cnv, - const UChar *s, - int32_t length, - UErrorCode *err) { - UAlignedMemory cloneBuffer[U_CNV_SAFECLONE_BUFFERSIZE / sizeof(UAlignedMemory) + 1]; - char chars[UCNV_ERROR_BUFFER_LENGTH]; - - UConverter *clone; - uint8_t *subChars; - int32_t cloneSize, length8; - - /* Let the following functions check all arguments. */ - cloneSize = sizeof(cloneBuffer); - clone = ucnv_safeClone(cnv, cloneBuffer, &cloneSize, err); - ucnv_setFromUCallBack(clone, UCNV_FROM_U_CALLBACK_STOP, NULL, NULL, NULL, err); - length8 = ucnv_fromUChars(clone, chars, (int32_t)sizeof(chars), s, length, err); - ucnv_close(clone); - if (U_FAILURE(*err)) { - return; - } - - if (cnv->sharedData->impl->writeSub == NULL -#if !UCONFIG_NO_LEGACY_CONVERSION - || (cnv->sharedData->staticData->conversionType == UCNV_MBCS && - ucnv_MBCSGetType(cnv) != UCNV_EBCDIC_STATEFUL) -#endif - ) { - /* The converter is not stateful. Store the charset bytes as a fixed string. */ - subChars = (uint8_t *)chars; - } else { - /* - * The converter has a non-default writeSub() function, indicating - * that it is stateful. - * Store the Unicode string for on-the-fly conversion for correct - * state handling. - */ - if (length > UCNV_ERROR_BUFFER_LENGTH) { - /* - * Should not occur. The converter should output at least one byte - * per UChar, which means that ucnv_fromUChars() should catch all - * overflows. - */ - *err = U_BUFFER_OVERFLOW_ERROR; - return; - } - subChars = (uint8_t *)s; - if (length < 0) { - length = u_strlen(s); - } - length8 = length * U_SIZEOF_UCHAR; - } - - /* - * For storing the substitution string, select either the small buffer inside - * UConverter or allocate a subChars buffer. - */ - if (length8 > UCNV_MAX_SUBCHAR_LEN) { - /* Use a separate buffer for the string. Outside UConverter to not make it too large. */ - if (cnv->subChars == (uint8_t *)cnv->subUChars) { - /* Allocate a new buffer for the string. */ - cnv->subChars = (uint8_t *)uprv_malloc(UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); - if (cnv->subChars == NULL) { - cnv->subChars = (uint8_t *)cnv->subUChars; - *err = U_MEMORY_ALLOCATION_ERROR; - return; - } - uprv_memset(cnv->subChars, 0, UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); - } - } - - /* Copy the substitution string into the UConverter or its subChars buffer. */ - if (length8 == 0) { - cnv->subCharLen = 0; - } else { - uprv_memcpy(cnv->subChars, subChars, length8); - if (subChars == (uint8_t *)chars) { - cnv->subCharLen = (int8_t)length8; - } else /* subChars == s */ { - cnv->subCharLen = (int8_t)-length; - } - } - - /* See comment in ucnv_setSubstChars(). */ - cnv->subChar1 = 0; -} - -/*resets the internal states of a converter - *goal : have the same behaviour than a freshly created converter - */ -static void _reset(UConverter *converter, UConverterResetChoice choice, - UBool callCallback) { - if(converter == NULL) { - return; - } - - if(callCallback) { - /* first, notify the callback functions that the converter is reset */ - UErrorCode errorCode; - - if(choice<=UCNV_RESET_TO_UNICODE && converter->fromCharErrorBehaviour != UCNV_TO_U_DEFAULT_CALLBACK) { - UConverterToUnicodeArgs toUArgs = { - sizeof(UConverterToUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - toUArgs.converter = converter; - errorCode = U_ZERO_ERROR; - converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_RESET, &errorCode); - } - if(choice!=UCNV_RESET_TO_UNICODE && converter->fromUCharErrorBehaviour != UCNV_FROM_U_DEFAULT_CALLBACK) { - UConverterFromUnicodeArgs fromUArgs = { - sizeof(UConverterFromUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - fromUArgs.converter = converter; - errorCode = U_ZERO_ERROR; - converter->fromUCharErrorBehaviour(converter->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_RESET, &errorCode); - } - } - - /* now reset the converter itself */ - if(choice<=UCNV_RESET_TO_UNICODE) { - converter->toUnicodeStatus = converter->sharedData->toUnicodeStatus; - converter->mode = 0; - converter->toULength = 0; - converter->invalidCharLength = converter->UCharErrorBufferLength = 0; - converter->preToULength = 0; - } - if(choice!=UCNV_RESET_TO_UNICODE) { - converter->fromUnicodeStatus = 0; - converter->fromUChar32 = 0; - converter->invalidUCharLength = converter->charErrorBufferLength = 0; - converter->preFromUFirstCP = U_SENTINEL; - converter->preFromULength = 0; - } - - if (converter->sharedData->impl->reset != NULL) { - /* call the custom reset function */ - converter->sharedData->impl->reset(converter, choice); - } -} - -U_CAPI void U_EXPORT2 -ucnv_reset(UConverter *converter) -{ - _reset(converter, UCNV_RESET_BOTH, TRUE); -} - -U_CAPI void U_EXPORT2 -ucnv_resetToUnicode(UConverter *converter) -{ - _reset(converter, UCNV_RESET_TO_UNICODE, TRUE); -} - -U_CAPI void U_EXPORT2 -ucnv_resetFromUnicode(UConverter *converter) -{ - _reset(converter, UCNV_RESET_FROM_UNICODE, TRUE); -} - -U_CAPI int8_t U_EXPORT2 -ucnv_getMaxCharSize (const UConverter * converter) -{ - return converter->maxBytesPerUChar; -} - - -U_CAPI int8_t U_EXPORT2 -ucnv_getMinCharSize (const UConverter * converter) -{ - return converter->sharedData->staticData->minBytesPerChar; -} - -U_CAPI const char* U_EXPORT2 -ucnv_getName (const UConverter * converter, UErrorCode * err) - -{ - if (U_FAILURE (*err)) - return NULL; - if(converter->sharedData->impl->getName){ - const char* temp= converter->sharedData->impl->getName(converter); - if(temp) - return temp; - } - return converter->sharedData->staticData->name; -} - -U_CAPI int32_t U_EXPORT2 -ucnv_getCCSID(const UConverter * converter, - UErrorCode * err) -{ - int32_t ccsid; - if (U_FAILURE (*err)) - return -1; - - ccsid = converter->sharedData->staticData->codepage; - if (ccsid == 0) { - /* Rare case. This is for cases like gb18030, - which doesn't have an IBM canonical name, but does have an IBM alias. */ - const char *standardName = ucnv_getStandardName(ucnv_getName(converter, err), "IBM", err); - if (U_SUCCESS(*err) && standardName) { - const char *ccsidStr = uprv_strchr(standardName, '-'); - if (ccsidStr) { - ccsid = (int32_t)atol(ccsidStr+1); /* +1 to skip '-' */ - } - } - } - return ccsid; -} - - -U_CAPI UConverterPlatform U_EXPORT2 -ucnv_getPlatform (const UConverter * converter, - UErrorCode * err) -{ - if (U_FAILURE (*err)) - return UCNV_UNKNOWN; - - return (UConverterPlatform)converter->sharedData->staticData->platform; -} - -U_CAPI void U_EXPORT2 - ucnv_getToUCallBack (const UConverter * converter, - UConverterToUCallback *action, - const void **context) -{ - *action = converter->fromCharErrorBehaviour; - *context = converter->toUContext; -} - -U_CAPI void U_EXPORT2 - ucnv_getFromUCallBack (const UConverter * converter, - UConverterFromUCallback *action, - const void **context) -{ - *action = converter->fromUCharErrorBehaviour; - *context = converter->fromUContext; -} - -U_CAPI void U_EXPORT2 -ucnv_setToUCallBack (UConverter * converter, - UConverterToUCallback newAction, - const void* newContext, - UConverterToUCallback *oldAction, - const void** oldContext, - UErrorCode * err) -{ - if (U_FAILURE (*err)) - return; - if (oldAction) *oldAction = converter->fromCharErrorBehaviour; - converter->fromCharErrorBehaviour = newAction; - if (oldContext) *oldContext = converter->toUContext; - converter->toUContext = newContext; -} - -U_CAPI void U_EXPORT2 -ucnv_setFromUCallBack (UConverter * converter, - UConverterFromUCallback newAction, - const void* newContext, - UConverterFromUCallback *oldAction, - const void** oldContext, - UErrorCode * err) -{ - if (U_FAILURE (*err)) - return; - if (oldAction) *oldAction = converter->fromUCharErrorBehaviour; - converter->fromUCharErrorBehaviour = newAction; - if (oldContext) *oldContext = converter->fromUContext; - converter->fromUContext = newContext; -} - -static void -_updateOffsets(int32_t *offsets, int32_t length, - int32_t sourceIndex, int32_t errorInputLength) { - int32_t *limit; - int32_t delta, offset; - - if(sourceIndex>=0) { - /* - * adjust each offset by adding the previous sourceIndex - * minus the length of the input sequence that caused an - * error, if any - */ - delta=sourceIndex-errorInputLength; - } else { - /* - * set each offset to -1 because this conversion function - * does not handle offsets - */ - delta=-1; - } - - limit=offsets+length; - if(delta==0) { - /* most common case, nothing to do */ - } else if(delta>0) { - /* add the delta to each offset (but not if the offset is <0) */ - while(offsets=0) { - *offsets=offset+delta; - } - ++offsets; - } - } else /* delta<0 */ { - /* - * set each offset to -1 because this conversion function - * does not handle offsets - * or the error input sequence started in a previous buffer - */ - while(offsetsconverter; - s=pArgs->source; - t=pArgs->target; - offsets=pArgs->offsets; - - /* get the converter implementation function */ - sourceIndex=0; - if(offsets==NULL) { - fromUnicode=cnv->sharedData->impl->fromUnicode; - } else { - fromUnicode=cnv->sharedData->impl->fromUnicodeWithOffsets; - if(fromUnicode==NULL) { - /* there is no WithOffsets implementation */ - fromUnicode=cnv->sharedData->impl->fromUnicode; - /* we will write -1 for each offset */ - sourceIndex=-1; - } - } - - if(cnv->preFromULength>=0) { - /* normal mode */ - realSource=NULL; - - /* avoid compiler warnings - not otherwise necessary, and the values do not matter */ - realSourceLimit=NULL; - realFlush=FALSE; - realSourceIndex=0; - } else { - /* - * Previous m:n conversion stored source units from a partial match - * and failed to consume all of them. - * We need to "replay" them from a temporary buffer and convert them first. - */ - realSource=pArgs->source; - realSourceLimit=pArgs->sourceLimit; - realFlush=pArgs->flush; - realSourceIndex=sourceIndex; - - uprv_memcpy(replay, cnv->preFromU, -cnv->preFromULength*U_SIZEOF_UCHAR); - pArgs->source=replay; - pArgs->sourceLimit=replay-cnv->preFromULength; - pArgs->flush=FALSE; - sourceIndex=-1; - - cnv->preFromULength=0; - } - - /* - * loop for conversion and error handling - * - * loop { - * convert - * loop { - * update offsets - * handle end of input - * handle errors/call callback - * } - * } - */ - for(;;) { - if(U_SUCCESS(*err)) { - /* convert */ - fromUnicode(pArgs, err); - - /* - * set a flag for whether the converter - * successfully processed the end of the input - * - * need not check cnv->preFromULength==0 because a replay (<0) will cause - * sflush && pArgs->source==pArgs->sourceLimit && - cnv->fromUChar32==0); - } else { - /* handle error from ucnv_convertEx() */ - converterSawEndOfInput=FALSE; - } - - /* no callback called yet for this iteration */ - calledCallback=FALSE; - - /* no sourceIndex adjustment for conversion, only for callback output */ - errorInputLength=0; - - /* - * loop for offsets and error handling - * - * iterates at most 3 times: - * 1. to clean up after the conversion function - * 2. after the callback - * 3. after the callback again if there was truncated input - */ - for(;;) { - /* update offsets if we write any */ - if(offsets!=NULL) { - int32_t length=(int32_t)(pArgs->target-t); - if(length>0) { - _updateOffsets(offsets, length, sourceIndex, errorInputLength); - - /* - * if a converter handles offsets and updates the offsets - * pointer at the end, then pArgs->offset should not change - * here; - * however, some converters do not handle offsets at all - * (sourceIndex<0) or may not update the offsets pointer - */ - pArgs->offsets=offsets+=length; - } - - if(sourceIndex>=0) { - sourceIndex+=(int32_t)(pArgs->source-s); - } - } - - if(cnv->preFromULength<0) { - /* - * switch the source to new replay units (cannot occur while replaying) - * after offset handling and before end-of-input and callback handling - */ - if(realSource==NULL) { - realSource=pArgs->source; - realSourceLimit=pArgs->sourceLimit; - realFlush=pArgs->flush; - realSourceIndex=sourceIndex; - - uprv_memcpy(replay, cnv->preFromU, -cnv->preFromULength*U_SIZEOF_UCHAR); - pArgs->source=replay; - pArgs->sourceLimit=replay-cnv->preFromULength; - pArgs->flush=FALSE; - if((sourceIndex+=cnv->preFromULength)<0) { - sourceIndex=-1; - } - - cnv->preFromULength=0; - } else { - /* see implementation note before _fromUnicodeWithCallback() */ - U_ASSERT(realSource==NULL); - *err=U_INTERNAL_PROGRAM_ERROR; - } - } - - /* update pointers */ - s=pArgs->source; - t=pArgs->target; - - if(U_SUCCESS(*err)) { - if(ssourceLimit) { - /* - * continue with the conversion loop while there is still input left - * (continue converting by breaking out of only the inner loop) - */ - break; - } else if(realSource!=NULL) { - /* switch back from replaying to the real source and continue */ - pArgs->source=realSource; - pArgs->sourceLimit=realSourceLimit; - pArgs->flush=realFlush; - sourceIndex=realSourceIndex; - - realSource=NULL; - break; - } else if(pArgs->flush && cnv->fromUChar32!=0) { - /* - * the entire input stream is consumed - * and there is a partial, truncated input sequence left - */ - - /* inject an error and continue with callback handling */ - *err=U_TRUNCATED_CHAR_FOUND; - calledCallback=FALSE; /* new error condition */ - } else { - /* input consumed */ - if(pArgs->flush) { - /* - * return to the conversion loop once more if the flush - * flag is set and the conversion function has not - * successfully processed the end of the input yet - * - * (continue converting by breaking out of only the inner loop) - */ - if(!converterSawEndOfInput) { - break; - } - - /* reset the converter without calling the callback function */ - _reset(cnv, UCNV_RESET_FROM_UNICODE, FALSE); - } - - /* done successfully */ - return; - } - } - - /* U_FAILURE(*err) */ - { - UErrorCode e; - - if( calledCallback || - (e=*err)==U_BUFFER_OVERFLOW_ERROR || - (e!=U_INVALID_CHAR_FOUND && - e!=U_ILLEGAL_CHAR_FOUND && - e!=U_TRUNCATED_CHAR_FOUND) - ) { - /* - * the callback did not or cannot resolve the error: - * set output pointers and return - * - * the check for buffer overflow is redundant but it is - * a high-runner case and hopefully documents the intent - * well - * - * if we were replaying, then the replay buffer must be - * copied back into the UConverter - * and the real arguments must be restored - */ - if(realSource!=NULL) { - int32_t length; - - U_ASSERT(cnv->preFromULength==0); - - length=(int32_t)(pArgs->sourceLimit-pArgs->source); - if(length>0) { - u_memcpy(cnv->preFromU, pArgs->source, length); - cnv->preFromULength=(int8_t)-length; - } - - pArgs->source=realSource; - pArgs->sourceLimit=realSourceLimit; - pArgs->flush=realFlush; - } - - return; - } - } - - /* callback handling */ - { - UChar32 codePoint; - - /* get and write the code point */ - codePoint=cnv->fromUChar32; - errorInputLength=0; - U16_APPEND_UNSAFE(cnv->invalidUCharBuffer, errorInputLength, codePoint); - cnv->invalidUCharLength=(int8_t)errorInputLength; - - /* set the converter state to deal with the next character */ - cnv->fromUChar32=0; - - /* call the callback function */ - cnv->fromUCharErrorBehaviour(cnv->fromUContext, pArgs, - cnv->invalidUCharBuffer, errorInputLength, codePoint, - *err==U_INVALID_CHAR_FOUND ? UCNV_UNASSIGNED : UCNV_ILLEGAL, - err); - } - - /* - * loop back to the offset handling - * - * this flag will indicate after offset handling - * that a callback was called; - * if the callback did not resolve the error, then we return - */ - calledCallback=TRUE; - } - } -} - -/* - * Output the fromUnicode overflow buffer. - * Call this function if(cnv->charErrorBufferLength>0). - * @return TRUE if overflow - */ -static UBool -ucnv_outputOverflowFromUnicode(UConverter *cnv, - char **target, const char *targetLimit, - int32_t **pOffsets, - UErrorCode *err) { - int32_t *offsets; - char *overflow, *t; - int32_t i, length; - - t=*target; - if(pOffsets!=NULL) { - offsets=*pOffsets; - } else { - offsets=NULL; - } - - overflow=(char *)cnv->charErrorBuffer; - length=cnv->charErrorBufferLength; - i=0; - while(icharErrorBufferLength=(int8_t)j; - *target=t; - if(offsets!=NULL) { - *pOffsets=offsets; - } - *err=U_BUFFER_OVERFLOW_ERROR; - return TRUE; - } - - /* copy the overflow contents to the target */ - *t++=overflow[i++]; - if(offsets!=NULL) { - *offsets++=-1; /* no source index available for old output */ - } - } - - /* the overflow buffer is completely copied to the target */ - cnv->charErrorBufferLength=0; - *target=t; - if(offsets!=NULL) { - *pOffsets=offsets; - } - return FALSE; -} - -U_CAPI void U_EXPORT2 -ucnv_fromUnicode(UConverter *cnv, - char **target, const char *targetLimit, - const UChar **source, const UChar *sourceLimit, - int32_t *offsets, - UBool flush, - UErrorCode *err) { - UConverterFromUnicodeArgs args; - const UChar *s; - char *t; - - /* check parameters */ - if(err==NULL || U_FAILURE(*err)) { - return; - } - - if(cnv==NULL || target==NULL || source==NULL) { - *err=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - s=*source; - t=*target; - - if ((const void *)U_MAX_PTR(sourceLimit) == (const void *)sourceLimit) { - /* - Prevent code from going into an infinite loop in case we do hit this - limit. The limit pointer is expected to be on a UChar * boundary. - This also prevents the next argument check from failing. - */ - sourceLimit = (const UChar *)(((const char *)sourceLimit) - 1); - } - - /* - * All these conditions should never happen. - * - * 1) Make sure that the limits are >= to the address source or target - * - * 2) Make sure that the buffer sizes do not exceed the number range for - * int32_t because some functions use the size (in units or bytes) - * rather than comparing pointers, and because offsets are int32_t values. - * - * size_t is guaranteed to be unsigned and large enough for the job. - * - * Return with an error instead of adjusting the limits because we would - * not be able to maintain the semantics that either the source must be - * consumed or the target filled (unless an error occurs). - * An adjustment would be targetLimit=t+0x7fffffff; for example. - * - * 3) Make sure that the user didn't incorrectly cast a UChar * pointer - * to a char * pointer and provide an incomplete UChar code unit. - */ - if (sourceLimit(size_t)0x3fffffff && sourceLimit>s) || - ((size_t)(targetLimit-t)>(size_t)0x7fffffff && targetLimit>t) || - (((const char *)sourceLimit-(const char *)s) & 1) != 0) - { - *err=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - /* output the target overflow buffer */ - if( cnv->charErrorBufferLength>0 && - ucnv_outputOverflowFromUnicode(cnv, target, targetLimit, &offsets, err) - ) { - /* U_BUFFER_OVERFLOW_ERROR */ - return; - } - /* *target may have moved, therefore stop using t */ - - if(!flush && s==sourceLimit && cnv->preFromULength>=0) { - /* the overflow buffer is emptied and there is no new input: we are done */ - return; - } - - /* - * Do not simply return with a buffer overflow error if - * !flush && t==targetLimit - * because it is possible that the source will not generate any output. - * For example, the skip callback may be called; - * it does not output anything. - */ - - /* prepare the converter arguments */ - args.converter=cnv; - args.flush=flush; - args.offsets=offsets; - args.source=s; - args.sourceLimit=sourceLimit; - args.target=*target; - args.targetLimit=targetLimit; - args.size=sizeof(args); - - _fromUnicodeWithCallback(&args, err); - - *source=args.source; - *target=args.target; -} - -/* ucnv_toUnicode() --------------------------------------------------------- */ - -static void -_toUnicodeWithCallback(UConverterToUnicodeArgs *pArgs, UErrorCode *err) { - UConverterToUnicode toUnicode; - UConverter *cnv; - const char *s; - UChar *t; - int32_t *offsets; - int32_t sourceIndex; - int32_t errorInputLength; - UBool converterSawEndOfInput, calledCallback; - - /* variables for m:n conversion */ - char replay[UCNV_EXT_MAX_BYTES]; - const char *realSource, *realSourceLimit; - int32_t realSourceIndex; - UBool realFlush; - - cnv=pArgs->converter; - s=pArgs->source; - t=pArgs->target; - offsets=pArgs->offsets; - - /* get the converter implementation function */ - sourceIndex=0; - if(offsets==NULL) { - toUnicode=cnv->sharedData->impl->toUnicode; - } else { - toUnicode=cnv->sharedData->impl->toUnicodeWithOffsets; - if(toUnicode==NULL) { - /* there is no WithOffsets implementation */ - toUnicode=cnv->sharedData->impl->toUnicode; - /* we will write -1 for each offset */ - sourceIndex=-1; - } - } - - if(cnv->preToULength>=0) { - /* normal mode */ - realSource=NULL; - - /* avoid compiler warnings - not otherwise necessary, and the values do not matter */ - realSourceLimit=NULL; - realFlush=FALSE; - realSourceIndex=0; - } else { - /* - * Previous m:n conversion stored source units from a partial match - * and failed to consume all of them. - * We need to "replay" them from a temporary buffer and convert them first. - */ - realSource=pArgs->source; - realSourceLimit=pArgs->sourceLimit; - realFlush=pArgs->flush; - realSourceIndex=sourceIndex; - - uprv_memcpy(replay, cnv->preToU, -cnv->preToULength); - pArgs->source=replay; - pArgs->sourceLimit=replay-cnv->preToULength; - pArgs->flush=FALSE; - sourceIndex=-1; - - cnv->preToULength=0; - } - - /* - * loop for conversion and error handling - * - * loop { - * convert - * loop { - * update offsets - * handle end of input - * handle errors/call callback - * } - * } - */ - for(;;) { - if(U_SUCCESS(*err)) { - /* convert */ - toUnicode(pArgs, err); - - /* - * set a flag for whether the converter - * successfully processed the end of the input - * - * need not check cnv->preToULength==0 because a replay (<0) will cause - * sflush && pArgs->source==pArgs->sourceLimit && - cnv->toULength==0); - } else { - /* handle error from getNextUChar() or ucnv_convertEx() */ - converterSawEndOfInput=FALSE; - } - - /* no callback called yet for this iteration */ - calledCallback=FALSE; - - /* no sourceIndex adjustment for conversion, only for callback output */ - errorInputLength=0; - - /* - * loop for offsets and error handling - * - * iterates at most 3 times: - * 1. to clean up after the conversion function - * 2. after the callback - * 3. after the callback again if there was truncated input - */ - for(;;) { - /* update offsets if we write any */ - if(offsets!=NULL) { - int32_t length=(int32_t)(pArgs->target-t); - if(length>0) { - _updateOffsets(offsets, length, sourceIndex, errorInputLength); - - /* - * if a converter handles offsets and updates the offsets - * pointer at the end, then pArgs->offset should not change - * here; - * however, some converters do not handle offsets at all - * (sourceIndex<0) or may not update the offsets pointer - */ - pArgs->offsets=offsets+=length; - } - - if(sourceIndex>=0) { - sourceIndex+=(int32_t)(pArgs->source-s); - } - } - - if(cnv->preToULength<0) { - /* - * switch the source to new replay units (cannot occur while replaying) - * after offset handling and before end-of-input and callback handling - */ - if(realSource==NULL) { - realSource=pArgs->source; - realSourceLimit=pArgs->sourceLimit; - realFlush=pArgs->flush; - realSourceIndex=sourceIndex; - - uprv_memcpy(replay, cnv->preToU, -cnv->preToULength); - pArgs->source=replay; - pArgs->sourceLimit=replay-cnv->preToULength; - pArgs->flush=FALSE; - if((sourceIndex+=cnv->preToULength)<0) { - sourceIndex=-1; - } - - cnv->preToULength=0; - } else { - /* see implementation note before _fromUnicodeWithCallback() */ - U_ASSERT(realSource==NULL); - *err=U_INTERNAL_PROGRAM_ERROR; - } - } - - /* update pointers */ - s=pArgs->source; - t=pArgs->target; - - if(U_SUCCESS(*err)) { - if(ssourceLimit) { - /* - * continue with the conversion loop while there is still input left - * (continue converting by breaking out of only the inner loop) - */ - break; - } else if(realSource!=NULL) { - /* switch back from replaying to the real source and continue */ - pArgs->source=realSource; - pArgs->sourceLimit=realSourceLimit; - pArgs->flush=realFlush; - sourceIndex=realSourceIndex; - - realSource=NULL; - break; - } else if(pArgs->flush && cnv->toULength>0) { - /* - * the entire input stream is consumed - * and there is a partial, truncated input sequence left - */ - - /* inject an error and continue with callback handling */ - *err=U_TRUNCATED_CHAR_FOUND; - calledCallback=FALSE; /* new error condition */ - } else { - /* input consumed */ - if(pArgs->flush) { - /* - * return to the conversion loop once more if the flush - * flag is set and the conversion function has not - * successfully processed the end of the input yet - * - * (continue converting by breaking out of only the inner loop) - */ - if(!converterSawEndOfInput) { - break; - } - - /* reset the converter without calling the callback function */ - _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE); - } - - /* done successfully */ - return; - } - } - - /* U_FAILURE(*err) */ - { - UErrorCode e; - - if( calledCallback || - (e=*err)==U_BUFFER_OVERFLOW_ERROR || - (e!=U_INVALID_CHAR_FOUND && - e!=U_ILLEGAL_CHAR_FOUND && - e!=U_TRUNCATED_CHAR_FOUND && - e!=U_ILLEGAL_ESCAPE_SEQUENCE && - e!=U_UNSUPPORTED_ESCAPE_SEQUENCE) - ) { - /* - * the callback did not or cannot resolve the error: - * set output pointers and return - * - * the check for buffer overflow is redundant but it is - * a high-runner case and hopefully documents the intent - * well - * - * if we were replaying, then the replay buffer must be - * copied back into the UConverter - * and the real arguments must be restored - */ - if(realSource!=NULL) { - int32_t length; - - U_ASSERT(cnv->preToULength==0); - - length=(int32_t)(pArgs->sourceLimit-pArgs->source); - if(length>0) { - uprv_memcpy(cnv->preToU, pArgs->source, length); - cnv->preToULength=(int8_t)-length; - } - - pArgs->source=realSource; - pArgs->sourceLimit=realSourceLimit; - pArgs->flush=realFlush; - } - - return; - } - } - - /* copy toUBytes[] to invalidCharBuffer[] */ - errorInputLength=cnv->invalidCharLength=cnv->toULength; - if(errorInputLength>0) { - uprv_memcpy(cnv->invalidCharBuffer, cnv->toUBytes, errorInputLength); - } - - /* set the converter state to deal with the next character */ - cnv->toULength=0; - - /* call the callback function */ - if(cnv->toUCallbackReason==UCNV_ILLEGAL && *err==U_INVALID_CHAR_FOUND) { - cnv->toUCallbackReason = UCNV_UNASSIGNED; - } - cnv->fromCharErrorBehaviour(cnv->toUContext, pArgs, - cnv->invalidCharBuffer, errorInputLength, - cnv->toUCallbackReason, - err); - cnv->toUCallbackReason = UCNV_ILLEGAL; /* reset to default value */ - - /* - * loop back to the offset handling - * - * this flag will indicate after offset handling - * that a callback was called; - * if the callback did not resolve the error, then we return - */ - calledCallback=TRUE; - } - } -} - -/* - * Output the toUnicode overflow buffer. - * Call this function if(cnv->UCharErrorBufferLength>0). - * @return TRUE if overflow - */ -static UBool -ucnv_outputOverflowToUnicode(UConverter *cnv, - UChar **target, const UChar *targetLimit, - int32_t **pOffsets, - UErrorCode *err) { - int32_t *offsets; - UChar *overflow, *t; - int32_t i, length; - - t=*target; - if(pOffsets!=NULL) { - offsets=*pOffsets; - } else { - offsets=NULL; - } - - overflow=cnv->UCharErrorBuffer; - length=cnv->UCharErrorBufferLength; - i=0; - while(iUCharErrorBufferLength=(int8_t)j; - *target=t; - if(offsets!=NULL) { - *pOffsets=offsets; - } - *err=U_BUFFER_OVERFLOW_ERROR; - return TRUE; - } - - /* copy the overflow contents to the target */ - *t++=overflow[i++]; - if(offsets!=NULL) { - *offsets++=-1; /* no source index available for old output */ - } - } - - /* the overflow buffer is completely copied to the target */ - cnv->UCharErrorBufferLength=0; - *target=t; - if(offsets!=NULL) { - *pOffsets=offsets; - } - return FALSE; -} - -U_CAPI void U_EXPORT2 -ucnv_toUnicode(UConverter *cnv, - UChar **target, const UChar *targetLimit, - const char **source, const char *sourceLimit, - int32_t *offsets, - UBool flush, - UErrorCode *err) { - UConverterToUnicodeArgs args; - const char *s; - UChar *t; - - /* check parameters */ - if(err==NULL || U_FAILURE(*err)) { - return; - } - - if(cnv==NULL || target==NULL || source==NULL) { - *err=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - s=*source; - t=*target; - - if ((const void *)U_MAX_PTR(targetLimit) == (const void *)targetLimit) { - /* - Prevent code from going into an infinite loop in case we do hit this - limit. The limit pointer is expected to be on a UChar * boundary. - This also prevents the next argument check from failing. - */ - targetLimit = (const UChar *)(((const char *)targetLimit) - 1); - } - - /* - * All these conditions should never happen. - * - * 1) Make sure that the limits are >= to the address source or target - * - * 2) Make sure that the buffer sizes do not exceed the number range for - * int32_t because some functions use the size (in units or bytes) - * rather than comparing pointers, and because offsets are int32_t values. - * - * size_t is guaranteed to be unsigned and large enough for the job. - * - * Return with an error instead of adjusting the limits because we would - * not be able to maintain the semantics that either the source must be - * consumed or the target filled (unless an error occurs). - * An adjustment would be sourceLimit=t+0x7fffffff; for example. - * - * 3) Make sure that the user didn't incorrectly cast a UChar * pointer - * to a char * pointer and provide an incomplete UChar code unit. - */ - if (sourceLimit(size_t)0x7fffffff && sourceLimit>s) || - ((size_t)(targetLimit-t)>(size_t)0x3fffffff && targetLimit>t) || - (((const char *)targetLimit-(const char *)t) & 1) != 0 - ) { - *err=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - /* output the target overflow buffer */ - if( cnv->UCharErrorBufferLength>0 && - ucnv_outputOverflowToUnicode(cnv, target, targetLimit, &offsets, err) - ) { - /* U_BUFFER_OVERFLOW_ERROR */ - return; - } - /* *target may have moved, therefore stop using t */ - - if(!flush && s==sourceLimit && cnv->preToULength>=0) { - /* the overflow buffer is emptied and there is no new input: we are done */ - return; - } - - /* - * Do not simply return with a buffer overflow error if - * !flush && t==targetLimit - * because it is possible that the source will not generate any output. - * For example, the skip callback may be called; - * it does not output anything. - */ - - /* prepare the converter arguments */ - args.converter=cnv; - args.flush=flush; - args.offsets=offsets; - args.source=s; - args.sourceLimit=sourceLimit; - args.target=*target; - args.targetLimit=targetLimit; - args.size=sizeof(args); - - _toUnicodeWithCallback(&args, err); - - *source=args.source; - *target=args.target; -} - -/* ucnv_to/fromUChars() ----------------------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -ucnv_fromUChars(UConverter *cnv, - char *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - const UChar *srcLimit; - char *originalDest, *destLimit; - int32_t destLength; - - /* check arguments */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - if( cnv==NULL || - destCapacity<0 || (destCapacity>0 && dest==NULL) || - srcLength<-1 || (srcLength!=0 && src==NULL) - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* initialize */ - ucnv_resetFromUnicode(cnv); - originalDest=dest; - if(srcLength==-1) { - srcLength=u_strlen(src); - } - if(srcLength>0) { - srcLimit=src+srcLength; - destLimit=dest+destCapacity; - - /* pin the destination limit to U_MAX_PTR; NULL check is for OS/400 */ - if(destLimit0 && dest==NULL) || - srcLength<-1 || (srcLength!=0 && src==NULL)) - { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* initialize */ - ucnv_resetToUnicode(cnv); - originalDest=dest; - if(srcLength==-1) { - srcLength=(int32_t)uprv_strlen(src); - } - if(srcLength>0) { - srcLimit=src+srcLength; - destLimit=dest+destCapacity; - - /* pin the destination limit to U_MAX_PTR; NULL check is for OS/400 */ - if(destLimit(size_t)0x7fffffff && sourceLimit>s)) { - *err=U_ILLEGAL_ARGUMENT_ERROR; - return 0xffff; - } - - c=U_SENTINEL; - - /* flush the target overflow buffer */ - if(cnv->UCharErrorBufferLength>0) { - UChar *overflow; - - overflow=cnv->UCharErrorBuffer; - i=0; - length=cnv->UCharErrorBufferLength; - U16_NEXT(overflow, i, length, c); - - /* move the remaining overflow contents up to the beginning */ - if((cnv->UCharErrorBufferLength=(int8_t)(length-i))>0) { - uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+i, - cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR); - } - - if(!U16_IS_LEAD(c) || itoULength==0 && cnv->sharedData->impl->getNextUChar!=NULL) { - c=cnv->sharedData->impl->getNextUChar(&args, err); - *source=s=args.source; - if(*err==U_INDEX_OUTOFBOUNDS_ERROR) { - /* reset the converter without calling the callback function */ - _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE); - return 0xffff; /* no output */ - } else if(U_SUCCESS(*err) && c>=0) { - return c; - /* - * else fall through to use _toUnicode() because - * UCNV_GET_NEXT_UCHAR_USE_TO_U: the native function did not want to handle it after all - * U_FAILURE: call _toUnicode() for callback handling (do not output c) - */ - } - } - - /* convert to one UChar in buffer[0], or handle getNextUChar() errors */ - _toUnicodeWithCallback(&args, err); - - if(*err==U_BUFFER_OVERFLOW_ERROR) { - *err=U_ZERO_ERROR; - } - - i=0; - length=(int32_t)(args.target-buffer); - } else { - /* write the lead surrogate from the overflow buffer */ - buffer[0]=(UChar)c; - args.target=buffer+1; - i=0; - length=1; - } - - /* buffer contents starts at i and ends before length */ - - if(U_FAILURE(*err)) { - c=0xffff; /* no output */ - } else if(length==0) { - /* no input or only state changes */ - *err=U_INDEX_OUTOFBOUNDS_ERROR; - /* no need to reset explicitly because _toUnicodeWithCallback() did it */ - c=0xffff; /* no output */ - } else { - c=buffer[0]; - i=1; - if(!U16_IS_LEAD(c)) { - /* consume c=buffer[0], done */ - } else { - /* got a lead surrogate, see if a trail surrogate follows */ - UChar c2; - - if(cnv->UCharErrorBufferLength>0) { - /* got overflow output from the conversion */ - if(U16_IS_TRAIL(c2=cnv->UCharErrorBuffer[0])) { - /* got a trail surrogate, too */ - c=U16_GET_SUPPLEMENTARY(c, c2); - - /* move the remaining overflow contents up to the beginning */ - if((--cnv->UCharErrorBufferLength)>0) { - uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+1, - cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR); - } - } else { - /* c is an unpaired lead surrogate, just return it */ - } - } else if(args.sourceUCharErrorBufferLength)>0) { - uprv_memmove(cnv->UCharErrorBuffer+delta, cnv->UCharErrorBuffer, - length*U_SIZEOF_UCHAR); - } - cnv->UCharErrorBufferLength=(int8_t)(length+delta); - - cnv->UCharErrorBuffer[0]=buffer[i++]; - if(delta>1) { - cnv->UCharErrorBuffer[1]=buffer[i]; - } - } - - *source=args.source; - return c; -} - -/* ucnv_convert() and siblings ---------------------------------------------- */ - -U_CAPI void U_EXPORT2 -ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv, - char **target, const char *targetLimit, - const char **source, const char *sourceLimit, - UChar *pivotStart, UChar **pivotSource, - UChar **pivotTarget, const UChar *pivotLimit, - UBool reset, UBool flush, - UErrorCode *pErrorCode) { - UChar pivotBuffer[CHUNK_SIZE]; - const UChar *myPivotSource; - UChar *myPivotTarget; - const char *s; - char *t; - - UConverterToUnicodeArgs toUArgs; - UConverterFromUnicodeArgs fromUArgs; - UConverterConvert convert; - - /* error checking */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return; - } - - if( targetCnv==NULL || sourceCnv==NULL || - source==NULL || *source==NULL || - target==NULL || *target==NULL || targetLimit==NULL - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - s=*source; - t=*target; - if((sourceLimit!=NULL && sourceLimit(size_t)0x7fffffff && sourceLimit>s)) || - ((size_t)(targetLimit-t)>(size_t)0x7fffffff && targetLimit>t) - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - if(pivotStart==NULL) { - if(!flush) { - /* streaming conversion requires an explicit pivot buffer */ - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - /* use the stack pivot buffer */ - myPivotSource=myPivotTarget=pivotStart=pivotBuffer; - pivotSource=(UChar **)&myPivotSource; - pivotTarget=&myPivotTarget; - pivotLimit=pivotBuffer+CHUNK_SIZE; - } else if( pivotStart>=pivotLimit || - pivotSource==NULL || *pivotSource==NULL || - pivotTarget==NULL || *pivotTarget==NULL || - pivotLimit==NULL - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - if(sourceLimit==NULL) { - /* get limit of single-byte-NUL-terminated source string */ - sourceLimit=uprv_strchr(*source, 0); - } - - if(reset) { - ucnv_resetToUnicode(sourceCnv); - ucnv_resetFromUnicode(targetCnv); - *pivotSource=*pivotTarget=pivotStart; - } else if(targetCnv->charErrorBufferLength>0) { - /* output the targetCnv overflow buffer */ - if(ucnv_outputOverflowFromUnicode(targetCnv, target, targetLimit, NULL, pErrorCode)) { - /* U_BUFFER_OVERFLOW_ERROR */ - return; - } - /* *target has moved, therefore stop using t */ - - if( !flush && - targetCnv->preFromULength>=0 && *pivotSource==*pivotTarget && - sourceCnv->UCharErrorBufferLength==0 && sourceCnv->preToULength>=0 && s==sourceLimit - ) { - /* the fromUnicode overflow buffer is emptied and there is no new input: we are done */ - return; - } - } - - /* Is direct-UTF-8 conversion available? */ - if( sourceCnv->sharedData->staticData->conversionType==UCNV_UTF8 && - targetCnv->sharedData->impl->fromUTF8!=NULL - ) { - convert=targetCnv->sharedData->impl->fromUTF8; - } else if( targetCnv->sharedData->staticData->conversionType==UCNV_UTF8 && - sourceCnv->sharedData->impl->toUTF8!=NULL - ) { - convert=sourceCnv->sharedData->impl->toUTF8; - } else { - convert=NULL; - } - - /* - * If direct-UTF-8 conversion is available, then we use a smaller - * pivot buffer for error handling and partial matches - * so that we quickly return to direct conversion. - * - * 32 is large enough for UCNV_EXT_MAX_UCHARS and UCNV_ERROR_BUFFER_LENGTH. - * - * We could reduce the pivot buffer size further, at the cost of - * buffer overflows from callbacks. - * The pivot buffer should not be smaller than the maximum number of - * fromUnicode extension table input UChars - * (for m:n conversion, see - * targetCnv->sharedData->mbcs.extIndexes[UCNV_EXT_COUNT_UCHARS]) - * or 2 for surrogate pairs. - * - * Too small a buffer can cause thrashing between pivoting and direct - * conversion, with function call overhead outweighing the benefits - * of direct conversion. - */ - if(convert!=NULL && (pivotLimit-pivotStart)>32) { - pivotLimit=pivotStart+32; - } - - /* prepare the converter arguments */ - fromUArgs.converter=targetCnv; - fromUArgs.flush=FALSE; - fromUArgs.offsets=NULL; - fromUArgs.target=*target; - fromUArgs.targetLimit=targetLimit; - fromUArgs.size=sizeof(fromUArgs); - - toUArgs.converter=sourceCnv; - toUArgs.flush=flush; - toUArgs.offsets=NULL; - toUArgs.source=s; - toUArgs.sourceLimit=sourceLimit; - toUArgs.targetLimit=pivotLimit; - toUArgs.size=sizeof(toUArgs); - - /* - * TODO: Consider separating this function into two functions, - * extracting exactly the conversion loop, - * for readability and to reduce the set of visible variables. - * - * Otherwise stop using s and t from here on. - */ - s=t=NULL; - - /* - * conversion loop - * - * The sequence of steps in the loop may appear backward, - * but the principle is simple: - * In the chain of - * source - sourceCnv overflow - pivot - targetCnv overflow - target - * empty out later buffers before refilling them from earlier ones. - * - * The targetCnv overflow buffer is flushed out only once before the loop. - */ - for(;;) { - /* - * if(pivot not empty or error or replay or flush fromUnicode) { - * fromUnicode(pivot -> target); - * } - * - * For pivoting conversion; and for direct conversion for - * error callback handling and flushing the replay buffer. - */ - if( *pivotSource<*pivotTarget || - U_FAILURE(*pErrorCode) || - targetCnv->preFromULength<0 || - fromUArgs.flush - ) { - fromUArgs.source=*pivotSource; - fromUArgs.sourceLimit=*pivotTarget; - _fromUnicodeWithCallback(&fromUArgs, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - /* target overflow, or conversion error */ - *pivotSource=(UChar *)fromUArgs.source; - break; - } - - /* - * _fromUnicodeWithCallback() must have consumed the pivot contents - * (*pivotSource==*pivotTarget) since it returned with U_SUCCESS() - */ - } - - /* The pivot buffer is empty; reset it so we start at pivotStart. */ - *pivotSource=*pivotTarget=pivotStart; - - /* - * if(sourceCnv overflow buffer not empty) { - * move(sourceCnv overflow buffer -> pivot); - * continue; - * } - */ - /* output the sourceCnv overflow buffer */ - if(sourceCnv->UCharErrorBufferLength>0) { - if(ucnv_outputOverflowToUnicode(sourceCnv, pivotTarget, pivotLimit, NULL, pErrorCode)) { - /* U_BUFFER_OVERFLOW_ERROR */ - *pErrorCode=U_ZERO_ERROR; - } - continue; - } - - /* - * check for end of input and break if done - * - * Checking both flush and fromUArgs.flush ensures that the converters - * have been called with the flush flag set if the ucnv_convertEx() - * caller set it. - */ - if( toUArgs.source==sourceLimit && - sourceCnv->preToULength>=0 && sourceCnv->toULength==0 && - (!flush || fromUArgs.flush) - ) { - /* done successfully */ - break; - } - - /* - * use direct conversion if available - * but not if continuing a partial match - * or flushing the toUnicode replay buffer - */ - if(convert!=NULL && targetCnv->preFromUFirstCP<0 && sourceCnv->preToULength==0) { - if(*pErrorCode==U_USING_DEFAULT_WARNING) { - /* remove a warning that may be set by this function */ - *pErrorCode=U_ZERO_ERROR; - } - convert(&fromUArgs, &toUArgs, pErrorCode); - if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) { - break; - } else if(U_FAILURE(*pErrorCode)) { - if(sourceCnv->toULength>0) { - /* - * Fall through to calling _toUnicodeWithCallback() - * for callback handling. - * - * The pivot buffer will be reset with - * *pivotSource=*pivotTarget=pivotStart; - * which indicates a toUnicode error to the caller - * (*pivotSource==pivotStart shows no pivot UChars consumed). - */ - } else { - /* - * Indicate a fromUnicode error to the caller - * (*pivotSource>pivotStart shows some pivot UChars consumed). - */ - *pivotSource=*pivotTarget=pivotStart+1; - /* - * Loop around to calling _fromUnicodeWithCallbacks() - * for callback handling. - */ - continue; - } - } else if(*pErrorCode==U_USING_DEFAULT_WARNING) { - /* - * No error, but the implementation requested to temporarily - * fall back to pivoting. - */ - *pErrorCode=U_ZERO_ERROR; - /* - * The following else branches are almost identical to the end-of-input - * handling in _toUnicodeWithCallback(). - * Avoid calling it just for the end of input. - */ - } else if(flush && sourceCnv->toULength>0) { /* flush==toUArgs.flush */ - /* - * the entire input stream is consumed - * and there is a partial, truncated input sequence left - */ - - /* inject an error and continue with callback handling */ - *pErrorCode=U_TRUNCATED_CHAR_FOUND; - } else { - /* input consumed */ - if(flush) { - /* reset the converters without calling the callback functions */ - _reset(sourceCnv, UCNV_RESET_TO_UNICODE, FALSE); - _reset(targetCnv, UCNV_RESET_FROM_UNICODE, FALSE); - } - - /* done successfully */ - break; - } - } - - /* - * toUnicode(source -> pivot); - * - * For pivoting conversion; and for direct conversion for - * error callback handling, continuing partial matches - * and flushing the replay buffer. - * - * The pivot buffer is empty and reset. - */ - toUArgs.target=pivotStart; /* ==*pivotTarget */ - /* toUArgs.targetLimit=pivotLimit; already set before the loop */ - _toUnicodeWithCallback(&toUArgs, pErrorCode); - *pivotTarget=toUArgs.target; - if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) { - /* pivot overflow: continue with the conversion loop */ - *pErrorCode=U_ZERO_ERROR; - } else if(U_FAILURE(*pErrorCode) || (!flush && *pivotTarget==pivotStart)) { - /* conversion error, or there was nothing left to convert */ - break; - } - /* - * else: - * _toUnicodeWithCallback() wrote into the pivot buffer, - * continue with fromUnicode conversion. - * - * Set the fromUnicode flush flag if we flush and if toUnicode has - * processed the end of the input. - */ - if( flush && toUArgs.source==sourceLimit && - sourceCnv->preToULength>=0 && - sourceCnv->UCharErrorBufferLength==0 - ) { - fromUArgs.flush=TRUE; - } - } - - /* - * The conversion loop is exited when one of the following is true: - * - the entire source text has been converted successfully to the target buffer - * - a target buffer overflow occurred - * - a conversion error occurred - */ - - *source=toUArgs.source; - *target=fromUArgs.target; - - /* terminate the target buffer if possible */ - if(flush && U_SUCCESS(*pErrorCode)) { - if(*target!=targetLimit) { - **target=0; - if(*pErrorCode==U_STRING_NOT_TERMINATED_WARNING) { - *pErrorCode=U_ZERO_ERROR; - } - } else { - *pErrorCode=U_STRING_NOT_TERMINATED_WARNING; - } - } -} - -/* internal implementation of ucnv_convert() etc. with preflighting */ -static int32_t -ucnv_internalConvert(UConverter *outConverter, UConverter *inConverter, - char *target, int32_t targetCapacity, - const char *source, int32_t sourceLength, - UErrorCode *pErrorCode) { - UChar pivotBuffer[CHUNK_SIZE]; - UChar *pivot, *pivot2; - - char *myTarget; - const char *sourceLimit; - const char *targetLimit; - int32_t targetLength=0; - - /* set up */ - if(sourceLength<0) { - sourceLimit=uprv_strchr(source, 0); - } else { - sourceLimit=source+sourceLength; - } - - /* if there is no input data, we're done */ - if(source==sourceLimit) { - return u_terminateChars(target, targetCapacity, 0, pErrorCode); - } - - pivot=pivot2=pivotBuffer; - myTarget=target; - targetLength=0; - - if(targetCapacity>0) { - /* perform real conversion */ - targetLimit=target+targetCapacity; - ucnv_convertEx(outConverter, inConverter, - &myTarget, targetLimit, - &source, sourceLimit, - pivotBuffer, &pivot, &pivot2, pivotBuffer+CHUNK_SIZE, - FALSE, - TRUE, - pErrorCode); - targetLength=(int32_t)(myTarget-target); - } - - /* - * If the output buffer is exhausted (or we are only "preflighting"), we need to stop writing - * to it but continue the conversion in order to store in targetCapacity - * the number of bytes that was required. - */ - if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR || targetCapacity==0) - { - char targetBuffer[CHUNK_SIZE]; - - targetLimit=targetBuffer+CHUNK_SIZE; - do { - *pErrorCode=U_ZERO_ERROR; - myTarget=targetBuffer; - ucnv_convertEx(outConverter, inConverter, - &myTarget, targetLimit, - &source, sourceLimit, - pivotBuffer, &pivot, &pivot2, pivotBuffer+CHUNK_SIZE, - FALSE, - TRUE, - pErrorCode); - targetLength+=(int32_t)(myTarget-targetBuffer); - } while(*pErrorCode==U_BUFFER_OVERFLOW_ERROR); - - /* done with preflighting, set warnings and errors as appropriate */ - return u_terminateChars(target, targetCapacity, targetLength, pErrorCode); - } - - /* no need to call u_terminateChars() because ucnv_convertEx() took care of that */ - return targetLength; -} - -U_CAPI int32_t U_EXPORT2 -ucnv_convert(const char *toConverterName, const char *fromConverterName, - char *target, int32_t targetCapacity, - const char *source, int32_t sourceLength, - UErrorCode *pErrorCode) { - UConverter in, out; /* stack-allocated */ - UConverter *inConverter, *outConverter; - int32_t targetLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - if( source==NULL || sourceLength<-1 || - targetCapacity<0 || (targetCapacity>0 && target==NULL) - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* if there is no input data, we're done */ - if(sourceLength==0 || (sourceLength<0 && *source==0)) { - return u_terminateChars(target, targetCapacity, 0, pErrorCode); - } - - /* create the converters */ - inConverter=ucnv_createConverter(&in, fromConverterName, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return 0; - } - - outConverter=ucnv_createConverter(&out, toConverterName, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - ucnv_close(inConverter); - return 0; - } - - targetLength=ucnv_internalConvert(outConverter, inConverter, - target, targetCapacity, - source, sourceLength, - pErrorCode); - - ucnv_close(inConverter); - ucnv_close(outConverter); - - return targetLength; -} - -/* @internal */ -static int32_t -ucnv_convertAlgorithmic(UBool convertToAlgorithmic, - UConverterType algorithmicType, - UConverter *cnv, - char *target, int32_t targetCapacity, - const char *source, int32_t sourceLength, - UErrorCode *pErrorCode) { - UConverter algoConverterStatic; /* stack-allocated */ - UConverter *algoConverter, *to, *from; - int32_t targetLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - if( cnv==NULL || source==NULL || sourceLength<-1 || - targetCapacity<0 || (targetCapacity>0 && target==NULL) - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* if there is no input data, we're done */ - if(sourceLength==0 || (sourceLength<0 && *source==0)) { - return u_terminateChars(target, targetCapacity, 0, pErrorCode); - } - - /* create the algorithmic converter */ - algoConverter=ucnv_createAlgorithmicConverter(&algoConverterStatic, algorithmicType, - "", 0, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return 0; - } - - /* reset the other converter */ - if(convertToAlgorithmic) { - /* cnv->Unicode->algo */ - ucnv_resetToUnicode(cnv); - to=algoConverter; - from=cnv; - } else { - /* algo->Unicode->cnv */ - ucnv_resetFromUnicode(cnv); - from=algoConverter; - to=cnv; - } - - targetLength=ucnv_internalConvert(to, from, - target, targetCapacity, - source, sourceLength, - pErrorCode); - - ucnv_close(algoConverter); - - return targetLength; -} - -U_CAPI int32_t U_EXPORT2 -ucnv_toAlgorithmic(UConverterType algorithmicType, - UConverter *cnv, - char *target, int32_t targetCapacity, - const char *source, int32_t sourceLength, - UErrorCode *pErrorCode) { - return ucnv_convertAlgorithmic(TRUE, algorithmicType, cnv, - target, targetCapacity, - source, sourceLength, - pErrorCode); -} - -U_CAPI int32_t U_EXPORT2 -ucnv_fromAlgorithmic(UConverter *cnv, - UConverterType algorithmicType, - char *target, int32_t targetCapacity, - const char *source, int32_t sourceLength, - UErrorCode *pErrorCode) { - return ucnv_convertAlgorithmic(FALSE, algorithmicType, cnv, - target, targetCapacity, - source, sourceLength, - pErrorCode); -} - -U_CAPI UConverterType U_EXPORT2 -ucnv_getType(const UConverter* converter) -{ - int8_t type = converter->sharedData->staticData->conversionType; -#if !UCONFIG_NO_LEGACY_CONVERSION - if(type == UCNV_MBCS) { - return ucnv_MBCSGetType(converter); - } -#endif - return (UConverterType)type; -} - -U_CAPI void U_EXPORT2 -ucnv_getStarters(const UConverter* converter, - UBool starters[256], - UErrorCode* err) -{ - if (err == NULL || U_FAILURE(*err)) { - return; - } - - if(converter->sharedData->impl->getStarters != NULL) { - converter->sharedData->impl->getStarters(converter, starters, err); - } else { - *err = U_ILLEGAL_ARGUMENT_ERROR; - } -} - -static const UAmbiguousConverter *ucnv_getAmbiguous(const UConverter *cnv) -{ - UErrorCode errorCode; - const char *name; - int32_t i; - - if(cnv==NULL) { - return NULL; - } - - errorCode=U_ZERO_ERROR; - name=ucnv_getName(cnv, &errorCode); - if(U_FAILURE(errorCode)) { - return NULL; - } - - for(i=0; ivariant5c; - for(i=0; iuseFallback = usesFallback; -} - -U_CAPI UBool U_EXPORT2 -ucnv_usesFallback(const UConverter *cnv) -{ - return cnv->useFallback; -} - -U_CAPI void U_EXPORT2 -ucnv_getInvalidChars (const UConverter * converter, - char *errBytes, - int8_t * len, - UErrorCode * err) -{ - if (err == NULL || U_FAILURE(*err)) - { - return; - } - if (len == NULL || errBytes == NULL || converter == NULL) - { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if (*len < converter->invalidCharLength) - { - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return; - } - if ((*len = converter->invalidCharLength) > 0) - { - uprv_memcpy (errBytes, converter->invalidCharBuffer, *len); - } -} - -U_CAPI void U_EXPORT2 -ucnv_getInvalidUChars (const UConverter * converter, - UChar *errChars, - int8_t * len, - UErrorCode * err) -{ - if (err == NULL || U_FAILURE(*err)) - { - return; - } - if (len == NULL || errChars == NULL || converter == NULL) - { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - if (*len < converter->invalidUCharLength) - { - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return; - } - if ((*len = converter->invalidUCharLength) > 0) - { - u_memcpy (errChars, converter->invalidUCharBuffer, *len); - } -} - -#define SIG_MAX_LEN 5 - -U_CAPI const char* U_EXPORT2 -ucnv_detectUnicodeSignature( const char* source, - int32_t sourceLength, - int32_t* signatureLength, - UErrorCode* pErrorCode) { - int32_t dummy; - - /* initial 0xa5 bytes: make sure that if we read preFromUFirstCP >= 0){ - return U16_LENGTH(cnv->preFromUFirstCP)+cnv->preFromULength ; - }else if(cnv->preFromULength < 0){ - return -cnv->preFromULength ; - }else if(cnv->fromUChar32 > 0){ - return 1; - } - return 0; - -} - -U_CAPI int32_t U_EXPORT2 -ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status){ - - if(status == NULL || U_FAILURE(*status)){ - return -1; - } - if(cnv == NULL){ - *status = U_ILLEGAL_ARGUMENT_ERROR; - return -1; - } - - if(cnv->preToULength > 0){ - return cnv->preToULength ; - }else if(cnv->preToULength < 0){ - return -cnv->preToULength; - }else if(cnv->toULength > 0){ - return cnv->toULength; - } - return 0; -} - -U_CAPI UBool U_EXPORT2 -ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status){ - if (U_FAILURE(*status)) { - return FALSE; - } - - if (cnv == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; - } - - switch (ucnv_getType(cnv)) { - case UCNV_SBCS: - case UCNV_DBCS: - case UCNV_UTF32_BigEndian: - case UCNV_UTF32_LittleEndian: - case UCNV_UTF32: - case UCNV_US_ASCII: - return TRUE; - default: - return FALSE; - } -} -#endif - -/* - * Hey, Emacs, please set the following: - * - * Local Variables: - * indent-tabs-mode: nil - * End: - * - */ diff --git a/source/common/ucnv2022.cpp b/source/common/ucnv2022.cpp index 9c0a064..f0d0946 100644 --- a/source/common/ucnv2022.cpp +++ b/source/common/ucnv2022.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv2022.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucnv_bld.cpp b/source/common/ucnv_bld.cpp index 078f293..14de21b 100644 --- a/source/common/ucnv_bld.cpp +++ b/source/common/ucnv_bld.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** diff --git a/source/common/ucnv_bld.h b/source/common/ucnv_bld.h index 212c4ea..a1e2df6 100644 --- a/source/common/ucnv_bld.h +++ b/source/common/ucnv_bld.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ucnv_cb.c b/source/common/ucnv_cb.c deleted file mode 100644 index 0c9cc24..0000000 --- a/source/common/ucnv_cb.c +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2006, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** - * ucnv_cb.c: - * External APIs for the ICU's codeset conversion library - * Helena Shih - * - * Modification History: - * - * Date Name Description - * 7/28/2000 srl Implementation - */ - -/** - * @name Character Conversion C API - * - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv_cb.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cmemory.h" - -/* need to update the offsets when the target moves. */ -/* Note: Recursion may occur in the cb functions, be sure to update the offsets correctly -if you don't use ucnv_cbXXX functions. Make sure you don't use the same callback within -the same call stack if the complexity arises. */ -U_CAPI void U_EXPORT2 -ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, - const char* source, - int32_t length, - int32_t offsetIndex, - UErrorCode * err) -{ - if(U_FAILURE(*err)) { - return; - } - - ucnv_fromUWriteBytes( - args->converter, - source, length, - &args->target, args->targetLimit, - &args->offsets, offsetIndex, - err); -} - -U_CAPI void U_EXPORT2 -ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, - const UChar** source, - const UChar* sourceLimit, - int32_t offsetIndex, - UErrorCode * err) -{ - /* - This is a fun one. Recursion can occur - we're basically going to - just retry shoving data through the same converter. Note, if you got - here through some kind of invalid sequence, you maybe should emit a - reset sequence of some kind and/or call ucnv_reset(). Since this - IS an actual conversion, take care that you've changed the callback - or the data, or you'll get an infinite loop. - - Please set the err value to something reasonable before calling - into this. - */ - - char *oldTarget; - - if(U_FAILURE(*err)) - { - return; - } - - oldTarget = args->target; - - ucnv_fromUnicode(args->converter, - &args->target, - args->targetLimit, - source, - sourceLimit, - NULL, /* no offsets */ - FALSE, /* no flush */ - err); - - if(args->offsets) - { - while (args->target != oldTarget) /* if it moved at all.. */ - { - *(args->offsets)++ = offsetIndex; - oldTarget++; - } - } - - /* - Note, if you did something like used a Stop subcallback, things would get interesting. - In fact, here's where we want to return the partially consumed in-source! - */ - if(*err == U_BUFFER_OVERFLOW_ERROR) - /* && (*source < sourceLimit && args->target >= args->targetLimit) - -- S. Hrcek */ - { - /* Overflowed the target. Now, we'll write into the charErrorBuffer. - It's a fixed size. If we overflow it... Hmm */ - char *newTarget; - const char *newTargetLimit; - UErrorCode err2 = U_ZERO_ERROR; - - int8_t errBuffLen; - - errBuffLen = args->converter->charErrorBufferLength; - - /* start the new target at the first free slot in the errbuff.. */ - newTarget = (char *)(args->converter->charErrorBuffer + errBuffLen); - - newTargetLimit = (char *)(args->converter->charErrorBuffer + - sizeof(args->converter->charErrorBuffer)); - - if(newTarget >= newTargetLimit) - { - *err = U_INTERNAL_PROGRAM_ERROR; - return; - } - - /* We're going to tell the converter that the errbuff len is empty. - This prevents the existing errbuff from being 'flushed' out onto - itself. If the errbuff is needed by the converter this time, - we're hosed - we're out of space! */ - - args->converter->charErrorBufferLength = 0; - - ucnv_fromUnicode(args->converter, - &newTarget, - newTargetLimit, - source, - sourceLimit, - NULL, - FALSE, - &err2); - - /* We can go ahead and overwrite the length here. We know just how - to recalculate it. */ - - args->converter->charErrorBufferLength = (int8_t)( - newTarget - (char*)args->converter->charErrorBuffer); - - if((newTarget >= newTargetLimit) || (err2 == U_BUFFER_OVERFLOW_ERROR)) - { - /* now we're REALLY in trouble. - Internal program error - callback shouldn't have written this much - data! - */ - *err = U_INTERNAL_PROGRAM_ERROR; - return; - } - /*else {*/ - /* sub errs could be invalid/truncated/illegal chars or w/e. - These might want to be passed on up.. But the problem is, we already - need to pass U_BUFFER_OVERFLOW_ERROR. That has to override these - other errs.. */ - - /* - if(U_FAILURE(err2)) - ?? - */ - /*}*/ - } -} - -U_CAPI void U_EXPORT2 -ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, - int32_t offsetIndex, - UErrorCode * err) -{ - UConverter *converter; - int32_t length; - - if(U_FAILURE(*err)) { - return; - } - converter = args->converter; - length = converter->subCharLen; - - if(length == 0) { - return; - } - - if(length < 0) { - /* - * Write/convert the substitution string. Its real length is -length. - * Unlike the escape callback, we need not change the converter's - * callback function because ucnv_setSubstString() verified that - * the string can be converted, so we will not get a conversion error - * and will not recurse. - * At worst we should get a U_BUFFER_OVERFLOW_ERROR. - */ - const UChar *source = (const UChar *)converter->subChars; - ucnv_cbFromUWriteUChars(args, &source, source - length, offsetIndex, err); - return; - } - - if(converter->sharedData->impl->writeSub!=NULL) { - converter->sharedData->impl->writeSub(args, offsetIndex, err); - } - else if(converter->subChar1!=0 && (uint16_t)converter->invalidUCharBuffer[0]<=(uint16_t)0xffu) { - /* - TODO: Is this untestable because the MBCS converter has a writeSub function to call - and the other converters don't use subChar1? - */ - ucnv_cbFromUWriteBytes(args, - (const char *)&converter->subChar1, 1, - offsetIndex, err); - } - else { - ucnv_cbFromUWriteBytes(args, - (const char *)converter->subChars, length, - offsetIndex, err); - } -} - -U_CAPI void U_EXPORT2 -ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, - const UChar* source, - int32_t length, - int32_t offsetIndex, - UErrorCode * err) -{ - if(U_FAILURE(*err)) { - return; - } - - ucnv_toUWriteUChars( - args->converter, - source, length, - &args->target, args->targetLimit, - &args->offsets, offsetIndex, - err); -} - -U_CAPI void U_EXPORT2 -ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args, - int32_t offsetIndex, - UErrorCode * err) -{ - static const UChar kSubstituteChar1 = 0x1A, kSubstituteChar = 0xFFFD; - - /* could optimize this case, just one uchar */ - if(args->converter->invalidCharLength == 1 && args->converter->subChar1 != 0) { - ucnv_cbToUWriteUChars(args, &kSubstituteChar1, 1, offsetIndex, err); - } else { - ucnv_cbToUWriteUChars(args, &kSubstituteChar, 1, offsetIndex, err); - } -} - -#endif diff --git a/source/common/ucnv_cnv.c b/source/common/ucnv_cnv.c deleted file mode 100644 index 01f8482..0000000 --- a/source/common/ucnv_cnv.c +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2004, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* uconv_cnv.c: -* Implements all the low level conversion functions -* T_UnicodeConverter_{to,from}Unicode_$ConversionType -* -* Change history: -* -* 06/29/2000 helena Major rewrite of the callback APIs. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv_err.h" -#include "unicode/ucnv.h" -#include "unicode/uset.h" -#include "ucnv_cnv.h" -#include "ucnv_bld.h" -#include "cmemory.h" - -U_CFUNC void -ucnv_getCompleteUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - sa->addRange(sa->set, 0, 0x10ffff); -} - -U_CFUNC void -ucnv_getNonSurrogateUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - sa->addRange(sa->set, 0, 0xd7ff); - sa->addRange(sa->set, 0xe000, 0x10ffff); -} - -U_CFUNC void -ucnv_fromUWriteBytes(UConverter *cnv, - const char *bytes, int32_t length, - char **target, const char *targetLimit, - int32_t **offsets, - int32_t sourceIndex, - UErrorCode *pErrorCode) { - char *t=*target; - int32_t *o; - - /* write bytes */ - if(offsets==NULL || (o=*offsets)==NULL) { - while(length>0 && t0 && t0) { - if(cnv!=NULL) { - t=(char *)cnv->charErrorBuffer; - cnv->charErrorBufferLength=(int8_t)length; - do { - *t++=(uint8_t)*bytes++; - } while(--length>0); - } - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } -} - -U_CFUNC void -ucnv_toUWriteUChars(UConverter *cnv, - const UChar *uchars, int32_t length, - UChar **target, const UChar *targetLimit, - int32_t **offsets, - int32_t sourceIndex, - UErrorCode *pErrorCode) { - UChar *t=*target; - int32_t *o; - - /* write UChars */ - if(offsets==NULL || (o=*offsets)==NULL) { - while(length>0 && t0 && t0) { - if(cnv!=NULL) { - t=cnv->UCharErrorBuffer; - cnv->UCharErrorBufferLength=(int8_t)length; - do { - *t++=*uchars++; - } while(--length>0); - } - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } -} - -U_CFUNC void -ucnv_toUWriteCodePoint(UConverter *cnv, - UChar32 c, - UChar **target, const UChar *targetLimit, - int32_t **offsets, - int32_t sourceIndex, - UErrorCode *pErrorCode) { - UChar *t; - int32_t *o; - - t=*target; - - if(t=0) { - if(cnv!=NULL) { - int8_t i=0; - U16_APPEND_UNSAFE(cnv->UCharErrorBuffer, i, c); - cnv->UCharErrorBufferLength=i; - } - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } -} - -#endif diff --git a/source/common/ucnv_cnv.h b/source/common/ucnv_cnv.h index 4394672..2eed2c6 100644 --- a/source/common/ucnv_cnv.h +++ b/source/common/ucnv_cnv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ucnv_ct.c b/source/common/ucnv_ct.c deleted file mode 100644 index f76919c..0000000 --- a/source/common/ucnv_ct.c +++ /dev/null @@ -1,637 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2010-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_ct.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010Dec09 -* created by: Michael Ow -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/uset.h" -#include "unicode/ucnv_err.h" -#include "unicode/ucnv_cb.h" -#include "unicode/utf16.h" -#include "ucnv_imp.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "ucnvmbcs.h" -#include "cstring.h" -#include "cmemory.h" - -typedef enum { - INVALID = -2, - DO_SEARCH = -1, - - COMPOUND_TEXT_SINGLE_0 = 0, - COMPOUND_TEXT_SINGLE_1 = 1, - COMPOUND_TEXT_SINGLE_2 = 2, - COMPOUND_TEXT_SINGLE_3 = 3, - - COMPOUND_TEXT_DOUBLE_1 = 4, - COMPOUND_TEXT_DOUBLE_2 = 5, - COMPOUND_TEXT_DOUBLE_3 = 6, - COMPOUND_TEXT_DOUBLE_4 = 7, - COMPOUND_TEXT_DOUBLE_5 = 8, - COMPOUND_TEXT_DOUBLE_6 = 9, - COMPOUND_TEXT_DOUBLE_7 = 10, - - COMPOUND_TEXT_TRIPLE_DOUBLE = 11, - - IBM_915 = 12, - IBM_916 = 13, - IBM_914 = 14, - IBM_874 = 15, - IBM_912 = 16, - IBM_913 = 17, - ISO_8859_14 = 18, - IBM_923 = 19, - NUM_OF_CONVERTERS = 20 -} COMPOUND_TEXT_CONVERTERS; - -#define SEARCH_LENGTH 12 - -static const uint8_t escSeqCompoundText[NUM_OF_CONVERTERS][5] = { - /* Single */ - { 0x1B, 0x2D, 0x41, 0, 0 }, - { 0x1B, 0x2D, 0x4D, 0, 0 }, - { 0x1B, 0x2D, 0x46, 0, 0 }, - { 0x1B, 0x2D, 0x47, 0, 0 }, - - /* Double */ - { 0x1B, 0x24, 0x29, 0x41, 0 }, - { 0x1B, 0x24, 0x29, 0x42, 0 }, - { 0x1B, 0x24, 0x29, 0x43, 0 }, - { 0x1B, 0x24, 0x29, 0x44, 0 }, - { 0x1B, 0x24, 0x29, 0x47, 0 }, - { 0x1B, 0x24, 0x29, 0x48, 0 }, - { 0x1B, 0x24, 0x29, 0x49, 0 }, - - /* Triple/Double */ - { 0x1B, 0x25, 0x47, 0, 0 }, - - /*IBM-915*/ - { 0x1B, 0x2D, 0x4C, 0, 0 }, - /*IBM-916*/ - { 0x1B, 0x2D, 0x48, 0, 0 }, - /*IBM-914*/ - { 0x1B, 0x2D, 0x44, 0, 0 }, - /*IBM-874*/ - { 0x1B, 0x2D, 0x54, 0, 0 }, - /*IBM-912*/ - { 0x1B, 0x2D, 0x42, 0, 0 }, - /* IBM-913 */ - { 0x1B, 0x2D, 0x43, 0, 0 }, - /* ISO-8859_14 */ - { 0x1B, 0x2D, 0x5F, 0, 0 }, - /* IBM-923 */ - { 0x1B, 0x2D, 0x62, 0, 0 }, -}; - -#define ESC_START 0x1B - -#define isASCIIRange(codepoint) \ - ((codepoint == 0x0000) || (codepoint == 0x0009) || (codepoint == 0x000A) || \ - (codepoint >= 0x0020 && codepoint <= 0x007f) || (codepoint >= 0x00A0 && codepoint <= 0x00FF)) - -#define isIBM915(codepoint) \ - ((codepoint >= 0x0401 && codepoint <= 0x045F) || (codepoint == 0x2116)) - -#define isIBM916(codepoint) \ - ((codepoint >= 0x05D0 && codepoint <= 0x05EA) || (codepoint == 0x2017) || (codepoint == 0x203E)) - -#define isCompoundS3(codepoint) \ - ((codepoint == 0x060C) || (codepoint == 0x061B) || (codepoint == 0x061F) || (codepoint >= 0x0621 && codepoint <= 0x063A) || \ - (codepoint >= 0x0640 && codepoint <= 0x0652) || (codepoint >= 0x0660 && codepoint <= 0x066D) || (codepoint == 0x200B) || \ - (codepoint >= 0x0FE70 && codepoint <= 0x0FE72) || (codepoint == 0x0FE74) || (codepoint >= 0x0FE76 && codepoint <= 0x0FEBE)) - -#define isCompoundS2(codepoint) \ - ((codepoint == 0x02BC) || (codepoint == 0x02BD) || (codepoint >= 0x0384 && codepoint <= 0x03CE) || (codepoint == 0x2015)) - -#define isIBM914(codepoint) \ - ((codepoint == 0x0100) || (codepoint == 0x0101) || (codepoint == 0x0112) || (codepoint == 0x0113) || (codepoint == 0x0116) || (codepoint == 0x0117) || \ - (codepoint == 0x0122) || (codepoint == 0x0123) || (codepoint >= 0x0128 && codepoint <= 0x012B) || (codepoint == 0x012E) || (codepoint == 0x012F) || \ - (codepoint >= 0x0136 && codepoint <= 0x0138) || (codepoint == 0x013B) || (codepoint == 0x013C) || (codepoint == 0x0145) || (codepoint == 0x0146) || \ - (codepoint >= 0x014A && codepoint <= 0x014D) || (codepoint == 0x0156) || (codepoint == 0x0157) || (codepoint >= 0x0166 && codepoint <= 0x016B) || \ - (codepoint == 0x0172) || (codepoint == 0x0173)) - -#define isIBM874(codepoint) \ - ((codepoint >= 0x0E01 && codepoint <= 0x0E3A) || (codepoint >= 0x0E3F && codepoint <= 0x0E5B)) - -#define isIBM912(codepoint) \ - ((codepoint >= 0x0102 && codepoint <= 0x0107) || (codepoint >= 0x010C && codepoint <= 0x0111) || (codepoint >= 0x0118 && codepoint <= 0x011B) || \ - (codepoint == 0x0139) || (codepoint == 0x013A) || (codepoint == 0x013D) || (codepoint == 0x013E) || (codepoint >= 0x0141 && codepoint <= 0x0144) || \ - (codepoint == 0x0147) || (codepoint == 0x0147) || (codepoint == 0x0150) || (codepoint == 0x0151) || (codepoint == 0x0154) || (codepoint == 0x0155) || \ - (codepoint >= 0x0158 && codepoint <= 0x015B) || (codepoint == 0x015E) || (codepoint == 0x015F) || (codepoint >= 0x0160 && codepoint <= 0x0165) || \ - (codepoint == 0x016E) || (codepoint == 0x016F) || (codepoint == 0x0170) || (codepoint == 0x0171) || (codepoint >= 0x0179 && codepoint <= 0x017E) || \ - (codepoint == 0x02C7) || (codepoint == 0x02D8) || (codepoint == 0x02D9) || (codepoint == 0x02DB) || (codepoint == 0x02DD)) - -#define isIBM913(codepoint) \ - ((codepoint >= 0x0108 && codepoint <= 0x010B) || (codepoint == 0x011C) || \ - (codepoint == 0x011D) || (codepoint == 0x0120) || (codepoint == 0x0121) || \ - (codepoint >= 0x0124 && codepoint <= 0x0127) || (codepoint == 0x0134) || (codepoint == 0x0135) || \ - (codepoint == 0x015C) || (codepoint == 0x015D) || (codepoint == 0x016C) || (codepoint == 0x016D)) - -#define isCompoundS1(codepoint) \ - ((codepoint == 0x011E) || (codepoint == 0x011F) || (codepoint == 0x0130) || \ - (codepoint == 0x0131) || (codepoint >= 0x0218 && codepoint <= 0x021B)) - -#define isISO8859_14(codepoint) \ - ((codepoint >= 0x0174 && codepoint <= 0x0177) || (codepoint == 0x1E0A) || \ - (codepoint == 0x1E0B) || (codepoint == 0x1E1E) || (codepoint == 0x1E1F) || \ - (codepoint == 0x1E40) || (codepoint == 0x1E41) || (codepoint == 0x1E56) || \ - (codepoint == 0x1E57) || (codepoint == 0x1E60) || (codepoint == 0x1E61) || \ - (codepoint == 0x1E6A) || (codepoint == 0x1E6B) || (codepoint == 0x1EF2) || \ - (codepoint == 0x1EF3) || (codepoint >= 0x1E80 && codepoint <= 0x1E85)) - -#define isIBM923(codepoint) \ - ((codepoint == 0x0152) || (codepoint == 0x0153) || (codepoint == 0x0178) || (codepoint == 0x20AC)) - - -typedef struct{ - UConverterSharedData *myConverterArray[NUM_OF_CONVERTERS]; - COMPOUND_TEXT_CONVERTERS state; -} UConverterDataCompoundText; - -/*********** Compound Text Converter Protos ***********/ -static void -_CompoundTextOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode); - -static void - _CompoundTextClose(UConverter *converter); - -static void -_CompoundTextReset(UConverter *converter, UConverterResetChoice choice); - -static const char* -_CompoundTextgetName(const UConverter* cnv); - - -static int32_t findNextEsc(const char *source, const char *sourceLimit) { - int32_t length = sourceLimit - source; - int32_t i; - for (i = 1; i < length; i++) { - if (*(source + i) == 0x1B) { - return i; - } - } - - return length; -} - -static COMPOUND_TEXT_CONVERTERS getState(int codepoint) { - COMPOUND_TEXT_CONVERTERS state = DO_SEARCH; - - if (isASCIIRange(codepoint)) { - state = COMPOUND_TEXT_SINGLE_0; - } else if (isIBM912(codepoint)) { - state = IBM_912; - }else if (isIBM913(codepoint)) { - state = IBM_913; - } else if (isISO8859_14(codepoint)) { - state = ISO_8859_14; - } else if (isIBM923(codepoint)) { - state = IBM_923; - } else if (isIBM874(codepoint)) { - state = IBM_874; - } else if (isIBM914(codepoint)) { - state = IBM_914; - } else if (isCompoundS2(codepoint)) { - state = COMPOUND_TEXT_SINGLE_2; - } else if (isCompoundS3(codepoint)) { - state = COMPOUND_TEXT_SINGLE_3; - } else if (isIBM916(codepoint)) { - state = IBM_916; - } else if (isIBM915(codepoint)) { - state = IBM_915; - } else if (isCompoundS1(codepoint)) { - state = COMPOUND_TEXT_SINGLE_1; - } - - return state; -} - -static COMPOUND_TEXT_CONVERTERS findStateFromEscSeq(const char* source, const char* sourceLimit, const uint8_t* toUBytesBuffer, int32_t toUBytesBufferLength, UErrorCode *err) { - COMPOUND_TEXT_CONVERTERS state = INVALID; - UBool matchFound = FALSE; - int32_t i, n, offset = toUBytesBufferLength; - - for (i = 0; i < NUM_OF_CONVERTERS; i++) { - matchFound = TRUE; - for (n = 0; escSeqCompoundText[i][n] != 0; n++) { - if (n < toUBytesBufferLength) { - if (toUBytesBuffer[n] != escSeqCompoundText[i][n]) { - matchFound = FALSE; - break; - } - } else if ((source + (n - offset)) >= sourceLimit) { - *err = U_TRUNCATED_CHAR_FOUND; - matchFound = FALSE; - break; - } else if (*(source + (n - offset)) != escSeqCompoundText[i][n]) { - matchFound = FALSE; - break; - } - } - - if (matchFound) { - break; - } - } - - if (matchFound) { - state = (COMPOUND_TEXT_CONVERTERS)i; - } - - return state; -} - -static void -_CompoundTextOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ - cnv->extraInfo = uprv_malloc (sizeof (UConverterDataCompoundText)); - if (cnv->extraInfo != NULL) { - UConverterDataCompoundText *myConverterData = (UConverterDataCompoundText *) cnv->extraInfo; - - UConverterNamePieces stackPieces; - UConverterLoadArgs stackArgs={ (int32_t)sizeof(UConverterLoadArgs) }; - - myConverterData->myConverterArray[COMPOUND_TEXT_SINGLE_0] = NULL; - myConverterData->myConverterArray[COMPOUND_TEXT_SINGLE_1] = ucnv_loadSharedData("icu-internal-compound-s1", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_SINGLE_2] = ucnv_loadSharedData("icu-internal-compound-s2", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_SINGLE_3] = ucnv_loadSharedData("icu-internal-compound-s3", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_1] = ucnv_loadSharedData("icu-internal-compound-d1", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_2] = ucnv_loadSharedData("icu-internal-compound-d2", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_3] = ucnv_loadSharedData("icu-internal-compound-d3", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_4] = ucnv_loadSharedData("icu-internal-compound-d4", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_5] = ucnv_loadSharedData("icu-internal-compound-d5", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_6] = ucnv_loadSharedData("icu-internal-compound-d6", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_DOUBLE_7] = ucnv_loadSharedData("icu-internal-compound-d7", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[COMPOUND_TEXT_TRIPLE_DOUBLE] = ucnv_loadSharedData("icu-internal-compound-t", &stackPieces, &stackArgs, errorCode); - - myConverterData->myConverterArray[IBM_915] = ucnv_loadSharedData("ibm-915_P100-1995", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_916] = ucnv_loadSharedData("ibm-916_P100-1995", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_914] = ucnv_loadSharedData("ibm-914_P100-1995", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_874] = ucnv_loadSharedData("ibm-874_P100-1995", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_912] = ucnv_loadSharedData("ibm-912_P100-1995", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_913] = ucnv_loadSharedData("ibm-913_P100-2000", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[ISO_8859_14] = ucnv_loadSharedData("iso-8859_14-1998", &stackPieces, &stackArgs, errorCode); - myConverterData->myConverterArray[IBM_923] = ucnv_loadSharedData("ibm-923_P100-1998", &stackPieces, &stackArgs, errorCode); - - if (U_FAILURE(*errorCode) || pArgs->onlyTestIsLoadable) { - _CompoundTextClose(cnv); - return; - } - - myConverterData->state = (COMPOUND_TEXT_CONVERTERS)0; - } else { - *errorCode = U_MEMORY_ALLOCATION_ERROR; - } -} - - -static void -_CompoundTextClose(UConverter *converter) { - UConverterDataCompoundText* myConverterData = (UConverterDataCompoundText*)(converter->extraInfo); - int32_t i; - - if (converter->extraInfo != NULL) { - /*close the array of converter pointers and free the memory*/ - for (i = 0; i < NUM_OF_CONVERTERS; i++) { - if (myConverterData->myConverterArray[i] != NULL) { - ucnv_unloadSharedDataIfReady(myConverterData->myConverterArray[i]); - } - } - - uprv_free(converter->extraInfo); - } -} - -static void -_CompoundTextReset(UConverter *converter, UConverterResetChoice choice) { -} - -static const char* -_CompoundTextgetName(const UConverter* cnv){ - return "x11-compound-text"; -} - -static void -UConverter_fromUnicode_CompoundText_OFFSETS(UConverterFromUnicodeArgs* args, UErrorCode* err){ - UConverter *cnv = args->converter; - uint8_t *target = (uint8_t *) args->target; - const uint8_t *targetLimit = (const uint8_t *) args->targetLimit; - const UChar* source = args->source; - const UChar* sourceLimit = args->sourceLimit; - /* int32_t* offsets = args->offsets; */ - UChar32 sourceChar; - UBool useFallback = cnv->useFallback; - uint8_t tmpTargetBuffer[7]; - int32_t tmpTargetBufferLength = 0; - COMPOUND_TEXT_CONVERTERS currentState, tmpState; - uint32_t pValue; - int32_t pValueLength = 0; - int32_t i, n, j; - - UConverterDataCompoundText *myConverterData = (UConverterDataCompoundText *) cnv->extraInfo; - - currentState = myConverterData->state; - - /* check if the last codepoint of previous buffer was a lead surrogate*/ - if((sourceChar = cnv->fromUChar32)!=0 && target< targetLimit) { - goto getTrail; - } - - while( source < sourceLimit){ - if(target < targetLimit){ - - sourceChar = *(source++); - /*check if the char is a First surrogate*/ - if(U16_IS_SURROGATE(sourceChar)) { - if(U16_IS_SURROGATE_LEAD(sourceChar)) { -getTrail: - /*look ahead to find the trail surrogate*/ - if(source < sourceLimit) { - /* test the following code unit */ - UChar trail=(UChar) *source; - if(U16_IS_TRAIL(trail)) { - source++; - sourceChar=U16_GET_SUPPLEMENTARY(sourceChar, trail); - cnv->fromUChar32=0x00; - /* convert this supplementary code point */ - /* exit this condition tree */ - } else { - /* this is an unmatched lead code unit (1st surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - cnv->fromUChar32=sourceChar; - break; - } - } else { - /* no more input */ - cnv->fromUChar32=sourceChar; - break; - } - } else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - cnv->fromUChar32=sourceChar; - break; - } - } - - tmpTargetBufferLength = 0; - tmpState = getState(sourceChar); - - if (tmpState != DO_SEARCH && currentState != tmpState) { - /* Get escape sequence if necessary */ - currentState = tmpState; - for (i = 0; escSeqCompoundText[currentState][i] != 0; i++) { - tmpTargetBuffer[tmpTargetBufferLength++] = escSeqCompoundText[currentState][i]; - } - } - - if (tmpState == DO_SEARCH) { - /* Test all available converters */ - for (i = 1; i < SEARCH_LENGTH; i++) { - pValueLength = ucnv_MBCSFromUChar32(myConverterData->myConverterArray[i], sourceChar, &pValue, useFallback); - if (pValueLength > 0) { - tmpState = (COMPOUND_TEXT_CONVERTERS)i; - if (currentState != tmpState) { - currentState = tmpState; - for (j = 0; escSeqCompoundText[currentState][j] != 0; j++) { - tmpTargetBuffer[tmpTargetBufferLength++] = escSeqCompoundText[currentState][j]; - } - } - for (n = (pValueLength - 1); n >= 0; n--) { - tmpTargetBuffer[tmpTargetBufferLength++] = (uint8_t)(pValue >> (n * 8)); - } - break; - } - } - } else if (tmpState == COMPOUND_TEXT_SINGLE_0) { - tmpTargetBuffer[tmpTargetBufferLength++] = (uint8_t)sourceChar; - } else { - pValueLength = ucnv_MBCSFromUChar32(myConverterData->myConverterArray[currentState], sourceChar, &pValue, useFallback); - if (pValueLength > 0) { - for (n = (pValueLength - 1); n >= 0; n--) { - tmpTargetBuffer[tmpTargetBufferLength++] = (uint8_t)(pValue >> (n * 8)); - } - } - } - - for (i = 0; i < tmpTargetBufferLength; i++) { - if (target < targetLimit) { - *target++ = tmpTargetBuffer[i]; - } else { - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - - if (*err == U_BUFFER_OVERFLOW_ERROR) { - for (; i < tmpTargetBufferLength; i++) { - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = tmpTargetBuffer[i]; - } - } - } else { - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - - /*save the state and return */ - myConverterData->state = currentState; - args->source = source; - args->target = (char*)target; -} - - -static void -UConverter_toUnicode_CompoundText_OFFSETS(UConverterToUnicodeArgs *args, - UErrorCode* err){ - const char *mySource = (char *) args->source; - UChar *myTarget = args->target; - const char *mySourceLimit = args->sourceLimit; - const char *tmpSourceLimit = mySourceLimit; - uint32_t mySourceChar = 0x0000; - COMPOUND_TEXT_CONVERTERS currentState, tmpState; - int32_t sourceOffset = 0; - UConverterDataCompoundText *myConverterData = (UConverterDataCompoundText *) args->converter->extraInfo; - UConverterSharedData* savedSharedData = NULL; - - UConverterToUnicodeArgs subArgs; - int32_t minArgsSize; - - /* set up the subconverter arguments */ - if(args->sizesize; - } else { - minArgsSize = (int32_t)sizeof(UConverterToUnicodeArgs); - } - - uprv_memcpy(&subArgs, args, minArgsSize); - subArgs.size = (uint16_t)minArgsSize; - - currentState = tmpState = myConverterData->state; - - while(mySource < mySourceLimit){ - if(myTarget < args->targetLimit){ - if (args->converter->toULength > 0) { - mySourceChar = args->converter->toUBytes[0]; - } else { - mySourceChar = (uint8_t)*mySource; - } - - if (mySourceChar == ESC_START) { - tmpState = findStateFromEscSeq(mySource, mySourceLimit, args->converter->toUBytes, args->converter->toULength, err); - - if (*err == U_TRUNCATED_CHAR_FOUND) { - for (; mySource < mySourceLimit;) { - args->converter->toUBytes[args->converter->toULength++] = *mySource++; - } - *err = U_ZERO_ERROR; - break; - } else if (tmpState == INVALID) { - if (args->converter->toULength == 0) { - mySource++; /* skip over the 0x1b byte */ - } - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - - if (tmpState != currentState) { - currentState = tmpState; - } - - sourceOffset = uprv_strlen((char*)escSeqCompoundText[currentState]) - args->converter->toULength; - - mySource += sourceOffset; - - args->converter->toULength = 0; - } - - if (currentState == COMPOUND_TEXT_SINGLE_0) { - while (mySource < mySourceLimit) { - if (*mySource == ESC_START) { - break; - } - if (myTarget < args->targetLimit) { - *myTarget++ = 0x00ff&(*mySource++); - } else { - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } else if (mySource < mySourceLimit){ - sourceOffset = findNextEsc(mySource, mySourceLimit); - - tmpSourceLimit = mySource + sourceOffset; - - subArgs.source = mySource; - subArgs.sourceLimit = tmpSourceLimit; - subArgs.target = myTarget; - savedSharedData = subArgs.converter->sharedData; - subArgs.converter->sharedData = myConverterData->myConverterArray[currentState]; - - ucnv_MBCSToUnicodeWithOffsets(&subArgs, err); - - subArgs.converter->sharedData = savedSharedData; - - mySource = subArgs.source; - myTarget = subArgs.target; - - if (U_FAILURE(*err)) { - if(*err == U_BUFFER_OVERFLOW_ERROR) { - if(subArgs.converter->UCharErrorBufferLength > 0) { - uprv_memcpy(args->converter->UCharErrorBuffer, subArgs.converter->UCharErrorBuffer, - subArgs.converter->UCharErrorBufferLength); - } - args->converter->UCharErrorBufferLength=subArgs.converter->UCharErrorBufferLength; - subArgs.converter->UCharErrorBufferLength = 0; - } - break; - } - } - } else { - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - myConverterData->state = currentState; - args->target = myTarget; - args->source = mySource; -} - -static void -_CompoundText_GetUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - UConverterDataCompoundText *myConverterData = (UConverterDataCompoundText *)cnv->extraInfo; - int32_t i; - - for (i = 1; i < NUM_OF_CONVERTERS; i++) { - ucnv_MBCSGetUnicodeSetForUnicode(myConverterData->myConverterArray[i], sa, which, pErrorCode); - } - sa->add(sa->set, 0x0000); - sa->add(sa->set, 0x0009); - sa->add(sa->set, 0x000A); - sa->addRange(sa->set, 0x0020, 0x007F); - sa->addRange(sa->set, 0x00A0, 0x00FF); -} - -static const UConverterImpl _CompoundTextImpl = { - - UCNV_COMPOUND_TEXT, - - NULL, - NULL, - - _CompoundTextOpen, - _CompoundTextClose, - _CompoundTextReset, - - UConverter_toUnicode_CompoundText_OFFSETS, - UConverter_toUnicode_CompoundText_OFFSETS, - UConverter_fromUnicode_CompoundText_OFFSETS, - UConverter_fromUnicode_CompoundText_OFFSETS, - NULL, - - NULL, - _CompoundTextgetName, - NULL, - NULL, - _CompoundText_GetUnicodeSet -}; -static const UConverterStaticData _CompoundTextStaticData = { - sizeof(UConverterStaticData), - "COMPOUND_TEXT", - 0, - UCNV_IBM, - UCNV_COMPOUND_TEXT, - 1, - 6, - { 0xef, 0, 0, 0 }, - 1, - FALSE, - FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; -const UConverterSharedData _CompoundTextData = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_CompoundTextStaticData, &_CompoundTextImpl); - -#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */ diff --git a/source/common/ucnv_err.c b/source/common/ucnv_err.c deleted file mode 100644 index c609bed..0000000 --- a/source/common/ucnv_err.c +++ /dev/null @@ -1,481 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ***************************************************************************** - * - * Copyright (C) 1998-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - ***************************************************************************** - * - * ucnv_err.c - * Implements error behaviour functions called by T_UConverter_{from,to}Unicode - * - * -* Change history: -* -* 06/29/2000 helena Major rewrite of the callback APIs. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv_err.h" -#include "unicode/ucnv_cb.h" -#include "ucnv_cnv.h" -#include "cmemory.h" -#include "unicode/ucnv.h" -#include "ustrfmt.h" - -#define VALUE_STRING_LENGTH 48 -/*Magic # 32 = 4(number of char in value string) * 8(max number of bytes per char for any converter) */ -#define UNICODE_PERCENT_SIGN_CODEPOINT 0x0025 -#define UNICODE_U_CODEPOINT 0x0055 -#define UNICODE_X_CODEPOINT 0x0058 -#define UNICODE_RS_CODEPOINT 0x005C -#define UNICODE_U_LOW_CODEPOINT 0x0075 -#define UNICODE_X_LOW_CODEPOINT 0x0078 -#define UNICODE_AMP_CODEPOINT 0x0026 -#define UNICODE_HASH_CODEPOINT 0x0023 -#define UNICODE_SEMICOLON_CODEPOINT 0x003B -#define UNICODE_PLUS_CODEPOINT 0x002B -#define UNICODE_LEFT_CURLY_CODEPOINT 0x007B -#define UNICODE_RIGHT_CURLY_CODEPOINT 0x007D -#define UNICODE_SPACE_CODEPOINT 0x0020 -#define UCNV_PRV_ESCAPE_ICU 0 -#define UCNV_PRV_ESCAPE_C 'C' -#define UCNV_PRV_ESCAPE_XML_DEC 'D' -#define UCNV_PRV_ESCAPE_XML_HEX 'X' -#define UCNV_PRV_ESCAPE_JAVA 'J' -#define UCNV_PRV_ESCAPE_UNICODE 'U' -#define UCNV_PRV_ESCAPE_CSS2 'S' -#define UCNV_PRV_STOP_ON_ILLEGAL 'i' - -/* - * IS_DEFAULT_IGNORABLE_CODE_POINT - * This is to check if a code point has the default ignorable unicode property. - * As such, this list needs to be updated if the ignorable code point list ever - * changes. - * To avoid dependency on other code, this list is hard coded here. - * When an ignorable code point is found and is unmappable, the default callbacks - * will ignore them. - * For a list of the default ignorable code points, use this link: http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[%3ADI%3A]&g= - * - * This list should be sync with the one in CharsetCallback.java - */ -#define IS_DEFAULT_IGNORABLE_CODE_POINT(c) (\ - (c == 0x00AD) || \ - (c == 0x034F) || \ - (c == 0x061C) || \ - (c == 0x115F) || \ - (c == 0x1160) || \ - (0x17B4 <= c && c <= 0x17B5) || \ - (0x180B <= c && c <= 0x180E) || \ - (0x200B <= c && c <= 0x200F) || \ - (0x202A <= c && c <= 0x202E) || \ - (c == 0x2060) || \ - (0x2066 <= c && c <= 0x2069) || \ - (0x2061 <= c && c <= 0x2064) || \ - (0x206A <= c && c <= 0x206F) || \ - (c == 0x3164) || \ - (0x0FE00 <= c && c <= 0x0FE0F) || \ - (c == 0x0FEFF) || \ - (c == 0x0FFA0) || \ - (0x01BCA0 <= c && c <= 0x01BCA3) || \ - (0x01D173 <= c && c <= 0x01D17A) || \ - (c == 0x0E0001) || \ - (0x0E0020 <= c && c <= 0x0E007F) || \ - (0x0E0100 <= c && c <= 0x0E01EF) || \ - (c == 0x2065) || \ - (0x0FFF0 <= c && c <= 0x0FFF8) || \ - (c == 0x0E0000) || \ - (0x0E0002 <= c && c <= 0x0E001F) || \ - (0x0E0080 <= c && c <= 0x0E00FF) || \ - (0x0E01F0 <= c && c <= 0x0E0FFF) \ - ) - - -/*Function Pointer STOPS at the ILLEGAL_SEQUENCE */ -U_CAPI void U_EXPORT2 -UCNV_FROM_U_CALLBACK_STOP ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err) -{ - if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoint)) - { - /* - * Skip if the codepoint has unicode property of default ignorable. - */ - *err = U_ZERO_ERROR; - } - /* the caller must have set the error code accordingly */ - return; -} - - -/*Function Pointer STOPS at the ILLEGAL_SEQUENCE */ -U_CAPI void U_EXPORT2 -UCNV_TO_U_CALLBACK_STOP ( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char* codePoints, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err) -{ - /* the caller must have set the error code accordingly */ - return; -} - -U_CAPI void U_EXPORT2 -UCNV_FROM_U_CALLBACK_SKIP ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err) -{ - if (reason <= UCNV_IRREGULAR) - { - if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoint)) - { - /* - * Skip if the codepoint has unicode property of default ignorable. - */ - *err = U_ZERO_ERROR; - } - else if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) - { - *err = U_ZERO_ERROR; - } - /* else the caller must have set the error code accordingly. */ - } - /* else ignore the reset, close and clone calls. */ -} - -U_CAPI void U_EXPORT2 -UCNV_FROM_U_CALLBACK_SUBSTITUTE ( - const void *context, - UConverterFromUnicodeArgs *fromArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err) -{ - if (reason <= UCNV_IRREGULAR) - { - if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoint)) - { - /* - * Skip if the codepoint has unicode property of default ignorable. - */ - *err = U_ZERO_ERROR; - } - else if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) - { - *err = U_ZERO_ERROR; - ucnv_cbFromUWriteSub(fromArgs, 0, err); - } - /* else the caller must have set the error code accordingly. */ - } - /* else ignore the reset, close and clone calls. */ -} - -/*uses uprv_itou to get a unicode escape sequence of the offensive sequence, - *uses a clean copy (resetted) of the converter, to convert that unicode - *escape sequence to the target codepage (if conversion failure happens then - *we revert to substituting with subchar) - */ -U_CAPI void U_EXPORT2 -UCNV_FROM_U_CALLBACK_ESCAPE ( - const void *context, - UConverterFromUnicodeArgs *fromArgs, - const UChar *codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err) -{ - - UChar valueString[VALUE_STRING_LENGTH]; - int32_t valueStringLength = 0; - int32_t i = 0; - - const UChar *myValueSource = NULL; - UErrorCode err2 = U_ZERO_ERROR; - UConverterFromUCallback original = NULL; - const void *originalContext; - - UConverterFromUCallback ignoredCallback = NULL; - const void *ignoredContext; - - if (reason > UCNV_IRREGULAR) - { - return; - } - else if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoint)) - { - /* - * Skip if the codepoint has unicode property of default ignorable. - */ - *err = U_ZERO_ERROR; - return; - } - - ucnv_setFromUCallBack (fromArgs->converter, - (UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE, - NULL, - &original, - &originalContext, - &err2); - - if (U_FAILURE (err2)) - { - *err = err2; - return; - } - if(context==NULL) - { - while (i < length) - { - valueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ - valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4); - } - } - else - { - switch(*((char*)context)) - { - case UCNV_PRV_ESCAPE_JAVA: - while (i < length) - { - valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */ - valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4); - } - break; - - case UCNV_PRV_ESCAPE_C: - valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */ - - if(length==2){ - valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 8); - - } - else{ - valueString[valueStringLength++] = (UChar) UNICODE_U_LOW_CODEPOINT; /* adding u */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4); - } - break; - - case UCNV_PRV_ESCAPE_XML_DEC: - - valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */ - valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */ - if(length==2){ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 10, 0); - } - else{ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 10, 0); - } - valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */ - break; - - case UCNV_PRV_ESCAPE_XML_HEX: - - valueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */ - valueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */ - valueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */ - if(length==2){ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0); - } - else{ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 0); - } - valueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */ - break; - - case UCNV_PRV_ESCAPE_UNICODE: - valueString[valueStringLength++] = (UChar) UNICODE_LEFT_CURLY_CODEPOINT; /* adding { */ - valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */ - valueString[valueStringLength++] = (UChar) UNICODE_PLUS_CODEPOINT; /* adding + */ - if (length == 2) { - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 4); - } else { - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 4); - } - valueString[valueStringLength++] = (UChar) UNICODE_RIGHT_CURLY_CODEPOINT; /* adding } */ - break; - - case UCNV_PRV_ESCAPE_CSS2: - valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0); - /* Always add space character, becase the next character might be whitespace, - which would erroneously be considered the termination of the escape sequence. */ - valueString[valueStringLength++] = (UChar) UNICODE_SPACE_CODEPOINT; - break; - - default: - while (i < length) - { - valueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ - valueString[valueStringLength++] = (UChar) UNICODE_U_CODEPOINT; /* adding U */ - valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[i++], 16, 4); - } - } - } - myValueSource = valueString; - - /* reset the error */ - *err = U_ZERO_ERROR; - - ucnv_cbFromUWriteUChars(fromArgs, &myValueSource, myValueSource+valueStringLength, 0, err); - - ucnv_setFromUCallBack (fromArgs->converter, - original, - originalContext, - &ignoredCallback, - &ignoredContext, - &err2); - if (U_FAILURE (err2)) - { - *err = err2; - return; - } - - return; -} - - - -U_CAPI void U_EXPORT2 -UCNV_TO_U_CALLBACK_SKIP ( - const void *context, - UConverterToUnicodeArgs *toArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err) -{ - if (reason <= UCNV_IRREGULAR) - { - if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) - { - *err = U_ZERO_ERROR; - } - /* else the caller must have set the error code accordingly. */ - } - /* else ignore the reset, close and clone calls. */ -} - -U_CAPI void U_EXPORT2 -UCNV_TO_U_CALLBACK_SUBSTITUTE ( - const void *context, - UConverterToUnicodeArgs *toArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err) -{ - if (reason <= UCNV_IRREGULAR) - { - if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) - { - *err = U_ZERO_ERROR; - ucnv_cbToUWriteSub(toArgs,0,err); - } - /* else the caller must have set the error code accordingly. */ - } - /* else ignore the reset, close and clone calls. */ -} - -/*uses uprv_itou to get a unicode escape sequence of the offensive sequence, - *and uses that as the substitution sequence - */ -U_CAPI void U_EXPORT2 -UCNV_TO_U_CALLBACK_ESCAPE ( - const void *context, - UConverterToUnicodeArgs *toArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err) -{ - UChar uniValueString[VALUE_STRING_LENGTH]; - int32_t valueStringLength = 0; - int32_t i = 0; - - if (reason > UCNV_IRREGULAR) - { - return; - } - - if(context==NULL) - { - while (i < length) - { - uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ - uniValueString[valueStringLength++] = (UChar) UNICODE_X_CODEPOINT; /* adding X */ - valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t) codeUnits[i++], 16, 2); - } - } - else - { - switch(*((char*)context)) - { - case UCNV_PRV_ESCAPE_XML_DEC: - while (i < length) - { - uniValueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */ - uniValueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */ - valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 10, 0); - uniValueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */ - } - break; - - case UCNV_PRV_ESCAPE_XML_HEX: - while (i < length) - { - uniValueString[valueStringLength++] = (UChar) UNICODE_AMP_CODEPOINT; /* adding & */ - uniValueString[valueStringLength++] = (UChar) UNICODE_HASH_CODEPOINT; /* adding # */ - uniValueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */ - valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 16, 0); - uniValueString[valueStringLength++] = (UChar) UNICODE_SEMICOLON_CODEPOINT; /* adding ; */ - } - break; - case UCNV_PRV_ESCAPE_C: - while (i < length) - { - uniValueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */ - uniValueString[valueStringLength++] = (UChar) UNICODE_X_LOW_CODEPOINT; /* adding x */ - valueStringLength += uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t)codeUnits[i++], 16, 2); - } - break; - default: - while (i < length) - { - uniValueString[valueStringLength++] = (UChar) UNICODE_PERCENT_SIGN_CODEPOINT; /* adding % */ - uniValueString[valueStringLength++] = (UChar) UNICODE_X_CODEPOINT; /* adding X */ - uprv_itou (uniValueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint8_t) codeUnits[i++], 16, 2); - valueStringLength += 2; - } - } - } - /* reset the error */ - *err = U_ZERO_ERROR; - - ucnv_cbToUWriteUChars(toArgs, uniValueString, valueStringLength, 0, err); -} - -#endif diff --git a/source/common/ucnv_ext.cpp b/source/common/ucnv_ext.cpp index f860518..7dea4ee 100644 --- a/source/common/ucnv_ext.cpp +++ b/source/common/ucnv_ext.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucnv_ext.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -23,6 +23,7 @@ #if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION #include "unicode/uset.h" +#include "unicode/ustring.h" #include "ucnv_bld.h" #include "ucnv_cnv.h" #include "ucnv_ext.h" diff --git a/source/common/ucnv_ext.h b/source/common/ucnv_ext.h index c2f459c..dceea7e 100644 --- a/source/common/ucnv_ext.h +++ b/source/common/ucnv_ext.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucnv_ext.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucnv_imp.h b/source/common/ucnv_imp.h index 81aa80f..c5e6aeb 100644 --- a/source/common/ucnv_imp.h +++ b/source/common/ucnv_imp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ucnv_io.cpp b/source/common/ucnv_io.cpp index c3301e1..7a95a3f 100644 --- a/source/common/ucnv_io.cpp +++ b/source/common/ucnv_io.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/ucnv_io.h b/source/common/ucnv_io.h index 8b35857..8f2d7b5 100644 --- a/source/common/ucnv_io.h +++ b/source/common/ucnv_io.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ucnv_lmb.c b/source/common/ucnv_lmb.c deleted file mode 100644 index e427790..0000000 --- a/source/common/ucnv_lmb.c +++ /dev/null @@ -1,1378 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_lmb.cpp -* encoding: US-ASCII -* tab size: 4 (not used) -* indentation:4 -* -* created on: 2000feb09 -* created by: Brendan Murray -* extensively hacked up by: Jim Snyder-Grant -* -* Modification History: -* -* Date Name Description -* -* 06/20/2000 helena OS/400 port changes; mostly typecast. -* 06/27/2000 Jim Snyder-Grant Deal with partial characters and small buffers. -* Add comments to document LMBCS format and implementation -* restructured order & breakdown of functions -* 06/28/2000 helena Major rewrite for the callback API changes. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "unicode/ucnv_err.h" -#include "unicode/ucnv.h" -#include "unicode/uset.h" -#include "cmemory.h" -#include "cstring.h" -#include "uassert.h" -#include "ucnv_imp.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" - -#ifdef EBCDIC_RTL - #include "ascii_a.h" -#endif - -/* - LMBCS - - (Lotus Multi-Byte Character Set) - - LMBCS was invented in the late 1980's and is primarily used in Lotus Notes - databases and in Lotus 1-2-3 files. Programmers who work with the APIs - into these products will sometimes need to deal with strings in this format. - - The code in this file provides an implementation for an ICU converter of - LMBCS to and from Unicode. - - Since the LMBCS character set is only sparsely documented in existing - printed or online material, we have added extensive annotation to this - file to serve as a guide to understanding LMBCS. - - LMBCS was originally designed with these four sometimes-competing design goals: - - -Provide encodings for the characters in 12 existing national standards - (plus a few other characters) - -Minimal memory footprint - -Maximal speed of conversion into the existing national character sets - -No need to track a changing state as you interpret a string. - - - All of the national character sets LMBCS was trying to encode are 'ANSI' - based, in that the bytes from 0x20 - 0x7F are almost exactly the - same common Latin unaccented characters and symbols in all character sets. - - So, in order to help meet the speed & memory design goals, the common ANSI - bytes from 0x20-0x7F are represented by the same single-byte values in LMBCS. - - The general LMBCS code unit is from 1-3 bytes. We can describe the 3 bytes as - follows: - - [G] D1 [D2] - - That is, a sometimes-optional 'group' byte, followed by 1 and sometimes 2 - data bytes. The maximum size of a LMBCS chjaracter is 3 bytes: -*/ -#define ULMBCS_CHARSIZE_MAX 3 -/* - The single-byte values from 0x20 to 0x7F are examples of single D1 bytes. - We often have to figure out if byte values are below or above this, so we - use the ANSI nomenclature 'C0' and 'C1' to refer to the range of control - characters just above & below the common lower-ANSI range */ -#define ULMBCS_C0END 0x1F -#define ULMBCS_C1START 0x80 -/* - Since LMBCS is always dealing in byte units. we create a local type here for - dealing with these units of LMBCS code units: - -*/ -typedef uint8_t ulmbcs_byte_t; - -/* - Most of the values less than 0x20 are reserved in LMBCS to announce - which national character standard is being used for the 'D' bytes. - In the comments we show the common name and the IBM character-set ID - for these character-set announcers: -*/ - -#define ULMBCS_GRP_L1 0x01 /* Latin-1 :ibm-850 */ -#define ULMBCS_GRP_GR 0x02 /* Greek :ibm-851 */ -#define ULMBCS_GRP_HE 0x03 /* Hebrew :ibm-1255 */ -#define ULMBCS_GRP_AR 0x04 /* Arabic :ibm-1256 */ -#define ULMBCS_GRP_RU 0x05 /* Cyrillic :ibm-1251 */ -#define ULMBCS_GRP_L2 0x06 /* Latin-2 :ibm-852 */ -#define ULMBCS_GRP_TR 0x08 /* Turkish :ibm-1254 */ -#define ULMBCS_GRP_TH 0x0B /* Thai :ibm-874 */ -#define ULMBCS_GRP_JA 0x10 /* Japanese :ibm-943 */ -#define ULMBCS_GRP_KO 0x11 /* Korean :ibm-1261 */ -#define ULMBCS_GRP_TW 0x12 /* Chinese SC :ibm-950 */ -#define ULMBCS_GRP_CN 0x13 /* Chinese TC :ibm-1386 */ - -/* - So, the beginning of understanding LMBCS is that IF the first byte of a LMBCS - character is one of those 12 values, you can interpret the remaining bytes of - that character as coming from one of those character sets. Since the lower - ANSI bytes already are represented in single bytes, using one of the character - set announcers is used to announce a character that starts with a byte of - 0x80 or greater. - - The character sets are arranged so that the single byte sets all appear - before the multi-byte character sets. When we need to tell whether a - group byte is for a single byte char set or not we use this define: */ - -#define ULMBCS_DOUBLEOPTGROUP_START 0x10 - -/* -However, to fully understand LMBCS, you must also understand a series of -exceptions & optimizations made in service of the design goals. - -First, those of you who are character set mavens may have noticed that -the 'double-byte' character sets are actually multi-byte character sets -that can have 1 or two bytes, even in the upper-ascii range. To force -each group byte to introduce a fixed-width encoding (to make it faster to -count characters), we use a convention of doubling up on the group byte -to introduce any single-byte character > 0x80 in an otherwise double-byte -character set. So, for example, the LMBCS sequence x10 x10 xAE is the -same as '0xAE' in the Japanese code page 943. - -Next, you will notice that the list of group bytes has some gaps. -These are used in various ways. - -We reserve a few special single byte values for common control -characters. These are in the same place as their ANSI eqivalents for speed. -*/ - -#define ULMBCS_HT 0x09 /* Fixed control char - Horizontal Tab */ -#define ULMBCS_LF 0x0A /* Fixed control char - Line Feed */ -#define ULMBCS_CR 0x0D /* Fixed control char - Carriage Return */ - -/* Then, 1-2-3 reserved a special single-byte character to put at the -beginning of internal 'system' range names: */ - -#define ULMBCS_123SYSTEMRANGE 0x19 - -/* Then we needed a place to put all the other ansi control characters -that must be moved to different values because LMBCS reserves those -values for other purposes. To represent the control characters, we start -with a first byte of 0xF & add the control chaarcter value as the -second byte */ -#define ULMBCS_GRP_CTRL 0x0F - -/* For the C0 controls (less than 0x20), we add 0x20 to preserve the -useful doctrine that any byte less than 0x20 in a LMBCS char must be -the first byte of a character:*/ -#define ULMBCS_CTRLOFFSET 0x20 - -/* -Where to put the characters that aren't part of any of the 12 national -character sets? The first thing that was done, in the earlier years of -LMBCS, was to use up the spaces of the form - - [G] D1, - - where 'G' was one of the single-byte character groups, and - D1 was less than 0x80. These sequences are gathered together - into a Lotus-invented doublebyte character set to represent a - lot of stray values. Internally, in this implementation, we track this - as group '0', as a place to tuck this exceptions list.*/ - -#define ULMBCS_GRP_EXCEPT 0x00 -/* - Finally, as the durability and usefulness of UNICODE became clear, - LOTUS added a new group 0x14 to hold Unicode values not otherwise - represented in LMBCS: */ -#define ULMBCS_GRP_UNICODE 0x14 -/* The two bytes appearing after a 0x14 are intrepreted as UFT-16 BE -(Big-Endian) characters. The exception comes when the UTF16 -representation would have a zero as the second byte. In that case, -'F6' is used in its place, and the bytes are swapped. (This prevents -LMBCS from encoding any Unicode values of the form U+F6xx, but that's OK: -0xF6xx is in the middle of the Private Use Area.)*/ -#define ULMBCS_UNICOMPATZERO 0xF6 - -/* It is also useful in our code to have a constant for the size of -a LMBCS char that holds a literal Unicode value */ -#define ULMBCS_UNICODE_SIZE 3 - -/* -To squish the LMBCS representations down even further, and to make -translations even faster,sometimes the optimization group byte can be dropped -from a LMBCS character. This is decided on a process-by-process basis. The -group byte that is dropped is called the 'optimization group'. - -For Notes, the optimzation group is always 0x1.*/ -#define ULMBCS_DEFAULTOPTGROUP 0x1 -/* For 1-2-3 files, the optimzation group is stored in the header of the 1-2-3 -file. - - In any case, when using ICU, you either pass in the -optimization group as part of the name of the converter (LMBCS-1, LMBCS-2, -etc.). Using plain 'LMBCS' as the name of the converter will give you -LMBCS-1. - - -*** Implementation strategy *** - - -Because of the extensive use of other character sets, the LMBCS converter -keeps a mapping between optimization groups and IBM character sets, so that -ICU converters can be created and used as needed. */ - -/* As you can see, even though any byte below 0x20 could be an optimization -byte, only those at 0x13 or below can map to an actual converter. To limit -some loops and searches, we define a value for that last group converter:*/ - -#define ULMBCS_GRP_LAST 0x13 /* last LMBCS group that has a converter */ - -static const char * const OptGroupByteToCPName[ULMBCS_GRP_LAST + 1] = { - /* 0x0000 */ "lmb-excp", /* internal home for the LOTUS exceptions list */ - /* 0x0001 */ "ibm-850", - /* 0x0002 */ "ibm-851", - /* 0x0003 */ "windows-1255", - /* 0x0004 */ "windows-1256", - /* 0x0005 */ "windows-1251", - /* 0x0006 */ "ibm-852", - /* 0x0007 */ NULL, /* Unused */ - /* 0x0008 */ "windows-1254", - /* 0x0009 */ NULL, /* Control char HT */ - /* 0x000A */ NULL, /* Control char LF */ - /* 0x000B */ "windows-874", - /* 0x000C */ NULL, /* Unused */ - /* 0x000D */ NULL, /* Control char CR */ - /* 0x000E */ NULL, /* Unused */ - /* 0x000F */ NULL, /* Control chars: 0x0F20 + C0/C1 character: algorithmic */ - /* 0x0010 */ "windows-932", - /* 0x0011 */ "windows-949", - /* 0x0012 */ "windows-950", - /* 0x0013 */ "windows-936" - - /* The rest are null, including the 0x0014 Unicode compatibility region - and 0x0019, the 1-2-3 system range control char */ -}; - - -/* That's approximately all the data that's needed for translating - LMBCS to Unicode. - - -However, to translate Unicode to LMBCS, we need some more support. - -That's because there are often more than one possible mappings from a Unicode -code point back into LMBCS. The first thing we do is look up into a table -to figure out if there are more than one possible mappings. This table, -arranged by Unicode values (including ranges) either lists which group -to use, or says that it could go into one or more of the SBCS sets, or -into one or more of the DBCS sets. (If the character exists in both DBCS & -SBCS, the table will place it in the SBCS sets, to make the LMBCS code point -length as small as possible. Here's the two special markers we use to indicate -ambiguous mappings: */ - -#define ULMBCS_AMBIGUOUS_SBCS 0x80 /* could fit in more than one - LMBCS sbcs native encoding - (example: most accented latin) */ -#define ULMBCS_AMBIGUOUS_MBCS 0x81 /* could fit in more than one - LMBCS mbcs native encoding - (example: Unihan) */ -#define ULMBCS_AMBIGUOUS_ALL 0x82 -/* And here's a simple way to see if a group falls in an appropriate range */ -#define ULMBCS_AMBIGUOUS_MATCH(agroup, xgroup) \ - ((((agroup) == ULMBCS_AMBIGUOUS_SBCS) && \ - (xgroup) < ULMBCS_DOUBLEOPTGROUP_START) || \ - (((agroup) == ULMBCS_AMBIGUOUS_MBCS) && \ - (xgroup) >= ULMBCS_DOUBLEOPTGROUP_START)) || \ - ((agroup) == ULMBCS_AMBIGUOUS_ALL) - - -/* The table & some code to use it: */ - - -static const struct _UniLMBCSGrpMap -{ - const UChar uniStartRange; - const UChar uniEndRange; - const ulmbcs_byte_t GrpType; -} UniLMBCSGrpMap[] -= -{ - - {0x0001, 0x001F, ULMBCS_GRP_CTRL}, - {0x0080, 0x009F, ULMBCS_GRP_CTRL}, - {0x00A0, 0x00A6, ULMBCS_AMBIGUOUS_SBCS}, - {0x00A7, 0x00A8, ULMBCS_AMBIGUOUS_ALL}, - {0x00A9, 0x00AF, ULMBCS_AMBIGUOUS_SBCS}, - {0x00B0, 0x00B1, ULMBCS_AMBIGUOUS_ALL}, - {0x00B2, 0x00B3, ULMBCS_AMBIGUOUS_SBCS}, - {0x00B4, 0x00B4, ULMBCS_AMBIGUOUS_ALL}, - {0x00B5, 0x00B5, ULMBCS_AMBIGUOUS_SBCS}, - {0x00B6, 0x00B6, ULMBCS_AMBIGUOUS_ALL}, - {0x00B7, 0x00D6, ULMBCS_AMBIGUOUS_SBCS}, - {0x00D7, 0x00D7, ULMBCS_AMBIGUOUS_ALL}, - {0x00D8, 0x00F6, ULMBCS_AMBIGUOUS_SBCS}, - {0x00F7, 0x00F7, ULMBCS_AMBIGUOUS_ALL}, - {0x00F8, 0x01CD, ULMBCS_AMBIGUOUS_SBCS}, - {0x01CE, 0x01CE, ULMBCS_GRP_TW }, - {0x01CF, 0x02B9, ULMBCS_AMBIGUOUS_SBCS}, - {0x02BA, 0x02BA, ULMBCS_GRP_CN}, - {0x02BC, 0x02C8, ULMBCS_AMBIGUOUS_SBCS}, - {0x02C9, 0x02D0, ULMBCS_AMBIGUOUS_MBCS}, - {0x02D8, 0x02DD, ULMBCS_AMBIGUOUS_SBCS}, - {0x0384, 0x0390, ULMBCS_AMBIGUOUS_SBCS}, - {0x0391, 0x03A9, ULMBCS_AMBIGUOUS_ALL}, - {0x03AA, 0x03B0, ULMBCS_AMBIGUOUS_SBCS}, - {0x03B1, 0x03C9, ULMBCS_AMBIGUOUS_ALL}, - {0x03CA, 0x03CE, ULMBCS_AMBIGUOUS_SBCS}, - {0x0400, 0x0400, ULMBCS_GRP_RU}, - {0x0401, 0x0401, ULMBCS_AMBIGUOUS_ALL}, - {0x0402, 0x040F, ULMBCS_GRP_RU}, - {0x0410, 0x0431, ULMBCS_AMBIGUOUS_ALL}, - {0x0432, 0x044E, ULMBCS_GRP_RU}, - {0x044F, 0x044F, ULMBCS_AMBIGUOUS_ALL}, - {0x0450, 0x0491, ULMBCS_GRP_RU}, - {0x05B0, 0x05F2, ULMBCS_GRP_HE}, - {0x060C, 0x06AF, ULMBCS_GRP_AR}, - {0x0E01, 0x0E5B, ULMBCS_GRP_TH}, - {0x200C, 0x200F, ULMBCS_AMBIGUOUS_SBCS}, - {0x2010, 0x2010, ULMBCS_AMBIGUOUS_MBCS}, - {0x2013, 0x2014, ULMBCS_AMBIGUOUS_SBCS}, - {0x2015, 0x2015, ULMBCS_AMBIGUOUS_MBCS}, - {0x2016, 0x2016, ULMBCS_AMBIGUOUS_MBCS}, - {0x2017, 0x2017, ULMBCS_AMBIGUOUS_SBCS}, - {0x2018, 0x2019, ULMBCS_AMBIGUOUS_ALL}, - {0x201A, 0x201B, ULMBCS_AMBIGUOUS_SBCS}, - {0x201C, 0x201D, ULMBCS_AMBIGUOUS_ALL}, - {0x201E, 0x201F, ULMBCS_AMBIGUOUS_SBCS}, - {0x2020, 0x2021, ULMBCS_AMBIGUOUS_ALL}, - {0x2022, 0x2024, ULMBCS_AMBIGUOUS_SBCS}, - {0x2025, 0x2025, ULMBCS_AMBIGUOUS_MBCS}, - {0x2026, 0x2026, ULMBCS_AMBIGUOUS_ALL}, - {0x2027, 0x2027, ULMBCS_GRP_TW}, - {0x2030, 0x2030, ULMBCS_AMBIGUOUS_ALL}, - {0x2031, 0x2031, ULMBCS_AMBIGUOUS_SBCS}, - {0x2032, 0x2033, ULMBCS_AMBIGUOUS_MBCS}, - {0x2035, 0x2035, ULMBCS_AMBIGUOUS_MBCS}, - {0x2039, 0x203A, ULMBCS_AMBIGUOUS_SBCS}, - {0x203B, 0x203B, ULMBCS_AMBIGUOUS_MBCS}, - {0x203C, 0x203C, ULMBCS_GRP_EXCEPT}, - {0x2074, 0x2074, ULMBCS_GRP_KO}, - {0x207F, 0x207F, ULMBCS_GRP_EXCEPT}, - {0x2081, 0x2084, ULMBCS_GRP_KO}, - {0x20A4, 0x20AC, ULMBCS_AMBIGUOUS_SBCS}, - {0x2103, 0x2109, ULMBCS_AMBIGUOUS_MBCS}, - {0x2111, 0x2120, ULMBCS_AMBIGUOUS_SBCS}, - /*zhujin: upgrade, for regressiont test, spr HKIA4YHTSU*/ - {0x2121, 0x2121, ULMBCS_AMBIGUOUS_MBCS}, - {0x2122, 0x2126, ULMBCS_AMBIGUOUS_SBCS}, - {0x212B, 0x212B, ULMBCS_AMBIGUOUS_MBCS}, - {0x2135, 0x2135, ULMBCS_AMBIGUOUS_SBCS}, - {0x2153, 0x2154, ULMBCS_GRP_KO}, - {0x215B, 0x215E, ULMBCS_GRP_EXCEPT}, - {0x2160, 0x2179, ULMBCS_AMBIGUOUS_MBCS}, - {0x2190, 0x2193, ULMBCS_AMBIGUOUS_ALL}, - {0x2194, 0x2195, ULMBCS_GRP_EXCEPT}, - {0x2196, 0x2199, ULMBCS_AMBIGUOUS_MBCS}, - {0x21A8, 0x21A8, ULMBCS_GRP_EXCEPT}, - {0x21B8, 0x21B9, ULMBCS_GRP_CN}, - {0x21D0, 0x21D1, ULMBCS_GRP_EXCEPT}, - {0x21D2, 0x21D2, ULMBCS_AMBIGUOUS_MBCS}, - {0x21D3, 0x21D3, ULMBCS_GRP_EXCEPT}, - {0x21D4, 0x21D4, ULMBCS_AMBIGUOUS_MBCS}, - {0x21D5, 0x21D5, ULMBCS_GRP_EXCEPT}, - {0x21E7, 0x21E7, ULMBCS_GRP_CN}, - {0x2200, 0x2200, ULMBCS_AMBIGUOUS_MBCS}, - {0x2201, 0x2201, ULMBCS_GRP_EXCEPT}, - {0x2202, 0x2202, ULMBCS_AMBIGUOUS_MBCS}, - {0x2203, 0x2203, ULMBCS_AMBIGUOUS_MBCS}, - {0x2204, 0x2206, ULMBCS_GRP_EXCEPT}, - {0x2207, 0x2208, ULMBCS_AMBIGUOUS_MBCS}, - {0x2209, 0x220A, ULMBCS_GRP_EXCEPT}, - {0x220B, 0x220B, ULMBCS_AMBIGUOUS_MBCS}, - {0x220F, 0x2215, ULMBCS_AMBIGUOUS_MBCS}, - {0x2219, 0x2219, ULMBCS_GRP_EXCEPT}, - {0x221A, 0x221A, ULMBCS_AMBIGUOUS_MBCS}, - {0x221B, 0x221C, ULMBCS_GRP_EXCEPT}, - {0x221D, 0x221E, ULMBCS_AMBIGUOUS_MBCS}, - {0x221F, 0x221F, ULMBCS_GRP_EXCEPT}, - {0x2220, 0x2220, ULMBCS_AMBIGUOUS_MBCS}, - {0x2223, 0x222A, ULMBCS_AMBIGUOUS_MBCS}, - {0x222B, 0x223D, ULMBCS_AMBIGUOUS_MBCS}, - {0x2245, 0x2248, ULMBCS_GRP_EXCEPT}, - {0x224C, 0x224C, ULMBCS_GRP_TW}, - {0x2252, 0x2252, ULMBCS_AMBIGUOUS_MBCS}, - {0x2260, 0x2261, ULMBCS_AMBIGUOUS_MBCS}, - {0x2262, 0x2265, ULMBCS_GRP_EXCEPT}, - {0x2266, 0x226F, ULMBCS_AMBIGUOUS_MBCS}, - {0x2282, 0x2283, ULMBCS_AMBIGUOUS_MBCS}, - {0x2284, 0x2285, ULMBCS_GRP_EXCEPT}, - {0x2286, 0x2287, ULMBCS_AMBIGUOUS_MBCS}, - {0x2288, 0x2297, ULMBCS_GRP_EXCEPT}, - {0x2299, 0x22BF, ULMBCS_AMBIGUOUS_MBCS}, - {0x22C0, 0x22C0, ULMBCS_GRP_EXCEPT}, - {0x2310, 0x2310, ULMBCS_GRP_EXCEPT}, - {0x2312, 0x2312, ULMBCS_AMBIGUOUS_MBCS}, - {0x2318, 0x2321, ULMBCS_GRP_EXCEPT}, - {0x2318, 0x2321, ULMBCS_GRP_CN}, - {0x2460, 0x24E9, ULMBCS_AMBIGUOUS_MBCS}, - {0x2500, 0x2500, ULMBCS_AMBIGUOUS_SBCS}, - {0x2501, 0x2501, ULMBCS_AMBIGUOUS_MBCS}, - {0x2502, 0x2502, ULMBCS_AMBIGUOUS_ALL}, - {0x2503, 0x2503, ULMBCS_AMBIGUOUS_MBCS}, - {0x2504, 0x2505, ULMBCS_GRP_TW}, - {0x2506, 0x2665, ULMBCS_AMBIGUOUS_ALL}, - {0x2666, 0x2666, ULMBCS_GRP_EXCEPT}, - {0x2667, 0x2669, ULMBCS_AMBIGUOUS_SBCS}, - {0x266A, 0x266A, ULMBCS_AMBIGUOUS_ALL}, - {0x266B, 0x266C, ULMBCS_AMBIGUOUS_SBCS}, - {0x266D, 0x266D, ULMBCS_AMBIGUOUS_MBCS}, - {0x266E, 0x266E, ULMBCS_AMBIGUOUS_SBCS}, - {0x266F, 0x266F, ULMBCS_GRP_JA}, - {0x2670, 0x2E7F, ULMBCS_AMBIGUOUS_SBCS}, - {0x2E80, 0xF861, ULMBCS_AMBIGUOUS_MBCS}, - {0xF862, 0xF8FF, ULMBCS_GRP_EXCEPT}, - {0xF900, 0xFA2D, ULMBCS_AMBIGUOUS_MBCS}, - {0xFB00, 0xFEFF, ULMBCS_AMBIGUOUS_SBCS}, - {0xFF01, 0xFFEE, ULMBCS_AMBIGUOUS_MBCS}, - {0xFFFF, 0xFFFF, ULMBCS_GRP_UNICODE} -}; - -static ulmbcs_byte_t -FindLMBCSUniRange(UChar uniChar) -{ - const struct _UniLMBCSGrpMap * pTable = UniLMBCSGrpMap; - - while (uniChar > pTable->uniEndRange) - { - pTable++; - } - - if (uniChar >= pTable->uniStartRange) - { - return pTable->GrpType; - } - return ULMBCS_GRP_UNICODE; -} - -/* -We also ask the creator of a converter to send in a preferred locale -that we can use in resolving ambiguous mappings. They send the locale -in as a string, and we map it, if possible, to one of the -LMBCS groups. We use this table, and the associated code, to -do the lookup: */ - -/************************************************** - This table maps locale ID's to LMBCS opt groups. - The default return is group 0x01. Note that for - performance reasons, the table is sorted in - increasing alphabetic order, with the notable - exception of zhTW. This is to force the check - for Traditonal Chinese before dropping back to - Simplified. - - Note too that the Latin-1 groups have been - commented out because it's the default, and - this shortens the table, allowing a serial - search to go quickly. - *************************************************/ - -static const struct _LocaleLMBCSGrpMap -{ - const char *LocaleID; - const ulmbcs_byte_t OptGroup; -} LocaleLMBCSGrpMap[] = -{ - {"ar", ULMBCS_GRP_AR}, - {"be", ULMBCS_GRP_RU}, - {"bg", ULMBCS_GRP_L2}, - /* {"ca", ULMBCS_GRP_L1}, */ - {"cs", ULMBCS_GRP_L2}, - /* {"da", ULMBCS_GRP_L1}, */ - /* {"de", ULMBCS_GRP_L1}, */ - {"el", ULMBCS_GRP_GR}, - /* {"en", ULMBCS_GRP_L1}, */ - /* {"es", ULMBCS_GRP_L1}, */ - /* {"et", ULMBCS_GRP_L1}, */ - /* {"fi", ULMBCS_GRP_L1}, */ - /* {"fr", ULMBCS_GRP_L1}, */ - {"he", ULMBCS_GRP_HE}, - {"hu", ULMBCS_GRP_L2}, - /* {"is", ULMBCS_GRP_L1}, */ - /* {"it", ULMBCS_GRP_L1}, */ - {"iw", ULMBCS_GRP_HE}, - {"ja", ULMBCS_GRP_JA}, - {"ko", ULMBCS_GRP_KO}, - /* {"lt", ULMBCS_GRP_L1}, */ - /* {"lv", ULMBCS_GRP_L1}, */ - {"mk", ULMBCS_GRP_RU}, - /* {"nl", ULMBCS_GRP_L1}, */ - /* {"no", ULMBCS_GRP_L1}, */ - {"pl", ULMBCS_GRP_L2}, - /* {"pt", ULMBCS_GRP_L1}, */ - {"ro", ULMBCS_GRP_L2}, - {"ru", ULMBCS_GRP_RU}, - {"sh", ULMBCS_GRP_L2}, - {"sk", ULMBCS_GRP_L2}, - {"sl", ULMBCS_GRP_L2}, - {"sq", ULMBCS_GRP_L2}, - {"sr", ULMBCS_GRP_RU}, - /* {"sv", ULMBCS_GRP_L1}, */ - {"th", ULMBCS_GRP_TH}, - {"tr", ULMBCS_GRP_TR}, - {"uk", ULMBCS_GRP_RU}, - /* {"vi", ULMBCS_GRP_L1}, */ - {"zhTW", ULMBCS_GRP_TW}, - {"zh", ULMBCS_GRP_CN}, - {NULL, ULMBCS_GRP_L1} -}; - - -static ulmbcs_byte_t -FindLMBCSLocale(const char *LocaleID) -{ - const struct _LocaleLMBCSGrpMap *pTable = LocaleLMBCSGrpMap; - - if ((!LocaleID) || (!*LocaleID)) - { - return 0; - } - - while (pTable->LocaleID) - { - if (*pTable->LocaleID == *LocaleID) /* Check only first char for speed */ - { - /* First char matches - check whole name, for entry-length */ - if (uprv_strncmp(pTable->LocaleID, LocaleID, strlen(pTable->LocaleID)) == 0) - return pTable->OptGroup; - } - else - if (*pTable->LocaleID > *LocaleID) /* Sorted alphabetically - exit */ - break; - pTable++; - } - return ULMBCS_GRP_L1; -} - - -/* - Before we get to the main body of code, here's how we hook up to the rest - of ICU. ICU converters are required to define a structure that includes - some function pointers, and some common data, in the style of a C++ - vtable. There is also room in there for converter-specific data. LMBCS - uses that converter-specific data to keep track of the 12 subconverters - we use, the optimization group, and the group (if any) that matches the - locale. We have one structure instantiated for each of the 12 possible - optimization groups. To avoid typos & to avoid boring the reader, we - put the declarations of these structures and functions into macros. To see - the definitions of these structures, see unicode\ucnv_bld.h -*/ - -typedef struct - { - UConverterSharedData *OptGrpConverter[ULMBCS_GRP_LAST+1]; /* Converter per Opt. grp. */ - uint8_t OptGroup; /* default Opt. grp. for this LMBCS session */ - uint8_t localeConverterIndex; /* reasonable locale match for index */ - } -UConverterDataLMBCS; - -static void _LMBCSClose(UConverter * _this); - -#define DECLARE_LMBCS_DATA(n) \ -static const UConverterImpl _LMBCSImpl##n={\ - UCNV_LMBCS_##n,\ - NULL,NULL,\ - _LMBCSOpen##n,\ - _LMBCSClose,\ - NULL,\ - _LMBCSToUnicodeWithOffsets,\ - _LMBCSToUnicodeWithOffsets,\ - _LMBCSFromUnicode,\ - _LMBCSFromUnicode,\ - NULL,\ - NULL,\ - NULL,\ - NULL,\ - _LMBCSSafeClone,\ - ucnv_getCompleteUnicodeSet\ -};\ -static const UConverterStaticData _LMBCSStaticData##n={\ - sizeof(UConverterStaticData),\ - "LMBCS-" #n,\ - 0, UCNV_IBM, UCNV_LMBCS_##n, 1, 3,\ - { 0x3f, 0, 0, 0 },1,FALSE,FALSE,0,0,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} \ -};\ -const UConverterSharedData _LMBCSData##n= \ - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_LMBCSStaticData##n, &_LMBCSImpl##n); - - /* The only function we needed to duplicate 12 times was the 'open' -function, which will do basically the same thing except set a different -optimization group. So, we put the common stuff into a worker function, -and set up another macro to stamp out the 12 open functions:*/ -#define DEFINE_LMBCS_OPEN(n) \ -static void \ - _LMBCSOpen##n(UConverter* _this, UConverterLoadArgs* pArgs, UErrorCode* err) \ -{ _LMBCSOpenWorker(_this, pArgs, err, n); } - - - -/* Here's the open worker & the common close function */ -static void -_LMBCSOpenWorker(UConverter* _this, - UConverterLoadArgs *pArgs, - UErrorCode* err, - ulmbcs_byte_t OptGroup) -{ - UConverterDataLMBCS * extraInfo = _this->extraInfo = - (UConverterDataLMBCS*)uprv_malloc (sizeof (UConverterDataLMBCS)); - if(extraInfo != NULL) - { - UConverterNamePieces stackPieces; - UConverterLoadArgs stackArgs={ (int32_t)sizeof(UConverterLoadArgs) }; - ulmbcs_byte_t i; - - uprv_memset(extraInfo, 0, sizeof(UConverterDataLMBCS)); - - stackArgs.onlyTestIsLoadable = pArgs->onlyTestIsLoadable; - - for (i=0; i <= ULMBCS_GRP_LAST && U_SUCCESS(*err); i++) - { - if(OptGroupByteToCPName[i] != NULL) { - extraInfo->OptGrpConverter[i] = ucnv_loadSharedData(OptGroupByteToCPName[i], &stackPieces, &stackArgs, err); - } - } - - if(U_FAILURE(*err) || pArgs->onlyTestIsLoadable) { - _LMBCSClose(_this); - return; - } - extraInfo->OptGroup = OptGroup; - extraInfo->localeConverterIndex = FindLMBCSLocale(pArgs->locale); - } - else - { - *err = U_MEMORY_ALLOCATION_ERROR; - } -} - -static void -_LMBCSClose(UConverter * _this) -{ - if (_this->extraInfo != NULL) - { - ulmbcs_byte_t Ix; - UConverterDataLMBCS * extraInfo = (UConverterDataLMBCS *) _this->extraInfo; - - for (Ix=0; Ix <= ULMBCS_GRP_LAST; Ix++) - { - if (extraInfo->OptGrpConverter[Ix] != NULL) - ucnv_unloadSharedDataIfReady(extraInfo->OptGrpConverter[Ix]); - } - if (!_this->isExtraLocal) { - uprv_free (_this->extraInfo); - _this->extraInfo = NULL; - } - } -} - -typedef struct LMBCSClone { - UConverter cnv; - UConverterDataLMBCS lmbcs; -} LMBCSClone; - -static UConverter * -_LMBCSSafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status) { - LMBCSClone *newLMBCS; - UConverterDataLMBCS *extraInfo; - int32_t i; - - if(*pBufferSize<=0) { - *pBufferSize=(int32_t)sizeof(LMBCSClone); - return NULL; - } - - extraInfo=(UConverterDataLMBCS *)cnv->extraInfo; - newLMBCS=(LMBCSClone *)stackBuffer; - - /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ - - uprv_memcpy(&newLMBCS->lmbcs, extraInfo, sizeof(UConverterDataLMBCS)); - - /* share the subconverters */ - for(i = 0; i <= ULMBCS_GRP_LAST; ++i) { - if(extraInfo->OptGrpConverter[i] != NULL) { - ucnv_incrementRefCount(extraInfo->OptGrpConverter[i]); - } - } - - newLMBCS->cnv.extraInfo = &newLMBCS->lmbcs; - newLMBCS->cnv.isExtraLocal = TRUE; - return &newLMBCS->cnv; -} - -/* - * There used to be a _LMBCSGetUnicodeSet() function here (up to svn revision 20117) - * which added all code points except for U+F6xx - * because those cannot be represented in the Unicode group. - * However, it turns out that windows-950 has roundtrips for all of U+F6xx - * which means that LMBCS can convert all Unicode code points after all. - * We now simply use ucnv_getCompleteUnicodeSet(). - * - * This may need to be looked at again as Lotus uses _LMBCSGetUnicodeSet(). (091216) - */ - -/* - Here's the basic helper function that we use when converting from - Unicode to LMBCS, and we suspect that a Unicode character will fit into - one of the 12 groups. The return value is the number of bytes written - starting at pStartLMBCS (if any). -*/ - -static size_t -LMBCSConversionWorker ( - UConverterDataLMBCS * extraInfo, /* subconverters, opt & locale groups */ - ulmbcs_byte_t group, /* The group to try */ - ulmbcs_byte_t * pStartLMBCS, /* where to put the results */ - UChar * pUniChar, /* The input unicode character */ - ulmbcs_byte_t * lastConverterIndex, /* output: track last successful group used */ - UBool * groups_tried /* output: track any unsuccessful groups */ -) -{ - ulmbcs_byte_t * pLMBCS = pStartLMBCS; - UConverterSharedData * xcnv = extraInfo->OptGrpConverter[group]; - - int bytesConverted; - uint32_t value; - ulmbcs_byte_t firstByte; - - U_ASSERT(xcnv); - U_ASSERT(group 0) { - firstByte = (ulmbcs_byte_t)(value >> ((bytesConverted - 1) * 8)); - } else { - /* most common failure mode is an unassigned character */ - groups_tried[group] = TRUE; - return 0; - } - - *lastConverterIndex = group; - - /* All initial byte values in lower ascii range should have been caught by now, - except with the exception group. - */ - U_ASSERT((firstByte <= ULMBCS_C0END) || (firstByte >= ULMBCS_C1START) || (group == ULMBCS_GRP_EXCEPT)); - - /* use converted data: first write 0, 1 or two group bytes */ - if (group != ULMBCS_GRP_EXCEPT && extraInfo->OptGroup != group) - { - *pLMBCS++ = group; - if (bytesConverted == 1 && group >= ULMBCS_DOUBLEOPTGROUP_START) - { - *pLMBCS++ = group; - } - } - - /* don't emit control chars */ - if ( bytesConverted == 1 && firstByte < 0x20 ) - return 0; - - - /* then move over the converted data */ - switch(bytesConverted) - { - case 4: - *pLMBCS++ = (ulmbcs_byte_t)(value >> 24); - U_FALLTHROUGH; - case 3: - *pLMBCS++ = (ulmbcs_byte_t)(value >> 16); - U_FALLTHROUGH; - case 2: - *pLMBCS++ = (ulmbcs_byte_t)(value >> 8); - U_FALLTHROUGH; - case 1: - *pLMBCS++ = (ulmbcs_byte_t)value; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - - return (pLMBCS - pStartLMBCS); -} - - -/* This is a much simpler version of above, when we -know we are writing LMBCS using the Unicode group -*/ -static size_t -LMBCSConvertUni(ulmbcs_byte_t * pLMBCS, UChar uniChar) -{ - /* encode into LMBCS Unicode range */ - uint8_t LowCh = (uint8_t)(uniChar & 0x00FF); - uint8_t HighCh = (uint8_t)(uniChar >> 8); - - *pLMBCS++ = ULMBCS_GRP_UNICODE; - - if (LowCh == 0) - { - *pLMBCS++ = ULMBCS_UNICOMPATZERO; - *pLMBCS++ = HighCh; - } - else - { - *pLMBCS++ = HighCh; - *pLMBCS++ = LowCh; - } - return ULMBCS_UNICODE_SIZE; -} - - - -/* The main Unicode to LMBCS conversion function */ -static void -_LMBCSFromUnicode(UConverterFromUnicodeArgs* args, - UErrorCode* err) -{ - ulmbcs_byte_t lastConverterIndex = 0; - UChar uniChar; - ulmbcs_byte_t LMBCS[ULMBCS_CHARSIZE_MAX]; - ulmbcs_byte_t * pLMBCS; - int32_t bytes_written; - UBool groups_tried[ULMBCS_GRP_LAST+1]; - UConverterDataLMBCS * extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - int sourceIndex = 0; - - /* Basic strategy: attempt to fill in local LMBCS 1-char buffer.(LMBCS) - If that succeeds, see if it will all fit into the target & copy it over - if it does. - - We try conversions in the following order: - - 1. Single-byte ascii & special fixed control chars (&null) - 2. Look up group in table & try that (could be - A) Unicode group - B) control group, - C) national encoding, - or ambiguous SBCS or MBCS group (on to step 4...) - - 3. If its ambiguous, try this order: - A) The optimization group - B) The locale group - C) The last group that succeeded with this string. - D) every other group that's relevent (single or double) - E) If its single-byte ambiguous, try the exceptions group - - 4. And as a grand fallback: Unicode - */ - - /*Fix for SPR#DJOE66JFN3 (Lotus)*/ - ulmbcs_byte_t OldConverterIndex = 0; - - while (args->source < args->sourceLimit && !U_FAILURE(*err)) - { - /*Fix for SPR#DJOE66JFN3 (Lotus)*/ - OldConverterIndex = extraInfo->localeConverterIndex; - - if (args->target >= args->targetLimit) - { - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - uniChar = *(args->source); - bytes_written = 0; - pLMBCS = LMBCS; - - /* check cases in rough order of how common they are, for speed */ - - /* single byte matches: strategy 1 */ - /*Fix for SPR#DJOE66JFN3 (Lotus)*/ - if((uniChar>=0x80) && (uniChar<=0xff) - /*Fix for SPR#JUYA6XAERU and TSAO7GL5NK (Lotus)*/ &&(uniChar!=0xB1) &&(uniChar!=0xD7) &&(uniChar!=0xF7) - &&(uniChar!=0xB0) &&(uniChar!=0xB4) &&(uniChar!=0xB6) &&(uniChar!=0xA7) &&(uniChar!=0xA8)) - { - extraInfo->localeConverterIndex = ULMBCS_GRP_L1; - } - if (((uniChar > ULMBCS_C0END) && (uniChar < ULMBCS_C1START)) || - uniChar == 0 || uniChar == ULMBCS_HT || uniChar == ULMBCS_CR || - uniChar == ULMBCS_LF || uniChar == ULMBCS_123SYSTEMRANGE - ) - { - *pLMBCS++ = (ulmbcs_byte_t ) uniChar; - bytes_written = 1; - } - - - if (!bytes_written) - { - /* Check by UNICODE range (Strategy 2) */ - ulmbcs_byte_t group = FindLMBCSUniRange(uniChar); - - if (group == ULMBCS_GRP_UNICODE) /* (Strategy 2A) */ - { - pLMBCS += LMBCSConvertUni(pLMBCS,uniChar); - - bytes_written = (int32_t)(pLMBCS - LMBCS); - } - else if (group == ULMBCS_GRP_CTRL) /* (Strategy 2B) */ - { - /* Handle control characters here */ - if (uniChar <= ULMBCS_C0END) - { - *pLMBCS++ = ULMBCS_GRP_CTRL; - *pLMBCS++ = (ulmbcs_byte_t)(ULMBCS_CTRLOFFSET + uniChar); - } - else if (uniChar >= ULMBCS_C1START && uniChar <= ULMBCS_C1START + ULMBCS_CTRLOFFSET) - { - *pLMBCS++ = ULMBCS_GRP_CTRL; - *pLMBCS++ = (ulmbcs_byte_t ) (uniChar & 0x00FF); - } - bytes_written = (int32_t)(pLMBCS - LMBCS); - } - else if (group < ULMBCS_GRP_UNICODE) /* (Strategy 2C) */ - { - /* a specific converter has been identified - use it */ - bytes_written = (int32_t)LMBCSConversionWorker ( - extraInfo, group, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - if (!bytes_written) /* the ambiguous group cases (Strategy 3) */ - { - uprv_memset(groups_tried, 0, sizeof(groups_tried)); - - /* check for non-default optimization group (Strategy 3A )*/ - if ((extraInfo->OptGroup != 1) && (ULMBCS_AMBIGUOUS_MATCH(group, extraInfo->OptGroup))) - { - /*zhujin: upgrade, merge #39299 here (Lotus) */ - /*To make R5 compatible translation, look for exceptional group first for non-DBCS*/ - - if(extraInfo->localeConverterIndex < ULMBCS_DOUBLEOPTGROUP_START) - { - bytes_written = LMBCSConversionWorker (extraInfo, - ULMBCS_GRP_L1, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - - if(!bytes_written) - { - bytes_written = LMBCSConversionWorker (extraInfo, - ULMBCS_GRP_EXCEPT, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - if(!bytes_written) - { - bytes_written = LMBCSConversionWorker (extraInfo, - extraInfo->localeConverterIndex, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - } - else - { - bytes_written = LMBCSConversionWorker (extraInfo, - extraInfo->localeConverterIndex, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - } - /* check for locale optimization group (Strategy 3B) */ - if (!bytes_written && (extraInfo->localeConverterIndex) && (ULMBCS_AMBIGUOUS_MATCH(group, extraInfo->localeConverterIndex))) - { - bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - extraInfo->localeConverterIndex, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); - } - /* check for last optimization group used for this string (Strategy 3C) */ - if (!bytes_written && (lastConverterIndex) && (ULMBCS_AMBIGUOUS_MATCH(group, lastConverterIndex))) - { - bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - lastConverterIndex, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); - } - if (!bytes_written) - { - /* just check every possible matching converter (Strategy 3D) */ - ulmbcs_byte_t grp_start; - ulmbcs_byte_t grp_end; - ulmbcs_byte_t grp_ix; - grp_start = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) - ? ULMBCS_DOUBLEOPTGROUP_START - : ULMBCS_GRP_L1); - grp_end = (ulmbcs_byte_t)((group == ULMBCS_AMBIGUOUS_MBCS) - ? ULMBCS_GRP_LAST - : ULMBCS_GRP_TH); - if(group == ULMBCS_AMBIGUOUS_ALL) - { - grp_start = ULMBCS_GRP_L1; - grp_end = ULMBCS_GRP_LAST; - } - for (grp_ix = grp_start; - grp_ix <= grp_end && !bytes_written; - grp_ix++) - { - if (extraInfo->OptGrpConverter [grp_ix] && !groups_tried [grp_ix]) - { - bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - grp_ix, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - } - /* a final conversion fallback to the exceptions group if its likely - to be single byte (Strategy 3E) */ - if (!bytes_written && grp_start == ULMBCS_GRP_L1) - { - bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, - ULMBCS_GRP_EXCEPT, pLMBCS, &uniChar, - &lastConverterIndex, groups_tried); - } - } - /* all of our other strategies failed. Fallback to Unicode. (Strategy 4)*/ - if (!bytes_written) - { - - pLMBCS += LMBCSConvertUni(pLMBCS, uniChar); - bytes_written = (int32_t)(pLMBCS - LMBCS); - } - } - } - - /* we have a translation. increment source and write as much as posible to target */ - args->source++; - pLMBCS = LMBCS; - while (args->target < args->targetLimit && bytes_written--) - { - *(args->target)++ = *pLMBCS++; - if (args->offsets) - { - *(args->offsets)++ = sourceIndex; - } - } - sourceIndex++; - if (bytes_written > 0) - { - /* write any bytes that didn't fit in target to the error buffer, - common code will move this to target if we get called back with - enough target room - */ - uint8_t * pErrorBuffer = args->converter->charErrorBuffer; - *err = U_BUFFER_OVERFLOW_ERROR; - args->converter->charErrorBufferLength = (int8_t)bytes_written; - while (bytes_written--) - { - *pErrorBuffer++ = *pLMBCS++; - } - } - /*Fix for SPR#DJOE66JFN3 (Lotus)*/ - extraInfo->localeConverterIndex = OldConverterIndex; - } -} - - -/* Now, the Unicode from LMBCS section */ - - -/* A function to call when we are looking at the Unicode group byte in LMBCS */ -static UChar -GetUniFromLMBCSUni(char const ** ppLMBCSin) /* Called with LMBCS-style Unicode byte stream */ -{ - uint8_t HighCh = *(*ppLMBCSin)++; /* Big-endian Unicode in LMBCS compatibility group*/ - uint8_t LowCh = *(*ppLMBCSin)++; - - if (HighCh == ULMBCS_UNICOMPATZERO ) - { - HighCh = LowCh; - LowCh = 0; /* zero-byte in LSB special character */ - } - return (UChar)((HighCh << 8) | LowCh); -} - - - -/* CHECK_SOURCE_LIMIT: Helper macro to verify that there are at least'index' - bytes left in source up to sourceLimit.Errors appropriately if not. - If we reach the limit, then update the source pointer to there to consume - all input as required by ICU converter semantics. -*/ - -#define CHECK_SOURCE_LIMIT(index) \ - if (args->source+index > args->sourceLimit){\ - *err = U_TRUNCATED_CHAR_FOUND;\ - args->source = args->sourceLimit;\ - return 0xffff;} - -/* Return the Unicode representation for the current LMBCS character */ - -static UChar32 -_LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, - UErrorCode* err) -{ - UChar32 uniChar = 0; /* an output UNICODE char */ - ulmbcs_byte_t CurByte; /* A byte from the input stream */ - - /* error check */ - if (args->source >= args->sourceLimit) - { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return 0xffff; - } - /* Grab first byte & save address for error recovery */ - CurByte = *((ulmbcs_byte_t *) (args->source++)); - - /* - * at entry of each if clause: - * 1. 'CurByte' points at the first byte of a LMBCS character - * 2. '*source'points to the next byte of the source stream after 'CurByte' - * - * the job of each if clause is: - * 1. set '*source' to point at the beginning of next char (nop if LMBCS char is only 1 byte) - * 2. set 'uniChar' up with the right Unicode value, or set 'err' appropriately - */ - - /* First lets check the simple fixed values. */ - - if(((CurByte > ULMBCS_C0END) && (CurByte < ULMBCS_C1START)) /* ascii range */ - || (CurByte == 0) - || CurByte == ULMBCS_HT || CurByte == ULMBCS_CR - || CurByte == ULMBCS_LF || CurByte == ULMBCS_123SYSTEMRANGE) - { - uniChar = CurByte; - } - else - { - UConverterDataLMBCS * extraInfo; - ulmbcs_byte_t group; - UConverterSharedData *cnv; - - if (CurByte == ULMBCS_GRP_CTRL) /* Control character group - no opt group update */ - { - ulmbcs_byte_t C0C1byte; - CHECK_SOURCE_LIMIT(1); - C0C1byte = *(args->source)++; - uniChar = (C0C1byte < ULMBCS_C1START) ? C0C1byte - ULMBCS_CTRLOFFSET : C0C1byte; - } - else - if (CurByte == ULMBCS_GRP_UNICODE) /* Unicode compatibility group: BigEndian UTF16 */ - { - CHECK_SOURCE_LIMIT(2); - - /* don't check for error indicators fffe/ffff below */ - return GetUniFromLMBCSUni(&(args->source)); - } - else if (CurByte <= ULMBCS_CTRLOFFSET) - { - group = CurByte; /* group byte is in the source */ - extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - if (group > ULMBCS_GRP_LAST || (cnv = extraInfo->OptGrpConverter[group]) == NULL) - { - /* this is not a valid group byte - no converter*/ - *err = U_INVALID_CHAR_FOUND; - } - else if (group >= ULMBCS_DOUBLEOPTGROUP_START) /* double byte conversion */ - { - - CHECK_SOURCE_LIMIT(2); - - /* check for LMBCS doubled-group-byte case */ - if (*args->source == group) { - /* single byte */ - ++args->source; - uniChar = ucnv_MBCSSimpleGetNextUChar(cnv, args->source, 1, FALSE); - ++args->source; - } else { - /* double byte */ - uniChar = ucnv_MBCSSimpleGetNextUChar(cnv, args->source, 2, FALSE); - args->source += 2; - } - } - else { /* single byte conversion */ - CHECK_SOURCE_LIMIT(1); - CurByte = *(args->source)++; - - if (CurByte >= ULMBCS_C1START) - { - uniChar = _MBCS_SINGLE_SIMPLE_GET_NEXT_BMP(cnv, CurByte); - } - else - { - /* The non-optimizable oddballs where there is an explicit byte - * AND the second byte is not in the upper ascii range - */ - char bytes[2]; - - extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - cnv = extraInfo->OptGrpConverter [ULMBCS_GRP_EXCEPT]; - - /* Lookup value must include opt group */ - bytes[0] = group; - bytes[1] = CurByte; - uniChar = ucnv_MBCSSimpleGetNextUChar(cnv, bytes, 2, FALSE); - } - } - } - else if (CurByte >= ULMBCS_C1START) /* group byte is implicit */ - { - extraInfo = (UConverterDataLMBCS *) args->converter->extraInfo; - group = extraInfo->OptGroup; - cnv = extraInfo->OptGrpConverter[group]; - if (group >= ULMBCS_DOUBLEOPTGROUP_START) /* double byte conversion */ - { - if (!ucnv_MBCSIsLeadByte(cnv, CurByte)) - { - CHECK_SOURCE_LIMIT(0); - - /* let the MBCS conversion consume CurByte again */ - uniChar = ucnv_MBCSSimpleGetNextUChar(cnv, args->source - 1, 1, FALSE); - } - else - { - CHECK_SOURCE_LIMIT(1); - /* let the MBCS conversion consume CurByte again */ - uniChar = ucnv_MBCSSimpleGetNextUChar(cnv, args->source - 1, 2, FALSE); - ++args->source; - } - } - else /* single byte conversion */ - { - uniChar = _MBCS_SINGLE_SIMPLE_GET_NEXT_BMP(cnv, CurByte); - } - } - } - return uniChar; -} - - -/* The exported function that converts lmbcs to one or more - UChars - currently UTF-16 -*/ -static void -_LMBCSToUnicodeWithOffsets(UConverterToUnicodeArgs* args, - UErrorCode* err) -{ - char LMBCS [ULMBCS_CHARSIZE_MAX]; - UChar uniChar; /* one output UNICODE char */ - const char * saveSource; /* beginning of current code point */ - const char * pStartLMBCS = args->source; /* beginning of whole string */ - const char * errSource = NULL; /* pointer to actual input in case an error occurs */ - int8_t savebytes = 0; - - /* Process from source to limit, or until error */ - while (U_SUCCESS(*err) && args->sourceLimit > args->source && args->targetLimit > args->target) - { - saveSource = args->source; /* beginning of current code point */ - - if (args->converter->toULength) /* reassemble char from previous call */ - { - const char *saveSourceLimit; - size_t size_old = args->converter->toULength; - - /* limit from source is either remainder of temp buffer, or user limit on source */ - size_t size_new_maybe_1 = sizeof(LMBCS) - size_old; - size_t size_new_maybe_2 = args->sourceLimit - args->source; - size_t size_new = (size_new_maybe_1 < size_new_maybe_2) ? size_new_maybe_1 : size_new_maybe_2; - - - uprv_memcpy(LMBCS, args->converter->toUBytes, size_old); - uprv_memcpy(LMBCS + size_old, args->source, size_new); - saveSourceLimit = args->sourceLimit; - args->source = errSource = LMBCS; - args->sourceLimit = LMBCS+size_old+size_new; - savebytes = (int8_t)(size_old+size_new); - uniChar = (UChar) _LMBCSGetNextUCharWorker(args, err); - args->source = saveSource + ((args->source - LMBCS) - size_old); - args->sourceLimit = saveSourceLimit; - - if (*err == U_TRUNCATED_CHAR_FOUND) - { - /* evil special case: source buffers so small a char spans more than 2 buffers */ - args->converter->toULength = savebytes; - uprv_memcpy(args->converter->toUBytes, LMBCS, savebytes); - args->source = args->sourceLimit; - *err = U_ZERO_ERROR; - return; - } - else - { - /* clear the partial-char marker */ - args->converter->toULength = 0; - } - } - else - { - errSource = saveSource; - uniChar = (UChar) _LMBCSGetNextUCharWorker(args, err); - savebytes = (int8_t)(args->source - saveSource); - } - if (U_SUCCESS(*err)) - { - if (uniChar < 0xfffe) - { - *(args->target)++ = uniChar; - if(args->offsets) - { - *(args->offsets)++ = (int32_t)(saveSource - pStartLMBCS); - } - } - else if (uniChar == 0xfffe) - { - *err = U_INVALID_CHAR_FOUND; - } - else /* if (uniChar == 0xffff) */ - { - *err = U_ILLEGAL_CHAR_FOUND; - } - } - } - /* if target ran out before source, return U_BUFFER_OVERFLOW_ERROR */ - if (U_SUCCESS(*err) && args->sourceLimit > args->source && args->targetLimit <= args->target) - { - *err = U_BUFFER_OVERFLOW_ERROR; - } - else if (U_FAILURE(*err)) - { - /* If character incomplete or unmappable/illegal, store it in toUBytes[] */ - args->converter->toULength = savebytes; - if (savebytes > 0) { - uprv_memcpy(args->converter->toUBytes, errSource, savebytes); - } - if (*err == U_TRUNCATED_CHAR_FOUND) { - *err = U_ZERO_ERROR; - } - } -} - -/* And now, the macroized declarations of data & functions: */ -DEFINE_LMBCS_OPEN(1) -DEFINE_LMBCS_OPEN(2) -DEFINE_LMBCS_OPEN(3) -DEFINE_LMBCS_OPEN(4) -DEFINE_LMBCS_OPEN(5) -DEFINE_LMBCS_OPEN(6) -DEFINE_LMBCS_OPEN(8) -DEFINE_LMBCS_OPEN(11) -DEFINE_LMBCS_OPEN(16) -DEFINE_LMBCS_OPEN(17) -DEFINE_LMBCS_OPEN(18) -DEFINE_LMBCS_OPEN(19) - - -DECLARE_LMBCS_DATA(1) -DECLARE_LMBCS_DATA(2) -DECLARE_LMBCS_DATA(3) -DECLARE_LMBCS_DATA(4) -DECLARE_LMBCS_DATA(5) -DECLARE_LMBCS_DATA(6) -DECLARE_LMBCS_DATA(8) -DECLARE_LMBCS_DATA(11) -DECLARE_LMBCS_DATA(16) -DECLARE_LMBCS_DATA(17) -DECLARE_LMBCS_DATA(18) -DECLARE_LMBCS_DATA(19) - -#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */ diff --git a/source/common/ucnv_set.c b/source/common/ucnv_set.c deleted file mode 100644 index c3933ab..0000000 --- a/source/common/ucnv_set.c +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2003-2007, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ucnv_set.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2004sep07 -* created by: Markus W. Scherer -* -* Conversion API functions using USet (ucnv_getUnicodeSet()) -* moved here from ucnv.c for removing the dependency of other ucnv_ -* implementation functions on the USet implementation. -*/ - -#include "unicode/utypes.h" -#include "unicode/uset.h" -#include "unicode/ucnv.h" -#include "ucnv_bld.h" -#include "uset_imp.h" - -#if !UCONFIG_NO_CONVERSION - -U_CAPI void U_EXPORT2 -ucnv_getUnicodeSet(const UConverter *cnv, - USet *setFillIn, - UConverterUnicodeSet whichSet, - UErrorCode *pErrorCode) { - /* argument checking */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return; - } - if(cnv==NULL || setFillIn==NULL || whichSetsharedData->impl->getUnicodeSet==NULL) { - *pErrorCode=U_UNSUPPORTED_ERROR; - return; - } - - { - USetAdder sa={ - NULL, - uset_add, - uset_addRange, - uset_addString, - uset_remove, - uset_removeRange - }; - sa.set=setFillIn; - - /* empty the set */ - uset_clear(setFillIn); - - /* call the converter to add the code points it supports */ - cnv->sharedData->impl->getUnicodeSet(cnv, &sa, whichSet, pErrorCode); - } -} - -#endif diff --git a/source/common/ucnv_u16.c b/source/common/ucnv_u16.c deleted file mode 100644 index 1458a8a..0000000 --- a/source/common/ucnv_u16.c +++ /dev/null @@ -1,1563 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_u16.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jul01 -* created by: Markus W. Scherer -* -* UTF-16 converter implementation. Used to be in ucnv_utf.c. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cmemory.h" - -enum { - UCNV_NEED_TO_WRITE_BOM=1 -}; - -/* - * The UTF-16 toUnicode implementation is also used for the Java-specific - * "with BOM" variants of UTF-16BE and UTF-16LE. - */ -static void -_UTF16ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode); - -/* UTF-16BE ----------------------------------------------------------------- */ - -#if U_IS_BIG_ENDIAN -# define _UTF16PEFromUnicodeWithOffsets _UTF16BEFromUnicodeWithOffsets -#else -# define _UTF16PEFromUnicodeWithOffsets _UTF16LEFromUnicodeWithOffsets -#endif - - -static void -_UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const UChar *source; - char *target; - int32_t *offsets; - - uint32_t targetCapacity, length, sourceIndex; - UChar c, trail; - char overflow[4]; - - source=pArgs->source; - length=(int32_t)(pArgs->sourceLimit-source); - if(length<=0) { - /* no input, nothing to do */ - return; - } - - cnv=pArgs->converter; - - /* write the BOM if necessary */ - if(cnv->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ (char)0xfe, (char)0xff }; - ucnv_fromUWriteBytes(cnv, - bom, 2, - &pArgs->target, pArgs->targetLimit, - &pArgs->offsets, -1, - pErrorCode); - cnv->fromUnicodeStatus=0; - } - - target=pArgs->target; - if(target >= pArgs->targetLimit) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - return; - } - - targetCapacity=(uint32_t)(pArgs->targetLimit-target); - offsets=pArgs->offsets; - sourceIndex=0; - - /* c!=0 indicates in several places outside the main loops that a surrogate was found */ - - if((c=(UChar)cnv->fromUChar32)!=0 && U16_IS_TRAIL(trail=*source) && targetCapacity>=4) { - /* the last buffer ended with a lead surrogate, output the surrogate pair */ - ++source; - --length; - target[0]=(uint8_t)(c>>8); - target[1]=(uint8_t)c; - target[2]=(uint8_t)(trail>>8); - target[3]=(uint8_t)trail; - target+=4; - targetCapacity-=4; - if(offsets!=NULL) { - *offsets++=-1; - *offsets++=-1; - *offsets++=-1; - *offsets++=-1; - } - sourceIndex=1; - cnv->fromUChar32=c=0; - } - - if(c==0) { - /* copy an even number of bytes for complete UChars */ - uint32_t count=2*length; - if(count>targetCapacity) { - count=targetCapacity&~1; - } - /* count is even */ - targetCapacity-=count; - count>>=1; - length-=count; - - if(offsets==NULL) { - while(count>0) { - c=*source++; - if(U16_IS_SINGLE(c)) { - target[0]=(uint8_t)(c>>8); - target[1]=(uint8_t)c; - target+=2; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && U16_IS_TRAIL(trail=*source)) { - ++source; - --count; - target[0]=(uint8_t)(c>>8); - target[1]=(uint8_t)c; - target[2]=(uint8_t)(trail>>8); - target[3]=(uint8_t)trail; - target+=4; - } else { - break; - } - --count; - } - } else { - while(count>0) { - c=*source++; - if(U16_IS_SINGLE(c)) { - target[0]=(uint8_t)(c>>8); - target[1]=(uint8_t)c; - target+=2; - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && U16_IS_TRAIL(trail=*source)) { - ++source; - --count; - target[0]=(uint8_t)(c>>8); - target[1]=(uint8_t)c; - target[2]=(uint8_t)(trail>>8); - target[3]=(uint8_t)trail; - target+=4; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - sourceIndex+=2; - } else { - break; - } - --count; - } - } - - if(count==0) { - /* done with the loop for complete UChars */ - if(length>0 && targetCapacity>0) { - /* - * there is more input and some target capacity - - * it must be targetCapacity==1 because otherwise - * the above would have copied more; - * prepare for overflow output - */ - if(U16_IS_SINGLE(c=*source++)) { - overflow[0]=(char)(c>>8); - overflow[1]=(char)c; - length=2; /* 2 bytes to output */ - c=0; - /* } else { keep c for surrogate handling, length will be set there */ - } - } else { - length=0; - c=0; - } - } else { - /* keep c for surrogate handling, length will be set there */ - targetCapacity+=2*count; - } - } else { - length=0; /* from here on, length counts the bytes in overflow[] */ - } - - if(c!=0) { - /* - * c is a surrogate, and - * - source or target too short - * - or the surrogate is unmatched - */ - length=0; - if(U16_IS_SURROGATE_LEAD(c)) { - if(sourcesourceLimit) { - if(U16_IS_TRAIL(trail=*source)) { - /* output the surrogate pair, will overflow (see conditions comment above) */ - ++source; - overflow[0]=(char)(c>>8); - overflow[1]=(char)c; - overflow[2]=(char)(trail>>8); - overflow[3]=(char)trail; - length=4; /* 4 bytes to output */ - c=0; - } else { - /* unmatched lead surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* see if the trail surrogate is in the next buffer */ - } - } else { - /* unmatched trail surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - cnv->fromUChar32=c; - } - - if(length>0) { - /* output length bytes with overflow (length>targetCapacity>0) */ - ucnv_fromUWriteBytes(cnv, - overflow, length, - (char **)&target, pArgs->targetLimit, - &offsets, sourceIndex, - pErrorCode); - targetCapacity=(uint32_t)(pArgs->targetLimit-(char *)target); - } - - if(U_SUCCESS(*pErrorCode) && sourcesourceLimit && targetCapacity==0) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - pArgs->offsets=offsets; -} - -static void -_UTF16BEToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const uint8_t *source; - UChar *target; - int32_t *offsets; - - uint32_t targetCapacity, length, count, sourceIndex; - UChar c, trail; - - if(pArgs->converter->mode<8) { - _UTF16ToUnicodeWithOffsets(pArgs, pErrorCode); - return; - } - - cnv=pArgs->converter; - source=(const uint8_t *)pArgs->source; - length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); - if(length<=0 && cnv->toUnicodeStatus==0) { - /* no input, nothing to do */ - return; - } - - target=pArgs->target; - if(target >= pArgs->targetLimit) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - return; - } - - targetCapacity=(uint32_t)(pArgs->targetLimit-target); - offsets=pArgs->offsets; - sourceIndex=0; - c=0; - - /* complete a partial UChar or pair from the last call */ - if(cnv->toUnicodeStatus!=0) { - /* - * special case: single byte from a previous buffer, - * where the byte turned out not to belong to a trail surrogate - * and the preceding, unmatched lead surrogate was put into toUBytes[] - * for error handling - */ - cnv->toUBytes[0]=(uint8_t)cnv->toUnicodeStatus; - cnv->toULength=1; - cnv->toUnicodeStatus=0; - } - if((count=cnv->toULength)!=0) { - uint8_t *p=cnv->toUBytes; - do { - p[count++]=*source++; - ++sourceIndex; - --length; - if(count==2) { - c=((UChar)p[0]<<8)|p[1]; - if(U16_IS_SINGLE(c)) { - /* output the BMP code point */ - *target++=c; - if(offsets!=NULL) { - *offsets++=-1; - } - --targetCapacity; - count=0; - c=0; - break; - } else if(U16_IS_SURROGATE_LEAD(c)) { - /* continue collecting bytes for the trail surrogate */ - c=0; /* avoid unnecessary surrogate handling below */ - } else { - /* fall through to error handling for an unmatched trail surrogate */ - break; - } - } else if(count==4) { - c=((UChar)p[0]<<8)|p[1]; - trail=((UChar)p[2]<<8)|p[3]; - if(U16_IS_TRAIL(trail)) { - /* output the surrogate pair */ - *target++=c; - if(targetCapacity>=2) { - *target++=trail; - if(offsets!=NULL) { - *offsets++=-1; - *offsets++=-1; - } - targetCapacity-=2; - } else /* targetCapacity==1 */ { - targetCapacity=0; - cnv->UCharErrorBuffer[0]=trail; - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - count=0; - c=0; - break; - } else { - /* unmatched lead surrogate, handle here for consistent toUBytes[] */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - - /* back out reading the code unit after it */ - if(((const uint8_t *)pArgs->source-source)>=2) { - source-=2; - } else { - /* - * if the trail unit's first byte was in a previous buffer, then - * we need to put it into a special place because toUBytes[] will be - * used for the lead unit's bytes - */ - cnv->toUnicodeStatus=0x100|p[2]; - --source; - } - cnv->toULength=2; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; - return; - } - } - } while(length>0); - cnv->toULength=(int8_t)count; - } - - /* copy an even number of bytes for complete UChars */ - count=2*targetCapacity; - if(count>length) { - count=length&~1; - } - if(c==0 && count>0) { - length-=count; - count>>=1; - targetCapacity-=count; - if(offsets==NULL) { - do { - c=((UChar)source[0]<<8)|source[1]; - source+=2; - if(U16_IS_SINGLE(c)) { - *target++=c; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && - U16_IS_TRAIL(trail=((UChar)source[0]<<8)|source[1]) - ) { - source+=2; - --count; - *target++=c; - *target++=trail; - } else { - break; - } - } while(--count>0); - } else { - do { - c=((UChar)source[0]<<8)|source[1]; - source+=2; - if(U16_IS_SINGLE(c)) { - *target++=c; - *offsets++=sourceIndex; - sourceIndex+=2; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && - U16_IS_TRAIL(trail=((UChar)source[0]<<8)|source[1]) - ) { - source+=2; - --count; - *target++=c; - *target++=trail; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - sourceIndex+=4; - } else { - break; - } - } while(--count>0); - } - - if(count==0) { - /* done with the loop for complete UChars */ - c=0; - } else { - /* keep c for surrogate handling, trail will be set there */ - length+=2*(count-1); /* one more byte pair was consumed than count decremented */ - targetCapacity+=count; - } - } - - if(c!=0) { - /* - * c is a surrogate, and - * - source or target too short - * - or the surrogate is unmatched - */ - cnv->toUBytes[0]=(uint8_t)(c>>8); - cnv->toUBytes[1]=(uint8_t)c; - cnv->toULength=2; - - if(U16_IS_SURROGATE_LEAD(c)) { - if(length>=2) { - if(U16_IS_TRAIL(trail=((UChar)source[0]<<8)|source[1])) { - /* output the surrogate pair, will overflow (see conditions comment above) */ - source+=2; - length-=2; - *target++=c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - cnv->UCharErrorBuffer[0]=trail; - cnv->UCharErrorBufferLength=1; - cnv->toULength=0; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } else { - /* unmatched lead surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* see if the trail surrogate is in the next buffer */ - } - } else { - /* unmatched trail surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } - - if(U_SUCCESS(*pErrorCode)) { - /* check for a remaining source byte */ - if(length>0) { - if(targetCapacity==0) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } else { - /* it must be length==1 because otherwise the above would have copied more */ - cnv->toUBytes[cnv->toULength++]=*source++; - } - } - } - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; -} - -static UChar32 -_UTF16BEGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *err) { - const uint8_t *s, *sourceLimit; - UChar32 c; - - if(pArgs->converter->mode<8) { - return UCNV_GET_NEXT_UCHAR_USE_TO_U; - } - - s=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - - if(s>=sourceLimit) { - /* no input */ - *err=U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; - } - - if(s+2>sourceLimit) { - /* only one byte: truncated UChar */ - pArgs->converter->toUBytes[0]=*s++; - pArgs->converter->toULength=1; - pArgs->source=(const char *)s; - *err = U_TRUNCATED_CHAR_FOUND; - return 0xffff; - } - - /* get one UChar */ - c=((UChar32)*s<<8)|s[1]; - s+=2; - - /* check for a surrogate pair */ - if(U_IS_SURROGATE(c)) { - if(U16_IS_SURROGATE_LEAD(c)) { - if(s+2<=sourceLimit) { - UChar trail; - - /* get a second UChar and see if it is a trail surrogate */ - trail=((UChar)*s<<8)|s[1]; - if(U16_IS_TRAIL(trail)) { - c=U16_GET_SUPPLEMENTARY(c, trail); - s+=2; - } else { - /* unmatched lead surrogate */ - c=-2; - } - } else { - /* too few (2 or 3) bytes for a surrogate pair: truncated code point */ - uint8_t *bytes=pArgs->converter->toUBytes; - s-=2; - pArgs->converter->toULength=(int8_t)(sourceLimit-s); - do { - *bytes++=*s++; - } while(sconverter->toUBytes; - pArgs->converter->toULength=2; - *bytes=*(s-2); - bytes[1]=*(s-1); - - c=0xffff; - *err=U_ILLEGAL_CHAR_FOUND; - } - } - - pArgs->source=(const char *)s; - return c; -} - -static void -_UTF16BEReset(UConverter *cnv, UConverterResetChoice choice) { - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode state */ - if(UCNV_GET_VERSION(cnv)==0) { - cnv->mode=8; /* no BOM handling */ - } else { - cnv->mode=0; /* Java-specific "UnicodeBig" requires BE BOM or no BOM */ - } - } - if(choice!=UCNV_RESET_TO_UNICODE && UCNV_GET_VERSION(cnv)==1) { - /* reset fromUnicode for "UnicodeBig": prepare to output the UTF-16BE BOM */ - cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; - } -} - -static void -_UTF16BEOpen(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - if(UCNV_GET_VERSION(cnv)<=1) { - _UTF16BEReset(cnv, UCNV_RESET_BOTH); - } else { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - } -} - -static const char * -_UTF16BEGetName(const UConverter *cnv) { - if(UCNV_GET_VERSION(cnv)==0) { - return "UTF-16BE"; - } else { - return "UTF-16BE,version=1"; - } -} - -static const UConverterImpl _UTF16BEImpl={ - UCNV_UTF16_BigEndian, - - NULL, - NULL, - - _UTF16BEOpen, - NULL, - _UTF16BEReset, - - _UTF16BEToUnicodeWithOffsets, - _UTF16BEToUnicodeWithOffsets, - _UTF16BEFromUnicodeWithOffsets, - _UTF16BEFromUnicodeWithOffsets, - _UTF16BEGetNextUChar, - - NULL, - _UTF16BEGetName, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -static const UConverterStaticData _UTF16BEStaticData={ - sizeof(UConverterStaticData), - "UTF-16BE", - 1200, UCNV_IBM, UCNV_UTF16_BigEndian, 2, 2, - { 0xff, 0xfd, 0, 0 },2,FALSE,FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - - -const UConverterSharedData _UTF16BEData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16BEStaticData, &_UTF16BEImpl); - -/* UTF-16LE ----------------------------------------------------------------- */ - -static void -_UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const UChar *source; - char *target; - int32_t *offsets; - - uint32_t targetCapacity, length, sourceIndex; - UChar c, trail; - char overflow[4]; - - source=pArgs->source; - length=(int32_t)(pArgs->sourceLimit-source); - if(length<=0) { - /* no input, nothing to do */ - return; - } - - cnv=pArgs->converter; - - /* write the BOM if necessary */ - if(cnv->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ (char)0xff, (char)0xfe }; - ucnv_fromUWriteBytes(cnv, - bom, 2, - &pArgs->target, pArgs->targetLimit, - &pArgs->offsets, -1, - pErrorCode); - cnv->fromUnicodeStatus=0; - } - - target=pArgs->target; - if(target >= pArgs->targetLimit) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - return; - } - - targetCapacity=(uint32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - sourceIndex=0; - - /* c!=0 indicates in several places outside the main loops that a surrogate was found */ - - if((c=(UChar)cnv->fromUChar32)!=0 && U16_IS_TRAIL(trail=*source) && targetCapacity>=4) { - /* the last buffer ended with a lead surrogate, output the surrogate pair */ - ++source; - --length; - target[0]=(uint8_t)c; - target[1]=(uint8_t)(c>>8); - target[2]=(uint8_t)trail; - target[3]=(uint8_t)(trail>>8); - target+=4; - targetCapacity-=4; - if(offsets!=NULL) { - *offsets++=-1; - *offsets++=-1; - *offsets++=-1; - *offsets++=-1; - } - sourceIndex=1; - cnv->fromUChar32=c=0; - } - - if(c==0) { - /* copy an even number of bytes for complete UChars */ - uint32_t count=2*length; - if(count>targetCapacity) { - count=targetCapacity&~1; - } - /* count is even */ - targetCapacity-=count; - count>>=1; - length-=count; - - if(offsets==NULL) { - while(count>0) { - c=*source++; - if(U16_IS_SINGLE(c)) { - target[0]=(uint8_t)c; - target[1]=(uint8_t)(c>>8); - target+=2; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && U16_IS_TRAIL(trail=*source)) { - ++source; - --count; - target[0]=(uint8_t)c; - target[1]=(uint8_t)(c>>8); - target[2]=(uint8_t)trail; - target[3]=(uint8_t)(trail>>8); - target+=4; - } else { - break; - } - --count; - } - } else { - while(count>0) { - c=*source++; - if(U16_IS_SINGLE(c)) { - target[0]=(uint8_t)c; - target[1]=(uint8_t)(c>>8); - target+=2; - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && U16_IS_TRAIL(trail=*source)) { - ++source; - --count; - target[0]=(uint8_t)c; - target[1]=(uint8_t)(c>>8); - target[2]=(uint8_t)trail; - target[3]=(uint8_t)(trail>>8); - target+=4; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - sourceIndex+=2; - } else { - break; - } - --count; - } - } - - if(count==0) { - /* done with the loop for complete UChars */ - if(length>0 && targetCapacity>0) { - /* - * there is more input and some target capacity - - * it must be targetCapacity==1 because otherwise - * the above would have copied more; - * prepare for overflow output - */ - if(U16_IS_SINGLE(c=*source++)) { - overflow[0]=(char)c; - overflow[1]=(char)(c>>8); - length=2; /* 2 bytes to output */ - c=0; - /* } else { keep c for surrogate handling, length will be set there */ - } - } else { - length=0; - c=0; - } - } else { - /* keep c for surrogate handling, length will be set there */ - targetCapacity+=2*count; - } - } else { - length=0; /* from here on, length counts the bytes in overflow[] */ - } - - if(c!=0) { - /* - * c is a surrogate, and - * - source or target too short - * - or the surrogate is unmatched - */ - length=0; - if(U16_IS_SURROGATE_LEAD(c)) { - if(sourcesourceLimit) { - if(U16_IS_TRAIL(trail=*source)) { - /* output the surrogate pair, will overflow (see conditions comment above) */ - ++source; - overflow[0]=(char)c; - overflow[1]=(char)(c>>8); - overflow[2]=(char)trail; - overflow[3]=(char)(trail>>8); - length=4; /* 4 bytes to output */ - c=0; - } else { - /* unmatched lead surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* see if the trail surrogate is in the next buffer */ - } - } else { - /* unmatched trail surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - cnv->fromUChar32=c; - } - - if(length>0) { - /* output length bytes with overflow (length>targetCapacity>0) */ - ucnv_fromUWriteBytes(cnv, - overflow, length, - &target, pArgs->targetLimit, - &offsets, sourceIndex, - pErrorCode); - targetCapacity=(uint32_t)(pArgs->targetLimit-(char *)target); - } - - if(U_SUCCESS(*pErrorCode) && sourcesourceLimit && targetCapacity==0) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=target; - pArgs->offsets=offsets; -} - -static void -_UTF16LEToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const uint8_t *source; - UChar *target; - int32_t *offsets; - - uint32_t targetCapacity, length, count, sourceIndex; - UChar c, trail; - - if(pArgs->converter->mode<8) { - _UTF16ToUnicodeWithOffsets(pArgs, pErrorCode); - return; - } - - cnv=pArgs->converter; - source=(const uint8_t *)pArgs->source; - length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); - if(length<=0 && cnv->toUnicodeStatus==0) { - /* no input, nothing to do */ - return; - } - - target=pArgs->target; - if(target >= pArgs->targetLimit) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - return; - } - - targetCapacity=(uint32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - sourceIndex=0; - c=0; - - /* complete a partial UChar or pair from the last call */ - if(cnv->toUnicodeStatus!=0) { - /* - * special case: single byte from a previous buffer, - * where the byte turned out not to belong to a trail surrogate - * and the preceding, unmatched lead surrogate was put into toUBytes[] - * for error handling - */ - cnv->toUBytes[0]=(uint8_t)cnv->toUnicodeStatus; - cnv->toULength=1; - cnv->toUnicodeStatus=0; - } - if((count=cnv->toULength)!=0) { - uint8_t *p=cnv->toUBytes; - do { - p[count++]=*source++; - ++sourceIndex; - --length; - if(count==2) { - c=((UChar)p[1]<<8)|p[0]; - if(U16_IS_SINGLE(c)) { - /* output the BMP code point */ - *target++=c; - if(offsets!=NULL) { - *offsets++=-1; - } - --targetCapacity; - count=0; - c=0; - break; - } else if(U16_IS_SURROGATE_LEAD(c)) { - /* continue collecting bytes for the trail surrogate */ - c=0; /* avoid unnecessary surrogate handling below */ - } else { - /* fall through to error handling for an unmatched trail surrogate */ - break; - } - } else if(count==4) { - c=((UChar)p[1]<<8)|p[0]; - trail=((UChar)p[3]<<8)|p[2]; - if(U16_IS_TRAIL(trail)) { - /* output the surrogate pair */ - *target++=c; - if(targetCapacity>=2) { - *target++=trail; - if(offsets!=NULL) { - *offsets++=-1; - *offsets++=-1; - } - targetCapacity-=2; - } else /* targetCapacity==1 */ { - targetCapacity=0; - cnv->UCharErrorBuffer[0]=trail; - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - count=0; - c=0; - break; - } else { - /* unmatched lead surrogate, handle here for consistent toUBytes[] */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - - /* back out reading the code unit after it */ - if(((const uint8_t *)pArgs->source-source)>=2) { - source-=2; - } else { - /* - * if the trail unit's first byte was in a previous buffer, then - * we need to put it into a special place because toUBytes[] will be - * used for the lead unit's bytes - */ - cnv->toUnicodeStatus=0x100|p[2]; - --source; - } - cnv->toULength=2; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; - return; - } - } - } while(length>0); - cnv->toULength=(int8_t)count; - } - - /* copy an even number of bytes for complete UChars */ - count=2*targetCapacity; - if(count>length) { - count=length&~1; - } - if(c==0 && count>0) { - length-=count; - count>>=1; - targetCapacity-=count; - if(offsets==NULL) { - do { - c=((UChar)source[1]<<8)|source[0]; - source+=2; - if(U16_IS_SINGLE(c)) { - *target++=c; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && - U16_IS_TRAIL(trail=((UChar)source[1]<<8)|source[0]) - ) { - source+=2; - --count; - *target++=c; - *target++=trail; - } else { - break; - } - } while(--count>0); - } else { - do { - c=((UChar)source[1]<<8)|source[0]; - source+=2; - if(U16_IS_SINGLE(c)) { - *target++=c; - *offsets++=sourceIndex; - sourceIndex+=2; - } else if(U16_IS_SURROGATE_LEAD(c) && count>=2 && - U16_IS_TRAIL(trail=((UChar)source[1]<<8)|source[0]) - ) { - source+=2; - --count; - *target++=c; - *target++=trail; - *offsets++=sourceIndex; - *offsets++=sourceIndex; - sourceIndex+=4; - } else { - break; - } - } while(--count>0); - } - - if(count==0) { - /* done with the loop for complete UChars */ - c=0; - } else { - /* keep c for surrogate handling, trail will be set there */ - length+=2*(count-1); /* one more byte pair was consumed than count decremented */ - targetCapacity+=count; - } - } - - if(c!=0) { - /* - * c is a surrogate, and - * - source or target too short - * - or the surrogate is unmatched - */ - cnv->toUBytes[0]=(uint8_t)c; - cnv->toUBytes[1]=(uint8_t)(c>>8); - cnv->toULength=2; - - if(U16_IS_SURROGATE_LEAD(c)) { - if(length>=2) { - if(U16_IS_TRAIL(trail=((UChar)source[1]<<8)|source[0])) { - /* output the surrogate pair, will overflow (see conditions comment above) */ - source+=2; - length-=2; - *target++=c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - cnv->UCharErrorBuffer[0]=trail; - cnv->UCharErrorBufferLength=1; - cnv->toULength=0; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } else { - /* unmatched lead surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* see if the trail surrogate is in the next buffer */ - } - } else { - /* unmatched trail surrogate */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } - } - - if(U_SUCCESS(*pErrorCode)) { - /* check for a remaining source byte */ - if(length>0) { - if(targetCapacity==0) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } else { - /* it must be length==1 because otherwise the above would have copied more */ - cnv->toUBytes[cnv->toULength++]=*source++; - } - } - } - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; -} - -static UChar32 -_UTF16LEGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *err) { - const uint8_t *s, *sourceLimit; - UChar32 c; - - if(pArgs->converter->mode<8) { - return UCNV_GET_NEXT_UCHAR_USE_TO_U; - } - - s=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - - if(s>=sourceLimit) { - /* no input */ - *err=U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; - } - - if(s+2>sourceLimit) { - /* only one byte: truncated UChar */ - pArgs->converter->toUBytes[0]=*s++; - pArgs->converter->toULength=1; - pArgs->source=(const char *)s; - *err = U_TRUNCATED_CHAR_FOUND; - return 0xffff; - } - - /* get one UChar */ - c=((UChar32)s[1]<<8)|*s; - s+=2; - - /* check for a surrogate pair */ - if(U_IS_SURROGATE(c)) { - if(U16_IS_SURROGATE_LEAD(c)) { - if(s+2<=sourceLimit) { - UChar trail; - - /* get a second UChar and see if it is a trail surrogate */ - trail=((UChar)s[1]<<8)|*s; - if(U16_IS_TRAIL(trail)) { - c=U16_GET_SUPPLEMENTARY(c, trail); - s+=2; - } else { - /* unmatched lead surrogate */ - c=-2; - } - } else { - /* too few (2 or 3) bytes for a surrogate pair: truncated code point */ - uint8_t *bytes=pArgs->converter->toUBytes; - s-=2; - pArgs->converter->toULength=(int8_t)(sourceLimit-s); - do { - *bytes++=*s++; - } while(sconverter->toUBytes; - pArgs->converter->toULength=2; - *bytes=*(s-2); - bytes[1]=*(s-1); - - c=0xffff; - *err=U_ILLEGAL_CHAR_FOUND; - } - } - - pArgs->source=(const char *)s; - return c; -} - -static void -_UTF16LEReset(UConverter *cnv, UConverterResetChoice choice) { - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode state */ - if(UCNV_GET_VERSION(cnv)==0) { - cnv->mode=8; /* no BOM handling */ - } else { - cnv->mode=0; /* Java-specific "UnicodeLittle" requires LE BOM or no BOM */ - } - } - if(choice!=UCNV_RESET_TO_UNICODE && UCNV_GET_VERSION(cnv)==1) { - /* reset fromUnicode for "UnicodeLittle": prepare to output the UTF-16LE BOM */ - cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; - } -} - -static void -_UTF16LEOpen(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - if(UCNV_GET_VERSION(cnv)<=1) { - _UTF16LEReset(cnv, UCNV_RESET_BOTH); - } else { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - } -} - -static const char * -_UTF16LEGetName(const UConverter *cnv) { - if(UCNV_GET_VERSION(cnv)==0) { - return "UTF-16LE"; - } else { - return "UTF-16LE,version=1"; - } -} - -static const UConverterImpl _UTF16LEImpl={ - UCNV_UTF16_LittleEndian, - - NULL, - NULL, - - _UTF16LEOpen, - NULL, - _UTF16LEReset, - - _UTF16LEToUnicodeWithOffsets, - _UTF16LEToUnicodeWithOffsets, - _UTF16LEFromUnicodeWithOffsets, - _UTF16LEFromUnicodeWithOffsets, - _UTF16LEGetNextUChar, - - NULL, - _UTF16LEGetName, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - - -static const UConverterStaticData _UTF16LEStaticData={ - sizeof(UConverterStaticData), - "UTF-16LE", - 1202, UCNV_IBM, UCNV_UTF16_LittleEndian, 2, 2, - { 0xfd, 0xff, 0, 0 },2,FALSE,FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - - -const UConverterSharedData _UTF16LEData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16LEStaticData, &_UTF16LEImpl); - -/* UTF-16 (Detect BOM) ------------------------------------------------------ */ - -/* - * Detect a BOM at the beginning of the stream and select UTF-16BE or UTF-16LE - * accordingly. - * This is a simpler version of the UTF-32 converter, with - * fewer states for shorter BOMs. - * - * State values: - * 0 initial state - * 1 saw first byte - * 2..5 - - * 6..7 see _UTF16ToUnicodeWithOffsets() comments in state 1 - * 8 UTF-16BE mode - * 9 UTF-16LE mode - * - * During detection: state==number of initial bytes seen so far. - * - * On output, emit U+FEFF as the first code point. - * - * Variants: - * - UTF-16,version=1 (Java "Unicode" encoding) treats a missing BOM as an error. - * - UTF-16BE,version=1 (Java "UnicodeBig" encoding) and - * UTF-16LE,version=1 (Java "UnicodeLittle" encoding) treat a reverse BOM as an error. - */ - -static void -_UTF16Reset(UConverter *cnv, UConverterResetChoice choice) { - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode: state=0 */ - cnv->mode=0; - } - if(choice!=UCNV_RESET_TO_UNICODE) { - /* reset fromUnicode: prepare to output the UTF-16PE BOM */ - cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; - } -} - -static const UConverterSharedData _UTF16v2Data; - -static void -_UTF16Open(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - if(UCNV_GET_VERSION(cnv)<=2) { - if(UCNV_GET_VERSION(cnv)==2 && !pArgs->onlyTestIsLoadable) { - /* - * Switch implementation, and switch the staticData that's different - * and was copied into the UConverter. - * (See ucnv_createConverterFromSharedData() in ucnv_bld.c.) - * UTF-16,version=2 fromUnicode() always writes a big-endian byte stream. - */ - cnv->sharedData=(UConverterSharedData*)&_UTF16v2Data; - uprv_memcpy(cnv->subChars, _UTF16v2Data.staticData->subChar, UCNV_MAX_SUBCHAR_LEN); - } - _UTF16Reset(cnv, UCNV_RESET_BOTH); - } else { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - } -} - -static const char * -_UTF16GetName(const UConverter *cnv) { - if(UCNV_GET_VERSION(cnv)==0) { - return "UTF-16"; - } else if(UCNV_GET_VERSION(cnv)==1) { - return "UTF-16,version=1"; - } else { - return "UTF-16,version=2"; - } -} - -const UConverterSharedData _UTF16Data; - -#define IS_UTF16BE(cnv) ((cnv)->sharedData==&_UTF16BEData) -#define IS_UTF16LE(cnv) ((cnv)->sharedData==&_UTF16LEData) -#define IS_UTF16(cnv) ((cnv)->sharedData==&_UTF16Data || (cnv)->sharedData==&_UTF16v2Data) - -static void -_UTF16ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv=pArgs->converter; - const char *source=pArgs->source; - const char *sourceLimit=pArgs->sourceLimit; - int32_t *offsets=pArgs->offsets; - - int32_t state, offsetDelta; - uint8_t b; - - state=cnv->mode; - - /* - * If we detect a BOM in this buffer, then we must add the BOM size to the - * offsets because the actual converter function will not see and count the BOM. - * offsetDelta will have the number of the BOM bytes that are in the current buffer. - */ - offsetDelta=0; - - while(sourcetoUBytes[0]=(uint8_t)*source++; - cnv->toULength=1; - state=1; - break; - case 1: - /* - * Only inside this switch case can the state variable - * temporarily take two additional values: - * 6: BOM error, continue with BE - * 7: BOM error, continue with LE - */ - b=*source; - if(cnv->toUBytes[0]==0xfe && b==0xff) { - if(IS_UTF16LE(cnv)) { - state=7; /* illegal reverse BOM for Java "UnicodeLittle" */ - } else { - state=8; /* detect UTF-16BE */ - } - } else if(cnv->toUBytes[0]==0xff && b==0xfe) { - if(IS_UTF16BE(cnv)) { - state=6; /* illegal reverse BOM for Java "UnicodeBig" */ - } else { - state=9; /* detect UTF-16LE */ - } - } else if((IS_UTF16(cnv) && UCNV_GET_VERSION(cnv)==1)) { - state=6; /* illegal missing BOM for Java "Unicode" */ - } - if(state>=8) { - /* BOM detected, consume it */ - ++source; - cnv->toULength=0; - offsetDelta=(int32_t)(source-pArgs->source); - } else if(state<6) { - /* ok: no BOM, and not a reverse BOM */ - if(source!=pArgs->source) { - /* reset the source for a correct first offset */ - source=pArgs->source; - cnv->toULength=0; - } - if(IS_UTF16LE(cnv)) { - /* Make Java "UnicodeLittle" default to LE. */ - state=9; - } else { - /* Make standard UTF-16 and Java "UnicodeBig" default to BE. */ - state=8; - } - } else { - /* - * error: missing BOM, or reverse BOM - * UTF-16,version=1: Java-specific "Unicode" requires a BOM. - * UTF-16BE,version=1: Java-specific "UnicodeBig" requires a BE BOM or no BOM. - * UTF-16LE,version=1: Java-specific "UnicodeLittle" requires an LE BOM or no BOM. - */ - /* report the non-BOM or reverse BOM as an illegal sequence */ - cnv->toUBytes[1]=b; - cnv->toULength=2; - pArgs->source=source+1; - /* continue with conversion if the callback resets the error */ - /* - * Make Java "Unicode" default to BE like standard UTF-16. - * Make Java "UnicodeBig" and "UnicodeLittle" default - * to their normal endiannesses. - */ - cnv->mode=state+2; - *pErrorCode=U_ILLEGAL_ESCAPE_SEQUENCE; - return; - } - /* convert the rest of the stream */ - cnv->mode=state; - continue; - case 8: - /* call UTF-16BE */ - pArgs->source=source; - _UTF16BEToUnicodeWithOffsets(pArgs, pErrorCode); - source=pArgs->source; - break; - case 9: - /* call UTF-16LE */ - pArgs->source=source; - _UTF16LEToUnicodeWithOffsets(pArgs, pErrorCode); - source=pArgs->source; - break; - default: - break; /* does not occur */ - } - } - - /* add BOM size to offsets - see comment at offsetDelta declaration */ - if(offsets!=NULL && offsetDelta!=0) { - int32_t *offsetsLimit=pArgs->offsets; - while(offsetssource=source; - - if(source==sourceLimit && pArgs->flush) { - /* handle truncated input */ - switch(state) { - case 0: - break; /* no input at all, nothing to do */ - case 8: - _UTF16BEToUnicodeWithOffsets(pArgs, pErrorCode); - break; - case 9: - _UTF16LEToUnicodeWithOffsets(pArgs, pErrorCode); - break; - default: - /* 0mode=state; -} - -static UChar32 -_UTF16GetNextUChar(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - switch(pArgs->converter->mode) { - case 8: - return _UTF16BEGetNextUChar(pArgs, pErrorCode); - case 9: - return _UTF16LEGetNextUChar(pArgs, pErrorCode); - default: - return UCNV_GET_NEXT_UCHAR_USE_TO_U; - } -} - -static const UConverterImpl _UTF16Impl = { - UCNV_UTF16, - - NULL, - NULL, - - _UTF16Open, - NULL, - _UTF16Reset, - - _UTF16ToUnicodeWithOffsets, - _UTF16ToUnicodeWithOffsets, - _UTF16PEFromUnicodeWithOffsets, - _UTF16PEFromUnicodeWithOffsets, - _UTF16GetNextUChar, - - NULL, /* ### TODO implement getStarters for all Unicode encodings?! */ - _UTF16GetName, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -static const UConverterStaticData _UTF16StaticData = { - sizeof(UConverterStaticData), - "UTF-16", - 1204, /* CCSID for BOM sensitive UTF-16 */ - UCNV_IBM, UCNV_UTF16, 2, 2, -#if U_IS_BIG_ENDIAN - { 0xff, 0xfd, 0, 0 }, 2, -#else - { 0xfd, 0xff, 0, 0 }, 2, -#endif - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _UTF16Data = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16StaticData, &_UTF16Impl); - -static const UConverterImpl _UTF16v2Impl = { - UCNV_UTF16, - - NULL, - NULL, - - _UTF16Open, - NULL, - _UTF16Reset, - - _UTF16ToUnicodeWithOffsets, - _UTF16ToUnicodeWithOffsets, - _UTF16BEFromUnicodeWithOffsets, - _UTF16BEFromUnicodeWithOffsets, - _UTF16GetNextUChar, - - NULL, /* ### TODO implement getStarters for all Unicode encodings?! */ - _UTF16GetName, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -static const UConverterStaticData _UTF16v2StaticData = { - sizeof(UConverterStaticData), - "UTF-16,version=2", - 1204, /* CCSID for BOM sensitive UTF-16 */ - UCNV_IBM, UCNV_UTF16, 2, 2, - { 0xff, 0xfd, 0, 0 }, 2, - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -static const UConverterSharedData _UTF16v2Data = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16v2StaticData, &_UTF16v2Impl); - -#endif diff --git a/source/common/ucnv_u32.c b/source/common/ucnv_u32.c deleted file mode 100644 index b0a0fe2..0000000 --- a/source/common/ucnv_u32.c +++ /dev/null @@ -1,1251 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_u32.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jul01 -* created by: Markus W. Scherer -* -* UTF-32 converter implementation. Used to be in ucnv_utf.c. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/utf.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cmemory.h" - -#define MAXIMUM_UCS2 0x0000FFFF -#define MAXIMUM_UTF 0x0010FFFF -#define HALF_SHIFT 10 -#define HALF_BASE 0x0010000 -#define HALF_MASK 0x3FF -#define SURROGATE_HIGH_START 0xD800 -#define SURROGATE_LOW_START 0xDC00 - -/* -SURROGATE_LOW_START + HALF_BASE */ -#define SURROGATE_LOW_BASE 9216 - -enum { - UCNV_NEED_TO_WRITE_BOM=1 -}; - -/* UTF-32BE ----------------------------------------------------------------- */ - -static void -T_UConverter_toUnicode_UTF32_BE(UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = args->converter->toUBytes; - uint32_t ch, i; - - /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) { - i = args->converter->toULength; /* restore # of bytes consumed */ - args->converter->toULength = 0; - - ch = args->converter->toUnicodeStatus - 1;/*Stores the previously calculated ch from a previous call*/ - args->converter->toUnicodeStatus = 0; - goto morebytes; - } - - while (mySource < sourceLimit && myTarget < targetLimit) { - i = 0; - ch = 0; -morebytes: - while (i < sizeof(uint32_t)) { - if (mySource < sourceLimit) { - ch = (ch << 8) | (uint8_t)(*mySource); - toUBytes[i++] = (char) *(mySource++); - } - else { - /* stores a partially calculated target*/ - /* + 1 to make 0 a valid character */ - args->converter->toUnicodeStatus = ch + 1; - args->converter->toULength = (int8_t) i; - goto donefornow; - } - } - - if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) - { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - } - else { - /* write out the surrogates */ - *(myTarget++) = U16_LEAD(ch); - ch = U16_TRAIL(ch); - if (myTarget < targetLimit) { - *(myTarget++) = (UChar)ch; - } - else { - /* Put in overflow buffer (not handled here) */ - args->converter->UCharErrorBuffer[0] = (UChar) ch; - args->converter->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - else { - args->converter->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) { - /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; -} - -static void -T_UConverter_toUnicode_UTF32_BE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - int32_t *myOffsets = args->offsets; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = args->converter->toUBytes; - uint32_t ch, i; - int32_t offsetNum = 0; - - /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) { - i = args->converter->toULength; /* restore # of bytes consumed */ - args->converter->toULength = 0; - - ch = args->converter->toUnicodeStatus - 1;/*Stores the previously calculated ch from a previous call*/ - args->converter->toUnicodeStatus = 0; - goto morebytes; - } - - while (mySource < sourceLimit && myTarget < targetLimit) { - i = 0; - ch = 0; -morebytes: - while (i < sizeof(uint32_t)) { - if (mySource < sourceLimit) { - ch = (ch << 8) | (uint8_t)(*mySource); - toUBytes[i++] = (char) *(mySource++); - } - else { - /* stores a partially calculated target*/ - /* + 1 to make 0 a valid character */ - args->converter->toUnicodeStatus = ch + 1; - args->converter->toULength = (int8_t) i; - goto donefornow; - } - } - - if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - *(myOffsets++) = offsetNum; - } - else { - /* write out the surrogates */ - *(myTarget++) = U16_LEAD(ch); - *myOffsets++ = offsetNum; - ch = U16_TRAIL(ch); - if (myTarget < targetLimit) - { - *(myTarget++) = (UChar)ch; - *(myOffsets++) = offsetNum; - } - else { - /* Put in overflow buffer (not handled here) */ - args->converter->UCharErrorBuffer[0] = (UChar) ch; - args->converter->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - else { - args->converter->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - offsetNum += i; - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; - args->offsets = myOffsets; -} - -static void -T_UConverter_fromUnicode_UTF32_BE(UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - const UChar *mySource = args->source; - unsigned char *myTarget; - const UChar *sourceLimit = args->sourceLimit; - const unsigned char *targetLimit = (unsigned char *) args->targetLimit; - UChar32 ch, ch2; - unsigned int indexToWrite; - unsigned char temp[sizeof(uint32_t)]; - - if(mySource >= sourceLimit) { - /* no input, nothing to do */ - return; - } - - /* write the BOM if necessary */ - if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ 0, 0, (char)0xfe, (char)0xff }; - ucnv_fromUWriteBytes(args->converter, - bom, 4, - &args->target, args->targetLimit, - &args->offsets, -1, - err); - args->converter->fromUnicodeStatus=0; - } - - myTarget = (unsigned char *) args->target; - temp[0] = 0; - - if (args->converter->fromUChar32) { - ch = args->converter->fromUChar32; - args->converter->fromUChar32 = 0; - goto lowsurogate; - } - - while (mySource < sourceLimit && myTarget < targetLimit) { - ch = *(mySource++); - - if (U_IS_SURROGATE(ch)) { - if (U_IS_LEAD(ch)) { -lowsurogate: - if (mySource < sourceLimit) { - ch2 = *mySource; - if (U_IS_TRAIL(ch2)) { - ch = ((ch - SURROGATE_HIGH_START) << HALF_SHIFT) + ch2 + SURROGATE_LOW_BASE; - mySource++; - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* ran out of source */ - args->converter->fromUChar32 = ch; - if (args->flush) { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err = U_ILLEGAL_CHAR_FOUND; - } - break; - } - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - - /* We cannot get any larger than 10FFFF because we are coming from UTF-16 */ - temp[1] = (uint8_t) (ch >> 16 & 0x1F); - temp[2] = (uint8_t) (ch >> 8); /* unsigned cast implicitly does (ch & FF) */ - temp[3] = (uint8_t) (ch); /* unsigned cast implicitly does (ch & FF) */ - - for (indexToWrite = 0; indexToWrite <= sizeof(uint32_t) - 1; indexToWrite++) { - if (myTarget < targetLimit) { - *(myTarget++) = temp[indexToWrite]; - } - else { - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = temp[indexToWrite]; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; -} - -static void -T_UConverter_fromUnicode_UTF32_BE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - const UChar *mySource = args->source; - unsigned char *myTarget; - int32_t *myOffsets; - const UChar *sourceLimit = args->sourceLimit; - const unsigned char *targetLimit = (unsigned char *) args->targetLimit; - UChar32 ch, ch2; - int32_t offsetNum = 0; - unsigned int indexToWrite; - unsigned char temp[sizeof(uint32_t)]; - - if(mySource >= sourceLimit) { - /* no input, nothing to do */ - return; - } - - /* write the BOM if necessary */ - if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ 0, 0, (char)0xfe, (char)0xff }; - ucnv_fromUWriteBytes(args->converter, - bom, 4, - &args->target, args->targetLimit, - &args->offsets, -1, - err); - args->converter->fromUnicodeStatus=0; - } - - myTarget = (unsigned char *) args->target; - myOffsets = args->offsets; - temp[0] = 0; - - if (args->converter->fromUChar32) { - ch = args->converter->fromUChar32; - args->converter->fromUChar32 = 0; - goto lowsurogate; - } - - while (mySource < sourceLimit && myTarget < targetLimit) { - ch = *(mySource++); - - if (U_IS_SURROGATE(ch)) { - if (U_IS_LEAD(ch)) { -lowsurogate: - if (mySource < sourceLimit) { - ch2 = *mySource; - if (U_IS_TRAIL(ch2)) { - ch = ((ch - SURROGATE_HIGH_START) << HALF_SHIFT) + ch2 + SURROGATE_LOW_BASE; - mySource++; - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* ran out of source */ - args->converter->fromUChar32 = ch; - if (args->flush) { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err = U_ILLEGAL_CHAR_FOUND; - } - break; - } - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - - /* We cannot get any larger than 10FFFF because we are coming from UTF-16 */ - temp[1] = (uint8_t) (ch >> 16 & 0x1F); - temp[2] = (uint8_t) (ch >> 8); /* unsigned cast implicitly does (ch & FF) */ - temp[3] = (uint8_t) (ch); /* unsigned cast implicitly does (ch & FF) */ - - for (indexToWrite = 0; indexToWrite <= sizeof(uint32_t) - 1; indexToWrite++) { - if (myTarget < targetLimit) { - *(myTarget++) = temp[indexToWrite]; - *(myOffsets++) = offsetNum; - } - else { - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = temp[indexToWrite]; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - offsetNum = offsetNum + 1 + (temp[1] != 0); - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; - args->offsets = myOffsets; -} - -static UChar32 -T_UConverter_getNextUChar_UTF32_BE(UConverterToUnicodeArgs* args, - UErrorCode* err) -{ - const uint8_t *mySource; - UChar32 myUChar; - int32_t length; - - mySource = (const uint8_t *)args->source; - if (mySource >= (const uint8_t *)args->sourceLimit) - { - /* no input */ - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; - } - - length = (int32_t)((const uint8_t *)args->sourceLimit - mySource); - if (length < 4) - { - /* got a partial character */ - uprv_memcpy(args->converter->toUBytes, mySource, length); - args->converter->toULength = (int8_t)length; - args->source = (const char *)(mySource + length); - *err = U_TRUNCATED_CHAR_FOUND; - return 0xffff; - } - - /* Don't even try to do a direct cast because the value may be on an odd address. */ - myUChar = ((UChar32)mySource[0] << 24) - | ((UChar32)mySource[1] << 16) - | ((UChar32)mySource[2] << 8) - | ((UChar32)mySource[3]); - - args->source = (const char *)(mySource + 4); - if ((uint32_t)myUChar <= MAXIMUM_UTF && !U_IS_SURROGATE(myUChar)) { - return myUChar; - } - - uprv_memcpy(args->converter->toUBytes, mySource, 4); - args->converter->toULength = 4; - - *err = U_ILLEGAL_CHAR_FOUND; - return 0xffff; -} - -static const UConverterImpl _UTF32BEImpl = { - UCNV_UTF32_BigEndian, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - T_UConverter_toUnicode_UTF32_BE, - T_UConverter_toUnicode_UTF32_BE_OFFSET_LOGIC, - T_UConverter_fromUnicode_UTF32_BE, - T_UConverter_fromUnicode_UTF32_BE_OFFSET_LOGIC, - T_UConverter_getNextUChar_UTF32_BE, - - NULL, - NULL, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -/* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ -static const UConverterStaticData _UTF32BEStaticData = { - sizeof(UConverterStaticData), - "UTF-32BE", - 1232, - UCNV_IBM, UCNV_UTF32_BigEndian, 4, 4, - { 0, 0, 0xff, 0xfd }, 4, FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _UTF32BEData = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32BEStaticData, &_UTF32BEImpl); - -/* UTF-32LE ---------------------------------------------------------- */ - -static void -T_UConverter_toUnicode_UTF32_LE(UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = args->converter->toUBytes; - uint32_t ch, i; - - /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) - { - i = args->converter->toULength; /* restore # of bytes consumed */ - args->converter->toULength = 0; - - /* Stores the previously calculated ch from a previous call*/ - ch = args->converter->toUnicodeStatus - 1; - args->converter->toUnicodeStatus = 0; - goto morebytes; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - i = 0; - ch = 0; -morebytes: - while (i < sizeof(uint32_t)) - { - if (mySource < sourceLimit) - { - ch |= ((uint8_t)(*mySource)) << (i * 8); - toUBytes[i++] = (char) *(mySource++); - } - else - { - /* stores a partially calculated target*/ - /* + 1 to make 0 a valid character */ - args->converter->toUnicodeStatus = ch + 1; - args->converter->toULength = (int8_t) i; - goto donefornow; - } - } - - if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - } - else { - /* write out the surrogates */ - *(myTarget++) = U16_LEAD(ch); - ch = U16_TRAIL(ch); - if (myTarget < targetLimit) { - *(myTarget++) = (UChar)ch; - } - else { - /* Put in overflow buffer (not handled here) */ - args->converter->UCharErrorBuffer[0] = (UChar) ch; - args->converter->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - else { - args->converter->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; -} - -static void -T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - int32_t *myOffsets = args->offsets; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = args->converter->toUBytes; - uint32_t ch, i; - int32_t offsetNum = 0; - - /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) - { - i = args->converter->toULength; /* restore # of bytes consumed */ - args->converter->toULength = 0; - - /* Stores the previously calculated ch from a previous call*/ - ch = args->converter->toUnicodeStatus - 1; - args->converter->toUnicodeStatus = 0; - goto morebytes; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - i = 0; - ch = 0; -morebytes: - while (i < sizeof(uint32_t)) - { - if (mySource < sourceLimit) - { - ch |= ((uint8_t)(*mySource)) << (i * 8); - toUBytes[i++] = (char) *(mySource++); - } - else - { - /* stores a partially calculated target*/ - /* + 1 to make 0 a valid character */ - args->converter->toUnicodeStatus = ch + 1; - args->converter->toULength = (int8_t) i; - goto donefornow; - } - } - - if (ch <= MAXIMUM_UTF && !U_IS_SURROGATE(ch)) - { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) - { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - *(myOffsets++) = offsetNum; - } - else { - /* write out the surrogates */ - *(myTarget++) = U16_LEAD(ch); - *(myOffsets++) = offsetNum; - ch = U16_TRAIL(ch); - if (myTarget < targetLimit) - { - *(myTarget++) = (UChar)ch; - *(myOffsets++) = offsetNum; - } - else - { - /* Put in overflow buffer (not handled here) */ - args->converter->UCharErrorBuffer[0] = (UChar) ch; - args->converter->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - else - { - args->converter->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - offsetNum += i; - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; - args->offsets = myOffsets; -} - -static void -T_UConverter_fromUnicode_UTF32_LE(UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - const UChar *mySource = args->source; - unsigned char *myTarget; - const UChar *sourceLimit = args->sourceLimit; - const unsigned char *targetLimit = (unsigned char *) args->targetLimit; - UChar32 ch, ch2; - unsigned int indexToWrite; - unsigned char temp[sizeof(uint32_t)]; - - if(mySource >= sourceLimit) { - /* no input, nothing to do */ - return; - } - - /* write the BOM if necessary */ - if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ (char)0xff, (char)0xfe, 0, 0 }; - ucnv_fromUWriteBytes(args->converter, - bom, 4, - &args->target, args->targetLimit, - &args->offsets, -1, - err); - args->converter->fromUnicodeStatus=0; - } - - myTarget = (unsigned char *) args->target; - temp[3] = 0; - - if (args->converter->fromUChar32) - { - ch = args->converter->fromUChar32; - args->converter->fromUChar32 = 0; - goto lowsurogate; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - - if (U16_IS_SURROGATE(ch)) { - if (U16_IS_LEAD(ch)) - { -lowsurogate: - if (mySource < sourceLimit) - { - ch2 = *mySource; - if (U16_IS_TRAIL(ch2)) { - ch = ((ch - SURROGATE_HIGH_START) << HALF_SHIFT) + ch2 + SURROGATE_LOW_BASE; - mySource++; - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* ran out of source */ - args->converter->fromUChar32 = ch; - if (args->flush) { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err = U_ILLEGAL_CHAR_FOUND; - } - break; - } - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - - /* We cannot get any larger than 10FFFF because we are coming from UTF-16 */ - temp[2] = (uint8_t) (ch >> 16 & 0x1F); - temp[1] = (uint8_t) (ch >> 8); /* unsigned cast implicitly does (ch & FF) */ - temp[0] = (uint8_t) (ch); /* unsigned cast implicitly does (ch & FF) */ - - for (indexToWrite = 0; indexToWrite <= sizeof(uint32_t) - 1; indexToWrite++) - { - if (myTarget < targetLimit) - { - *(myTarget++) = temp[indexToWrite]; - } - else - { - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = temp[indexToWrite]; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; -} - -static void -T_UConverter_fromUnicode_UTF32_LE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - const UChar *mySource = args->source; - unsigned char *myTarget; - int32_t *myOffsets; - const UChar *sourceLimit = args->sourceLimit; - const unsigned char *targetLimit = (unsigned char *) args->targetLimit; - UChar32 ch, ch2; - unsigned int indexToWrite; - unsigned char temp[sizeof(uint32_t)]; - int32_t offsetNum = 0; - - if(mySource >= sourceLimit) { - /* no input, nothing to do */ - return; - } - - /* write the BOM if necessary */ - if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { - static const char bom[]={ (char)0xff, (char)0xfe, 0, 0 }; - ucnv_fromUWriteBytes(args->converter, - bom, 4, - &args->target, args->targetLimit, - &args->offsets, -1, - err); - args->converter->fromUnicodeStatus=0; - } - - myTarget = (unsigned char *) args->target; - myOffsets = args->offsets; - temp[3] = 0; - - if (args->converter->fromUChar32) - { - ch = args->converter->fromUChar32; - args->converter->fromUChar32 = 0; - goto lowsurogate; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - - if (U16_IS_SURROGATE(ch)) { - if (U16_IS_LEAD(ch)) - { -lowsurogate: - if (mySource < sourceLimit) - { - ch2 = *mySource; - if (U16_IS_TRAIL(ch2)) - { - ch = ((ch - SURROGATE_HIGH_START) << HALF_SHIFT) + ch2 + SURROGATE_LOW_BASE; - mySource++; - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* ran out of source */ - args->converter->fromUChar32 = ch; - if (args->flush) { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err = U_ILLEGAL_CHAR_FOUND; - } - break; - } - } - else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - args->converter->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - - /* We cannot get any larger than 10FFFF because we are coming from UTF-16 */ - temp[2] = (uint8_t) (ch >> 16 & 0x1F); - temp[1] = (uint8_t) (ch >> 8); /* unsigned cast implicitly does (ch & FF) */ - temp[0] = (uint8_t) (ch); /* unsigned cast implicitly does (ch & FF) */ - - for (indexToWrite = 0; indexToWrite <= sizeof(uint32_t) - 1; indexToWrite++) - { - if (myTarget < targetLimit) - { - *(myTarget++) = temp[indexToWrite]; - *(myOffsets++) = offsetNum; - } - else - { - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = temp[indexToWrite]; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - offsetNum = offsetNum + 1 + (temp[2] != 0); - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; - args->offsets = myOffsets; -} - -static UChar32 -T_UConverter_getNextUChar_UTF32_LE(UConverterToUnicodeArgs* args, - UErrorCode* err) -{ - const uint8_t *mySource; - UChar32 myUChar; - int32_t length; - - mySource = (const uint8_t *)args->source; - if (mySource >= (const uint8_t *)args->sourceLimit) - { - /* no input */ - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; - } - - length = (int32_t)((const uint8_t *)args->sourceLimit - mySource); - if (length < 4) - { - /* got a partial character */ - uprv_memcpy(args->converter->toUBytes, mySource, length); - args->converter->toULength = (int8_t)length; - args->source = (const char *)(mySource + length); - *err = U_TRUNCATED_CHAR_FOUND; - return 0xffff; - } - - /* Don't even try to do a direct cast because the value may be on an odd address. */ - myUChar = ((UChar32)mySource[3] << 24) - | ((UChar32)mySource[2] << 16) - | ((UChar32)mySource[1] << 8) - | ((UChar32)mySource[0]); - - args->source = (const char *)(mySource + 4); - if ((uint32_t)myUChar <= MAXIMUM_UTF && !U_IS_SURROGATE(myUChar)) { - return myUChar; - } - - uprv_memcpy(args->converter->toUBytes, mySource, 4); - args->converter->toULength = 4; - - *err = U_ILLEGAL_CHAR_FOUND; - return 0xffff; -} - -static const UConverterImpl _UTF32LEImpl = { - UCNV_UTF32_LittleEndian, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - T_UConverter_toUnicode_UTF32_LE, - T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC, - T_UConverter_fromUnicode_UTF32_LE, - T_UConverter_fromUnicode_UTF32_LE_OFFSET_LOGIC, - T_UConverter_getNextUChar_UTF32_LE, - - NULL, - NULL, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -/* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ -static const UConverterStaticData _UTF32LEStaticData = { - sizeof(UConverterStaticData), - "UTF-32LE", - 1234, - UCNV_IBM, UCNV_UTF32_LittleEndian, 4, 4, - { 0xfd, 0xff, 0, 0 }, 4, FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - - -const UConverterSharedData _UTF32LEData = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32LEStaticData, &_UTF32LEImpl); - -/* UTF-32 (Detect BOM) ------------------------------------------------------ */ - -/* - * Detect a BOM at the beginning of the stream and select UTF-32BE or UTF-32LE - * accordingly. - * - * State values: - * 0 initial state - * 1 saw 00 - * 2 saw 00 00 - * 3 saw 00 00 FE - * 4 - - * 5 saw FF - * 6 saw FF FE - * 7 saw FF FE 00 - * 8 UTF-32BE mode - * 9 UTF-32LE mode - * - * During detection: state&3==number of matching bytes so far. - * - * On output, emit U+FEFF as the first code point. - */ - -static void -_UTF32Reset(UConverter *cnv, UConverterResetChoice choice) { - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode: state=0 */ - cnv->mode=0; - } - if(choice!=UCNV_RESET_TO_UNICODE) { - /* reset fromUnicode: prepare to output the UTF-32PE BOM */ - cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; - } -} - -static void -_UTF32Open(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - _UTF32Reset(cnv, UCNV_RESET_BOTH); -} - -static const char utf32BOM[8]={ 0, 0, (char)0xfe, (char)0xff, (char)0xff, (char)0xfe, 0, 0 }; - -static void -_UTF32ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv=pArgs->converter; - const char *source=pArgs->source; - const char *sourceLimit=pArgs->sourceLimit; - int32_t *offsets=pArgs->offsets; - - int32_t state, offsetDelta; - char b; - - state=cnv->mode; - - /* - * If we detect a BOM in this buffer, then we must add the BOM size to the - * offsets because the actual converter function will not see and count the BOM. - * offsetDelta will have the number of the BOM bytes that are in the current buffer. - */ - offsetDelta=0; - - while(sourcesource); - } else if(state==8) { - state=9; /* detect UTF-32LE */ - offsetDelta=(int32_t)(source-pArgs->source); - } - } else { - /* switch to UTF-32BE and pass the previous bytes */ - int32_t count=(int32_t)(source-pArgs->source); /* number of bytes from this buffer */ - - /* reset the source */ - source=pArgs->source; - - if(count==(state&3)) { - /* simple: all in the same buffer, just reset source */ - } else { - UBool oldFlush=pArgs->flush; - - /* some of the bytes are from a previous buffer, replay those first */ - pArgs->source=utf32BOM+(state&4); /* select the correct BOM */ - pArgs->sourceLimit=pArgs->source+((state&3)-count); /* replay previous bytes */ - pArgs->flush=FALSE; /* this sourceLimit is not the real source stream limit */ - - /* no offsets: bytes from previous buffer, and not enough for output */ - T_UConverter_toUnicode_UTF32_BE(pArgs, pErrorCode); - - /* restore real pointers; pArgs->source will be set in case 8/9 */ - pArgs->sourceLimit=sourceLimit; - pArgs->flush=oldFlush; - } - state=8; - continue; - } - break; - case 8: - /* call UTF-32BE */ - pArgs->source=source; - if(offsets==NULL) { - T_UConverter_toUnicode_UTF32_BE(pArgs, pErrorCode); - } else { - T_UConverter_toUnicode_UTF32_BE_OFFSET_LOGIC(pArgs, pErrorCode); - } - source=pArgs->source; - break; - case 9: - /* call UTF-32LE */ - pArgs->source=source; - if(offsets==NULL) { - T_UConverter_toUnicode_UTF32_LE(pArgs, pErrorCode); - } else { - T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC(pArgs, pErrorCode); - } - source=pArgs->source; - break; - default: - break; /* does not occur */ - } - } - - /* add BOM size to offsets - see comment at offsetDelta declaration */ - if(offsets!=NULL && offsetDelta!=0) { - int32_t *offsetsLimit=pArgs->offsets; - while(offsetssource=source; - - if(source==sourceLimit && pArgs->flush) { - /* handle truncated input */ - switch(state) { - case 0: - break; /* no input at all, nothing to do */ - case 8: - T_UConverter_toUnicode_UTF32_BE(pArgs, pErrorCode); - break; - case 9: - T_UConverter_toUnicode_UTF32_LE(pArgs, pErrorCode); - break; - default: - /* handle 0source=utf32BOM+(state&4); /* select the correct BOM */ - pArgs->sourceLimit=pArgs->source+(state&3); /* replay bytes */ - - /* no offsets: not enough for output */ - T_UConverter_toUnicode_UTF32_BE(pArgs, pErrorCode); - pArgs->source=source; - pArgs->sourceLimit=sourceLimit; - state=8; - break; - } - } - - cnv->mode=state; -} - -static UChar32 -_UTF32GetNextUChar(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - switch(pArgs->converter->mode) { - case 8: - return T_UConverter_getNextUChar_UTF32_BE(pArgs, pErrorCode); - case 9: - return T_UConverter_getNextUChar_UTF32_LE(pArgs, pErrorCode); - default: - return UCNV_GET_NEXT_UCHAR_USE_TO_U; - } -} - -static const UConverterImpl _UTF32Impl = { - UCNV_UTF32, - - NULL, - NULL, - - _UTF32Open, - NULL, - _UTF32Reset, - - _UTF32ToUnicodeWithOffsets, - _UTF32ToUnicodeWithOffsets, -#if U_IS_BIG_ENDIAN - T_UConverter_fromUnicode_UTF32_BE, - T_UConverter_fromUnicode_UTF32_BE_OFFSET_LOGIC, -#else - T_UConverter_fromUnicode_UTF32_LE, - T_UConverter_fromUnicode_UTF32_LE_OFFSET_LOGIC, -#endif - _UTF32GetNextUChar, - - NULL, /* ### TODO implement getStarters for all Unicode encodings?! */ - NULL, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - NULL, - NULL -}; - -/* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianess of UTF-32 */ -static const UConverterStaticData _UTF32StaticData = { - sizeof(UConverterStaticData), - "UTF-32", - 1236, - UCNV_IBM, UCNV_UTF32, 4, 4, -#if U_IS_BIG_ENDIAN - { 0, 0, 0xff, 0xfd }, 4, -#else - { 0xfd, 0xff, 0, 0 }, 4, -#endif - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _UTF32Data = - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32StaticData, &_UTF32Impl); - -#endif diff --git a/source/common/ucnv_u7.c b/source/common/ucnv_u7.c deleted file mode 100644 index c3b4d74..0000000 --- a/source/common/ucnv_u7.c +++ /dev/null @@ -1,1484 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_u7.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jul01 -* created by: Markus W. Scherer -* -* UTF-7 converter implementation. Used to be in ucnv_utf.c. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "cmemory.h" -#include "unicode/ucnv.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "uassert.h" - -/* UTF-7 -------------------------------------------------------------------- */ - -/* - * UTF-7 is a stateful encoding of Unicode. - * It is defined in RFC 2152. (http://www.ietf.org/rfc/rfc2152.txt) - * It was intended for use in Internet email systems, using in its bytewise - * encoding only a subset of 7-bit US-ASCII. - * UTF-7 is deprecated in favor of UTF-8/16/32 and SCSU, but still - * occasionally used. - * - * For converting Unicode to UTF-7, the RFC allows to encode some US-ASCII - * characters directly or in base64. Especially, the characters in set O - * as defined in the RFC (see below) may be encoded directly but are not - * allowed in, e.g., email headers. - * By default, the ICU UTF-7 converter encodes set O directly. - * By choosing the option "version=1", set O will be escaped instead. - * For example: - * utf7Converter=ucnv_open("UTF-7,version=1"); - * - * For details about email headers see RFC 2047. - */ - -/* - * Tests for US-ASCII characters belonging to character classes - * defined in UTF-7. - * - * Set D (directly encoded characters) consists of the following - * characters: the upper and lower case letters A through Z - * and a through z, the 10 digits 0-9, and the following nine special - * characters (note that "+" and "=" are omitted): - * '(),-./:? - * - * Set O (optional direct characters) consists of the following - * characters (note that "\" and "~" are omitted): - * !"#$%&*;<=>@[]^_`{|} - * - * According to the rules in RFC 2152, the byte values for the following - * US-ASCII characters are not used in UTF-7 and are therefore illegal: - * - all C0 control codes except for CR LF TAB - * - BACKSLASH - * - TILDE - * - DEL - * - all codes beyond US-ASCII, i.e. all >127 - */ -#define inSetD(c) \ - ((uint8_t)((c)-97)<26 || (uint8_t)((c)-65)<26 || /* letters */ \ - (uint8_t)((c)-48)<10 || /* digits */ \ - (uint8_t)((c)-39)<3 || /* '() */ \ - (uint8_t)((c)-44)<4 || /* ,-./ */ \ - (c)==58 || (c)==63 /* :? */ \ - ) - -#define inSetO(c) \ - ((uint8_t)((c)-33)<6 || /* !"#$%& */ \ - (uint8_t)((c)-59)<4 || /* ;<=> */ \ - (uint8_t)((c)-93)<4 || /* ]^_` */ \ - (uint8_t)((c)-123)<3 || /* {|} */ \ - (c)==42 || (c)==64 || (c)==91 /* *@[ */ \ - ) - -#define isCRLFTAB(c) ((c)==13 || (c)==10 || (c)==9) -#define isCRLFSPTAB(c) ((c)==32 || (c)==13 || (c)==10 || (c)==9) - -#define PLUS 43 -#define MINUS 45 -#define BACKSLASH 92 -#define TILDE 126 - -/* legal byte values: all US-ASCII graphic characters from space to before tilde, and CR LF TAB */ -#define isLegalUTF7(c) (((uint8_t)((c)-32)<94 && (c)!=BACKSLASH) || isCRLFTAB(c)) - -/* encode directly sets D and O and CR LF SP TAB */ -static const UBool encodeDirectlyMaximum[128]={ - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 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, 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, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 -}; - -/* encode directly set D and CR LF SP TAB but not set O */ -static const UBool encodeDirectlyRestricted[128]={ - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, - - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 -}; - -static const uint8_t -toBase64[64]={ - /* A-Z */ - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* a-z */ - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - /* 0-9 */ - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* +/ */ - 43, 47 -}; - -static const int8_t -fromBase64[128]={ - /* C0 controls, -1 for legal ones (CR LF TAB), -3 for illegal ones */ - -3, -3, -3, -3, -3, -3, -3, -3, -3, -1, -1, -3, -3, -1, -3, -3, - -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, - - /* general punctuation with + and / and a special value (-2) for - */ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -2, -1, 63, - /* digits */ - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, - - /* A-Z */ - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -3, -1, -1, -1, - - /* a-z */ - -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -3, -3 -}; - -/* - * converter status values: - * - * toUnicodeStatus: - * 24 inDirectMode (boolean) - * 23..16 base64Counter (-1..7) - * 15..0 bits (up to 14 bits incoming base64) - * - * fromUnicodeStatus: - * 31..28 version (0: set O direct 1: set O escaped) - * 24 inDirectMode (boolean) - * 23..16 base64Counter (0..2) - * 7..0 bits (6 bits outgoing base64) - * - */ - -static void -_UTF7Reset(UConverter *cnv, UConverterResetChoice choice) { - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode */ - cnv->toUnicodeStatus=0x1000000; /* inDirectMode=TRUE */ - cnv->toULength=0; - } - if(choice!=UCNV_RESET_TO_UNICODE) { - /* reset fromUnicode */ - cnv->fromUnicodeStatus=(cnv->fromUnicodeStatus&0xf0000000)|0x1000000; /* keep version, inDirectMode=TRUE */ - } -} - -static void -_UTF7Open(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - if(UCNV_GET_VERSION(cnv)<=1) { - /* TODO(markus): Should just use cnv->options rather than copying the version number. */ - cnv->fromUnicodeStatus=UCNV_GET_VERSION(cnv)<<28; - _UTF7Reset(cnv, UCNV_RESET_BOTH); - } else { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - } -} - -static void -_UTF7ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const uint8_t *source, *sourceLimit; - UChar *target; - const UChar *targetLimit; - int32_t *offsets; - - uint8_t *bytes; - uint8_t byteIndex; - - int32_t length, targetCapacity; - - /* UTF-7 state */ - uint16_t bits; - int8_t base64Counter; - UBool inDirectMode; - - int8_t base64Value; - - int32_t sourceIndex, nextSourceIndex; - - uint8_t b; - /* set up the local pointers */ - cnv=pArgs->converter; - - source=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - target=pArgs->target; - targetLimit=pArgs->targetLimit; - offsets=pArgs->offsets; - /* get the state machine state */ - { - uint32_t status=cnv->toUnicodeStatus; - inDirectMode=(UBool)((status>>24)&1); - base64Counter=(int8_t)(status>>16); - bits=(uint16_t)status; - } - bytes=cnv->toUBytes; - byteIndex=cnv->toULength; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex=byteIndex==0 ? 0 : -1; - nextSourceIndex=0; - - if(inDirectMode) { -directMode: - /* - * In Direct Mode, most US-ASCII characters are encoded directly, i.e., - * with their US-ASCII byte values. - * Backslash and Tilde and most control characters are not allowed in UTF-7. - * A plus sign starts Unicode (or "escape") Mode. - * - * In Direct Mode, only the sourceIndex is used. - */ - byteIndex=0; - length=(int32_t)(sourceLimit-source); - targetCapacity=(int32_t)(targetLimit-target); - if(length>targetCapacity) { - length=targetCapacity; - } - while(length>0) { - b=*source++; - if(!isLegalUTF7(b)) { - /* illegal */ - bytes[0]=b; - byteIndex=1; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else if(b!=PLUS) { - /* write directly encoded character */ - *target++=b; - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - } else /* PLUS */ { - /* switch to Unicode mode */ - nextSourceIndex=++sourceIndex; - inDirectMode=FALSE; - byteIndex=0; - bits=0; - base64Counter=-1; - goto unicodeMode; - } - --length; - } - if(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { -unicodeMode: - /* - * In Unicode (or "escape") Mode, UTF-16BE is base64-encoded. - * The base64 sequence ends with any character that is not in the base64 alphabet. - * A terminating minus sign is consumed. - * - * In Unicode Mode, the sourceIndex has the index to the start of the current - * base64 bytes, while nextSourceIndex is precisely parallel to source, - * keeping the index to the following byte. - * Note that in 2 out of 3 cases, UChars overlap within a base64 byte. - */ - while(source=126 || (base64Value=fromBase64[b])==-3 || base64Value==-1) { - /* either - * base64Value==-1 for any legal character except base64 and minus sign, or - * base64Value==-3 for illegal characters: - * 1. In either case, leave Unicode mode. - * 2.1. If we ended with an incomplete UChar or none after the +, then - * generate an error for the preceding erroneous sequence and deal with - * the current (possibly illegal) character next time through. - * 2.2. Else the current char comes after a complete UChar, which was already - * pushed to the output buf, so: - * 2.2.1. If the current char is legal, just save it for processing next time. - * It may be for example, a plus which we need to deal with in direct mode. - * 2.2.2. Else if the current char is illegal, we might as well deal with it here. - */ - inDirectMode=TRUE; - if(base64Counter==-1) { - /* illegal: + immediately followed by something other than base64 or minus sign */ - /* include the plus sign in the reported sequence, but not the subsequent char */ - --source; - bytes[0]=PLUS; - byteIndex=1; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else if(bits!=0) { - /* bits are illegally left over, a UChar is incomplete */ - /* don't include current char (legal or illegal) in error seq */ - --source; - --byteIndex; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else { - /* previous UChar was complete */ - if(base64Value==-3) { - /* current character is illegal, deal with it here */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else { - /* un-read the current character in case it is a plus sign */ - --source; - sourceIndex=nextSourceIndex-1; - goto directMode; - } - } - } else if(base64Value>=0) { - /* collect base64 bytes into UChars */ - switch(base64Counter) { - case -1: /* -1 is immediately after the + */ - case 0: - bits=base64Value; - base64Counter=1; - break; - case 1: - case 3: - case 4: - case 6: - bits=(uint16_t)((bits<<6)|base64Value); - ++base64Counter; - break; - case 2: - *target++=(UChar)((bits<<4)|(base64Value>>2)); - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex-1; - } - bytes[0]=b; /* keep this byte in case an error occurs */ - byteIndex=1; - bits=(uint16_t)(base64Value&3); - base64Counter=3; - break; - case 5: - *target++=(UChar)((bits<<2)|(base64Value>>4)); - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex-1; - } - bytes[0]=b; /* keep this byte in case an error occurs */ - byteIndex=1; - bits=(uint16_t)(base64Value&15); - base64Counter=6; - break; - case 7: - *target++=(UChar)((bits<<6)|base64Value); - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex; - } - byteIndex=0; - bits=0; - base64Counter=0; - break; - default: - /* will never occur */ - break; - } - } else /*base64Value==-2*/ { - /* minus sign terminates the base64 sequence */ - inDirectMode=TRUE; - if(base64Counter==-1) { - /* +- i.e. a minus immediately following a plus */ - *target++=PLUS; - if(offsets!=NULL) { - *offsets++=sourceIndex-1; - } - } else { - /* absorb the minus and leave the Unicode Mode */ - if(bits!=0) { - /* bits are illegally left over, a UChar is incomplete */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } - } - sourceIndex=nextSourceIndex; - goto directMode; - } - } else { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - - if(U_SUCCESS(*pErrorCode) && pArgs->flush && source==sourceLimit && bits==0) { - /* - * if we are in Unicode mode, then the byteIndex might not be 0, - * but that is ok if bits==0 - * -> we set byteIndex=0 at the end of the stream to avoid a truncated error - * (not true for IMAP-mailbox-name where we must end in direct mode) - */ - byteIndex=0; - } - - /* set the converter state back into UConverter */ - cnv->toUnicodeStatus=((uint32_t)inDirectMode<<24)|((uint32_t)((uint8_t)base64Counter)<<16)|(uint32_t)bits; - cnv->toULength=byteIndex; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; - return; -} - -static void -_UTF7FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const UChar *source, *sourceLimit; - uint8_t *target, *targetLimit; - int32_t *offsets; - - int32_t length, targetCapacity, sourceIndex; - UChar c; - - /* UTF-7 state */ - const UBool *encodeDirectly; - uint8_t bits; - int8_t base64Counter; - UBool inDirectMode; - - /* set up the local pointers */ - cnv=pArgs->converter; - - /* set up the local pointers */ - source=pArgs->source; - sourceLimit=pArgs->sourceLimit; - target=(uint8_t *)pArgs->target; - targetLimit=(uint8_t *)pArgs->targetLimit; - offsets=pArgs->offsets; - - /* get the state machine state */ - { - uint32_t status=cnv->fromUnicodeStatus; - encodeDirectly= status<0x10000000 ? encodeDirectlyMaximum : encodeDirectlyRestricted; - inDirectMode=(UBool)((status>>24)&1); - base64Counter=(int8_t)(status>>16); - bits=(uint8_t)status; - U_ASSERT(bits<=UPRV_LENGTHOF(toBase64)); - } - - /* UTF-7 always encodes UTF-16 code units, therefore we need only a simple sourceIndex */ - sourceIndex=0; - - if(inDirectMode) { -directMode: - length=(int32_t)(sourceLimit-source); - targetCapacity=(int32_t)(targetLimit-target); - if(length>targetCapacity) { - length=targetCapacity; - } - while(length>0) { - c=*source++; - /* currently always encode CR LF SP TAB directly */ - if(c<=127 && encodeDirectly[c]) { - /* encode directly */ - *target++=(uint8_t)c; - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - } else if(c==PLUS) { - /* output +- for + */ - *target++=PLUS; - if(targetcharErrorBuffer[0]=MINUS; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } else { - /* un-read this character and switch to Unicode Mode */ - --source; - *target++=PLUS; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - inDirectMode=FALSE; - base64Counter=0; - goto unicodeMode; - } - --length; - } - if(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { -unicodeMode: - while(sourcecharErrorBuffer[0]=MINUS; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - goto directMode; - } else { - /* - * base64 this character: - * Output 2 or 3 base64 bytes for the remaining bits of the previous character - * and the bits of this character, each implicitly in UTF-16BE. - * - * Here, bits is an 8-bit variable because only 6 bits need to be kept from one - * character to the next. The actual 2 or 4 bits are shifted to the left edge - * of the 6-bits field 5..0 to make the termination of the base64 sequence easier. - */ - switch(base64Counter) { - case 0: - *target++=toBase64[c>>10]; - if(target>4)&0x3f]; - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - cnv->charErrorBuffer[0]=toBase64[(c>>4)&0x3f]; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=(uint8_t)((c&15)<<2); - base64Counter=1; - break; - case 1: - *target++=toBase64[bits|(c>>14)]; - if(target>8)&0x3f]; - if(target>2)&0x3f]; - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - cnv->charErrorBuffer[0]=toBase64[(c>>2)&0x3f]; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - cnv->charErrorBuffer[0]=toBase64[(c>>8)&0x3f]; - cnv->charErrorBuffer[1]=toBase64[(c>>2)&0x3f]; - cnv->charErrorBufferLength=2; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=(uint8_t)((c&3)<<4); - base64Counter=2; - break; - case 2: - *target++=toBase64[bits|(c>>12)]; - if(target>6)&0x3f]; - if(targetcharErrorBuffer[0]=toBase64[c&0x3f]; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - cnv->charErrorBuffer[0]=toBase64[(c>>6)&0x3f]; - cnv->charErrorBuffer[1]=toBase64[c&0x3f]; - cnv->charErrorBufferLength=2; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=0; - base64Counter=0; - break; - default: - /* will never occur */ - break; - } - } - } else { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - - if(pArgs->flush && source>=sourceLimit) { - /* flush remaining bits to the target */ - if(!inDirectMode) { - if (base64Counter!=0) { - if(targetcharErrorBuffer[cnv->charErrorBufferLength++]=toBase64[bits]; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } - /* Add final MINUS to terminate unicodeMode */ - if(targetcharErrorBuffer[cnv->charErrorBufferLength++]=MINUS; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } - /* reset the state for the next conversion */ - cnv->fromUnicodeStatus=(cnv->fromUnicodeStatus&0xf0000000)|0x1000000; /* keep version, inDirectMode=TRUE */ - } else { - /* set the converter state back into UConverter */ - cnv->fromUnicodeStatus= - (cnv->fromUnicodeStatus&0xf0000000)| /* keep version*/ - ((uint32_t)inDirectMode<<24)|((uint32_t)base64Counter<<16)|(uint32_t)bits; - } - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - pArgs->offsets=offsets; - return; -} - -static const char * -_UTF7GetName(const UConverter *cnv) { - switch(cnv->fromUnicodeStatus>>28) { - case 1: - return "UTF-7,version=1"; - default: - return "UTF-7"; - } -} - -static const UConverterImpl _UTF7Impl={ - UCNV_UTF7, - - NULL, - NULL, - - _UTF7Open, - NULL, - _UTF7Reset, - - _UTF7ToUnicodeWithOffsets, - _UTF7ToUnicodeWithOffsets, - _UTF7FromUnicodeWithOffsets, - _UTF7FromUnicodeWithOffsets, - NULL, - - NULL, - _UTF7GetName, - NULL, /* we don't need writeSub() because we never call a callback at fromUnicode() */ - NULL, - ucnv_getCompleteUnicodeSet, - - NULL, - NULL -}; - -static const UConverterStaticData _UTF7StaticData={ - sizeof(UConverterStaticData), - "UTF-7", - 0, /* TODO CCSID for UTF-7 */ - UCNV_IBM, UCNV_UTF7, - 1, 4, - { 0x3f, 0, 0, 0 }, 1, /* the subchar is not used */ - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _UTF7Data= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF7StaticData, &_UTF7Impl); - -/* IMAP mailbox name encoding ----------------------------------------------- */ - -/* - * RFC 2060: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 - * http://www.ietf.org/rfc/rfc2060.txt - * - * 5.1.3. Mailbox International Naming Convention - * - * By convention, international mailbox names are specified using a - * modified version of the UTF-7 encoding described in [UTF-7]. The - * purpose of these modifications is to correct the following problems - * with UTF-7: - * - * 1) UTF-7 uses the "+" character for shifting; this conflicts with - * the common use of "+" in mailbox names, in particular USENET - * newsgroup names. - * - * 2) UTF-7's encoding is BASE64 which uses the "/" character; this - * conflicts with the use of "/" as a popular hierarchy delimiter. - * - * 3) UTF-7 prohibits the unencoded usage of "\"; this conflicts with - * the use of "\" as a popular hierarchy delimiter. - * - * 4) UTF-7 prohibits the unencoded usage of "~"; this conflicts with - * the use of "~" in some servers as a home directory indicator. - * - * 5) UTF-7 permits multiple alternate forms to represent the same - * string; in particular, printable US-ASCII chararacters can be - * represented in encoded form. - * - * In modified UTF-7, printable US-ASCII characters except for "&" - * represent themselves; that is, characters with octet values 0x20-0x25 - * and 0x27-0x7e. The character "&" (0x26) is represented by the two- - * octet sequence "&-". - * - * All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all - * Unicode 16-bit octets) are represented in modified BASE64, with a - * further modification from [UTF-7] that "," is used instead of "/". - * Modified BASE64 MUST NOT be used to represent any printing US-ASCII - * character which can represent itself. - * - * "&" is used to shift to modified BASE64 and "-" to shift back to US- - * ASCII. All names start in US-ASCII, and MUST end in US-ASCII (that - * is, a name that ends with a Unicode 16-bit octet MUST end with a "- - * "). - * - * For example, here is a mailbox name which mixes English, Japanese, - * and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw- - */ - -/* - * Tests for US-ASCII characters belonging to character classes - * defined in UTF-7. - * - * Set D (directly encoded characters) consists of the following - * characters: the upper and lower case letters A through Z - * and a through z, the 10 digits 0-9, and the following nine special - * characters (note that "+" and "=" are omitted): - * '(),-./:? - * - * Set O (optional direct characters) consists of the following - * characters (note that "\" and "~" are omitted): - * !"#$%&*;<=>@[]^_`{|} - * - * According to the rules in RFC 2152, the byte values for the following - * US-ASCII characters are not used in UTF-7 and are therefore illegal: - * - all C0 control codes except for CR LF TAB - * - BACKSLASH - * - TILDE - * - DEL - * - all codes beyond US-ASCII, i.e. all >127 - */ - -/* uses '&' not '+' to start a base64 sequence */ -#define AMPERSAND 0x26 -#define COMMA 0x2c -#define SLASH 0x2f - -/* legal byte values: all US-ASCII graphic characters 0x20..0x7e */ -#define isLegalIMAP(c) (0x20<=(c) && (c)<=0x7e) - -/* direct-encode all of printable ASCII 0x20..0x7e except '&' 0x26 */ -#define inSetDIMAP(c) (isLegalIMAP(c) && c!=AMPERSAND) - -#define TO_BASE64_IMAP(n) ((n)<63 ? toBase64[n] : COMMA) -#define FROM_BASE64_IMAP(c) ((c)==COMMA ? 63 : (c)==SLASH ? -1 : fromBase64[c]) - -/* - * converter status values: - * - * toUnicodeStatus: - * 24 inDirectMode (boolean) - * 23..16 base64Counter (-1..7) - * 15..0 bits (up to 14 bits incoming base64) - * - * fromUnicodeStatus: - * 24 inDirectMode (boolean) - * 23..16 base64Counter (0..2) - * 7..0 bits (6 bits outgoing base64) - * - * ignore bits 31..25 - */ - -static void -_IMAPToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const uint8_t *source, *sourceLimit; - UChar *target; - const UChar *targetLimit; - int32_t *offsets; - - uint8_t *bytes; - uint8_t byteIndex; - - int32_t length, targetCapacity; - - /* UTF-7 state */ - uint16_t bits; - int8_t base64Counter; - UBool inDirectMode; - - int8_t base64Value; - - int32_t sourceIndex, nextSourceIndex; - - UChar c; - uint8_t b; - - /* set up the local pointers */ - cnv=pArgs->converter; - - source=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - target=pArgs->target; - targetLimit=pArgs->targetLimit; - offsets=pArgs->offsets; - /* get the state machine state */ - { - uint32_t status=cnv->toUnicodeStatus; - inDirectMode=(UBool)((status>>24)&1); - base64Counter=(int8_t)(status>>16); - bits=(uint16_t)status; - } - bytes=cnv->toUBytes; - byteIndex=cnv->toULength; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex=byteIndex==0 ? 0 : -1; - nextSourceIndex=0; - - if(inDirectMode) { -directMode: - /* - * In Direct Mode, US-ASCII characters are encoded directly, i.e., - * with their US-ASCII byte values. - * An ampersand starts Unicode (or "escape") Mode. - * - * In Direct Mode, only the sourceIndex is used. - */ - byteIndex=0; - length=(int32_t)(sourceLimit-source); - targetCapacity=(int32_t)(targetLimit-target); - if(length>targetCapacity) { - length=targetCapacity; - } - while(length>0) { - b=*source++; - if(!isLegalIMAP(b)) { - /* illegal */ - bytes[0]=b; - byteIndex=1; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else if(b!=AMPERSAND) { - /* write directly encoded character */ - *target++=b; - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - } else /* AMPERSAND */ { - /* switch to Unicode mode */ - nextSourceIndex=++sourceIndex; - inDirectMode=FALSE; - byteIndex=0; - bits=0; - base64Counter=-1; - goto unicodeMode; - } - --length; - } - if(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { -unicodeMode: - /* - * In Unicode (or "escape") Mode, UTF-16BE is base64-encoded. - * The base64 sequence ends with any character that is not in the base64 alphabet. - * A terminating minus sign is consumed. - * US-ASCII must not be base64-ed. - * - * In Unicode Mode, the sourceIndex has the index to the start of the current - * base64 bytes, while nextSourceIndex is precisely parallel to source, - * keeping the index to the following byte. - * Note that in 2 out of 3 cases, UChars overlap within a base64 byte. - */ - while(source0x7e) { - /* illegal - test other illegal US-ASCII values by base64Value==-3 */ - inDirectMode=TRUE; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } else if((base64Value=FROM_BASE64_IMAP(b))>=0) { - /* collect base64 bytes into UChars */ - switch(base64Counter) { - case -1: /* -1 is immediately after the & */ - case 0: - bits=base64Value; - base64Counter=1; - break; - case 1: - case 3: - case 4: - case 6: - bits=(uint16_t)((bits<<6)|base64Value); - ++base64Counter; - break; - case 2: - c=(UChar)((bits<<4)|(base64Value>>2)); - if(isLegalIMAP(c)) { - /* illegal */ - inDirectMode=TRUE; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - goto endloop; - } - *target++=c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex-1; - } - bytes[0]=b; /* keep this byte in case an error occurs */ - byteIndex=1; - bits=(uint16_t)(base64Value&3); - base64Counter=3; - break; - case 5: - c=(UChar)((bits<<2)|(base64Value>>4)); - if(isLegalIMAP(c)) { - /* illegal */ - inDirectMode=TRUE; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - goto endloop; - } - *target++=c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex-1; - } - bytes[0]=b; /* keep this byte in case an error occurs */ - byteIndex=1; - bits=(uint16_t)(base64Value&15); - base64Counter=6; - break; - case 7: - c=(UChar)((bits<<6)|base64Value); - if(isLegalIMAP(c)) { - /* illegal */ - inDirectMode=TRUE; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - goto endloop; - } - *target++=c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - sourceIndex=nextSourceIndex; - } - byteIndex=0; - bits=0; - base64Counter=0; - break; - default: - /* will never occur */ - break; - } - } else if(base64Value==-2) { - /* minus sign terminates the base64 sequence */ - inDirectMode=TRUE; - if(base64Counter==-1) { - /* &- i.e. a minus immediately following an ampersand */ - *target++=AMPERSAND; - if(offsets!=NULL) { - *offsets++=sourceIndex-1; - } - } else { - /* absorb the minus and leave the Unicode Mode */ - if(bits!=0 || (base64Counter!=0 && base64Counter!=3 && base64Counter!=6)) { - /* bits are illegally left over, a UChar is incomplete */ - /* base64Counter other than 0, 3, 6 means non-minimal zero-padding, also illegal */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } - } - sourceIndex=nextSourceIndex; - goto directMode; - } else { - if(base64Counter==-1) { - /* illegal: & immediately followed by something other than base64 or minus sign */ - /* include the ampersand in the reported sequence */ - --sourceIndex; - bytes[0]=AMPERSAND; - bytes[1]=b; - byteIndex=2; - } - /* base64Value==-1 for characters that are illegal only in Unicode mode */ - /* base64Value==-3 for illegal characters */ - /* illegal */ - inDirectMode=TRUE; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } - } else { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } -endloop: - - /* - * the end of the input stream and detection of truncated input - * are handled by the framework, but here we must check if we are in Unicode - * mode and byteIndex==0 because we must end in direct mode - * - * conditions: - * successful - * in Unicode mode and byteIndex==0 - * end of input and no truncated input - */ - if( U_SUCCESS(*pErrorCode) && - !inDirectMode && byteIndex==0 && - pArgs->flush && source>=sourceLimit - ) { - if(base64Counter==-1) { - /* & at the very end of the input */ - /* make the ampersand the reported sequence */ - bytes[0]=AMPERSAND; - byteIndex=1; - } - /* else if(base64Counter!=-1) byteIndex remains 0 because there is no particular byte sequence */ - - inDirectMode=TRUE; /* avoid looping */ - *pErrorCode=U_TRUNCATED_CHAR_FOUND; - } - - /* set the converter state back into UConverter */ - cnv->toUnicodeStatus=((uint32_t)inDirectMode<<24)|((uint32_t)((uint8_t)base64Counter)<<16)|(uint32_t)bits; - cnv->toULength=byteIndex; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; - return; -} - -static void -_IMAPFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const UChar *source, *sourceLimit; - uint8_t *target, *targetLimit; - int32_t *offsets; - - int32_t length, targetCapacity, sourceIndex; - UChar c; - uint8_t b; - - /* UTF-7 state */ - uint8_t bits; - int8_t base64Counter; - UBool inDirectMode; - - /* set up the local pointers */ - cnv=pArgs->converter; - - /* set up the local pointers */ - source=pArgs->source; - sourceLimit=pArgs->sourceLimit; - target=(uint8_t *)pArgs->target; - targetLimit=(uint8_t *)pArgs->targetLimit; - offsets=pArgs->offsets; - - /* get the state machine state */ - { - uint32_t status=cnv->fromUnicodeStatus; - inDirectMode=(UBool)((status>>24)&1); - base64Counter=(int8_t)(status>>16); - bits=(uint8_t)status; - } - - /* UTF-7 always encodes UTF-16 code units, therefore we need only a simple sourceIndex */ - sourceIndex=0; - - if(inDirectMode) { -directMode: - length=(int32_t)(sourceLimit-source); - targetCapacity=(int32_t)(targetLimit-target); - if(length>targetCapacity) { - length=targetCapacity; - } - while(length>0) { - c=*source++; - /* encode 0x20..0x7e except '&' directly */ - if(inSetDIMAP(c)) { - /* encode directly */ - *target++=(uint8_t)c; - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - } else if(c==AMPERSAND) { - /* output &- for & */ - *target++=AMPERSAND; - if(targetcharErrorBuffer[0]=MINUS; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } else { - /* un-read this character and switch to Unicode Mode */ - --source; - *target++=AMPERSAND; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - inDirectMode=FALSE; - base64Counter=0; - goto unicodeMode; - } - --length; - } - if(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { -unicodeMode: - while(sourcecharErrorBuffer[0]=MINUS; - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - goto directMode; - } else { - /* - * base64 this character: - * Output 2 or 3 base64 bytes for the remaining bits of the previous character - * and the bits of this character, each implicitly in UTF-16BE. - * - * Here, bits is an 8-bit variable because only 6 bits need to be kept from one - * character to the next. The actual 2 or 4 bits are shifted to the left edge - * of the 6-bits field 5..0 to make the termination of the base64 sequence easier. - */ - switch(base64Counter) { - case 0: - b=(uint8_t)(c>>10); - *target++=TO_BASE64_IMAP(b); - if(target>4)&0x3f); - *target++=TO_BASE64_IMAP(b); - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - b=(uint8_t)((c>>4)&0x3f); - cnv->charErrorBuffer[0]=TO_BASE64_IMAP(b); - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=(uint8_t)((c&15)<<2); - base64Counter=1; - break; - case 1: - b=(uint8_t)(bits|(c>>14)); - *target++=TO_BASE64_IMAP(b); - if(target>8)&0x3f); - *target++=TO_BASE64_IMAP(b); - if(target>2)&0x3f); - *target++=TO_BASE64_IMAP(b); - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex++; - } - b=(uint8_t)((c>>2)&0x3f); - cnv->charErrorBuffer[0]=TO_BASE64_IMAP(b); - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - b=(uint8_t)((c>>8)&0x3f); - cnv->charErrorBuffer[0]=TO_BASE64_IMAP(b); - b=(uint8_t)((c>>2)&0x3f); - cnv->charErrorBuffer[1]=TO_BASE64_IMAP(b); - cnv->charErrorBufferLength=2; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=(uint8_t)((c&3)<<4); - base64Counter=2; - break; - case 2: - b=(uint8_t)(bits|(c>>12)); - *target++=TO_BASE64_IMAP(b); - if(target>6)&0x3f); - *target++=TO_BASE64_IMAP(b); - if(targetcharErrorBuffer[0]=TO_BASE64_IMAP(b); - cnv->charErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } else { - if(offsets!=NULL) { - *offsets++=sourceIndex++; - } - b=(uint8_t)((c>>6)&0x3f); - cnv->charErrorBuffer[0]=TO_BASE64_IMAP(b); - b=(uint8_t)(c&0x3f); - cnv->charErrorBuffer[1]=TO_BASE64_IMAP(b); - cnv->charErrorBufferLength=2; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - bits=0; - base64Counter=0; - break; - default: - /* will never occur */ - break; - } - } - } else { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - - if(pArgs->flush && source>=sourceLimit) { - /* flush remaining bits to the target */ - if(!inDirectMode) { - if(base64Counter!=0) { - if(targetcharErrorBuffer[cnv->charErrorBufferLength++]=TO_BASE64_IMAP(bits); - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } - /* need to terminate with a minus */ - if(targetcharErrorBuffer[cnv->charErrorBufferLength++]=MINUS; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - } - /* reset the state for the next conversion */ - cnv->fromUnicodeStatus=(cnv->fromUnicodeStatus&0xf0000000)|0x1000000; /* keep version, inDirectMode=TRUE */ - } else { - /* set the converter state back into UConverter */ - cnv->fromUnicodeStatus= - (cnv->fromUnicodeStatus&0xf0000000)| /* keep version*/ - ((uint32_t)inDirectMode<<24)|((uint32_t)base64Counter<<16)|(uint32_t)bits; - } - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - pArgs->offsets=offsets; - return; -} - -static const UConverterImpl _IMAPImpl={ - UCNV_IMAP_MAILBOX, - - NULL, - NULL, - - _UTF7Open, - NULL, - _UTF7Reset, - - _IMAPToUnicodeWithOffsets, - _IMAPToUnicodeWithOffsets, - _IMAPFromUnicodeWithOffsets, - _IMAPFromUnicodeWithOffsets, - NULL, - - NULL, - NULL, - NULL, /* we don't need writeSub() because we never call a callback at fromUnicode() */ - NULL, - ucnv_getCompleteUnicodeSet -}; - -static const UConverterStaticData _IMAPStaticData={ - sizeof(UConverterStaticData), - "IMAP-mailbox-name", - 0, /* TODO CCSID for IMAP-mailbox-name */ - UCNV_IBM, UCNV_IMAP_MAILBOX, - 1, 4, - { 0x3f, 0, 0, 0 }, 1, /* the subchar is not used */ - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _IMAPData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_IMAPStaticData, &_IMAPImpl); - -#endif diff --git a/source/common/ucnv_u8.c b/source/common/ucnv_u8.c deleted file mode 100644 index 0258347..0000000 --- a/source/common/ucnv_u8.c +++ /dev/null @@ -1,1098 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnv_u8.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jul01 -* created by: Markus W. Scherer -* -* UTF-8 converter implementation. Used to be in ucnv_utf.c. -* -* Also, CESU-8 implementation, see UTR 26. -* The CESU-8 converter uses all the same functions as the -* UTF-8 converter, with a branch for converting supplementary code points. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/utf.h" -#include "unicode/utf8.h" -#include "unicode/utf16.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cmemory.h" - -/* Prototypes --------------------------------------------------------------- */ - -/* Keep these here to make finicky compilers happy */ - -U_CFUNC void ucnv_fromUnicode_UTF8(UConverterFromUnicodeArgs *args, - UErrorCode *err); -U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs *args, - UErrorCode *err); - - -/* UTF-8 -------------------------------------------------------------------- */ - -/* UTF-8 Conversion DATA - * for more information see Unicode Standard 2.0, Transformation Formats Appendix A-9 - */ -/*static const uint32_t REPLACEMENT_CHARACTER = 0x0000FFFD;*/ -#define MAXIMUM_UCS2 0x0000FFFF -#define MAXIMUM_UTF 0x0010FFFF -#define MAXIMUM_UCS4 0x7FFFFFFF -#define HALF_SHIFT 10 -#define HALF_BASE 0x0010000 -#define HALF_MASK 0x3FF -#define SURROGATE_HIGH_START 0xD800 -#define SURROGATE_HIGH_END 0xDBFF -#define SURROGATE_LOW_START 0xDC00 -#define SURROGATE_LOW_END 0xDFFF - -/* -SURROGATE_LOW_START + HALF_BASE */ -#define SURROGATE_LOW_BASE 9216 - -static const uint32_t offsetsFromUTF8[7] = {0, - (uint32_t) 0x00000000, (uint32_t) 0x00003080, (uint32_t) 0x000E2080, - (uint32_t) 0x03C82080, (uint32_t) 0xFA082080, (uint32_t) 0x82082080 -}; - -/* END OF UTF-8 Conversion DATA */ - -static const int8_t bytesFromUTF8[256] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0 -}; - -/* - * Starting with Unicode 3.0.1: - * UTF-8 byte sequences of length N _must_ encode code points of or above utf8_minChar32[N]; - * byte sequences with more than 4 bytes are illegal in UTF-8, - * which is tested with impossible values for them - */ -static const uint32_t -utf8_minChar32[7]={ 0, 0, 0x80, 0x800, 0x10000, 0xffffffff, 0xffffffff }; - -static UBool hasCESU8Data(const UConverter *cnv) -{ -#if UCONFIG_ONLY_HTML_CONVERSION - return FALSE; -#else - return (UBool)(cnv->sharedData == &_CESU8Data); -#endif -} - -static void ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - UConverter *cnv = args->converter; - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = cnv->toUBytes; - UBool isCESU8 = hasCESU8Data(cnv); - uint32_t ch, ch2 = 0; - int32_t i, inBytes; - - /* Restore size of current sequence */ - if (cnv->toUnicodeStatus && myTarget < targetLimit) - { - inBytes = cnv->mode; /* restore # of bytes to consume */ - i = cnv->toULength; /* restore # of bytes consumed */ - cnv->toULength = 0; - - ch = cnv->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/ - cnv->toUnicodeStatus = 0; - goto morebytes; - } - - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - if (ch < 0x80) /* Simple case */ - { - *(myTarget++) = (UChar) ch; - } - else - { - /* store the first char */ - toUBytes[0] = (char)ch; - inBytes = bytesFromUTF8[ch]; /* lookup current sequence length */ - i = 1; - -morebytes: - while (i < inBytes) - { - if (mySource < sourceLimit) - { - toUBytes[i] = (char) (ch2 = *mySource); - if (!U8_IS_TRAIL(ch2)) - { - break; /* i < inBytes */ - } - ch = (ch << 6) + ch2; - ++mySource; - i++; - } - else - { - /* stores a partially calculated target*/ - cnv->toUnicodeStatus = ch; - cnv->mode = inBytes; - cnv->toULength = (int8_t) i; - goto donefornow; - } - } - - /* Remove the accumulated high bits */ - ch -= offsetsFromUTF8[inBytes]; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[i] && - (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) - { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) - { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - } - else - { - /* write out the surrogates */ - ch -= HALF_BASE; - *(myTarget++) = (UChar) ((ch >> HALF_SHIFT) + SURROGATE_HIGH_START); - ch = (ch & HALF_MASK) + SURROGATE_LOW_START; - if (myTarget < targetLimit) - { - *(myTarget++) = (UChar)ch; - } - else - { - /* Put in overflow buffer (not handled here) */ - cnv->UCharErrorBuffer[0] = (UChar) ch; - cnv->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - } - } - else - { - cnv->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; -} - -static void ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeArgs * args, - UErrorCode * err) -{ - UConverter *cnv = args->converter; - const unsigned char *mySource = (unsigned char *) args->source; - UChar *myTarget = args->target; - int32_t *myOffsets = args->offsets; - int32_t offsetNum = 0; - const unsigned char *sourceLimit = (unsigned char *) args->sourceLimit; - const UChar *targetLimit = args->targetLimit; - unsigned char *toUBytes = cnv->toUBytes; - UBool isCESU8 = hasCESU8Data(cnv); - uint32_t ch, ch2 = 0; - int32_t i, inBytes; - - /* Restore size of current sequence */ - if (cnv->toUnicodeStatus && myTarget < targetLimit) - { - inBytes = cnv->mode; /* restore # of bytes to consume */ - i = cnv->toULength; /* restore # of bytes consumed */ - cnv->toULength = 0; - - ch = cnv->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/ - cnv->toUnicodeStatus = 0; - goto morebytes; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - if (ch < 0x80) /* Simple case */ - { - *(myTarget++) = (UChar) ch; - *(myOffsets++) = offsetNum++; - } - else - { - toUBytes[0] = (char)ch; - inBytes = bytesFromUTF8[ch]; - i = 1; - -morebytes: - while (i < inBytes) - { - if (mySource < sourceLimit) - { - toUBytes[i] = (char) (ch2 = *mySource); - if (!U8_IS_TRAIL(ch2)) - { - break; /* i < inBytes */ - } - ch = (ch << 6) + ch2; - ++mySource; - i++; - } - else - { - cnv->toUnicodeStatus = ch; - cnv->mode = inBytes; - cnv->toULength = (int8_t)i; - goto donefornow; - } - } - - /* Remove the accumulated high bits */ - ch -= offsetsFromUTF8[inBytes]; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[i] && - (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) - { - /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - if (ch <= MAXIMUM_UCS2) - { - /* fits in 16 bits */ - *(myTarget++) = (UChar) ch; - *(myOffsets++) = offsetNum; - } - else - { - /* write out the surrogates */ - ch -= HALF_BASE; - *(myTarget++) = (UChar) ((ch >> HALF_SHIFT) + SURROGATE_HIGH_START); - *(myOffsets++) = offsetNum; - ch = (ch & HALF_MASK) + SURROGATE_LOW_START; - if (myTarget < targetLimit) - { - *(myTarget++) = (UChar)ch; - *(myOffsets++) = offsetNum; - } - else - { - cnv->UCharErrorBuffer[0] = (UChar) ch; - cnv->UCharErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - offsetNum += i; - } - else - { - cnv->toULength = (int8_t)i; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - } - -donefornow: - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { /* End of target buffer */ - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = myTarget; - args->source = (const char *) mySource; - args->offsets = myOffsets; -} - -U_CFUNC void ucnv_fromUnicode_UTF8 (UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - UConverter *cnv = args->converter; - const UChar *mySource = args->source; - const UChar *sourceLimit = args->sourceLimit; - uint8_t *myTarget = (uint8_t *) args->target; - const uint8_t *targetLimit = (uint8_t *) args->targetLimit; - uint8_t *tempPtr; - UChar32 ch; - uint8_t tempBuf[4]; - int32_t indexToWrite; - UBool isNotCESU8 = !hasCESU8Data(cnv); - - if (cnv->fromUChar32 && myTarget < targetLimit) - { - ch = cnv->fromUChar32; - cnv->fromUChar32 = 0; - goto lowsurrogate; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - - if (ch < 0x80) /* Single byte */ - { - *(myTarget++) = (uint8_t) ch; - } - else if (ch < 0x800) /* Double byte */ - { - *(myTarget++) = (uint8_t) ((ch >> 6) | 0xc0); - if (myTarget < targetLimit) - { - *(myTarget++) = (uint8_t) ((ch & 0x3f) | 0x80); - } - else - { - cnv->charErrorBuffer[0] = (uint8_t) ((ch & 0x3f) | 0x80); - cnv->charErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - else { - /* Check for surrogates */ - if(U16_IS_SURROGATE(ch) && isNotCESU8) { -lowsurrogate: - if (mySource < sourceLimit) { - /* test both code units */ - if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(*mySource)) { - /* convert and consume this supplementary code point */ - ch=U16_GET_SUPPLEMENTARY(ch, *mySource); - ++mySource; - /* exit this condition tree */ - } - else { - /* this is an unpaired trail or lead code unit */ - /* callback(illegal) */ - cnv->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* no more input */ - cnv->fromUChar32 = ch; - break; - } - } - - /* Do we write the buffer directly for speed, - or do we have to be careful about target buffer space? */ - tempPtr = (((targetLimit - myTarget) >= 4) ? myTarget : tempBuf); - - if (ch <= MAXIMUM_UCS2) { - indexToWrite = 2; - tempPtr[0] = (uint8_t) ((ch >> 12) | 0xe0); - } - else { - indexToWrite = 3; - tempPtr[0] = (uint8_t) ((ch >> 18) | 0xf0); - tempPtr[1] = (uint8_t) (((ch >> 12) & 0x3f) | 0x80); - } - tempPtr[indexToWrite-1] = (uint8_t) (((ch >> 6) & 0x3f) | 0x80); - tempPtr[indexToWrite] = (uint8_t) ((ch & 0x3f) | 0x80); - - if (tempPtr == myTarget) { - /* There was enough space to write the codepoint directly. */ - myTarget += (indexToWrite + 1); - } - else { - /* We might run out of room soon. Write it slowly. */ - for (; tempPtr <= (tempBuf + indexToWrite); tempPtr++) { - if (myTarget < targetLimit) { - *(myTarget++) = *tempPtr; - } - else { - cnv->charErrorBuffer[cnv->charErrorBufferLength++] = *tempPtr; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - } - } - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; -} - -U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, - UErrorCode * err) -{ - UConverter *cnv = args->converter; - const UChar *mySource = args->source; - int32_t *myOffsets = args->offsets; - const UChar *sourceLimit = args->sourceLimit; - uint8_t *myTarget = (uint8_t *) args->target; - const uint8_t *targetLimit = (uint8_t *) args->targetLimit; - uint8_t *tempPtr; - UChar32 ch; - int32_t offsetNum, nextSourceIndex; - int32_t indexToWrite; - uint8_t tempBuf[4]; - UBool isNotCESU8 = !hasCESU8Data(cnv); - - if (cnv->fromUChar32 && myTarget < targetLimit) - { - ch = cnv->fromUChar32; - cnv->fromUChar32 = 0; - offsetNum = -1; - nextSourceIndex = 0; - goto lowsurrogate; - } else { - offsetNum = 0; - } - - while (mySource < sourceLimit && myTarget < targetLimit) - { - ch = *(mySource++); - - if (ch < 0x80) /* Single byte */ - { - *(myOffsets++) = offsetNum++; - *(myTarget++) = (char) ch; - } - else if (ch < 0x800) /* Double byte */ - { - *(myOffsets++) = offsetNum; - *(myTarget++) = (uint8_t) ((ch >> 6) | 0xc0); - if (myTarget < targetLimit) - { - *(myOffsets++) = offsetNum++; - *(myTarget++) = (uint8_t) ((ch & 0x3f) | 0x80); - } - else - { - cnv->charErrorBuffer[0] = (uint8_t) ((ch & 0x3f) | 0x80); - cnv->charErrorBufferLength = 1; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - else - /* Check for surrogates */ - { - nextSourceIndex = offsetNum + 1; - - if(U16_IS_SURROGATE(ch) && isNotCESU8) { -lowsurrogate: - if (mySource < sourceLimit) { - /* test both code units */ - if(U16_IS_SURROGATE_LEAD(ch) && U16_IS_TRAIL(*mySource)) { - /* convert and consume this supplementary code point */ - ch=U16_GET_SUPPLEMENTARY(ch, *mySource); - ++mySource; - ++nextSourceIndex; - /* exit this condition tree */ - } - else { - /* this is an unpaired trail or lead code unit */ - /* callback(illegal) */ - cnv->fromUChar32 = ch; - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - else { - /* no more input */ - cnv->fromUChar32 = ch; - break; - } - } - - /* Do we write the buffer directly for speed, - or do we have to be careful about target buffer space? */ - tempPtr = (((targetLimit - myTarget) >= 4) ? myTarget : tempBuf); - - if (ch <= MAXIMUM_UCS2) { - indexToWrite = 2; - tempPtr[0] = (uint8_t) ((ch >> 12) | 0xe0); - } - else { - indexToWrite = 3; - tempPtr[0] = (uint8_t) ((ch >> 18) | 0xf0); - tempPtr[1] = (uint8_t) (((ch >> 12) & 0x3f) | 0x80); - } - tempPtr[indexToWrite-1] = (uint8_t) (((ch >> 6) & 0x3f) | 0x80); - tempPtr[indexToWrite] = (uint8_t) ((ch & 0x3f) | 0x80); - - if (tempPtr == myTarget) { - /* There was enough space to write the codepoint directly. */ - myTarget += (indexToWrite + 1); - myOffsets[0] = offsetNum; - myOffsets[1] = offsetNum; - myOffsets[2] = offsetNum; - if (indexToWrite >= 3) { - myOffsets[3] = offsetNum; - } - myOffsets += (indexToWrite + 1); - } - else { - /* We might run out of room soon. Write it slowly. */ - for (; tempPtr <= (tempBuf + indexToWrite); tempPtr++) { - if (myTarget < targetLimit) - { - *(myOffsets++) = offsetNum; - *(myTarget++) = *tempPtr; - } - else - { - cnv->charErrorBuffer[cnv->charErrorBufferLength++] = *tempPtr; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - } - offsetNum = nextSourceIndex; - } - } - - if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) - { - *err = U_BUFFER_OVERFLOW_ERROR; - } - - args->target = (char *) myTarget; - args->source = mySource; - args->offsets = myOffsets; -} - -static UChar32 ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, - UErrorCode *err) { - UConverter *cnv; - const uint8_t *sourceInitial; - const uint8_t *source; - uint16_t extraBytesToWrite; - uint8_t myByte; - UChar32 ch; - int8_t i, isLegalSequence; - - /* UTF-8 only here, the framework handles CESU-8 to combine surrogate pairs */ - - cnv = args->converter; - sourceInitial = source = (const uint8_t *)args->source; - if (source >= (const uint8_t *)args->sourceLimit) - { - /* no input */ - *err = U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; - } - - myByte = (uint8_t)*(source++); - if (myByte < 0x80) - { - args->source = (const char *)source; - return (UChar32)myByte; - } - - extraBytesToWrite = (uint16_t)bytesFromUTF8[myByte]; - if (extraBytesToWrite == 0) { - cnv->toUBytes[0] = myByte; - cnv->toULength = 1; - *err = U_ILLEGAL_CHAR_FOUND; - args->source = (const char *)source; - return 0xffff; - } - - /*The byte sequence is longer than the buffer area passed*/ - if (((const char *)source + extraBytesToWrite - 1) > args->sourceLimit) - { - /* check if all of the remaining bytes are trail bytes */ - cnv->toUBytes[0] = myByte; - i = 1; - *err = U_TRUNCATED_CHAR_FOUND; - while(source < (const uint8_t *)args->sourceLimit) { - if(U8_IS_TRAIL(myByte = *source)) { - cnv->toUBytes[i++] = myByte; - ++source; - } else { - /* error even before we run out of input */ - *err = U_ILLEGAL_CHAR_FOUND; - break; - } - } - cnv->toULength = i; - args->source = (const char *)source; - return 0xffff; - } - - isLegalSequence = 1; - ch = myByte << 6; - switch(extraBytesToWrite) - { - /* note: code falls through cases! (sic)*/ - case 6: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - U_FALLTHROUGH; - case 5: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - U_FALLTHROUGH; - case 4: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - U_FALLTHROUGH; - case 3: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - U_FALLTHROUGH; - case 2: - ch += (myByte = *source); - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - }; - ch -= offsetsFromUTF8[extraBytesToWrite]; - args->source = (const char *)source; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[extraBytesToWrite] && - !U_IS_SURROGATE(ch) - ) { - return ch; /* return the code point */ - } - - for(i = 0; sourceInitial < source; ++i) { - cnv->toUBytes[i] = *sourceInitial++; - } - cnv->toULength = i; - *err = U_ILLEGAL_CHAR_FOUND; - return 0xffff; -} - -/* UTF-8-from-UTF-8 conversion functions ------------------------------------ */ - -/* minimum code point values for n-byte UTF-8 sequences, n=0..4 */ -static const UChar32 -utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 }; - -/* offsets for n-byte UTF-8 sequences that were calculated with ((lead<<6)+trail)<<6+trail... */ -static const UChar32 -utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; - -/* "Convert" UTF-8 to UTF-8: Validate and copy. Modified from ucnv_DBCSFromUTF8(). */ -static void -ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, - UConverterToUnicodeArgs *pToUArgs, - UErrorCode *pErrorCode) { - UConverter *utf8; - const uint8_t *source, *sourceLimit; - uint8_t *target; - int32_t targetCapacity; - int32_t count; - - int8_t oldToULength, toULength, toULimit; - - UChar32 c; - uint8_t b, t1, t2; - - /* set up the local pointers */ - utf8=pToUArgs->converter; - source=(uint8_t *)pToUArgs->source; - sourceLimit=(uint8_t *)pToUArgs->sourceLimit; - target=(uint8_t *)pFromUArgs->target; - targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target); - - /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; - if(c!=0) { - toULength=oldToULength=utf8->toULength; - toULimit=(int8_t)utf8->mode; - } else { - toULength=oldToULength=toULimit=0; - } - - count=(int32_t)(sourceLimit-source)+oldToULength; - if(counttargetCapacity) { - count=targetCapacity; - } - - i=0; - while(i<3 && i<(count-toULimit)) { - b=source[count-oldToULength-i-1]; - if(U8_IS_TRAIL(b)) { - ++i; - } else { - if(itoUnicodeStatus=0; - utf8->toULength=0; - goto moreBytes; - /* See note in ucnv_SBCSFromUTF8() about this goto. */ - } - - /* conversion loop */ - while(count>0) { - b=*source++; - if((int8_t)b>=0) { - /* convert ASCII */ - *target++=b; - --count; - continue; - } else { - if(b>0xe0) { - if( /* handle U+1000..U+D7FF inline */ - (t1=source[0]) >= 0x80 && ((b<0xed && (t1 <= 0xbf)) || - (b==0xed && (t1 <= 0x9f))) && - (t2=source[1]) >= 0x80 && t2 <= 0xbf - ) { - source+=2; - *target++=b; - *target++=t1; - *target++=t2; - count-=3; - continue; - } - } else if(b<0xe0) { - if( /* handle U+0080..U+07FF inline */ - b>=0xc2 && - (t1=*source) >= 0x80 && t1 <= 0xbf - ) { - ++source; - *target++=b; - *target++=t1; - count-=2; - continue; - } - } else if(b==0xe0) { - if( /* handle U+0800..U+0FFF inline */ - (t1=source[0]) >= 0xa0 && t1 <= 0xbf && - (t2=source[1]) >= 0x80 && t2 <= 0xbf - ) { - source+=2; - *target++=b; - *target++=t1; - *target++=t2; - count-=3; - continue; - } - } - - /* handle "complicated" and error cases, and continuing partial characters */ - oldToULength=0; - toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; - c=b; -moreBytes: - while(toULengthtoUBytes[oldToULength++]=*source++; - } - utf8->toUnicodeStatus=c; - utf8->toULength=toULength; - utf8->mode=toULimit; - pToUArgs->source=(char *)source; - pFromUArgs->target=(char *)target; - return; - } - } - - if( toULength==toULimit && /* consumed all trail bytes */ - (toULength==3 || toULength==2) && /* BMP */ - (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] && - (c<=0xd7ff || 0xe000<=c) /* not a surrogate */ - ) { - /* legal byte sequence for BMP code point */ - } else if( - toULength==toULimit && toULength==4 && - (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff) - ) { - /* legal byte sequence for supplementary code point */ - } else { - /* error handling: illegal UTF-8 byte sequence */ - source-=(toULength-oldToULength); - while(oldToULengthtoUBytes[oldToULength++]=*source++; - } - utf8->toULength=toULength; - pToUArgs->source=(char *)source; - pFromUArgs->target=(char *)target; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - return; - } - - /* copy the legal byte sequence to the target */ - { - int8_t i; - - for(i=0; itoUBytes[i]; - } - source-=(toULength-oldToULength); - for(; itargetLimit) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } else { - b=*source; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; - if(toULimit>(sourceLimit-source)) { - /* collect a truncated byte sequence */ - toULength=0; - c=b; - for(;;) { - utf8->toUBytes[toULength++]=b; - if(++source==sourceLimit) { - /* partial byte sequence at end of source */ - utf8->toUnicodeStatus=c; - utf8->toULength=toULength; - utf8->mode=toULimit; - break; - } else if(!U8_IS_TRAIL(b=*source)) { - /* lead byte in trail byte position */ - utf8->toULength=toULength; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - break; - } - c=(c<<6)+b; - } - } else { - /* partial-sequence target overflow: fall back to the pivoting implementation */ - *pErrorCode=U_USING_DEFAULT_WARNING; - } - } - } - - /* write back the updated pointers */ - pToUArgs->source=(char *)source; - pFromUArgs->target=(char *)target; -} - -/* UTF-8 converter data ----------------------------------------------------- */ - -static const UConverterImpl _UTF8Impl={ - UCNV_UTF8, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - ucnv_toUnicode_UTF8, - ucnv_toUnicode_UTF8_OFFSETS_LOGIC, - ucnv_fromUnicode_UTF8, - ucnv_fromUnicode_UTF8_OFFSETS_LOGIC, - ucnv_getNextUChar_UTF8, - - NULL, - NULL, - NULL, - NULL, - ucnv_getNonSurrogateUnicodeSet, - - ucnv_UTF8FromUTF8, - ucnv_UTF8FromUTF8 -}; - -/* The 1208 CCSID refers to any version of Unicode of UTF-8 */ -static const UConverterStaticData _UTF8StaticData={ - sizeof(UConverterStaticData), - "UTF-8", - 1208, UCNV_IBM, UCNV_UTF8, - 1, 3, /* max 3 bytes per UChar from UTF-8 (4 bytes from surrogate _pair_) */ - { 0xef, 0xbf, 0xbd, 0 },3,FALSE,FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - - -const UConverterSharedData _UTF8Data= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF8StaticData, &_UTF8Impl); - -/* CESU-8 converter data ---------------------------------------------------- */ - -static const UConverterImpl _CESU8Impl={ - UCNV_CESU8, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - ucnv_toUnicode_UTF8, - ucnv_toUnicode_UTF8_OFFSETS_LOGIC, - ucnv_fromUnicode_UTF8, - ucnv_fromUnicode_UTF8_OFFSETS_LOGIC, - NULL, - - NULL, - NULL, - NULL, - NULL, - ucnv_getCompleteUnicodeSet, - - NULL, - NULL -}; - -static const UConverterStaticData _CESU8StaticData={ - sizeof(UConverterStaticData), - "CESU-8", - 9400, /* CCSID for CESU-8 */ - UCNV_UNKNOWN, UCNV_CESU8, 1, 3, - { 0xef, 0xbf, 0xbd, 0 },3,FALSE,FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - - -const UConverterSharedData _CESU8Data= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_CESU8StaticData, &_CESU8Impl); - -#endif diff --git a/source/common/ucnvbocu.cpp b/source/common/ucnvbocu.cpp index 69763ca..5b66c50 100644 --- a/source/common/ucnvbocu.cpp +++ b/source/common/ucnvbocu.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucnvbocu.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucnvdisp.c b/source/common/ucnvdisp.c deleted file mode 100644 index e30f665..0000000 --- a/source/common/ucnvdisp.c +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1998-2004, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* ucnvdisp.c: -* Implements APIs for the ICU's codeset conversion library display names. -* -* Modification History: -* -* Date Name Description -* 04/04/99 helena Fixed internal header inclusion. -* 05/09/00 helena Added implementation to handle fallback mappings. -* 06/20/2000 helena OS/400 port changes; mostly typecast. -* 09/08/2004 grhoten split from ucnv.c -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ustring.h" -#include "unicode/ures.h" -#include "unicode/ucnv.h" -#include "cstring.h" -#include "ustr_imp.h" -#include "ucnv_imp.h" -#include "putilimp.h" - -U_CAPI int32_t U_EXPORT2 -ucnv_getDisplayName(const UConverter *cnv, - const char *displayLocale, - UChar *displayName, int32_t displayNameCapacity, - UErrorCode *pErrorCode) { - UResourceBundle *rb; - const UChar *name; - int32_t length; - UErrorCode localStatus = U_ZERO_ERROR; - - /* check arguments */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - if(cnv==NULL || displayNameCapacity<0 || (displayNameCapacity>0 && displayName==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* open the resource bundle and get the display name string */ - rb=ures_open(NULL, displayLocale, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return 0; - } - - /* use the internal name as the key */ - name=ures_getStringByKey(rb, cnv->sharedData->staticData->name, &length, &localStatus); - ures_close(rb); - - if(U_SUCCESS(localStatus)) { - /* copy the string */ - if (*pErrorCode == U_ZERO_ERROR) { - *pErrorCode = localStatus; - } - u_memcpy(displayName, name, uprv_min(length, displayNameCapacity)*U_SIZEOF_UCHAR); - } else { - /* convert the internal name into a Unicode string */ - length=(int32_t)uprv_strlen(cnv->sharedData->staticData->name); - u_charsToUChars(cnv->sharedData->staticData->name, displayName, uprv_min(length, displayNameCapacity)); - } - return u_terminateUChars(displayName, displayNameCapacity, length, pErrorCode); -} - -#endif - -/* - * Hey, Emacs, please set the following: - * - * Local Variables: - * indent-tabs-mode: nil - * End: - * - */ diff --git a/source/common/ucnvhz.c b/source/common/ucnvhz.c deleted file mode 100644 index d355516..0000000 --- a/source/common/ucnvhz.c +++ /dev/null @@ -1,631 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnvhz.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000oct16 -* created by: Ram Viswanadha -* 10/31/2000 Ram Implemented offsets logic function -* -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "cmemory.h" -#include "unicode/ucnv.h" -#include "unicode/ucnv_cb.h" -#include "unicode/uset.h" -#include "unicode/utf16.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "ucnv_imp.h" - -#define UCNV_TILDE 0x7E /* ~ */ -#define UCNV_OPEN_BRACE 0x7B /* { */ -#define UCNV_CLOSE_BRACE 0x7D /* } */ -#define SB_ESCAPE "\x7E\x7D" -#define DB_ESCAPE "\x7E\x7B" -#define TILDE_ESCAPE "\x7E\x7E" -#define ESC_LEN 2 - - -#define CONCAT_ESCAPE_MACRO( args, targetIndex,targetLength,strToAppend, err, len,sourceIndex){ \ - while(len-->0){ \ - if(targetIndex < targetLength){ \ - args->target[targetIndex] = (unsigned char) *strToAppend; \ - if(args->offsets!=NULL){ \ - *(offsets++) = sourceIndex-1; \ - } \ - targetIndex++; \ - } \ - else{ \ - args->converter->charErrorBuffer[(int)args->converter->charErrorBufferLength++] = (unsigned char) *strToAppend; \ - *err =U_BUFFER_OVERFLOW_ERROR; \ - } \ - strToAppend++; \ - } \ -} - - -typedef struct{ - UConverter* gbConverter; - int32_t targetIndex; - int32_t sourceIndex; - UBool isEscapeAppended; - UBool isStateDBCS; - UBool isTargetUCharDBCS; - UBool isEmptySegment; -}UConverterDataHZ; - - - -static void -_HZOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ - UConverter *gbConverter; - if(pArgs->onlyTestIsLoadable) { - ucnv_canCreateConverter("GBK", errorCode); /* errorCode carries result */ - return; - } - gbConverter = ucnv_open("GBK", errorCode); - if(U_FAILURE(*errorCode)) { - return; - } - cnv->toUnicodeStatus = 0; - cnv->fromUnicodeStatus= 0; - cnv->mode=0; - cnv->fromUChar32=0x0000; - cnv->extraInfo = uprv_calloc(1, sizeof(UConverterDataHZ)); - if(cnv->extraInfo != NULL){ - ((UConverterDataHZ*)cnv->extraInfo)->gbConverter = gbConverter; - } - else { - ucnv_close(gbConverter); - *errorCode = U_MEMORY_ALLOCATION_ERROR; - return; - } -} - -static void -_HZClose(UConverter *cnv){ - if(cnv->extraInfo != NULL) { - ucnv_close (((UConverterDataHZ *) (cnv->extraInfo))->gbConverter); - if(!cnv->isExtraLocal) { - uprv_free(cnv->extraInfo); - } - cnv->extraInfo = NULL; - } -} - -static void -_HZReset(UConverter *cnv, UConverterResetChoice choice){ - if(choice<=UCNV_RESET_TO_UNICODE) { - cnv->toUnicodeStatus = 0; - cnv->mode=0; - if(cnv->extraInfo != NULL){ - ((UConverterDataHZ*)cnv->extraInfo)->isStateDBCS = FALSE; - ((UConverterDataHZ*)cnv->extraInfo)->isEmptySegment = FALSE; - } - } - if(choice!=UCNV_RESET_TO_UNICODE) { - cnv->fromUnicodeStatus= 0; - cnv->fromUChar32=0x0000; - if(cnv->extraInfo != NULL){ - ((UConverterDataHZ*)cnv->extraInfo)->isEscapeAppended = FALSE; - ((UConverterDataHZ*)cnv->extraInfo)->targetIndex = 0; - ((UConverterDataHZ*)cnv->extraInfo)->sourceIndex = 0; - ((UConverterDataHZ*)cnv->extraInfo)->isTargetUCharDBCS = FALSE; - } - } -} - -/**************************************HZ Encoding************************************************* -* Rules for HZ encoding -* -* In ASCII mode, a byte is interpreted as an ASCII character, unless a -* '~' is encountered. The character '~' is an escape character. By -* convention, it must be immediately followed ONLY by '~', '{' or '\n' -* (), with the following special meaning. - -* 1. The escape sequence '~~' is interpreted as a '~'. -* 2. The escape-to-GB sequence '~{' switches the mode from ASCII to GB. -* 3. The escape sequence '~\n' is a line-continuation marker to be -* consumed with no output produced. -* In GB mode, characters are interpreted two bytes at a time as (pure) -* GB codes until the escape-from-GB code '~}' is read. This code -* switches the mode from GB back to ASCII. (Note that the escape- -* from-GB code '~}' ($7E7D) is outside the defined GB range.) -* -* Source: RFC 1842 -* -* Note that the formal syntax in RFC 1842 is invalid. I assume that the -* intended definition of single-byte-segment is as follows (pedberg): -* single-byte-segment = single-byte-seq 1*single-byte-char -*/ - - -static void -UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, - UErrorCode* err){ - char tempBuf[2]; - const char *mySource = ( char *) args->source; - UChar *myTarget = args->target; - const char *mySourceLimit = args->sourceLimit; - UChar32 targetUniChar = 0x0000; - int32_t mySourceChar = 0x0000; - UConverterDataHZ* myData=(UConverterDataHZ*)(args->converter->extraInfo); - tempBuf[0]=0; - tempBuf[1]=0; - - /* Calling code already handles this situation. */ - /*if ((args->converter == NULL) || (args->targetLimit < args->target) || (mySourceLimit < args->source)){ - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - }*/ - - while(mySource< mySourceLimit){ - - if(myTarget < args->targetLimit){ - - mySourceChar= (unsigned char) *mySource++; - - if(args->converter->mode == UCNV_TILDE) { - /* second byte after ~ */ - args->converter->mode=0; - switch(mySourceChar) { - case 0x0A: - /* no output for ~\n (line-continuation marker) */ - continue; - case UCNV_TILDE: - if(args->offsets) { - args->offsets[myTarget - args->target]=(int32_t)(mySource - args->source - 2); - } - *(myTarget++)=(UChar)mySourceChar; - myData->isEmptySegment = FALSE; - continue; - case UCNV_OPEN_BRACE: - case UCNV_CLOSE_BRACE: - myData->isStateDBCS = (mySourceChar == UCNV_OPEN_BRACE); - if (myData->isEmptySegment) { - myData->isEmptySegment = FALSE; /* we are handling it, reset to avoid future spurious errors */ - *err = U_ILLEGAL_ESCAPE_SEQUENCE; - args->converter->toUCallbackReason = UCNV_IRREGULAR; - args->converter->toUBytes[0] = UCNV_TILDE; - args->converter->toUBytes[1] = mySourceChar; - args->converter->toULength = 2; - args->target = myTarget; - args->source = mySource; - return; - } - myData->isEmptySegment = TRUE; - continue; - default: - /* if the first byte is equal to TILDE and the trail byte - * is not a valid byte then it is an error condition - */ - /* - * Ticket 5691: consistent illegal sequences: - * - We include at least the first byte in the illegal sequence. - * - If any of the non-initial bytes could be the start of a character, - * we stop the illegal sequence before the first one of those. - */ - myData->isEmptySegment = FALSE; /* different error here, reset this to avoid spurious future error */ - *err = U_ILLEGAL_ESCAPE_SEQUENCE; - args->converter->toUBytes[0] = UCNV_TILDE; - if( myData->isStateDBCS ? - (0x21 <= mySourceChar && mySourceChar <= 0x7e) : - mySourceChar <= 0x7f - ) { - /* The current byte could be the start of a character: Back it out. */ - args->converter->toULength = 1; - --mySource; - } else { - /* Include the current byte in the illegal sequence. */ - args->converter->toUBytes[1] = mySourceChar; - args->converter->toULength = 2; - } - args->target = myTarget; - args->source = mySource; - return; - } - } else if(myData->isStateDBCS) { - if(args->converter->toUnicodeStatus == 0x00){ - /* lead byte */ - if(mySourceChar == UCNV_TILDE) { - args->converter->mode = UCNV_TILDE; - } else { - /* add another bit to distinguish a 0 byte from not having seen a lead byte */ - args->converter->toUnicodeStatus = (uint32_t) (mySourceChar | 0x100); - myData->isEmptySegment = FALSE; /* the segment has something, either valid or will produce a different error, so reset this */ - } - continue; - } - else{ - /* trail byte */ - int leadIsOk, trailIsOk; - uint32_t leadByte = args->converter->toUnicodeStatus & 0xff; - targetUniChar = 0xffff; - /* - * Ticket 5691: consistent illegal sequences: - * - We include at least the first byte in the illegal sequence. - * - If any of the non-initial bytes could be the start of a character, - * we stop the illegal sequence before the first one of those. - * - * In HZ DBCS, if the second byte is in the 21..7e range, - * we report only the first byte as the illegal sequence. - * Otherwise we convert or report the pair of bytes. - */ - leadIsOk = (uint8_t)(leadByte - 0x21) <= (0x7d - 0x21); - trailIsOk = (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21); - if (leadIsOk && trailIsOk) { - tempBuf[0] = (char) (leadByte+0x80) ; - tempBuf[1] = (char) (mySourceChar+0x80); - targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->gbConverter->sharedData, - tempBuf, 2, args->converter->useFallback); - mySourceChar= (leadByte << 8) | mySourceChar; - } else if (trailIsOk) { - /* report a single illegal byte and continue with the following DBCS starter byte */ - --mySource; - mySourceChar = (int32_t)leadByte; - } else { - /* report a pair of illegal bytes if the second byte is not a DBCS starter */ - /* add another bit so that the code below writes 2 bytes in case of error */ - mySourceChar= 0x10000 | (leadByte << 8) | mySourceChar; - } - args->converter->toUnicodeStatus =0x00; - } - } - else{ - if(mySourceChar == UCNV_TILDE) { - args->converter->mode = UCNV_TILDE; - continue; - } else if(mySourceChar <= 0x7f) { - targetUniChar = (UChar)mySourceChar; /* ASCII */ - myData->isEmptySegment = FALSE; /* the segment has something valid */ - } else { - targetUniChar = 0xffff; - myData->isEmptySegment = FALSE; /* different error here, reset this to avoid spurious future error */ - } - } - if(targetUniChar < 0xfffe){ - if(args->offsets) { - args->offsets[myTarget - args->target]=(int32_t)(mySource - args->source - 1-(myData->isStateDBCS)); - } - - *(myTarget++)=(UChar)targetUniChar; - } - else /* targetUniChar>=0xfffe */ { - if(targetUniChar == 0xfffe){ - *err = U_INVALID_CHAR_FOUND; - } - else{ - *err = U_ILLEGAL_CHAR_FOUND; - } - if(mySourceChar > 0xff){ - args->converter->toUBytes[0] = (uint8_t)(mySourceChar >> 8); - args->converter->toUBytes[1] = (uint8_t)mySourceChar; - args->converter->toULength=2; - } - else{ - args->converter->toUBytes[0] = (uint8_t)mySourceChar; - args->converter->toULength=1; - } - break; - } - } - else{ - *err =U_BUFFER_OVERFLOW_ERROR; - break; - } - } - - args->target = myTarget; - args->source = mySource; -} - - -static void -UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, - UErrorCode * err){ - const UChar *mySource = args->source; - char *myTarget = args->target; - int32_t* offsets = args->offsets; - int32_t mySourceIndex = 0; - int32_t myTargetIndex = 0; - int32_t targetLength = (int32_t)(args->targetLimit - myTarget); - int32_t mySourceLength = (int32_t)(args->sourceLimit - args->source); - uint32_t targetUniChar = 0x0000; - UChar32 mySourceChar = 0x0000; - UConverterDataHZ *myConverterData=(UConverterDataHZ*)args->converter->extraInfo; - UBool isTargetUCharDBCS = (UBool) myConverterData->isTargetUCharDBCS; - UBool oldIsTargetUCharDBCS; - int len =0; - const char* escSeq=NULL; - - /* Calling code already handles this situation. */ - /*if ((args->converter == NULL) || (args->targetLimit < myTarget) || (args->sourceLimit < args->source)){ - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - }*/ - if(args->converter->fromUChar32!=0 && myTargetIndex < targetLength) { - goto getTrail; - } - /*writing the char to the output stream */ - while (mySourceIndex < mySourceLength){ - targetUniChar = missingCharMarker; - if (myTargetIndex < targetLength){ - - mySourceChar = (UChar) mySource[mySourceIndex++]; - - - oldIsTargetUCharDBCS = isTargetUCharDBCS; - if(mySourceChar ==UCNV_TILDE){ - /*concatEscape(args, &myTargetIndex, &targetLength,"\x7E\x7E",err,2,&mySourceIndex);*/ - len = ESC_LEN; - escSeq = TILDE_ESCAPE; - CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); - continue; - } else if(mySourceChar <= 0x7f) { - targetUniChar = mySourceChar; - } else { - int32_t length= ucnv_MBCSFromUChar32(myConverterData->gbConverter->sharedData, - mySourceChar,&targetUniChar,args->converter->useFallback); - /* we can only use lead bytes 21..7D and trail bytes 21..7E */ - if( length == 2 && - (uint16_t)(targetUniChar - 0xa1a1) <= (0xfdfe - 0xa1a1) && - (uint8_t)(targetUniChar - 0xa1) <= (0xfe - 0xa1) - ) { - targetUniChar -= 0x8080; - } else { - targetUniChar = missingCharMarker; - } - } - if (targetUniChar != missingCharMarker){ - myConverterData->isTargetUCharDBCS = isTargetUCharDBCS = (UBool)(targetUniChar>0x00FF); - if(oldIsTargetUCharDBCS != isTargetUCharDBCS || !myConverterData->isEscapeAppended ){ - /*Shifting from a double byte to single byte mode*/ - if(!isTargetUCharDBCS){ - len =ESC_LEN; - escSeq = SB_ESCAPE; - CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); - myConverterData->isEscapeAppended = TRUE; - } - else{ /* Shifting from a single byte to double byte mode*/ - len =ESC_LEN; - escSeq = DB_ESCAPE; - CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); - myConverterData->isEscapeAppended = TRUE; - - } - } - - if(isTargetUCharDBCS){ - if( myTargetIndex > 8); - if(offsets){ - *(offsets++) = mySourceIndex-1; - } - if(myTargetIndex < targetLength){ - myTarget[myTargetIndex++] =(char) targetUniChar; - if(offsets){ - *(offsets++) = mySourceIndex-1; - } - }else{ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; - *err = U_BUFFER_OVERFLOW_ERROR; - } - }else{ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =(char) (targetUniChar >> 8); - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; - *err = U_BUFFER_OVERFLOW_ERROR; - } - - }else{ - if( myTargetIndex converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (char) targetUniChar; - *err = U_BUFFER_OVERFLOW_ERROR; - } - } - - } - else{ - /* oops.. the code point is unassigned */ - /*Handle surrogates */ - /*check if the char is a First surrogate*/ - if(U16_IS_SURROGATE(mySourceChar)) { - if(U16_IS_SURROGATE_LEAD(mySourceChar)) { - args->converter->fromUChar32=mySourceChar; -getTrail: - /*look ahead to find the trail surrogate*/ - if(mySourceIndex < mySourceLength) { - /* test the following code unit */ - UChar trail=(UChar) args->source[mySourceIndex]; - if(U16_IS_TRAIL(trail)) { - ++mySourceIndex; - mySourceChar=U16_GET_SUPPLEMENTARY(args->converter->fromUChar32, trail); - args->converter->fromUChar32=0x00; - /* there are no surrogates in GB2312*/ - *err = U_INVALID_CHAR_FOUND; - /* exit this condition tree */ - } else { - /* this is an unmatched lead code unit (1st surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* no more input */ - *err = U_ZERO_ERROR; - } - } else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* callback(unassigned) for a BMP code point */ - *err = U_INVALID_CHAR_FOUND; - } - - args->converter->fromUChar32=mySourceChar; - break; - } - } - else{ - *err = U_BUFFER_OVERFLOW_ERROR; - break; - } - targetUniChar=missingCharMarker; - } - - args->target += myTargetIndex; - args->source += mySourceIndex; - myConverterData->isTargetUCharDBCS = isTargetUCharDBCS; -} - -static void -_HZ_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err) { - UConverter *cnv = args->converter; - UConverterDataHZ *convData=(UConverterDataHZ *) cnv->extraInfo; - char *p; - char buffer[4]; - p = buffer; - - if( convData->isTargetUCharDBCS){ - *p++= UCNV_TILDE; - *p++= UCNV_CLOSE_BRACE; - convData->isTargetUCharDBCS=FALSE; - } - *p++= (char)cnv->subChars[0]; - - ucnv_cbFromUWriteBytes(args, - buffer, (int32_t)(p - buffer), - offsetIndex, err); -} - -/* - * Structure for cloning an HZ converter into a single memory block. - * ucnv_safeClone() of the HZ converter will align the entire cloneHZStruct, - * and then ucnv_safeClone() of the sub-converter may additionally align - * subCnv inside the cloneHZStruct, for which we need the deadSpace after - * subCnv. This is because UAlignedMemory may be larger than the actually - * necessary alignment size for the platform. - * The other cloneHZStruct fields will not be moved around, - * and are aligned properly with cloneHZStruct's alignment. - */ -struct cloneHZStruct -{ - UConverter cnv; - UConverter subCnv; - UAlignedMemory deadSpace; - UConverterDataHZ mydata; -}; - - -static UConverter * -_HZ_SafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status) -{ - struct cloneHZStruct * localClone; - int32_t size, bufferSizeNeeded = sizeof(struct cloneHZStruct); - - if (U_FAILURE(*status)){ - return 0; - } - - if (*pBufferSize == 0){ /* 'preflighting' request - set needed size into *pBufferSize */ - *pBufferSize = bufferSizeNeeded; - return 0; - } - - localClone = (struct cloneHZStruct *)stackBuffer; - /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ - - uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(UConverterDataHZ)); - localClone->cnv.extraInfo = &localClone->mydata; - localClone->cnv.isExtraLocal = TRUE; - - /* deep-clone the sub-converter */ - size = (int32_t)(sizeof(UConverter) + sizeof(UAlignedMemory)); /* include size of padding */ - ((UConverterDataHZ*)localClone->cnv.extraInfo)->gbConverter = - ucnv_safeClone(((UConverterDataHZ*)cnv->extraInfo)->gbConverter, &localClone->subCnv, &size, status); - - return &localClone->cnv; -} - -static void -_HZ_GetUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - /* HZ converts all of ASCII */ - sa->addRange(sa->set, 0, 0x7f); - - /* add all of the code points that the sub-converter handles */ - ucnv_MBCSGetFilteredUnicodeSetForUnicode( - ((UConverterDataHZ*)cnv->extraInfo)->gbConverter->sharedData, - sa, which, UCNV_SET_FILTER_HZ, - pErrorCode); -} - -static const UConverterImpl _HZImpl={ - - UCNV_HZ, - - NULL, - NULL, - - _HZOpen, - _HZClose, - _HZReset, - - UConverter_toUnicode_HZ_OFFSETS_LOGIC, - UConverter_toUnicode_HZ_OFFSETS_LOGIC, - UConverter_fromUnicode_HZ_OFFSETS_LOGIC, - UConverter_fromUnicode_HZ_OFFSETS_LOGIC, - NULL, - - NULL, - NULL, - _HZ_WriteSub, - _HZ_SafeClone, - _HZ_GetUnicodeSet -}; - -static const UConverterStaticData _HZStaticData={ - sizeof(UConverterStaticData), - "HZ", - 0, - UCNV_IBM, - UCNV_HZ, - 1, - 4, - { 0x1a, 0, 0, 0 }, - 1, - FALSE, - FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* reserved */ - -}; - -const UConverterSharedData _HZData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_HZStaticData, &_HZImpl); - -#endif /* #if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION */ diff --git a/source/common/ucnvisci.c b/source/common/ucnvisci.c deleted file mode 100644 index b520fc2..0000000 --- a/source/common/ucnvisci.c +++ /dev/null @@ -1,1625 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnvisci.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2001JUN26 -* created by: Ram Viswanadha -* -* Date Name Description -* 24/7/2001 Ram Added support for EXT character handling -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/ucnv_cb.h" -#include "unicode/utf16.h" -#include "cmemory.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cstring.h" -#include "uassert.h" - -#define UCNV_OPTIONS_VERSION_MASK 0xf -#define NUKTA 0x093c -#define HALANT 0x094d -#define ZWNJ 0x200c /* Zero Width Non Joiner */ -#define ZWJ 0x200d /* Zero width Joiner */ -#define INVALID_CHAR 0xffff -#define ATR 0xEF /* Attribute code */ -#define EXT 0xF0 /* Extension code */ -#define DANDA 0x0964 -#define DOUBLE_DANDA 0x0965 -#define ISCII_NUKTA 0xE9 -#define ISCII_HALANT 0xE8 -#define ISCII_DANDA 0xEA -#define ISCII_INV 0xD9 -#define ISCII_VOWEL_SIGN_E 0xE0 -#define INDIC_BLOCK_BEGIN 0x0900 -#define INDIC_BLOCK_END 0x0D7F -#define INDIC_RANGE (INDIC_BLOCK_END - INDIC_BLOCK_BEGIN) -#define VOCALLIC_RR 0x0931 -#define LF 0x0A -#define ASCII_END 0xA0 -#define NO_CHAR_MARKER 0xFFFE -#define TELUGU_DELTA DELTA * TELUGU -#define DEV_ABBR_SIGN 0x0970 -#define DEV_ANUDATTA 0x0952 -#define EXT_RANGE_BEGIN 0xA1 -#define EXT_RANGE_END 0xEE - -#define PNJ_DELTA 0x0100 -#define PNJ_BINDI 0x0A02 -#define PNJ_TIPPI 0x0A70 -#define PNJ_SIGN_VIRAMA 0x0A4D -#define PNJ_ADHAK 0x0A71 -#define PNJ_HA 0x0A39 -#define PNJ_RRA 0x0A5C - -typedef enum { - DEVANAGARI =0, - BENGALI, - GURMUKHI, - GUJARATI, - ORIYA, - TAMIL, - TELUGU, - KANNADA, - MALAYALAM, - DELTA=0x80 -}UniLang; - -/** - * Enumeration for switching code pages if + - * is encountered - */ -typedef enum { - DEF = 0x40, - RMN = 0x41, - DEV = 0x42, - BNG = 0x43, - TML = 0x44, - TLG = 0x45, - ASM = 0x46, - ORI = 0x47, - KND = 0x48, - MLM = 0x49, - GJR = 0x4A, - PNJ = 0x4B, - ARB = 0x71, - PES = 0x72, - URD = 0x73, - SND = 0x74, - KSM = 0x75, - PST = 0x76 -}ISCIILang; - -typedef enum { - DEV_MASK =0x80, - PNJ_MASK =0x40, - GJR_MASK =0x20, - ORI_MASK =0x10, - BNG_MASK =0x08, - KND_MASK =0x04, - MLM_MASK =0x02, - TML_MASK =0x01, - ZERO =0x00 -}MaskEnum; - -#define ISCII_CNV_PREFIX "ISCII,version=" - -typedef struct { - UChar contextCharToUnicode; /* previous Unicode codepoint for contextual analysis */ - UChar contextCharFromUnicode; /* previous Unicode codepoint for contextual analysis */ - uint16_t defDeltaToUnicode; /* delta for switching to default state when DEF is encountered */ - uint16_t currentDeltaFromUnicode; /* current delta in Indic block */ - uint16_t currentDeltaToUnicode; /* current delta in Indic block */ - MaskEnum currentMaskFromUnicode; /* mask for current state in toUnicode */ - MaskEnum currentMaskToUnicode; /* mask for current state in toUnicode */ - MaskEnum defMaskToUnicode; /* mask for default state in toUnicode */ - UBool isFirstBuffer; /* boolean for fromUnicode to see if we need to announce the first script */ - UBool resetToDefaultToUnicode; /* boolean for reseting to default delta and mask when a newline is encountered*/ - char name[sizeof(ISCII_CNV_PREFIX) + 1]; - UChar32 prevToUnicodeStatus; /* Hold the previous toUnicodeStatus. This is necessary because we may need to know the last two code points. */ -} UConverterDataISCII; - -typedef struct LookupDataStruct { - UniLang uniLang; - MaskEnum maskEnum; - ISCIILang isciiLang; -} LookupDataStruct; - -static const LookupDataStruct lookupInitialData[]={ - { DEVANAGARI, DEV_MASK, DEV }, - { BENGALI, BNG_MASK, BNG }, - { GURMUKHI, PNJ_MASK, PNJ }, - { GUJARATI, GJR_MASK, GJR }, - { ORIYA, ORI_MASK, ORI }, - { TAMIL, TML_MASK, TML }, - { TELUGU, KND_MASK, TLG }, - { KANNADA, KND_MASK, KND }, - { MALAYALAM, MLM_MASK, MLM } -}; - -/* - * For special handling of certain Gurmukhi characters. - * Bit 0 (value 1): PNJ consonant - * Bit 1 (value 2): PNJ Bindi Tippi - */ -static const uint8_t pnjMap[80] = { - /* 0A00..0A0F */ - 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, - /* 0A10..0A1F */ - 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - /* 0A20..0A2F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, - /* 0A30..0A3F */ - 3, 0, 0, 0, 0, 3, 3, 0, 3, 3, 0, 0, 0, 0, 0, 2, - /* 0A40..0A4F */ - 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static UBool -isPNJConsonant(UChar32 c) { - if (c < 0xa00 || 0xa50 <= c) { - return FALSE; - } else { - return (UBool)(pnjMap[c - 0xa00] & 1); - } -} - -static UBool -isPNJBindiTippi(UChar32 c) { - if (c < 0xa00 || 0xa50 <= c) { - return FALSE; - } else { - return (UBool)(pnjMap[c - 0xa00] >> 1); - } -} - -static void _ISCIIOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode) { - if(pArgs->onlyTestIsLoadable) { - return; - } - - cnv->extraInfo = uprv_malloc(sizeof(UConverterDataISCII)); - - if (cnv->extraInfo != NULL) { - int32_t len=0; - UConverterDataISCII *converterData= - (UConverterDataISCII *) cnv->extraInfo; - converterData->contextCharToUnicode=NO_CHAR_MARKER; - cnv->toUnicodeStatus = missingCharMarker; - converterData->contextCharFromUnicode=0x0000; - converterData->resetToDefaultToUnicode=FALSE; - /* check if the version requested is supported */ - if ((pArgs->options & UCNV_OPTIONS_VERSION_MASK) < 9) { - /* initialize state variables */ - converterData->currentDeltaFromUnicode - = converterData->currentDeltaToUnicode - = converterData->defDeltaToUnicode = (uint16_t)(lookupInitialData[pArgs->options & UCNV_OPTIONS_VERSION_MASK].uniLang * DELTA); - - converterData->currentMaskFromUnicode - = converterData->currentMaskToUnicode - = converterData->defMaskToUnicode = lookupInitialData[pArgs->options & UCNV_OPTIONS_VERSION_MASK].maskEnum; - - converterData->isFirstBuffer=TRUE; - (void)uprv_strcpy(converterData->name, ISCII_CNV_PREFIX); - len = (int32_t)uprv_strlen(converterData->name); - converterData->name[len]= (char)((pArgs->options & UCNV_OPTIONS_VERSION_MASK) + '0'); - converterData->name[len+1]=0; - - converterData->prevToUnicodeStatus = 0x0000; - } else { - uprv_free(cnv->extraInfo); - cnv->extraInfo = NULL; - *errorCode = U_ILLEGAL_ARGUMENT_ERROR; - } - - } else { - *errorCode =U_MEMORY_ALLOCATION_ERROR; - } -} - -static void _ISCIIClose(UConverter *cnv) { - if (cnv->extraInfo!=NULL) { - if (!cnv->isExtraLocal) { - uprv_free(cnv->extraInfo); - } - cnv->extraInfo=NULL; - } -} - -static const char* _ISCIIgetName(const UConverter* cnv) { - if (cnv->extraInfo) { - UConverterDataISCII* myData= (UConverterDataISCII*)cnv->extraInfo; - return myData->name; - } - return NULL; -} - -static void _ISCIIReset(UConverter *cnv, UConverterResetChoice choice) { - UConverterDataISCII* data =(UConverterDataISCII *) (cnv->extraInfo); - if (choice<=UCNV_RESET_TO_UNICODE) { - cnv->toUnicodeStatus = missingCharMarker; - cnv->mode=0; - data->currentDeltaToUnicode=data->defDeltaToUnicode; - data->currentMaskToUnicode = data->defMaskToUnicode; - data->contextCharToUnicode=NO_CHAR_MARKER; - data->prevToUnicodeStatus = 0x0000; - } - if (choice!=UCNV_RESET_TO_UNICODE) { - cnv->fromUChar32=0x0000; - data->contextCharFromUnicode=0x00; - data->currentMaskFromUnicode=data->defMaskToUnicode; - data->currentDeltaFromUnicode=data->defDeltaToUnicode; - data->isFirstBuffer=TRUE; - data->resetToDefaultToUnicode=FALSE; - } -} - -/** - * The values in validity table are indexed by the lower bits of Unicode - * range 0x0900 - 0x09ff. The values have a structure like: - * --------------------------------------------------------------- - * | DEV | PNJ | GJR | ORI | BNG | TLG | MLM | TML | - * | | | | | ASM | KND | | | - * --------------------------------------------------------------- - * If a code point is valid in a particular script - * then that bit is turned on - * - * Unicode does not distinguish between Bengali and Assamese so we use 1 bit for - * to represent these languages - * - * Telugu and Kannada have same codepoints except for Vocallic_RR which we special case - * and combine and use 1 bit to represent these languages. - * - * TODO: It is probably easier to understand and maintain to change this - * to use uint16_t and give each of the 9 Unicode/script blocks its own bit. - */ - -static const uint8_t validityTable[128] = { -/* This state table is tool generated please do not edit unless you know exactly what you are doing */ -/* Note: This table was edited to mirror the Windows XP implementation */ -/*ISCII:Valid:Unicode */ -/*0xa0 : 0x00: 0x900 */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xa1 : 0xb8: 0x901 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , -/*0xa2 : 0xfe: 0x902 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa3 : 0xbf: 0x903 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0x00 : 0x00: 0x904 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xa4 : 0xff: 0x905 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa5 : 0xff: 0x906 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa6 : 0xff: 0x907 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa7 : 0xff: 0x908 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa8 : 0xff: 0x909 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xa9 : 0xff: 0x90a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xaa : 0xfe: 0x90b */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0x00 : 0x00: 0x90c */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xae : 0x80: 0x90d */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xab : 0x87: 0x90e */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xac : 0xff: 0x90f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xad : 0xff: 0x910 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb2 : 0x80: 0x911 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xaf : 0x87: 0x912 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xb0 : 0xff: 0x913 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb1 : 0xff: 0x914 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb3 : 0xff: 0x915 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb4 : 0xfe: 0x916 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xb5 : 0xfe: 0x917 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xb6 : 0xfe: 0x918 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xb7 : 0xff: 0x919 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb8 : 0xff: 0x91a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xb9 : 0xfe: 0x91b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xba : 0xff: 0x91c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xbb : 0xfe: 0x91d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xbc : 0xff: 0x91e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xbd : 0xff: 0x91f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xbe : 0xfe: 0x920 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xbf : 0xfe: 0x921 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xc0 : 0xfe: 0x922 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xc1 : 0xff: 0x923 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xc2 : 0xff: 0x924 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xc3 : 0xfe: 0x925 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xc4 : 0xfe: 0x926 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xc5 : 0xfe: 0x927 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xc6 : 0xff: 0x928 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xc7 : 0x81: 0x929 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + TML_MASK , -/*0xc8 : 0xff: 0x92a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xc9 : 0xfe: 0x92b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xca : 0xfe: 0x92c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xcb : 0xfe: 0x92d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xcc : 0xfe: 0x92e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xcd : 0xff: 0x92f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xcf : 0xff: 0x930 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xd0 : 0x87: 0x931 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK , -/*0xd1 : 0xff: 0x932 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xd2 : 0xb7: 0x933 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xd3 : 0x83: 0x934 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + MLM_MASK + TML_MASK , -/*0xd4 : 0xff: 0x935 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xd5 : 0xfe: 0x936 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0xd6 : 0xbf: 0x937 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xd7 : 0xff: 0x938 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xd8 : 0xff: 0x939 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0x00 : 0x00: 0x93A */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x93B */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xe9 : 0xda: 0x93c */ DEV_MASK + PNJ_MASK + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x93d */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xda : 0xff: 0x93e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xdb : 0xff: 0x93f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xdc : 0xff: 0x940 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xdd : 0xff: 0x941 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xde : 0xff: 0x942 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xdf : 0xbe: 0x943 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0x00 : 0x00: 0x944 */ DEV_MASK + ZERO + GJR_MASK + ZERO + BNG_MASK + KND_MASK + ZERO + ZERO , -/*0xe3 : 0x80: 0x945 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xe0 : 0x87: 0x946 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xe1 : 0xff: 0x947 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xe2 : 0xff: 0x948 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xe7 : 0x80: 0x949 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xe4 : 0x87: 0x94a */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + KND_MASK + MLM_MASK + TML_MASK , -/*0xe5 : 0xff: 0x94b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xe6 : 0xff: 0x94c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xe8 : 0xff: 0x94d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xec : 0x00: 0x94e */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xed : 0x00: 0x94f */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x950 */ DEV_MASK + ZERO + GJR_MASK + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x951 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x952 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x953 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x954 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x955 */ ZERO + ZERO + ZERO + ZERO + ZERO + KND_MASK + ZERO + ZERO , -/*0x00 : 0x00: 0x956 */ ZERO + ZERO + ZERO + ORI_MASK + ZERO + KND_MASK + ZERO + ZERO , -/*0x00 : 0x00: 0x957 */ ZERO + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + MLM_MASK + ZERO , -/*0x00 : 0x00: 0x958 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x959 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x95a */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x95b */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x95c */ DEV_MASK + PNJ_MASK + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x95d */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x95e */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xce : 0x98: 0x95f */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x960 */ DEV_MASK + ZERO + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0x00 : 0x00: 0x961 */ DEV_MASK + ZERO + ZERO + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + ZERO , -/*0x00 : 0x00: 0x962 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , -/*0x00 : 0x00: 0x963 */ DEV_MASK + ZERO + ZERO + ZERO + BNG_MASK + ZERO + ZERO + ZERO , -/*0xea : 0xf8: 0x964 */ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xeaea : 0x00: 0x965*/ DEV_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/*0xf1 : 0xff: 0x966 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf2 : 0xff: 0x967 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf3 : 0xff: 0x968 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf4 : 0xff: 0x969 */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf5 : 0xff: 0x96a */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf6 : 0xff: 0x96b */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf7 : 0xff: 0x96c */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf8 : 0xff: 0x96d */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xf9 : 0xff: 0x96e */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0xfa : 0xff: 0x96f */ DEV_MASK + PNJ_MASK + GJR_MASK + ORI_MASK + BNG_MASK + KND_MASK + MLM_MASK + TML_MASK , -/*0x00 : 0x80: 0x970 */ DEV_MASK + PNJ_MASK + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO , -/* - * The length of the array is 128 to provide values for 0x900..0x97f. - * The last 15 entries for 0x971..0x97f of the validity table are all zero - * because no Indic script uses such Unicode code points. - */ -/*0x00 : 0x00: 0x9yz */ ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO + ZERO -}; - -static const uint16_t fromUnicodeTable[128]={ - 0x00a0 ,/* 0x0900 */ - 0x00a1 ,/* 0x0901 */ - 0x00a2 ,/* 0x0902 */ - 0x00a3 ,/* 0x0903 */ - 0xa4e0 ,/* 0x0904 */ - 0x00a4 ,/* 0x0905 */ - 0x00a5 ,/* 0x0906 */ - 0x00a6 ,/* 0x0907 */ - 0x00a7 ,/* 0x0908 */ - 0x00a8 ,/* 0x0909 */ - 0x00a9 ,/* 0x090a */ - 0x00aa ,/* 0x090b */ - 0xA6E9 ,/* 0x090c */ - 0x00ae ,/* 0x090d */ - 0x00ab ,/* 0x090e */ - 0x00ac ,/* 0x090f */ - 0x00ad ,/* 0x0910 */ - 0x00b2 ,/* 0x0911 */ - 0x00af ,/* 0x0912 */ - 0x00b0 ,/* 0x0913 */ - 0x00b1 ,/* 0x0914 */ - 0x00b3 ,/* 0x0915 */ - 0x00b4 ,/* 0x0916 */ - 0x00b5 ,/* 0x0917 */ - 0x00b6 ,/* 0x0918 */ - 0x00b7 ,/* 0x0919 */ - 0x00b8 ,/* 0x091a */ - 0x00b9 ,/* 0x091b */ - 0x00ba ,/* 0x091c */ - 0x00bb ,/* 0x091d */ - 0x00bc ,/* 0x091e */ - 0x00bd ,/* 0x091f */ - 0x00be ,/* 0x0920 */ - 0x00bf ,/* 0x0921 */ - 0x00c0 ,/* 0x0922 */ - 0x00c1 ,/* 0x0923 */ - 0x00c2 ,/* 0x0924 */ - 0x00c3 ,/* 0x0925 */ - 0x00c4 ,/* 0x0926 */ - 0x00c5 ,/* 0x0927 */ - 0x00c6 ,/* 0x0928 */ - 0x00c7 ,/* 0x0929 */ - 0x00c8 ,/* 0x092a */ - 0x00c9 ,/* 0x092b */ - 0x00ca ,/* 0x092c */ - 0x00cb ,/* 0x092d */ - 0x00cc ,/* 0x092e */ - 0x00cd ,/* 0x092f */ - 0x00cf ,/* 0x0930 */ - 0x00d0 ,/* 0x0931 */ - 0x00d1 ,/* 0x0932 */ - 0x00d2 ,/* 0x0933 */ - 0x00d3 ,/* 0x0934 */ - 0x00d4 ,/* 0x0935 */ - 0x00d5 ,/* 0x0936 */ - 0x00d6 ,/* 0x0937 */ - 0x00d7 ,/* 0x0938 */ - 0x00d8 ,/* 0x0939 */ - 0xFFFF ,/* 0x093A */ - 0xFFFF ,/* 0x093B */ - 0x00e9 ,/* 0x093c */ - 0xEAE9 ,/* 0x093d */ - 0x00da ,/* 0x093e */ - 0x00db ,/* 0x093f */ - 0x00dc ,/* 0x0940 */ - 0x00dd ,/* 0x0941 */ - 0x00de ,/* 0x0942 */ - 0x00df ,/* 0x0943 */ - 0xDFE9 ,/* 0x0944 */ - 0x00e3 ,/* 0x0945 */ - 0x00e0 ,/* 0x0946 */ - 0x00e1 ,/* 0x0947 */ - 0x00e2 ,/* 0x0948 */ - 0x00e7 ,/* 0x0949 */ - 0x00e4 ,/* 0x094a */ - 0x00e5 ,/* 0x094b */ - 0x00e6 ,/* 0x094c */ - 0x00e8 ,/* 0x094d */ - 0x00ec ,/* 0x094e */ - 0x00ed ,/* 0x094f */ - 0xA1E9 ,/* 0x0950 */ /* OM Symbol */ - 0xFFFF ,/* 0x0951 */ - 0xF0B8 ,/* 0x0952 */ - 0xFFFF ,/* 0x0953 */ - 0xFFFF ,/* 0x0954 */ - 0xFFFF ,/* 0x0955 */ - 0xFFFF ,/* 0x0956 */ - 0xFFFF ,/* 0x0957 */ - 0xb3e9 ,/* 0x0958 */ - 0xb4e9 ,/* 0x0959 */ - 0xb5e9 ,/* 0x095a */ - 0xbae9 ,/* 0x095b */ - 0xbfe9 ,/* 0x095c */ - 0xC0E9 ,/* 0x095d */ - 0xc9e9 ,/* 0x095e */ - 0x00ce ,/* 0x095f */ - 0xAAe9 ,/* 0x0960 */ - 0xA7E9 ,/* 0x0961 */ - 0xDBE9 ,/* 0x0962 */ - 0xDCE9 ,/* 0x0963 */ - 0x00ea ,/* 0x0964 */ - 0xeaea ,/* 0x0965 */ - 0x00f1 ,/* 0x0966 */ - 0x00f2 ,/* 0x0967 */ - 0x00f3 ,/* 0x0968 */ - 0x00f4 ,/* 0x0969 */ - 0x00f5 ,/* 0x096a */ - 0x00f6 ,/* 0x096b */ - 0x00f7 ,/* 0x096c */ - 0x00f8 ,/* 0x096d */ - 0x00f9 ,/* 0x096e */ - 0x00fa ,/* 0x096f */ - 0xF0BF ,/* 0x0970 */ - 0xFFFF ,/* 0x0971 */ - 0xFFFF ,/* 0x0972 */ - 0xFFFF ,/* 0x0973 */ - 0xFFFF ,/* 0x0974 */ - 0xFFFF ,/* 0x0975 */ - 0xFFFF ,/* 0x0976 */ - 0xFFFF ,/* 0x0977 */ - 0xFFFF ,/* 0x0978 */ - 0xFFFF ,/* 0x0979 */ - 0xFFFF ,/* 0x097a */ - 0xFFFF ,/* 0x097b */ - 0xFFFF ,/* 0x097c */ - 0xFFFF ,/* 0x097d */ - 0xFFFF ,/* 0x097e */ - 0xFFFF ,/* 0x097f */ -}; -static const uint16_t toUnicodeTable[256]={ - 0x0000,/* 0x00 */ - 0x0001,/* 0x01 */ - 0x0002,/* 0x02 */ - 0x0003,/* 0x03 */ - 0x0004,/* 0x04 */ - 0x0005,/* 0x05 */ - 0x0006,/* 0x06 */ - 0x0007,/* 0x07 */ - 0x0008,/* 0x08 */ - 0x0009,/* 0x09 */ - 0x000a,/* 0x0a */ - 0x000b,/* 0x0b */ - 0x000c,/* 0x0c */ - 0x000d,/* 0x0d */ - 0x000e,/* 0x0e */ - 0x000f,/* 0x0f */ - 0x0010,/* 0x10 */ - 0x0011,/* 0x11 */ - 0x0012,/* 0x12 */ - 0x0013,/* 0x13 */ - 0x0014,/* 0x14 */ - 0x0015,/* 0x15 */ - 0x0016,/* 0x16 */ - 0x0017,/* 0x17 */ - 0x0018,/* 0x18 */ - 0x0019,/* 0x19 */ - 0x001a,/* 0x1a */ - 0x001b,/* 0x1b */ - 0x001c,/* 0x1c */ - 0x001d,/* 0x1d */ - 0x001e,/* 0x1e */ - 0x001f,/* 0x1f */ - 0x0020,/* 0x20 */ - 0x0021,/* 0x21 */ - 0x0022,/* 0x22 */ - 0x0023,/* 0x23 */ - 0x0024,/* 0x24 */ - 0x0025,/* 0x25 */ - 0x0026,/* 0x26 */ - 0x0027,/* 0x27 */ - 0x0028,/* 0x28 */ - 0x0029,/* 0x29 */ - 0x002a,/* 0x2a */ - 0x002b,/* 0x2b */ - 0x002c,/* 0x2c */ - 0x002d,/* 0x2d */ - 0x002e,/* 0x2e */ - 0x002f,/* 0x2f */ - 0x0030,/* 0x30 */ - 0x0031,/* 0x31 */ - 0x0032,/* 0x32 */ - 0x0033,/* 0x33 */ - 0x0034,/* 0x34 */ - 0x0035,/* 0x35 */ - 0x0036,/* 0x36 */ - 0x0037,/* 0x37 */ - 0x0038,/* 0x38 */ - 0x0039,/* 0x39 */ - 0x003A,/* 0x3A */ - 0x003B,/* 0x3B */ - 0x003c,/* 0x3c */ - 0x003d,/* 0x3d */ - 0x003e,/* 0x3e */ - 0x003f,/* 0x3f */ - 0x0040,/* 0x40 */ - 0x0041,/* 0x41 */ - 0x0042,/* 0x42 */ - 0x0043,/* 0x43 */ - 0x0044,/* 0x44 */ - 0x0045,/* 0x45 */ - 0x0046,/* 0x46 */ - 0x0047,/* 0x47 */ - 0x0048,/* 0x48 */ - 0x0049,/* 0x49 */ - 0x004a,/* 0x4a */ - 0x004b,/* 0x4b */ - 0x004c,/* 0x4c */ - 0x004d,/* 0x4d */ - 0x004e,/* 0x4e */ - 0x004f,/* 0x4f */ - 0x0050,/* 0x50 */ - 0x0051,/* 0x51 */ - 0x0052,/* 0x52 */ - 0x0053,/* 0x53 */ - 0x0054,/* 0x54 */ - 0x0055,/* 0x55 */ - 0x0056,/* 0x56 */ - 0x0057,/* 0x57 */ - 0x0058,/* 0x58 */ - 0x0059,/* 0x59 */ - 0x005a,/* 0x5a */ - 0x005b,/* 0x5b */ - 0x005c,/* 0x5c */ - 0x005d,/* 0x5d */ - 0x005e,/* 0x5e */ - 0x005f,/* 0x5f */ - 0x0060,/* 0x60 */ - 0x0061,/* 0x61 */ - 0x0062,/* 0x62 */ - 0x0063,/* 0x63 */ - 0x0064,/* 0x64 */ - 0x0065,/* 0x65 */ - 0x0066,/* 0x66 */ - 0x0067,/* 0x67 */ - 0x0068,/* 0x68 */ - 0x0069,/* 0x69 */ - 0x006a,/* 0x6a */ - 0x006b,/* 0x6b */ - 0x006c,/* 0x6c */ - 0x006d,/* 0x6d */ - 0x006e,/* 0x6e */ - 0x006f,/* 0x6f */ - 0x0070,/* 0x70 */ - 0x0071,/* 0x71 */ - 0x0072,/* 0x72 */ - 0x0073,/* 0x73 */ - 0x0074,/* 0x74 */ - 0x0075,/* 0x75 */ - 0x0076,/* 0x76 */ - 0x0077,/* 0x77 */ - 0x0078,/* 0x78 */ - 0x0079,/* 0x79 */ - 0x007a,/* 0x7a */ - 0x007b,/* 0x7b */ - 0x007c,/* 0x7c */ - 0x007d,/* 0x7d */ - 0x007e,/* 0x7e */ - 0x007f,/* 0x7f */ - 0x0080,/* 0x80 */ - 0x0081,/* 0x81 */ - 0x0082,/* 0x82 */ - 0x0083,/* 0x83 */ - 0x0084,/* 0x84 */ - 0x0085,/* 0x85 */ - 0x0086,/* 0x86 */ - 0x0087,/* 0x87 */ - 0x0088,/* 0x88 */ - 0x0089,/* 0x89 */ - 0x008a,/* 0x8a */ - 0x008b,/* 0x8b */ - 0x008c,/* 0x8c */ - 0x008d,/* 0x8d */ - 0x008e,/* 0x8e */ - 0x008f,/* 0x8f */ - 0x0090,/* 0x90 */ - 0x0091,/* 0x91 */ - 0x0092,/* 0x92 */ - 0x0093,/* 0x93 */ - 0x0094,/* 0x94 */ - 0x0095,/* 0x95 */ - 0x0096,/* 0x96 */ - 0x0097,/* 0x97 */ - 0x0098,/* 0x98 */ - 0x0099,/* 0x99 */ - 0x009a,/* 0x9a */ - 0x009b,/* 0x9b */ - 0x009c,/* 0x9c */ - 0x009d,/* 0x9d */ - 0x009e,/* 0x9e */ - 0x009f,/* 0x9f */ - 0x00A0,/* 0xa0 */ - 0x0901,/* 0xa1 */ - 0x0902,/* 0xa2 */ - 0x0903,/* 0xa3 */ - 0x0905,/* 0xa4 */ - 0x0906,/* 0xa5 */ - 0x0907,/* 0xa6 */ - 0x0908,/* 0xa7 */ - 0x0909,/* 0xa8 */ - 0x090a,/* 0xa9 */ - 0x090b,/* 0xaa */ - 0x090e,/* 0xab */ - 0x090f,/* 0xac */ - 0x0910,/* 0xad */ - 0x090d,/* 0xae */ - 0x0912,/* 0xaf */ - 0x0913,/* 0xb0 */ - 0x0914,/* 0xb1 */ - 0x0911,/* 0xb2 */ - 0x0915,/* 0xb3 */ - 0x0916,/* 0xb4 */ - 0x0917,/* 0xb5 */ - 0x0918,/* 0xb6 */ - 0x0919,/* 0xb7 */ - 0x091a,/* 0xb8 */ - 0x091b,/* 0xb9 */ - 0x091c,/* 0xba */ - 0x091d,/* 0xbb */ - 0x091e,/* 0xbc */ - 0x091f,/* 0xbd */ - 0x0920,/* 0xbe */ - 0x0921,/* 0xbf */ - 0x0922,/* 0xc0 */ - 0x0923,/* 0xc1 */ - 0x0924,/* 0xc2 */ - 0x0925,/* 0xc3 */ - 0x0926,/* 0xc4 */ - 0x0927,/* 0xc5 */ - 0x0928,/* 0xc6 */ - 0x0929,/* 0xc7 */ - 0x092a,/* 0xc8 */ - 0x092b,/* 0xc9 */ - 0x092c,/* 0xca */ - 0x092d,/* 0xcb */ - 0x092e,/* 0xcc */ - 0x092f,/* 0xcd */ - 0x095f,/* 0xce */ - 0x0930,/* 0xcf */ - 0x0931,/* 0xd0 */ - 0x0932,/* 0xd1 */ - 0x0933,/* 0xd2 */ - 0x0934,/* 0xd3 */ - 0x0935,/* 0xd4 */ - 0x0936,/* 0xd5 */ - 0x0937,/* 0xd6 */ - 0x0938,/* 0xd7 */ - 0x0939,/* 0xd8 */ - 0x200D,/* 0xd9 */ - 0x093e,/* 0xda */ - 0x093f,/* 0xdb */ - 0x0940,/* 0xdc */ - 0x0941,/* 0xdd */ - 0x0942,/* 0xde */ - 0x0943,/* 0xdf */ - 0x0946,/* 0xe0 */ - 0x0947,/* 0xe1 */ - 0x0948,/* 0xe2 */ - 0x0945,/* 0xe3 */ - 0x094a,/* 0xe4 */ - 0x094b,/* 0xe5 */ - 0x094c,/* 0xe6 */ - 0x0949,/* 0xe7 */ - 0x094d,/* 0xe8 */ - 0x093c,/* 0xe9 */ - 0x0964,/* 0xea */ - 0xFFFF,/* 0xeb */ - 0xFFFF,/* 0xec */ - 0xFFFF,/* 0xed */ - 0xFFFF,/* 0xee */ - 0xFFFF,/* 0xef */ - 0xFFFF,/* 0xf0 */ - 0x0966,/* 0xf1 */ - 0x0967,/* 0xf2 */ - 0x0968,/* 0xf3 */ - 0x0969,/* 0xf4 */ - 0x096a,/* 0xf5 */ - 0x096b,/* 0xf6 */ - 0x096c,/* 0xf7 */ - 0x096d,/* 0xf8 */ - 0x096e,/* 0xf9 */ - 0x096f,/* 0xfa */ - 0xFFFF,/* 0xfb */ - 0xFFFF,/* 0xfc */ - 0xFFFF,/* 0xfd */ - 0xFFFF,/* 0xfe */ - 0xFFFF /* 0xff */ -}; - -static const uint16_t vowelSignESpecialCases[][2]={ - { 2 /*length of array*/ , 0 }, - { 0xA4 , 0x0904 }, -}; - -static const uint16_t nuktaSpecialCases[][2]={ - { 16 /*length of array*/ , 0 }, - { 0xA6 , 0x090c }, - { 0xEA , 0x093D }, - { 0xDF , 0x0944 }, - { 0xA1 , 0x0950 }, - { 0xb3 , 0x0958 }, - { 0xb4 , 0x0959 }, - { 0xb5 , 0x095a }, - { 0xba , 0x095b }, - { 0xbf , 0x095c }, - { 0xC0 , 0x095d }, - { 0xc9 , 0x095e }, - { 0xAA , 0x0960 }, - { 0xA7 , 0x0961 }, - { 0xDB , 0x0962 }, - { 0xDC , 0x0963 }, -}; - - -#define WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err){ \ - int32_t offset = (int32_t)(source - args->source-1); \ - /* write the targetUniChar to target */ \ - if(target < targetLimit){ \ - if(targetByteUnit <= 0xFF){ \ - *(target)++ = (uint8_t)(targetByteUnit); \ - if(offsets){ \ - *(offsets++) = offset; \ - } \ - }else{ \ - if (targetByteUnit > 0xFFFF) { \ - *(target)++ = (uint8_t)(targetByteUnit>>16); \ - if (offsets) { \ - --offset; \ - *(offsets++) = offset; \ - } \ - } \ - if (!(target < targetLimit)) { \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ - (uint8_t)(targetByteUnit >> 8); \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ - (uint8_t)targetByteUnit; \ - *err = U_BUFFER_OVERFLOW_ERROR; \ - } else { \ - *(target)++ = (uint8_t)(targetByteUnit>>8); \ - if(offsets){ \ - *(offsets++) = offset; \ - } \ - if(target < targetLimit){ \ - *(target)++ = (uint8_t) targetByteUnit; \ - if(offsets){ \ - *(offsets++) = offset ; \ - } \ - }else{ \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] =\ - (uint8_t) (targetByteUnit); \ - *err = U_BUFFER_OVERFLOW_ERROR; \ - } \ - } \ - } \ - }else{ \ - if (targetByteUnit & 0xFF0000) { \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ - (uint8_t) (targetByteUnit >>16); \ - } \ - if(targetByteUnit & 0xFF00){ \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ - (uint8_t) (targetByteUnit >>8); \ - } \ - args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = \ - (uint8_t) (targetByteUnit); \ - *err = U_BUFFER_OVERFLOW_ERROR; \ - } \ -} - -/* Rules: - * Explicit Halant : - * + - * Soft Halant : - * + - */ - -static void UConverter_fromUnicode_ISCII_OFFSETS_LOGIC( - UConverterFromUnicodeArgs * args, UErrorCode * err) { - const UChar *source = args->source; - const UChar *sourceLimit = args->sourceLimit; - unsigned char *target = (unsigned char *) args->target; - unsigned char *targetLimit = (unsigned char *) args->targetLimit; - int32_t* offsets = args->offsets; - uint32_t targetByteUnit = 0x0000; - UChar32 sourceChar = 0x0000; - UChar32 tempContextFromUnicode = 0x0000; /* For special handling of the Gurmukhi script. */ - UConverterDataISCII *converterData; - uint16_t newDelta=0; - uint16_t range = 0; - UBool deltaChanged = FALSE; - - if ((args->converter == NULL) || (args->targetLimit < args->target) || (args->sourceLimit < args->source)) { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - /* initialize data */ - converterData=(UConverterDataISCII*)args->converter->extraInfo; - newDelta=converterData->currentDeltaFromUnicode; - range = (uint16_t)(newDelta/DELTA); - - if ((sourceChar = args->converter->fromUChar32)!=0) { - goto getTrail; - } - - /*writing the char to the output stream */ - while (source < sourceLimit) { - /* Write the language code following LF only if LF is not the last character. */ - if (args->converter->fromUnicodeStatus == LF) { - targetByteUnit = ATR<<8; - targetByteUnit += (uint8_t) lookupInitialData[range].isciiLang; - args->converter->fromUnicodeStatus = 0x0000; - /* now append ATR and language code */ - WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err); - if (U_FAILURE(*err)) { - break; - } - } - - sourceChar = *source++; - tempContextFromUnicode = converterData->contextCharFromUnicode; - - targetByteUnit = missingCharMarker; - - /*check if input is in ASCII and C0 control codes range*/ - if (sourceChar <= ASCII_END) { - args->converter->fromUnicodeStatus = sourceChar; - WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,sourceChar,err); - if (U_FAILURE(*err)) { - break; - } - continue; - } - switch (sourceChar) { - case ZWNJ: - /* contextChar has HALANT */ - if (converterData->contextCharFromUnicode) { - converterData->contextCharFromUnicode = 0x00; - targetByteUnit = ISCII_HALANT; - } else { - /* consume ZWNJ and continue */ - converterData->contextCharFromUnicode = 0x00; - continue; - } - break; - case ZWJ: - /* contextChar has HALANT */ - if (converterData->contextCharFromUnicode) { - targetByteUnit = ISCII_NUKTA; - } else { - targetByteUnit =ISCII_INV; - } - converterData->contextCharFromUnicode = 0x00; - break; - default: - /* is the sourceChar in the INDIC_RANGE? */ - if ((uint16_t)(INDIC_BLOCK_END-sourceChar) <= INDIC_RANGE) { - /* Danda and Double Danda are valid in Northern scripts.. since Unicode - * does not include these codepoints in all Northern scrips we need to - * filter them out - */ - if (sourceChar!= DANDA && sourceChar != DOUBLE_DANDA) { - /* find out to which block the souceChar belongs*/ - range =(uint16_t)((sourceChar-INDIC_BLOCK_BEGIN)/DELTA); - newDelta =(uint16_t)(range*DELTA); - - /* Now are we in the same block as the previous? */ - if (newDelta!= converterData->currentDeltaFromUnicode || converterData->isFirstBuffer) { - converterData->currentDeltaFromUnicode = newDelta; - converterData->currentMaskFromUnicode = lookupInitialData[range].maskEnum; - deltaChanged =TRUE; - converterData->isFirstBuffer=FALSE; - } - - if (converterData->currentDeltaFromUnicode == PNJ_DELTA) { - if (sourceChar == PNJ_TIPPI) { - /* Make sure Tippi is converterd to Bindi. */ - sourceChar = PNJ_BINDI; - } else if (sourceChar == PNJ_ADHAK) { - /* This is for consonant cluster handling. */ - converterData->contextCharFromUnicode = PNJ_ADHAK; - } - - } - /* Normalize all Indic codepoints to Devanagari and map them to ISCII */ - /* now subtract the new delta from sourceChar*/ - sourceChar -= converterData->currentDeltaFromUnicode; - } - - /* get the target byte unit */ - targetByteUnit=fromUnicodeTable[(uint8_t)sourceChar]; - - /* is the code point valid in current script? */ - if ((validityTable[(uint8_t)sourceChar] & converterData->currentMaskFromUnicode)==0) { - /* Vocallic RR is assigned in ISCII Telugu and Unicode */ - if (converterData->currentDeltaFromUnicode!=(TELUGU_DELTA) || sourceChar!=VOCALLIC_RR) { - targetByteUnit=missingCharMarker; - } - } - - if (deltaChanged) { - /* we are in a script block which is different than - * previous sourceChar's script block write ATR and language codes - */ - uint32_t temp=0; - temp =(uint16_t)(ATR<<8); - temp += (uint16_t)((uint8_t) lookupInitialData[range].isciiLang); - /* reset */ - deltaChanged=FALSE; - /* now append ATR and language code */ - WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,temp,err); - if (U_FAILURE(*err)) { - break; - } - } - - if (converterData->currentDeltaFromUnicode == PNJ_DELTA && (sourceChar + PNJ_DELTA) == PNJ_ADHAK) { - continue; - } - } - /* reset context char */ - converterData->contextCharFromUnicode = 0x00; - break; - } - if (converterData->currentDeltaFromUnicode == PNJ_DELTA && tempContextFromUnicode == PNJ_ADHAK && isPNJConsonant((sourceChar + PNJ_DELTA))) { - /* If the previous codepoint is Adhak and the current codepoint is a consonant, the targetByteUnit should be C + Halant + C. */ - /* reset context char */ - converterData->contextCharFromUnicode = 0x0000; - targetByteUnit = targetByteUnit << 16 | ISCII_HALANT << 8 | targetByteUnit; - /* write targetByteUnit to target */ - WRITE_TO_TARGET_FROM_U(args, offsets, source, target, targetLimit, targetByteUnit,err); - if (U_FAILURE(*err)) { - break; - } - } else if (targetByteUnit != missingCharMarker) { - if (targetByteUnit==ISCII_HALANT) { - converterData->contextCharFromUnicode = (UChar)targetByteUnit; - } - /* write targetByteUnit to target*/ - WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err); - if (U_FAILURE(*err)) { - break; - } - } else { - /* oops.. the code point is unassigned */ - /*check if the char is a First surrogate*/ - if (U16_IS_SURROGATE(sourceChar)) { - if (U16_IS_SURROGATE_LEAD(sourceChar)) { -getTrail: - /*look ahead to find the trail surrogate*/ - if (source < sourceLimit) { - /* test the following code unit */ - UChar trail= (*source); - if (U16_IS_TRAIL(trail)) { - source++; - sourceChar=U16_GET_SUPPLEMENTARY(sourceChar, trail); - *err =U_INVALID_CHAR_FOUND; - /* convert this surrogate code point */ - /* exit this condition tree */ - } else { - /* this is an unmatched lead code unit (1st surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* no more input */ - *err = U_ZERO_ERROR; - } - } else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - *err=U_ILLEGAL_CHAR_FOUND; - } - } else { - /* callback(unassigned) for a BMP code point */ - *err = U_INVALID_CHAR_FOUND; - } - - args->converter->fromUChar32=sourceChar; - break; - } - }/* end while(mySourceIndexsource = source; - args->target = (char*)target; -} - -static const uint16_t lookupTable[][2]={ - { ZERO, ZERO }, /*DEFALT*/ - { ZERO, ZERO }, /*ROMAN*/ - { DEVANAGARI, DEV_MASK }, - { BENGALI, BNG_MASK }, - { TAMIL, TML_MASK }, - { TELUGU, KND_MASK }, - { BENGALI, BNG_MASK }, - { ORIYA, ORI_MASK }, - { KANNADA, KND_MASK }, - { MALAYALAM, MLM_MASK }, - { GUJARATI, GJR_MASK }, - { GURMUKHI, PNJ_MASK } -}; - -#define WRITE_TO_TARGET_TO_U(args,source,target,offsets,offset,targetUniChar,delta, err){\ - /* add offset to current Indic Block */ \ - if(targetUniChar>ASCII_END && \ - targetUniChar != ZWJ && \ - targetUniChar != ZWNJ && \ - targetUniChar != DANDA && \ - targetUniChar != DOUBLE_DANDA){ \ - \ - targetUniChar+=(uint16_t)(delta); \ - } \ - /* now write the targetUniChar */ \ - if(targettargetLimit){ \ - *(target)++ = (UChar)targetUniChar; \ - if(offsets){ \ - *(offsets)++ = (int32_t)(offset); \ - } \ - }else{ \ - args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++] = \ - (UChar)targetUniChar; \ - *err = U_BUFFER_OVERFLOW_ERROR; \ - } \ -} - -#define GET_MAPPING(sourceChar,targetUniChar,data){ \ - targetUniChar = toUnicodeTable[(sourceChar)] ; \ - /* is the code point valid in current script? */ \ - if(sourceChar> ASCII_END && \ - (validityTable[(targetUniChar & 0x7F)] & data->currentMaskToUnicode)==0){ \ - /* Vocallic RR is assigne in ISCII Telugu and Unicode */ \ - if(data->currentDeltaToUnicode!=(TELUGU_DELTA) || \ - targetUniChar!=VOCALLIC_RR){ \ - targetUniChar=missingCharMarker; \ - } \ - } \ -} - -/*********** - * Rules for ISCII to Unicode converter - * ISCII is stateful encoding. To convert ISCII bytes to Unicode, - * which has both precomposed and decomposed forms characters - * pre-context and post-context need to be considered. - * - * Post context - * i) ATR : Attribute code is used to declare the font and script switching. - * Currently we only switch scripts and font codes consumed without generating an error - * ii) EXT : Extention code is used to declare switching to Sanskrit and for obscure, - * obsolete characters - * Pre context - * i) Halant: if preceeded by a halant then it is a explicit halant - * ii) Nukta : - * a) if preceeded by a halant then it is a soft halant - * b) if preceeded by specific consonants and the ligatures have pre-composed - * characters in Unicode then convert to pre-composed characters - * iii) Danda: If Danda is preceeded by a Danda then convert to Double Danda - * - */ - -static void UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err) { - const char *source = ( char *) args->source; - UChar *target = args->target; - const char *sourceLimit = args->sourceLimit; - const UChar* targetLimit = args->targetLimit; - uint32_t targetUniChar = 0x0000; - uint8_t sourceChar = 0x0000; - UConverterDataISCII* data; - UChar32* toUnicodeStatus=NULL; - UChar32 tempTargetUniChar = 0x0000; - UChar* contextCharToUnicode= NULL; - UBool found; - int i; - int offset = 0; - - if ((args->converter == NULL) || (target < args->target) || (source < args->source)) { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - data = (UConverterDataISCII*)(args->converter->extraInfo); - contextCharToUnicode = &data->contextCharToUnicode; /* contains previous ISCII codepoint visited */ - toUnicodeStatus = (UChar32*)&args->converter->toUnicodeStatus;/* contains the mapping to Unicode of the above codepoint*/ - - while (U_SUCCESS(*err) && sourcecurrentDeltaToUnicode = (uint16_t)(lookupTable[sourceChar & 0x0F][0] * DELTA); - data->currentMaskToUnicode = (MaskEnum)lookupTable[sourceChar & 0x0F][1]; - } else if (sourceChar==DEF) { - /* switch back to default */ - data->currentDeltaToUnicode = data->defDeltaToUnicode; - data->currentMaskToUnicode = data->defMaskToUnicode; - } else { - if ((sourceChar >= 0x21 && sourceChar <= 0x3F)) { - /* these are display codes consume and continue */ - } else { - *err =U_ILLEGAL_CHAR_FOUND; - /* reset */ - *contextCharToUnicode=NO_CHAR_MARKER; - goto CALLBACK; - } - } - - /* reset */ - *contextCharToUnicode=NO_CHAR_MARKER; - - continue; - - } else if (*contextCharToUnicode==EXT) { - /* check if sourceChar is in 0xA1-0xEE range */ - if ((uint8_t) (EXT_RANGE_END - sourceChar) <= (EXT_RANGE_END - EXT_RANGE_BEGIN)) { - /* We currently support only Anudatta and Devanagari abbreviation sign */ - if (sourceChar==0xBF || sourceChar == 0xB8) { - targetUniChar = (sourceChar==0xBF) ? DEV_ABBR_SIGN : DEV_ANUDATTA; - - /* find out if the mapping is valid in this state */ - if (validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode) { - *contextCharToUnicode= NO_CHAR_MARKER; - - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - /* write to target */ - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); - - continue; - } - } - /* byte unit is unassigned */ - targetUniChar = missingCharMarker; - *err= U_INVALID_CHAR_FOUND; - } else { - /* only 0xA1 - 0xEE are legal after EXT char */ - *contextCharToUnicode= NO_CHAR_MARKER; - *err = U_ILLEGAL_CHAR_FOUND; - } - goto CALLBACK; - } else if (*contextCharToUnicode==ISCII_INV) { - if (sourceChar==ISCII_HALANT) { - targetUniChar = 0x0020; /* replace with space accoding to Indic FAQ */ - } else { - targetUniChar = ZWJ; - } - - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - /* write to target */ - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); - /* reset */ - *contextCharToUnicode=NO_CHAR_MARKER; - } - - /* look at the pre-context and perform special processing */ - switch (sourceChar) { - case ISCII_INV: - case EXT: - case ATR: - *contextCharToUnicode = (UChar)sourceChar; - - if (*toUnicodeStatus != missingCharMarker) { - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,data->currentDeltaToUnicode,err); - *toUnicodeStatus = missingCharMarker; - } - continue; - case ISCII_DANDA: - /* handle double danda*/ - if (*contextCharToUnicode== ISCII_DANDA) { - targetUniChar = DOUBLE_DANDA; - /* clear the context */ - *contextCharToUnicode = NO_CHAR_MARKER; - *toUnicodeStatus = missingCharMarker; - } else { - GET_MAPPING(sourceChar,targetUniChar,data); - *contextCharToUnicode = sourceChar; - } - break; - case ISCII_HALANT: - /* handle explicit halant */ - if (*contextCharToUnicode == ISCII_HALANT) { - targetUniChar = ZWNJ; - /* clear the context */ - *contextCharToUnicode = NO_CHAR_MARKER; - } else { - GET_MAPPING(sourceChar,targetUniChar,data); - *contextCharToUnicode = sourceChar; - } - break; - case 0x0A: - case 0x0D: - data->resetToDefaultToUnicode = TRUE; - GET_MAPPING(sourceChar,targetUniChar,data) - ; - *contextCharToUnicode = sourceChar; - break; - - case ISCII_VOWEL_SIGN_E: - i=1; - found=FALSE; - for (; icurrentMaskToUnicode) { - /*targetUniChar += data->currentDeltaToUnicode ;*/ - *contextCharToUnicode= NO_CHAR_MARKER; - *toUnicodeStatus = missingCharMarker; - break; - } - } - GET_MAPPING(sourceChar,targetUniChar,data); - *contextCharToUnicode = sourceChar; - break; - - case ISCII_NUKTA: - /* handle soft halant */ - if (*contextCharToUnicode == ISCII_HALANT) { - targetUniChar = ZWJ; - /* clear the context */ - *contextCharToUnicode = NO_CHAR_MARKER; - break; - } else if (data->currentDeltaToUnicode == PNJ_DELTA && data->contextCharToUnicode == 0xc0) { - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - /* We got here because ISCII_NUKTA was preceded by 0xc0 and we are converting Gurmukhi. - * In that case we must convert (0xc0 0xe9) to (\u0a5c\u0a4d\u0a39). - */ - targetUniChar = PNJ_RRA; - WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); - if (U_SUCCESS(*err)) { - targetUniChar = PNJ_SIGN_VIRAMA; - WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); - if (U_SUCCESS(*err)) { - targetUniChar = PNJ_HA; - WRITE_TO_TARGET_TO_U(args, source, target, args->offsets, (source-args->source)-2, targetUniChar, 0, err); - } else { - args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_HA; - } - } else { - args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_SIGN_VIRAMA; - args->converter->UCharErrorBuffer[args->converter->UCharErrorBufferLength++]= PNJ_HA; - } - *toUnicodeStatus = missingCharMarker; - data->contextCharToUnicode = NO_CHAR_MARKER; - continue; - } else { - /* try to handle + ISCII_NUKTA special mappings */ - i=1; - found =FALSE; - for (; icurrentMaskToUnicode) { - /*targetUniChar += data->currentDeltaToUnicode ;*/ - *contextCharToUnicode= NO_CHAR_MARKER; - *toUnicodeStatus = missingCharMarker; - if (data->currentDeltaToUnicode == PNJ_DELTA) { - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),targetUniChar,data->currentDeltaToUnicode,err); - continue; - } - break; - } - /* else fall through to default */ - } - /* else fall through to default */ - U_FALLTHROUGH; - } - default:GET_MAPPING(sourceChar,targetUniChar,data) - ; - *contextCharToUnicode = sourceChar; - break; - } - - if (*toUnicodeStatus != missingCharMarker) { - /* Check to make sure that consonant clusters are handled correct for Gurmukhi script. */ - if (data->currentDeltaToUnicode == PNJ_DELTA && data->prevToUnicodeStatus != 0 && isPNJConsonant(data->prevToUnicodeStatus) && - (*toUnicodeStatus + PNJ_DELTA) == PNJ_SIGN_VIRAMA && (targetUniChar + PNJ_DELTA) == data->prevToUnicodeStatus) { - /* Consonant clusters C + HALANT + C should be encoded as ADHAK + C */ - offset = (int)(source-args->source - 3); - tempTargetUniChar = PNJ_ADHAK; /* This is necessary to avoid some compiler warnings. */ - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,offset,tempTargetUniChar,0,err); - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,offset,data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; /* reset the previous unicode code point */ - *toUnicodeStatus = missingCharMarker; - continue; - } else { - /* Write the previous toUnicodeStatus, this was delayed to handle consonant clustering for Gurmukhi script. */ - if (data->prevToUnicodeStatus) { - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -1),data->prevToUnicodeStatus,0,err); - data->prevToUnicodeStatus = 0x0000; - } - /* Check to make sure that Bindi and Tippi are handled correctly for Gurmukhi script. - * If 0xA2 is preceded by a codepoint in the PNJ_BINDI_TIPPI_SET then the target codepoint should be Tippi instead of Bindi. - */ - if (data->currentDeltaToUnicode == PNJ_DELTA && (targetUniChar + PNJ_DELTA) == PNJ_BINDI && isPNJBindiTippi((*toUnicodeStatus + PNJ_DELTA))) { - targetUniChar = PNJ_TIPPI - PNJ_DELTA; - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,PNJ_DELTA,err); - } else if (data->currentDeltaToUnicode == PNJ_DELTA && (targetUniChar + PNJ_DELTA) == PNJ_SIGN_VIRAMA && isPNJConsonant((*toUnicodeStatus + PNJ_DELTA))) { - /* Store the current toUnicodeStatus code point for later handling of consonant cluster in Gurmukhi. */ - data->prevToUnicodeStatus = *toUnicodeStatus + PNJ_DELTA; - } else { - /* write the previously mapped codepoint */ - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source-args->source -2),*toUnicodeStatus,data->currentDeltaToUnicode,err); - } - } - *toUnicodeStatus = missingCharMarker; - } - - if (targetUniChar != missingCharMarker) { - /* now save the targetUniChar for delayed write */ - *toUnicodeStatus = (UChar) targetUniChar; - if (data->resetToDefaultToUnicode==TRUE) { - data->currentDeltaToUnicode = data->defDeltaToUnicode; - data->currentMaskToUnicode = data->defMaskToUnicode; - data->resetToDefaultToUnicode=FALSE; - } - } else { - - /* we reach here only if targetUniChar == missingCharMarker - * so assign codes to reason and err - */ - *err = U_INVALID_CHAR_FOUND; -CALLBACK: - args->converter->toUBytes[0] = (uint8_t) sourceChar; - args->converter->toULength = 1; - break; - } - - } else { - *err =U_BUFFER_OVERFLOW_ERROR; - break; - } - } - - if (U_SUCCESS(*err) && args->flush && source == sourceLimit) { - /* end of the input stream */ - UConverter *cnv = args->converter; - - if (*contextCharToUnicode==ATR || *contextCharToUnicode==EXT || *contextCharToUnicode==ISCII_INV) { - /* set toUBytes[] */ - cnv->toUBytes[0] = (uint8_t)*contextCharToUnicode; - cnv->toULength = 1; - - /* avoid looping on truncated sequences */ - *contextCharToUnicode = NO_CHAR_MARKER; - } else { - cnv->toULength = 0; - } - - if (*toUnicodeStatus != missingCharMarker) { - /* output a remaining target character */ - WRITE_TO_TARGET_TO_U(args,source,target,args->offsets,(source - args->source -1),*toUnicodeStatus,data->currentDeltaToUnicode,err); - *toUnicodeStatus = missingCharMarker; - } - } - - args->target = target; - args->source = source; -} - -/* structure for SafeClone calculations */ -struct cloneISCIIStruct { - UConverter cnv; - UConverterDataISCII mydata; -}; - -static UConverter * -_ISCII_SafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status) -{ - struct cloneISCIIStruct * localClone; - int32_t bufferSizeNeeded = sizeof(struct cloneISCIIStruct); - - if (U_FAILURE(*status)) { - return 0; - } - - if (*pBufferSize == 0) { /* 'preflighting' request - set needed size into *pBufferSize */ - *pBufferSize = bufferSizeNeeded; - return 0; - } - - localClone = (struct cloneISCIIStruct *)stackBuffer; - /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ - - uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(UConverterDataISCII)); - localClone->cnv.extraInfo = &localClone->mydata; - localClone->cnv.isExtraLocal = TRUE; - - return &localClone->cnv; -} - -static void -_ISCIIGetUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) -{ - int32_t idx, script; - uint8_t mask; - - /* Since all ISCII versions allow switching to other ISCII - scripts, we add all roundtrippable characters to this set. */ - sa->addRange(sa->set, 0, ASCII_END); - for (script = DEVANAGARI; script <= MALAYALAM; script++) { - mask = (uint8_t)(lookupInitialData[script].maskEnum); - for (idx = 0; idx < DELTA; idx++) { - /* added check for TELUGU character */ - if ((validityTable[idx] & mask) || (script==TELUGU && idx==0x31)) { - sa->add(sa->set, idx + (script * DELTA) + INDIC_BLOCK_BEGIN); - } - } - } - sa->add(sa->set, DANDA); - sa->add(sa->set, DOUBLE_DANDA); - sa->add(sa->set, ZWNJ); - sa->add(sa->set, ZWJ); -} - -static const UConverterImpl _ISCIIImpl={ - - UCNV_ISCII, - - NULL, - NULL, - - _ISCIIOpen, - _ISCIIClose, - _ISCIIReset, - - UConverter_toUnicode_ISCII_OFFSETS_LOGIC, - UConverter_toUnicode_ISCII_OFFSETS_LOGIC, - UConverter_fromUnicode_ISCII_OFFSETS_LOGIC, - UConverter_fromUnicode_ISCII_OFFSETS_LOGIC, - NULL, - - NULL, - _ISCIIgetName, - NULL, - _ISCII_SafeClone, - _ISCIIGetUnicodeSet -}; - -static const UConverterStaticData _ISCIIStaticData={ - sizeof(UConverterStaticData), - "ISCII", - 0, - UCNV_IBM, - UCNV_ISCII, - 1, - 4, - { 0x1a, 0, 0, 0 }, - 0x1, - FALSE, - FALSE, - 0x0, - 0x0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* reserved */ - -}; - -const UConverterSharedData _ISCIIData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISCIIStaticData, &_ISCIIImpl); - -#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */ diff --git a/source/common/ucnvlat1.c b/source/common/ucnvlat1.c deleted file mode 100644 index f17777f..0000000 --- a/source/common/ucnvlat1.c +++ /dev/null @@ -1,740 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: ucnvlat1.cpp -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000feb07 -* created by: Markus W. Scherer -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/uset.h" -#include "unicode/utf8.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" - -/* control optimizations according to the platform */ -#define LATIN1_UNROLL_FROM_UNICODE 1 - -/* ISO 8859-1 --------------------------------------------------------------- */ - -/* This is a table-less and callback-less version of ucnv_MBCSSingleToBMPWithOffsets(). */ -static void -_Latin1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - const uint8_t *source; - UChar *target; - int32_t targetCapacity, length; - int32_t *offsets; - - int32_t sourceIndex; - - /* set up the local pointers */ - source=(const uint8_t *)pArgs->source; - target=pArgs->target; - targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - - sourceIndex=0; - - /* - * since the conversion here is 1:1 UChar:uint8_t, we need only one counter - * for the minimum of the sourceLength and targetCapacity - */ - length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); - if(length<=targetCapacity) { - targetCapacity=length; - } else { - /* target will be full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - length=targetCapacity; - } - - if(targetCapacity>=8) { - /* This loop is unrolled for speed and improved pipelining. */ - int32_t count, loops; - - loops=count=targetCapacity>>3; - length=targetCapacity&=0x7; - do { - target[0]=source[0]; - target[1]=source[1]; - target[2]=source[2]; - target[3]=source[3]; - target[4]=source[4]; - target[5]=source[5]; - target[6]=source[6]; - target[7]=source[7]; - target+=8; - source+=8; - } while(--count>0); - - if(offsets!=NULL) { - do { - offsets[0]=sourceIndex++; - offsets[1]=sourceIndex++; - offsets[2]=sourceIndex++; - offsets[3]=sourceIndex++; - offsets[4]=sourceIndex++; - offsets[5]=sourceIndex++; - offsets[6]=sourceIndex++; - offsets[7]=sourceIndex++; - offsets+=8; - } while(--loops>0); - } - } - - /* conversion loop */ - while(targetCapacity>0) { - *target++=*source++; - --targetCapacity; - } - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - - /* set offsets */ - if(offsets!=NULL) { - while(length>0) { - *offsets++=sourceIndex++; - --length; - } - pArgs->offsets=offsets; - } -} - -/* This is a table-less and callback-less version of ucnv_MBCSSingleGetNextUChar(). */ -static UChar32 -_Latin1GetNextUChar(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - const uint8_t *source=(const uint8_t *)pArgs->source; - if(source<(const uint8_t *)pArgs->sourceLimit) { - pArgs->source=(const char *)(source+1); - return *source; - } - - /* no output because of empty input */ - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; -} - -/* This is a table-less version of ucnv_MBCSSingleFromBMPWithOffsets(). */ -static void -_Latin1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - const UChar *source, *sourceLimit; - uint8_t *target, *oldTarget; - int32_t targetCapacity, length; - int32_t *offsets; - - UChar32 cp; - UChar c, max; - - int32_t sourceIndex; - - /* set up the local pointers */ - cnv=pArgs->converter; - source=pArgs->source; - sourceLimit=pArgs->sourceLimit; - target=oldTarget=(uint8_t *)pArgs->target; - targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - - if(cnv->sharedData==&_Latin1Data) { - max=0xff; /* Latin-1 */ - } else { - max=0x7f; /* US-ASCII */ - } - - /* get the converter state from UConverter */ - cp=cnv->fromUChar32; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex= cp==0 ? 0 : -1; - - /* - * since the conversion here is 1:1 UChar:uint8_t, we need only one counter - * for the minimum of the sourceLength and targetCapacity - */ - length=(int32_t)(sourceLimit-source); - if(length0) { - goto getTrail; - } - -#if LATIN1_UNROLL_FROM_UNICODE - /* unroll the loop with the most common case */ - if(targetCapacity>=16) { - int32_t count, loops; - UChar u, oredChars; - - loops=count=targetCapacity>>4; - do { - oredChars=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - oredChars|=u=*source++; - *target++=(uint8_t)u; - - /* were all 16 entries really valid? */ - if(oredChars>max) { - /* no, return to the first of these 16 */ - source-=16; - target-=16; - break; - } - } while(--count>0); - count=loops-count; - targetCapacity-=16*count; - - if(offsets!=NULL) { - oldTarget+=16*count; - while(count>0) { - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - *offsets++=sourceIndex++; - --count; - } - } - } -#endif - - /* conversion loop */ - c=0; - while(targetCapacity>0 && (c=*source++)<=max) { - /* convert the Unicode code point */ - *target++=(uint8_t)c; - --targetCapacity; - } - - if(c>max) { - cp=c; - if(!U_IS_SURROGATE(cp)) { - /* callback(unassigned) */ - } else if(U_IS_SURROGATE_LEAD(cp)) { -getTrail: - if(sourcefromUChar32=cp; - goto noMoreInput; - } - } else { - /* this is an unmatched trail code unit (2nd surrogate) */ - /* callback(illegal) */ - } - - *pErrorCode= U_IS_SURROGATE(cp) ? U_ILLEGAL_CHAR_FOUND : U_INVALID_CHAR_FOUND; - cnv->fromUChar32=cp; - } -noMoreInput: - - /* set offsets since the start */ - if(offsets!=NULL) { - size_t count=target-oldTarget; - while(count>0) { - *offsets++=sourceIndex++; - --count; - } - } - - if(U_SUCCESS(*pErrorCode) && source=(uint8_t *)pArgs->targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - pArgs->offsets=offsets; -} - -/* Convert UTF-8 to Latin-1. Adapted from ucnv_SBCSFromUTF8(). */ -static void -ucnv_Latin1FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, - UConverterToUnicodeArgs *pToUArgs, - UErrorCode *pErrorCode) { - UConverter *utf8; - const uint8_t *source, *sourceLimit; - uint8_t *target; - int32_t targetCapacity; - - UChar32 c; - uint8_t b, t1; - - /* set up the local pointers */ - utf8=pToUArgs->converter; - source=(uint8_t *)pToUArgs->source; - sourceLimit=(uint8_t *)pToUArgs->sourceLimit; - target=(uint8_t *)pFromUArgs->target; - targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target); - - /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; - if(c!=0 && source=0xc2 && c<=0xc3 && (t1=(uint8_t)(*source-0x80)) <= 0x3f) { - ++source; - *target++=(uint8_t)(((c&3)<<6)|t1); - --targetCapacity; - - utf8->toUnicodeStatus=0; - utf8->toULength=0; - } else { - /* complicated, illegal or unmappable input: fall back to the pivoting implementation */ - *pErrorCode=U_USING_DEFAULT_WARNING; - return; - } - } - - /* - * Make sure that the last byte sequence before sourceLimit is complete - * or runs into a lead byte. - * In the conversion loop compare source with sourceLimit only once - * per multi-byte character. - * For Latin-1, adjust sourceLimit only for 1 trail byte because - * the conversion loop handles at most 2-byte sequences. - */ - if(source0) { - b=*source++; - if((int8_t)b>=0) { - /* convert ASCII */ - *target++=(uint8_t)b; - --targetCapacity; - } else if( /* handle U+0080..U+00FF inline */ - b>=0xc2 && b<=0xc3 && - (t1=(uint8_t)(*source-0x80)) <= 0x3f - ) { - ++source; - *target++=(uint8_t)(((b&3)<<6)|t1); - --targetCapacity; - } else { - /* complicated, illegal or unmappable input: fall back to the pivoting implementation */ - pToUArgs->source=(char *)(source-1); - pFromUArgs->target=(char *)target; - *pErrorCode=U_USING_DEFAULT_WARNING; - return; - } - } else { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - } - - /* - * The sourceLimit may have been adjusted before the conversion loop - * to stop before a truncated sequence. - * If so, then collect the truncated sequence now. - * For Latin-1, there is at most exactly one lead byte because of the - * smaller sourceLimit adjustment logic. - */ - if(U_SUCCESS(*pErrorCode) && source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) { - utf8->toUnicodeStatus=utf8->toUBytes[0]=b=*source++; - utf8->toULength=1; - utf8->mode=U8_COUNT_TRAIL_BYTES(b)+1; - } - - /* write back the updated pointers */ - pToUArgs->source=(char *)source; - pFromUArgs->target=(char *)target; -} - -static void -_Latin1GetUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - sa->addRange(sa->set, 0, 0xff); -} - -static const UConverterImpl _Latin1Impl={ - UCNV_LATIN_1, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - _Latin1ToUnicodeWithOffsets, - _Latin1ToUnicodeWithOffsets, - _Latin1FromUnicodeWithOffsets, - _Latin1FromUnicodeWithOffsets, - _Latin1GetNextUChar, - - NULL, - NULL, - NULL, - NULL, - _Latin1GetUnicodeSet, - - NULL, - ucnv_Latin1FromUTF8 -}; - -static const UConverterStaticData _Latin1StaticData={ - sizeof(UConverterStaticData), - "ISO-8859-1", - 819, UCNV_IBM, UCNV_LATIN_1, 1, 1, - { 0x1a, 0, 0, 0 }, 1, FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _Latin1Data= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_Latin1StaticData, &_Latin1Impl); - -/* US-ASCII ----------------------------------------------------------------- */ - -/* This is a table-less version of ucnv_MBCSSingleToBMPWithOffsets(). */ -static void -_ASCIIToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - const uint8_t *source, *sourceLimit; - UChar *target, *oldTarget; - int32_t targetCapacity, length; - int32_t *offsets; - - int32_t sourceIndex; - - uint8_t c; - - /* set up the local pointers */ - source=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - target=oldTarget=pArgs->target; - targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex=0; - - /* - * since the conversion here is 1:1 UChar:uint8_t, we need only one counter - * for the minimum of the sourceLength and targetCapacity - */ - length=(int32_t)(sourceLimit-source); - if(length=8) { - /* This loop is unrolled for speed and improved pipelining. */ - int32_t count, loops; - UChar oredChars; - - loops=count=targetCapacity>>3; - do { - oredChars=target[0]=source[0]; - oredChars|=target[1]=source[1]; - oredChars|=target[2]=source[2]; - oredChars|=target[3]=source[3]; - oredChars|=target[4]=source[4]; - oredChars|=target[5]=source[5]; - oredChars|=target[6]=source[6]; - oredChars|=target[7]=source[7]; - - /* were all 16 entries really valid? */ - if(oredChars>0x7f) { - /* no, return to the first of these 16 */ - break; - } - source+=8; - target+=8; - } while(--count>0); - count=loops-count; - targetCapacity-=count*8; - - if(offsets!=NULL) { - oldTarget+=count*8; - while(count>0) { - offsets[0]=sourceIndex++; - offsets[1]=sourceIndex++; - offsets[2]=sourceIndex++; - offsets[3]=sourceIndex++; - offsets[4]=sourceIndex++; - offsets[5]=sourceIndex++; - offsets[6]=sourceIndex++; - offsets[7]=sourceIndex++; - offsets+=8; - --count; - } - } - } - - /* conversion loop */ - c=0; - while(targetCapacity>0 && (c=*source++)<=0x7f) { - *target++=c; - --targetCapacity; - } - - if(c>0x7f) { - /* callback(illegal); copy the current bytes to toUBytes[] */ - UConverter *cnv=pArgs->converter; - cnv->toUBytes[0]=c; - cnv->toULength=1; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - } else if(source=pArgs->targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - - /* set offsets since the start */ - if(offsets!=NULL) { - size_t count=target-oldTarget; - while(count>0) { - *offsets++=sourceIndex++; - --count; - } - } - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; -} - -/* This is a table-less version of ucnv_MBCSSingleGetNextUChar(). */ -static UChar32 -_ASCIIGetNextUChar(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - const uint8_t *source; - uint8_t b; - - source=(const uint8_t *)pArgs->source; - if(source<(const uint8_t *)pArgs->sourceLimit) { - b=*source++; - pArgs->source=(const char *)source; - if(b<=0x7f) { - return b; - } else { - UConverter *cnv=pArgs->converter; - cnv->toUBytes[0]=b; - cnv->toULength=1; - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - return 0xffff; - } - } - - /* no output because of empty input */ - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0xffff; -} - -/* "Convert" UTF-8 to US-ASCII: Validate and copy. */ -static void -ucnv_ASCIIFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, - UConverterToUnicodeArgs *pToUArgs, - UErrorCode *pErrorCode) { - const uint8_t *source, *sourceLimit; - uint8_t *target; - int32_t targetCapacity, length; - - uint8_t c; - - if(pToUArgs->converter->toUnicodeStatus!=0) { - /* no handling of partial UTF-8 characters here, fall back to pivoting */ - *pErrorCode=U_USING_DEFAULT_WARNING; - return; - } - - /* set up the local pointers */ - source=(const uint8_t *)pToUArgs->source; - sourceLimit=(const uint8_t *)pToUArgs->sourceLimit; - target=(uint8_t *)pFromUArgs->target; - targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target); - - /* - * since the conversion here is 1:1 uint8_t:uint8_t, we need only one counter - * for the minimum of the sourceLength and targetCapacity - */ - length=(int32_t)(sourceLimit-source); - if(length=16) { - int32_t count, loops; - uint8_t oredChars; - - loops=count=targetCapacity>>4; - do { - oredChars=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - oredChars|=*target++=*source++; - - /* were all 16 entries really valid? */ - if(oredChars>0x7f) { - /* no, return to the first of these 16 */ - source-=16; - target-=16; - break; - } - } while(--count>0); - count=loops-count; - targetCapacity-=16*count; - } - - /* conversion loop */ - c=0; - while(targetCapacity>0 && (c=*source)<=0x7f) { - ++source; - *target++=c; - --targetCapacity; - } - - if(c>0x7f) { - /* non-ASCII character, handle in standard converter */ - *pErrorCode=U_USING_DEFAULT_WARNING; - } else if(source=(const uint8_t *)pFromUArgs->targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - - /* write back the updated pointers */ - pToUArgs->source=(const char *)source; - pFromUArgs->target=(char *)target; -} - -static void -_ASCIIGetUnicodeSet(const UConverter *cnv, - const USetAdder *sa, - UConverterUnicodeSet which, - UErrorCode *pErrorCode) { - sa->addRange(sa->set, 0, 0x7f); -} - -static const UConverterImpl _ASCIIImpl={ - UCNV_US_ASCII, - - NULL, - NULL, - - NULL, - NULL, - NULL, - - _ASCIIToUnicodeWithOffsets, - _ASCIIToUnicodeWithOffsets, - _Latin1FromUnicodeWithOffsets, - _Latin1FromUnicodeWithOffsets, - _ASCIIGetNextUChar, - - NULL, - NULL, - NULL, - NULL, - _ASCIIGetUnicodeSet, - - NULL, - ucnv_ASCIIFromUTF8 -}; - -static const UConverterStaticData _ASCIIStaticData={ - sizeof(UConverterStaticData), - "US-ASCII", - 367, UCNV_IBM, UCNV_US_ASCII, 1, 1, - { 0x1a, 0, 0, 0 }, 1, FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _ASCIIData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ASCIIStaticData, &_ASCIIImpl); - -#endif diff --git a/source/common/ucnvmbcs.cpp b/source/common/ucnvmbcs.cpp index ffbb9af..7f37eee 100644 --- a/source/common/ucnvmbcs.cpp +++ b/source/common/ucnvmbcs.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucnvmbcs.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucnvmbcs.h b/source/common/ucnvmbcs.h index 5bbbae7..209cdc5 100644 --- a/source/common/ucnvmbcs.h +++ b/source/common/ucnvmbcs.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ucnvmbcs.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucnvscsu.c b/source/common/ucnvscsu.c deleted file mode 100644 index 9849cde..0000000 --- a/source/common/ucnvscsu.c +++ /dev/null @@ -1,2043 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2000-2016, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: ucnvscsu.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000nov18 -* created by: Markus W. Scherer -* -* This is an implementation of the Standard Compression Scheme for Unicode -* as defined in http://www.unicode.org/unicode/reports/tr6/ . -* Reserved commands and window settings are treated as illegal sequences and -* will result in callback calls. -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION && !UCONFIG_ONLY_HTML_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/ucnv_cb.h" -#include "unicode/utf16.h" -#include "ucnv_bld.h" -#include "ucnv_cnv.h" -#include "cmemory.h" - -/* SCSU definitions --------------------------------------------------------- */ - -/* SCSU command byte values */ -enum { - SQ0=0x01, /* Quote from window pair 0 */ - SQ7=0x08, /* Quote from window pair 7 */ - SDX=0x0B, /* Define a window as extended */ - Srs=0x0C, /* reserved */ - SQU=0x0E, /* Quote a single Unicode character */ - SCU=0x0F, /* Change to Unicode mode */ - SC0=0x10, /* Select window 0 */ - SC7=0x17, /* Select window 7 */ - SD0=0x18, /* Define and select window 0 */ - SD7=0x1F, /* Define and select window 7 */ - - UC0=0xE0, /* Select window 0 */ - UC7=0xE7, /* Select window 7 */ - UD0=0xE8, /* Define and select window 0 */ - UD7=0xEF, /* Define and select window 7 */ - UQU=0xF0, /* Quote a single Unicode character */ - UDX=0xF1, /* Define a Window as extended */ - Urs=0xF2 /* reserved */ -}; - -enum { - /* - * Unicode code points from 3400 to E000 are not adressible by - * dynamic window, since in these areas no short run alphabets are - * found. Therefore add gapOffset to all values from gapThreshold. - */ - gapThreshold=0x68, - gapOffset=0xAC00, - - /* values between reservedStart and fixedThreshold are reserved */ - reservedStart=0xA8, - - /* use table of predefined fixed offsets for values from fixedThreshold */ - fixedThreshold=0xF9 -}; - -/* constant offsets for the 8 static windows */ -static const uint32_t staticOffsets[8]={ - 0x0000, /* ASCII for quoted tags */ - 0x0080, /* Latin - 1 Supplement (for access to punctuation) */ - 0x0100, /* Latin Extended-A */ - 0x0300, /* Combining Diacritical Marks */ - 0x2000, /* General Punctuation */ - 0x2080, /* Currency Symbols */ - 0x2100, /* Letterlike Symbols and Number Forms */ - 0x3000 /* CJK Symbols and punctuation */ -}; - -/* initial offsets for the 8 dynamic (sliding) windows */ -static const uint32_t initialDynamicOffsets[8]={ - 0x0080, /* Latin-1 */ - 0x00C0, /* Latin Extended A */ - 0x0400, /* Cyrillic */ - 0x0600, /* Arabic */ - 0x0900, /* Devanagari */ - 0x3040, /* Hiragana */ - 0x30A0, /* Katakana */ - 0xFF00 /* Fullwidth ASCII */ -}; - -/* Table of fixed predefined Offsets */ -static const uint32_t fixedOffsets[]={ - /* 0xF9 */ 0x00C0, /* Latin-1 Letters + half of Latin Extended A */ - /* 0xFA */ 0x0250, /* IPA extensions */ - /* 0xFB */ 0x0370, /* Greek */ - /* 0xFC */ 0x0530, /* Armenian */ - /* 0xFD */ 0x3040, /* Hiragana */ - /* 0xFE */ 0x30A0, /* Katakana */ - /* 0xFF */ 0xFF60 /* Halfwidth Katakana */ -}; - -/* state values */ -enum { - readCommand, - quotePairOne, - quotePairTwo, - quoteOne, - definePairOne, - definePairTwo, - defineOne -}; - -typedef struct SCSUData { - /* dynamic window offsets, intitialize to default values from initialDynamicOffsets */ - uint32_t toUDynamicOffsets[8]; - uint32_t fromUDynamicOffsets[8]; - - /* state machine state - toUnicode */ - UBool toUIsSingleByteMode; - uint8_t toUState; - int8_t toUQuoteWindow, toUDynamicWindow; - uint8_t toUByteOne; - uint8_t toUPadding[3]; - - /* state machine state - fromUnicode */ - UBool fromUIsSingleByteMode; - int8_t fromUDynamicWindow; - - /* - * windowUse[] keeps track of the use of the dynamic windows: - * At nextWindowUseIndex there is the least recently used window, - * and the following windows (in a wrapping manner) are more and more - * recently used. - * At nextWindowUseIndex-1 there is the most recently used window. - */ - uint8_t locale; - int8_t nextWindowUseIndex; - int8_t windowUse[8]; -} SCSUData; - -static const int8_t initialWindowUse[8]={ 7, 0, 3, 2, 4, 5, 6, 1 }; -static const int8_t initialWindowUse_ja[8]={ 3, 2, 4, 1, 0, 7, 5, 6 }; - -enum { - lGeneric, l_ja -}; - -/* SCSU setup functions ----------------------------------------------------- */ - -static void -_SCSUReset(UConverter *cnv, UConverterResetChoice choice) { - SCSUData *scsu=(SCSUData *)cnv->extraInfo; - - if(choice<=UCNV_RESET_TO_UNICODE) { - /* reset toUnicode */ - uprv_memcpy(scsu->toUDynamicOffsets, initialDynamicOffsets, 32); - - scsu->toUIsSingleByteMode=TRUE; - scsu->toUState=readCommand; - scsu->toUQuoteWindow=scsu->toUDynamicWindow=0; - scsu->toUByteOne=0; - - cnv->toULength=0; - } - if(choice!=UCNV_RESET_TO_UNICODE) { - /* reset fromUnicode */ - uprv_memcpy(scsu->fromUDynamicOffsets, initialDynamicOffsets, 32); - - scsu->fromUIsSingleByteMode=TRUE; - scsu->fromUDynamicWindow=0; - - scsu->nextWindowUseIndex=0; - switch(scsu->locale) { - case l_ja: - uprv_memcpy(scsu->windowUse, initialWindowUse_ja, 8); - break; - default: - uprv_memcpy(scsu->windowUse, initialWindowUse, 8); - break; - } - - cnv->fromUChar32=0; - } -} - -static void -_SCSUOpen(UConverter *cnv, - UConverterLoadArgs *pArgs, - UErrorCode *pErrorCode) { - const char *locale=pArgs->locale; - if(pArgs->onlyTestIsLoadable) { - return; - } - cnv->extraInfo=uprv_malloc(sizeof(SCSUData)); - if(cnv->extraInfo!=NULL) { - if(locale!=NULL && locale[0]=='j' && locale[1]=='a' && (locale[2]==0 || locale[2]=='_')) { - ((SCSUData *)cnv->extraInfo)->locale=l_ja; - } else { - ((SCSUData *)cnv->extraInfo)->locale=lGeneric; - } - _SCSUReset(cnv, UCNV_RESET_BOTH); - } else { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - } - - /* Set the substitution character U+fffd as a Unicode string. */ - cnv->subUChars[0]=0xfffd; - cnv->subCharLen=-1; -} - -static void -_SCSUClose(UConverter *cnv) { - if(cnv->extraInfo!=NULL) { - if(!cnv->isExtraLocal) { - uprv_free(cnv->extraInfo); - } - cnv->extraInfo=NULL; - } -} - -/* SCSU-to-Unicode conversion functions ------------------------------------- */ - -static void -_SCSUToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - SCSUData *scsu; - const uint8_t *source, *sourceLimit; - UChar *target; - const UChar *targetLimit; - int32_t *offsets; - UBool isSingleByteMode; - uint8_t state, byteOne; - int8_t quoteWindow, dynamicWindow; - - int32_t sourceIndex, nextSourceIndex; - - uint8_t b; - - /* set up the local pointers */ - cnv=pArgs->converter; - scsu=(SCSUData *)cnv->extraInfo; - - source=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - target=pArgs->target; - targetLimit=pArgs->targetLimit; - offsets=pArgs->offsets; - - /* get the state machine state */ - isSingleByteMode=scsu->toUIsSingleByteMode; - state=scsu->toUState; - quoteWindow=scsu->toUQuoteWindow; - dynamicWindow=scsu->toUDynamicWindow; - byteOne=scsu->toUByteOne; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex=state==readCommand ? 0 : -1; - nextSourceIndex=0; - - /* - * conversion "loop" - * - * For performance, this is not a normal C loop. - * Instead, there are two code blocks for the two SCSU modes. - * The function branches to either one, and a change of the mode is done with a goto to - * the other branch. - * - * Each branch has two conventional loops: - * - a fast-path loop for the most common codes in the mode - * - a loop for all other codes in the mode - * When the fast-path runs into a code that it cannot handle, its loop ends and it - * runs into the following loop to handle the other codes. - * The end of the input or output buffer is also handled by the slower loop. - * The slow loop jumps (goto) to the fast-path loop again as soon as possible. - * - * The callback handling is done by returning with an error code. - * The conversion framework actually calls the callback function. - */ - if(isSingleByteMode) { - /* fast path for single-byte mode */ - if(state==readCommand) { -fastSingle: - while(source=0x20) { - ++source; - ++nextSourceIndex; - if(b<=0x7f) { - /* write US-ASCII graphic character or DEL */ - *target++=(UChar)b; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - } else { - /* write from dynamic window */ - uint32_t c=scsu->toUDynamicOffsets[dynamicWindow]+(b&0x7f); - if(c<=0xffff) { - *target++=(UChar)c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - } else { - /* output surrogate pair */ - *target++=(UChar)(0xd7c0+(c>>10)); - if(targetUCharErrorBuffer[0]=(UChar)(0xdc00|(c&0x3ff)); - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - goto endloop; - } - } - } - sourceIndex=nextSourceIndex; - } - } - - /* normal state machine for single-byte mode, minus handling for what fastSingle covers */ -singleByteMode: - while(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - b=*source++; - ++nextSourceIndex; - switch(state) { - case readCommand: - /* redundant conditions are commented out */ - /* here: b<0x20 because otherwise we would be in fastSingle */ - if((1UL<toUBytes[0]=b; - cnv->toULength=1; - goto endloop; - } - - /* store the first byte of a multibyte sequence in toUBytes[] */ - cnv->toUBytes[0]=b; - cnv->toULength=1; - break; - case quotePairOne: - byteOne=b; - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=quotePairTwo; - break; - case quotePairTwo: - *target++=(UChar)((byteOne<<8)|b); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - sourceIndex=nextSourceIndex; - state=readCommand; - goto fastSingle; - case quoteOne: - if(b<0x80) { - /* all static offsets are in the BMP */ - *target++=(UChar)(staticOffsets[quoteWindow]+b); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - } else { - /* write from dynamic window */ - uint32_t c=scsu->toUDynamicOffsets[quoteWindow]+(b&0x7f); - if(c<=0xffff) { - *target++=(UChar)c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - } else { - /* output surrogate pair */ - *target++=(UChar)(0xd7c0+(c>>10)); - if(targetUCharErrorBuffer[0]=(UChar)(0xdc00|(c&0x3ff)); - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - goto endloop; - } - } - } - sourceIndex=nextSourceIndex; - state=readCommand; - goto fastSingle; - case definePairOne: - dynamicWindow=(int8_t)((b>>5)&7); - byteOne=(uint8_t)(b&0x1f); - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=definePairTwo; - break; - case definePairTwo: - scsu->toUDynamicOffsets[dynamicWindow]=0x10000+(byteOne<<15UL | b<<7UL); - sourceIndex=nextSourceIndex; - state=readCommand; - goto fastSingle; - case defineOne: - if(b==0) { - /* callback(illegal): Reserved window offset value 0 */ - cnv->toUBytes[1]=b; - cnv->toULength=2; - goto endloop; - } else if(btoUDynamicOffsets[dynamicWindow]=b<<7UL; - } else if((uint8_t)(b-gapThreshold)<(reservedStart-gapThreshold)) { - scsu->toUDynamicOffsets[dynamicWindow]=(b<<7UL)+gapOffset; - } else if(b>=fixedThreshold) { - scsu->toUDynamicOffsets[dynamicWindow]=fixedOffsets[b-fixedThreshold]; - } else { - /* callback(illegal): Reserved window offset value 0xa8..0xf8 */ - cnv->toUBytes[1]=b; - cnv->toULength=2; - goto endloop; - } - sourceIndex=nextSourceIndex; - state=readCommand; - goto fastSingle; - } - } - } else { - /* fast path for Unicode mode */ - if(state==readCommand) { -fastUnicode: - while(source+1(Urs-UC0)) { - *target++=(UChar)((b<<8)|source[1]); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - sourceIndex=nextSourceIndex; - nextSourceIndex+=2; - source+=2; - } - } - - /* normal state machine for Unicode mode */ -/* unicodeByteMode: */ - while(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - b=*source++; - ++nextSourceIndex; - switch(state) { - case readCommand: - if((uint8_t)(b-UC0)>(Urs-UC0)) { - byteOne=b; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=quotePairTwo; - } else if(/* UC0<=b && */ b<=UC7) { - dynamicWindow=(int8_t)(b-UC0); - sourceIndex=nextSourceIndex; - isSingleByteMode=TRUE; - goto fastSingle; - } else if(/* UD0<=b && */ b<=UD7) { - dynamicWindow=(int8_t)(b-UD0); - isSingleByteMode=TRUE; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=defineOne; - goto singleByteMode; - } else if(b==UDX) { - isSingleByteMode=TRUE; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=definePairOne; - goto singleByteMode; - } else if(b==UQU) { - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=quotePairOne; - } else /* Urs */ { - /* callback(illegal) */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - cnv->toUBytes[0]=b; - cnv->toULength=1; - goto endloop; - } - break; - case quotePairOne: - byteOne=b; - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=quotePairTwo; - break; - case quotePairTwo: - *target++=(UChar)((byteOne<<8)|b); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - sourceIndex=nextSourceIndex; - state=readCommand; - goto fastUnicode; - } - } - } -endloop: - - /* set the converter state back into UConverter */ - if(U_FAILURE(*pErrorCode) && *pErrorCode!=U_BUFFER_OVERFLOW_ERROR) { - /* reset to deal with the next character */ - state=readCommand; - } else if(state==readCommand) { - /* not in a multi-byte sequence, reset toULength */ - cnv->toULength=0; - } - scsu->toUIsSingleByteMode=isSingleByteMode; - scsu->toUState=state; - scsu->toUQuoteWindow=quoteWindow; - scsu->toUDynamicWindow=dynamicWindow; - scsu->toUByteOne=byteOne; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - pArgs->offsets=offsets; - return; -} - -/* - * Identical to _SCSUToUnicodeWithOffsets but without offset handling. - * If a change is made in the original function, then either - * change this function the same way or - * re-copy the original function and remove the variables - * offsets, sourceIndex, and nextSourceIndex. - */ -static void -_SCSUToUnicode(UConverterToUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - SCSUData *scsu; - const uint8_t *source, *sourceLimit; - UChar *target; - const UChar *targetLimit; - UBool isSingleByteMode; - uint8_t state, byteOne; - int8_t quoteWindow, dynamicWindow; - - uint8_t b; - - /* set up the local pointers */ - cnv=pArgs->converter; - scsu=(SCSUData *)cnv->extraInfo; - - source=(const uint8_t *)pArgs->source; - sourceLimit=(const uint8_t *)pArgs->sourceLimit; - target=pArgs->target; - targetLimit=pArgs->targetLimit; - - /* get the state machine state */ - isSingleByteMode=scsu->toUIsSingleByteMode; - state=scsu->toUState; - quoteWindow=scsu->toUQuoteWindow; - dynamicWindow=scsu->toUDynamicWindow; - byteOne=scsu->toUByteOne; - - /* - * conversion "loop" - * - * For performance, this is not a normal C loop. - * Instead, there are two code blocks for the two SCSU modes. - * The function branches to either one, and a change of the mode is done with a goto to - * the other branch. - * - * Each branch has two conventional loops: - * - a fast-path loop for the most common codes in the mode - * - a loop for all other codes in the mode - * When the fast-path runs into a code that it cannot handle, its loop ends and it - * runs into the following loop to handle the other codes. - * The end of the input or output buffer is also handled by the slower loop. - * The slow loop jumps (goto) to the fast-path loop again as soon as possible. - * - * The callback handling is done by returning with an error code. - * The conversion framework actually calls the callback function. - */ - if(isSingleByteMode) { - /* fast path for single-byte mode */ - if(state==readCommand) { -fastSingle: - while(source=0x20) { - ++source; - if(b<=0x7f) { - /* write US-ASCII graphic character or DEL */ - *target++=(UChar)b; - } else { - /* write from dynamic window */ - uint32_t c=scsu->toUDynamicOffsets[dynamicWindow]+(b&0x7f); - if(c<=0xffff) { - *target++=(UChar)c; - } else { - /* output surrogate pair */ - *target++=(UChar)(0xd7c0+(c>>10)); - if(targetUCharErrorBuffer[0]=(UChar)(0xdc00|(c&0x3ff)); - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - goto endloop; - } - } - } - } - } - - /* normal state machine for single-byte mode, minus handling for what fastSingle covers */ -singleByteMode: - while(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - b=*source++; - switch(state) { - case readCommand: - /* redundant conditions are commented out */ - /* here: b<0x20 because otherwise we would be in fastSingle */ - if((1UL<toUBytes[0]=b; - cnv->toULength=1; - goto endloop; - } - - /* store the first byte of a multibyte sequence in toUBytes[] */ - cnv->toUBytes[0]=b; - cnv->toULength=1; - break; - case quotePairOne: - byteOne=b; - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=quotePairTwo; - break; - case quotePairTwo: - *target++=(UChar)((byteOne<<8)|b); - state=readCommand; - goto fastSingle; - case quoteOne: - if(b<0x80) { - /* all static offsets are in the BMP */ - *target++=(UChar)(staticOffsets[quoteWindow]+b); - } else { - /* write from dynamic window */ - uint32_t c=scsu->toUDynamicOffsets[quoteWindow]+(b&0x7f); - if(c<=0xffff) { - *target++=(UChar)c; - } else { - /* output surrogate pair */ - *target++=(UChar)(0xd7c0+(c>>10)); - if(targetUCharErrorBuffer[0]=(UChar)(0xdc00|(c&0x3ff)); - cnv->UCharErrorBufferLength=1; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - goto endloop; - } - } - } - state=readCommand; - goto fastSingle; - case definePairOne: - dynamicWindow=(int8_t)((b>>5)&7); - byteOne=(uint8_t)(b&0x1f); - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=definePairTwo; - break; - case definePairTwo: - scsu->toUDynamicOffsets[dynamicWindow]=0x10000+(byteOne<<15UL | b<<7UL); - state=readCommand; - goto fastSingle; - case defineOne: - if(b==0) { - /* callback(illegal): Reserved window offset value 0 */ - cnv->toUBytes[1]=b; - cnv->toULength=2; - goto endloop; - } else if(btoUDynamicOffsets[dynamicWindow]=b<<7UL; - } else if((uint8_t)(b-gapThreshold)<(reservedStart-gapThreshold)) { - scsu->toUDynamicOffsets[dynamicWindow]=(b<<7UL)+gapOffset; - } else if(b>=fixedThreshold) { - scsu->toUDynamicOffsets[dynamicWindow]=fixedOffsets[b-fixedThreshold]; - } else { - /* callback(illegal): Reserved window offset value 0xa8..0xf8 */ - cnv->toUBytes[1]=b; - cnv->toULength=2; - goto endloop; - } - state=readCommand; - goto fastSingle; - } - } - } else { - /* fast path for Unicode mode */ - if(state==readCommand) { -fastUnicode: - while(source+1(Urs-UC0)) { - *target++=(UChar)((b<<8)|source[1]); - source+=2; - } - } - - /* normal state machine for Unicode mode */ -/* unicodeByteMode: */ - while(source=targetLimit) { - /* target is full */ - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - break; - } - b=*source++; - switch(state) { - case readCommand: - if((uint8_t)(b-UC0)>(Urs-UC0)) { - byteOne=b; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=quotePairTwo; - } else if(/* UC0<=b && */ b<=UC7) { - dynamicWindow=(int8_t)(b-UC0); - isSingleByteMode=TRUE; - goto fastSingle; - } else if(/* UD0<=b && */ b<=UD7) { - dynamicWindow=(int8_t)(b-UD0); - isSingleByteMode=TRUE; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=defineOne; - goto singleByteMode; - } else if(b==UDX) { - isSingleByteMode=TRUE; - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=definePairOne; - goto singleByteMode; - } else if(b==UQU) { - cnv->toUBytes[0]=b; - cnv->toULength=1; - state=quotePairOne; - } else /* Urs */ { - /* callback(illegal) */ - *pErrorCode=U_ILLEGAL_CHAR_FOUND; - cnv->toUBytes[0]=b; - cnv->toULength=1; - goto endloop; - } - break; - case quotePairOne: - byteOne=b; - cnv->toUBytes[1]=b; - cnv->toULength=2; - state=quotePairTwo; - break; - case quotePairTwo: - *target++=(UChar)((byteOne<<8)|b); - state=readCommand; - goto fastUnicode; - } - } - } -endloop: - - /* set the converter state back into UConverter */ - if(U_FAILURE(*pErrorCode) && *pErrorCode!=U_BUFFER_OVERFLOW_ERROR) { - /* reset to deal with the next character */ - state=readCommand; - } else if(state==readCommand) { - /* not in a multi-byte sequence, reset toULength */ - cnv->toULength=0; - } - scsu->toUIsSingleByteMode=isSingleByteMode; - scsu->toUState=state; - scsu->toUQuoteWindow=quoteWindow; - scsu->toUDynamicWindow=dynamicWindow; - scsu->toUByteOne=byteOne; - - /* write back the updated pointers */ - pArgs->source=(const char *)source; - pArgs->target=target; - return; -} - -/* SCSU-from-Unicode conversion functions ----------------------------------- */ - -/* - * This SCSU Encoder is fairly simple but uses all SCSU commands to achieve - * reasonable results. The lookahead is minimal. - * Many cases are simple: - * A character fits directly into the current mode, a dynamic or static window, - * or is not compressible. These cases are tested first. - * Real compression heuristics are applied to the rest, in code branches for - * single/Unicode mode and BMP/supplementary code points. - * The heuristics used here are extremely simple. - */ - -/* get the number of the window that this character is in, or -1 */ -static int8_t -getWindow(const uint32_t offsets[8], uint32_t c) { - int i; - for(i=0; i<8; ++i) { - if((uint32_t)(c-offsets[i])<=0x7f) { - return (int8_t)(i); - } - } - return -1; -} - -/* is the character in the dynamic window starting at the offset, or in the direct-encoded range? */ -static UBool -isInOffsetWindowOrDirect(uint32_t offset, uint32_t c) { - return (UBool)(c<=offset+0x7f && - (c>=offset || (c<=0x7f && - (c>=0x20 || (1UL<windowUse[scsu->nextWindowUseIndex]; - if(++scsu->nextWindowUseIndex==8) { - scsu->nextWindowUseIndex=0; - } - return window; -} - -/* - * useDynamicWindow() adjusts - * windowUse[] and nextWindowUseIndex for the algorithm to choose - * the next dynamic window to be defined; - * a subclass may override it and provide its own algorithm. - */ -static void -useDynamicWindow(SCSUData *scsu, int8_t window) { - /* - * move the existing window, which just became the most recently used one, - * up in windowUse[] to nextWindowUseIndex-1 - */ - - /* first, find the index of the window - backwards to favor the more recently used windows */ - int i, j; - - i=scsu->nextWindowUseIndex; - do { - if(--i<0) { - i=7; - } - } while(scsu->windowUse[i]!=window); - - /* now copy each windowUse[i+1] to [i] */ - j=i+1; - if(j==8) { - j=0; - } - while(j!=scsu->nextWindowUseIndex) { - scsu->windowUse[i]=scsu->windowUse[j]; - i=j; - if(++j==8) { j=0; } - } - - /* finally, set the window into the most recently used index */ - scsu->windowUse[i]=window; -} - -/* - * calculate the offset and the code for a dynamic window that contains the character - * takes fixed offsets into account - * the offset of the window is stored in the offset variable, - * the code is returned - * - * return offset code: -1 none <=0xff code for SDn/UDn else code for SDX/UDX, subtract 0x200 to get the true code - */ -static int -getDynamicOffset(uint32_t c, uint32_t *pOffset) { - int i; - - for(i=0; i<7; ++i) { - if((uint32_t)(c-fixedOffsets[i])<=0x7f) { - *pOffset=fixedOffsets[i]; - return 0xf9+i; - } - } - - if(c<0x80) { - /* No dynamic window for US-ASCII. */ - return -1; - } else if(c<0x3400 || - (uint32_t)(c-0x10000)<(0x14000-0x10000) || - (uint32_t)(c-0x1d000)<=(0x1ffff-0x1d000) - ) { - /* This character is in a code range for a "small", i.e., reasonably windowable, script. */ - *pOffset=c&0x7fffff80; - return (int)(c>>7); - } else if(0xe000<=c && c!=0xfeff && c<0xfff0) { - /* For these characters we need to take the gapOffset into account. */ - *pOffset=c&0x7fffff80; - return (int)((c-gapOffset)>>7); - } else { - return -1; - } -} - -/* - * Idea for compression: - * - save SCSUData and other state before really starting work - * - at endloop, see if compression could be better with just unicode mode - * - don't do this if a callback has been called - * - if unicode mode would be smaller, then override the results with it - may need SCU at the beginning - * - different buffer handling! - * - * Drawback or need for corrective handling: - * it is desirable to encode U+feff as SQU fe ff for the SCSU signature, and - * it is desirable to start a document in US-ASCII/Latin-1 for as long as possible - * not only for compression but also for HTML/XML documents with following charset/encoding announcers. - * - * How to achieve both? - * - Only replace the result after an SDX or SCU? - */ - -static void -_SCSUFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - SCSUData *scsu; - const UChar *source, *sourceLimit; - uint8_t *target; - int32_t targetCapacity; - int32_t *offsets; - - UBool isSingleByteMode; - uint8_t dynamicWindow; - uint32_t currentOffset; - - uint32_t c, delta; - - int32_t sourceIndex, nextSourceIndex; - - int32_t length; - - /* variables for compression heuristics */ - uint32_t offset; - UChar lead, trail; - int code; - int8_t window; - - /* set up the local pointers */ - cnv=pArgs->converter; - scsu=(SCSUData *)cnv->extraInfo; - - /* set up the local pointers */ - source=pArgs->source; - sourceLimit=pArgs->sourceLimit; - target=(uint8_t *)pArgs->target; - targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); - offsets=pArgs->offsets; - - /* get the state machine state */ - isSingleByteMode=scsu->fromUIsSingleByteMode; - dynamicWindow=scsu->fromUDynamicWindow; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - - c=cnv->fromUChar32; - - /* sourceIndex=-1 if the current character began in the previous buffer */ - sourceIndex= c==0 ? 0 : -1; - nextSourceIndex=0; - - /* similar conversion "loop" as in toUnicode */ -loop: - if(isSingleByteMode) { - if(c!=0 && targetCapacity>0) { - goto getTrailSingle; - } - - /* state machine for single-byte mode */ -/* singleByteMode: */ - while(sourcefromUDynamicOffsets, c))>=0) { - /* there is a dynamic window that contains this character, change to it */ - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* might check if there are more characters in this window to come */ - /* define an extended window with this character */ - code-=0x200; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)SDX<<24)|((uint32_t)dynamicWindow<<21)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=4; - goto outputBytes; - } else { - /* change to Unicode mode and output this (lead, trail) pair */ - isSingleByteMode=FALSE; - *target++=(uint8_t)SCU; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - --targetCapacity; - c=((uint32_t)lead<<16)|trail; - length=4; - goto outputBytes; - } - } else if(c<0xa0) { - /* quote C1 control character */ - c=(c&0x7f)|(SQ0+1)<<8; /* SQ0+1==SQ1 */ - length=2; - goto outputBytes; - } else if(c==0xfeff || c>=0xfff0) { - /* quote signature character=byte order mark and specials */ - c|=SQU<<16; - length=3; - goto outputBytes; - } else { - /* compress all other BMP characters */ - if((window=getWindow(scsu->fromUDynamicOffsets, c))>=0) { - /* there is a window defined that contains this character - switch to it or quote from it? */ - if(source>=sourceLimit || isInOffsetWindowOrDirect(scsu->fromUDynamicOffsets[window], *source)) { - /* change to dynamic window */ - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else { - /* quote from dynamic window */ - c=((uint32_t)(SQ0+window)<<8)|(c-scsu->fromUDynamicOffsets[window])|0x80; - length=2; - goto outputBytes; - } - } else if((window=getWindow(staticOffsets, c))>=0) { - /* quote from static window */ - c=((uint32_t)(SQ0+window)<<8)|(c-staticOffsets[window]); - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* define a dynamic window with this character */ - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SD0+dynamicWindow)<<16)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=3; - goto outputBytes; - } else if((uint32_t)(c-0x3400)<(0xd800-0x3400) && - (source>=sourceLimit || (uint32_t)(*source-0x3400)<(0xd800-0x3400)) - ) { - /* - * this character is not compressible (a BMP ideograph or similar); - * switch to Unicode mode if this is the last character in the block - * or there is at least one more ideograph following immediately - */ - isSingleByteMode=FALSE; - c|=SCU<<16; - length=3; - goto outputBytes; - } else { - /* quote Unicode */ - c|=SQU<<16; - length=3; - goto outputBytes; - } - } - - /* normal end of conversion: prepare for a new character */ - c=0; - sourceIndex=nextSourceIndex; - } - } else { - if(c!=0 && targetCapacity>0) { - goto getTrailUnicode; - } - - /* state machine for Unicode mode */ -/* unicodeByteMode: */ - while(source=2) { - *target++=(uint8_t)(c>>8); - *target++=(uint8_t)c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - *offsets++=sourceIndex; - } - targetCapacity-=2; - } else { - length=2; - goto outputBytes; - } - } else if((uint32_t)(c-0x3400)>=(0xf300-0x3400) /* c<0x3400 || c>=0xf300 */) { - /* compress BMP character if the following one is not an uncompressible ideograph */ - if(!(sourcefromUDynamicOffsets, c))>=0) { - /* there is a dynamic window that contains this character, change to it */ - isSingleByteMode=TRUE; - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* define a dynamic window with this character */ - isSingleByteMode=TRUE; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UD0+dynamicWindow)<<16)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=3; - goto outputBytes; - } - } - - /* don't know how to compress this character, just write it directly */ - length=2; - goto outputBytes; - } else if(c<0xe000) { - /* c is a surrogate */ - if(U16_IS_SURROGATE_LEAD(c)) { -getTrailUnicode: - lead=(UChar)c; - if(sourcefromUDynamicOffsets, c))>=0 && - !(sourcefromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if(source=0 - ) { - /* two supplementary characters in (probably) the same window - define an extended one */ - isSingleByteMode=TRUE; - code-=0x200; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)UDX<<24)|((uint32_t)dynamicWindow<<21)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=4; - goto outputBytes; - } else { - /* don't know how to compress this character, just write it directly */ - c=((uint32_t)lead<<16)|trail; - length=4; - goto outputBytes; - } - } else /* 0xe000<=c<0xf300 */ { - /* quote to avoid SCSU tags */ - c|=UQU<<16; - length=3; - goto outputBytes; - } - - /* normal end of conversion: prepare for a new character */ - c=0; - sourceIndex=nextSourceIndex; - } - } -endloop: - - /* set the converter state back into UConverter */ - scsu->fromUIsSingleByteMode=isSingleByteMode; - scsu->fromUDynamicWindow=dynamicWindow; - - cnv->fromUChar32=c; - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - pArgs->offsets=offsets; - return; - -outputBytes: - /* write the output character bytes from c and length [code copied from ucnvmbcs.c] */ - /* from the first if in the loop we know that targetCapacity>0 */ - if(length<=targetCapacity) { - if(offsets==NULL) { - switch(length) { - /* each branch falls through to the next one */ - case 4: - *target++=(uint8_t)(c>>24); - U_FALLTHROUGH; - case 3: - *target++=(uint8_t)(c>>16); - U_FALLTHROUGH; - case 2: - *target++=(uint8_t)(c>>8); - U_FALLTHROUGH; - case 1: - *target++=(uint8_t)c; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - } else { - switch(length) { - /* each branch falls through to the next one */ - case 4: - *target++=(uint8_t)(c>>24); - *offsets++=sourceIndex; - U_FALLTHROUGH; - case 3: - *target++=(uint8_t)(c>>16); - *offsets++=sourceIndex; - U_FALLTHROUGH; - case 2: - *target++=(uint8_t)(c>>8); - *offsets++=sourceIndex; - U_FALLTHROUGH; - case 1: - *target++=(uint8_t)c; - *offsets++=sourceIndex; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - } - targetCapacity-=length; - - /* normal end of conversion: prepare for a new character */ - c=0; - sourceIndex=nextSourceIndex; - goto loop; - } else { - uint8_t *p; - - /* - * We actually do this backwards here: - * In order to save an intermediate variable, we output - * first to the overflow buffer what does not fit into the - * regular target. - */ - /* we know that 0<=targetCapacitycharErrorBuffer; - switch(length) { - /* each branch falls through to the next one */ - case 4: - *p++=(uint8_t)(c>>24); - U_FALLTHROUGH; - case 3: - *p++=(uint8_t)(c>>16); - U_FALLTHROUGH; - case 2: - *p++=(uint8_t)(c>>8); - U_FALLTHROUGH; - case 1: - *p=(uint8_t)c; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - cnv->charErrorBufferLength=(int8_t)length; - - /* now output what fits into the regular target */ - c>>=8*length; /* length was reduced by targetCapacity */ - switch(targetCapacity) { - /* each branch falls through to the next one */ - case 3: - *target++=(uint8_t)(c>>16); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - U_FALLTHROUGH; - case 2: - *target++=(uint8_t)(c>>8); - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - U_FALLTHROUGH; - case 1: - *target++=(uint8_t)c; - if(offsets!=NULL) { - *offsets++=sourceIndex; - } - U_FALLTHROUGH; - default: - break; - } - - /* target overflow */ - targetCapacity=0; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - c=0; - goto endloop; - } -} - -/* - * Identical to _SCSUFromUnicodeWithOffsets but without offset handling. - * If a change is made in the original function, then either - * change this function the same way or - * re-copy the original function and remove the variables - * offsets, sourceIndex, and nextSourceIndex. - */ -static void -_SCSUFromUnicode(UConverterFromUnicodeArgs *pArgs, - UErrorCode *pErrorCode) { - UConverter *cnv; - SCSUData *scsu; - const UChar *source, *sourceLimit; - uint8_t *target; - int32_t targetCapacity; - - UBool isSingleByteMode; - uint8_t dynamicWindow; - uint32_t currentOffset; - - uint32_t c, delta; - - int32_t length; - - /* variables for compression heuristics */ - uint32_t offset; - UChar lead, trail; - int code; - int8_t window; - - /* set up the local pointers */ - cnv=pArgs->converter; - scsu=(SCSUData *)cnv->extraInfo; - - /* set up the local pointers */ - source=pArgs->source; - sourceLimit=pArgs->sourceLimit; - target=(uint8_t *)pArgs->target; - targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); - - /* get the state machine state */ - isSingleByteMode=scsu->fromUIsSingleByteMode; - dynamicWindow=scsu->fromUDynamicWindow; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - - c=cnv->fromUChar32; - - /* similar conversion "loop" as in toUnicode */ -loop: - if(isSingleByteMode) { - if(c!=0 && targetCapacity>0) { - goto getTrailSingle; - } - - /* state machine for single-byte mode */ -/* singleByteMode: */ - while(sourcefromUDynamicOffsets, c))>=0) { - /* there is a dynamic window that contains this character, change to it */ - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* might check if there are more characters in this window to come */ - /* define an extended window with this character */ - code-=0x200; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)SDX<<24)|((uint32_t)dynamicWindow<<21)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=4; - goto outputBytes; - } else { - /* change to Unicode mode and output this (lead, trail) pair */ - isSingleByteMode=FALSE; - *target++=(uint8_t)SCU; - --targetCapacity; - c=((uint32_t)lead<<16)|trail; - length=4; - goto outputBytes; - } - } else if(c<0xa0) { - /* quote C1 control character */ - c=(c&0x7f)|(SQ0+1)<<8; /* SQ0+1==SQ1 */ - length=2; - goto outputBytes; - } else if(c==0xfeff || c>=0xfff0) { - /* quote signature character=byte order mark and specials */ - c|=SQU<<16; - length=3; - goto outputBytes; - } else { - /* compress all other BMP characters */ - if((window=getWindow(scsu->fromUDynamicOffsets, c))>=0) { - /* there is a window defined that contains this character - switch to it or quote from it? */ - if(source>=sourceLimit || isInOffsetWindowOrDirect(scsu->fromUDynamicOffsets[window], *source)) { - /* change to dynamic window */ - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else { - /* quote from dynamic window */ - c=((uint32_t)(SQ0+window)<<8)|(c-scsu->fromUDynamicOffsets[window])|0x80; - length=2; - goto outputBytes; - } - } else if((window=getWindow(staticOffsets, c))>=0) { - /* quote from static window */ - c=((uint32_t)(SQ0+window)<<8)|(c-staticOffsets[window]); - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* define a dynamic window with this character */ - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(SD0+dynamicWindow)<<16)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=3; - goto outputBytes; - } else if((uint32_t)(c-0x3400)<(0xd800-0x3400) && - (source>=sourceLimit || (uint32_t)(*source-0x3400)<(0xd800-0x3400)) - ) { - /* - * this character is not compressible (a BMP ideograph or similar); - * switch to Unicode mode if this is the last character in the block - * or there is at least one more ideograph following immediately - */ - isSingleByteMode=FALSE; - c|=SCU<<16; - length=3; - goto outputBytes; - } else { - /* quote Unicode */ - c|=SQU<<16; - length=3; - goto outputBytes; - } - } - - /* normal end of conversion: prepare for a new character */ - c=0; - } - } else { - if(c!=0 && targetCapacity>0) { - goto getTrailUnicode; - } - - /* state machine for Unicode mode */ -/* unicodeByteMode: */ - while(source=2) { - *target++=(uint8_t)(c>>8); - *target++=(uint8_t)c; - targetCapacity-=2; - } else { - length=2; - goto outputBytes; - } - } else if((uint32_t)(c-0x3400)>=(0xf300-0x3400) /* c<0x3400 || c>=0xf300 */) { - /* compress BMP character if the following one is not an uncompressible ideograph */ - if(!(sourcefromUDynamicOffsets, c))>=0) { - /* there is a dynamic window that contains this character, change to it */ - isSingleByteMode=TRUE; - dynamicWindow=window; - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if((code=getDynamicOffset(c, &offset))>=0) { - /* define a dynamic window with this character */ - isSingleByteMode=TRUE; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UD0+dynamicWindow)<<16)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=3; - goto outputBytes; - } - } - - /* don't know how to compress this character, just write it directly */ - length=2; - goto outputBytes; - } else if(c<0xe000) { - /* c is a surrogate */ - if(U16_IS_SURROGATE_LEAD(c)) { -getTrailUnicode: - lead=(UChar)c; - if(sourcefromUDynamicOffsets, c))>=0 && - !(sourcefromUDynamicOffsets[dynamicWindow]; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)(UC0+dynamicWindow)<<8)|(c-currentOffset)|0x80; - length=2; - goto outputBytes; - } else if(source=0 - ) { - /* two supplementary characters in (probably) the same window - define an extended one */ - isSingleByteMode=TRUE; - code-=0x200; - dynamicWindow=getNextDynamicWindow(scsu); - currentOffset=scsu->fromUDynamicOffsets[dynamicWindow]=offset; - useDynamicWindow(scsu, dynamicWindow); - c=((uint32_t)UDX<<24)|((uint32_t)dynamicWindow<<21)|((uint32_t)code<<8)|(c-currentOffset)|0x80; - length=4; - goto outputBytes; - } else { - /* don't know how to compress this character, just write it directly */ - c=((uint32_t)lead<<16)|trail; - length=4; - goto outputBytes; - } - } else /* 0xe000<=c<0xf300 */ { - /* quote to avoid SCSU tags */ - c|=UQU<<16; - length=3; - goto outputBytes; - } - - /* normal end of conversion: prepare for a new character */ - c=0; - } - } -endloop: - - /* set the converter state back into UConverter */ - scsu->fromUIsSingleByteMode=isSingleByteMode; - scsu->fromUDynamicWindow=dynamicWindow; - - cnv->fromUChar32=c; - - /* write back the updated pointers */ - pArgs->source=source; - pArgs->target=(char *)target; - return; - -outputBytes: - /* write the output character bytes from c and length [code copied from ucnvmbcs.c] */ - /* from the first if in the loop we know that targetCapacity>0 */ - if(length<=targetCapacity) { - switch(length) { - /* each branch falls through to the next one */ - case 4: - *target++=(uint8_t)(c>>24); - U_FALLTHROUGH; - case 3: - *target++=(uint8_t)(c>>16); - U_FALLTHROUGH; - case 2: - *target++=(uint8_t)(c>>8); - U_FALLTHROUGH; - case 1: - *target++=(uint8_t)c; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - targetCapacity-=length; - - /* normal end of conversion: prepare for a new character */ - c=0; - goto loop; - } else { - uint8_t *p; - - /* - * We actually do this backwards here: - * In order to save an intermediate variable, we output - * first to the overflow buffer what does not fit into the - * regular target. - */ - /* we know that 0<=targetCapacitycharErrorBuffer; - switch(length) { - /* each branch falls through to the next one */ - case 4: - *p++=(uint8_t)(c>>24); - U_FALLTHROUGH; - case 3: - *p++=(uint8_t)(c>>16); - U_FALLTHROUGH; - case 2: - *p++=(uint8_t)(c>>8); - U_FALLTHROUGH; - case 1: - *p=(uint8_t)c; - U_FALLTHROUGH; - default: - /* will never occur */ - break; - } - cnv->charErrorBufferLength=(int8_t)length; - - /* now output what fits into the regular target */ - c>>=8*length; /* length was reduced by targetCapacity */ - switch(targetCapacity) { - /* each branch falls through to the next one */ - case 3: - *target++=(uint8_t)(c>>16); - U_FALLTHROUGH; - case 2: - *target++=(uint8_t)(c>>8); - U_FALLTHROUGH; - case 1: - *target++=(uint8_t)c; - U_FALLTHROUGH; - default: - break; - } - - /* target overflow */ - targetCapacity=0; - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - c=0; - goto endloop; - } -} - -/* miscellaneous ------------------------------------------------------------ */ - -static const char * -_SCSUGetName(const UConverter *cnv) { - SCSUData *scsu=(SCSUData *)cnv->extraInfo; - - switch(scsu->locale) { - case l_ja: - return "SCSU,locale=ja"; - default: - return "SCSU"; - } -} - -/* structure for SafeClone calculations */ -struct cloneSCSUStruct -{ - UConverter cnv; - SCSUData mydata; -}; - -static UConverter * -_SCSUSafeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status) -{ - struct cloneSCSUStruct * localClone; - int32_t bufferSizeNeeded = sizeof(struct cloneSCSUStruct); - - if (U_FAILURE(*status)){ - return 0; - } - - if (*pBufferSize == 0){ /* 'preflighting' request - set needed size into *pBufferSize */ - *pBufferSize = bufferSizeNeeded; - return 0; - } - - localClone = (struct cloneSCSUStruct *)stackBuffer; - /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ - - uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(SCSUData)); - localClone->cnv.extraInfo = &localClone->mydata; - localClone->cnv.isExtraLocal = TRUE; - - return &localClone->cnv; -} - - -static const UConverterImpl _SCSUImpl={ - UCNV_SCSU, - - NULL, - NULL, - - _SCSUOpen, - _SCSUClose, - _SCSUReset, - - _SCSUToUnicode, - _SCSUToUnicodeWithOffsets, - _SCSUFromUnicode, - _SCSUFromUnicodeWithOffsets, - NULL, - - NULL, - _SCSUGetName, - NULL, - _SCSUSafeClone, - ucnv_getCompleteUnicodeSet -}; - -static const UConverterStaticData _SCSUStaticData={ - sizeof(UConverterStaticData), - "SCSU", - 1212, /* CCSID for SCSU */ - UCNV_IBM, UCNV_SCSU, - 1, 3, /* one UChar generates at least 1 byte and at most 3 bytes */ - /* - * The subchar here is ignored because _SCSUOpen() sets U+fffd as a Unicode - * substitution string. - */ - { 0x0e, 0xff, 0xfd, 0 }, 3, - FALSE, FALSE, - 0, - 0, - { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */ -}; - -const UConverterSharedData _SCSUData= - UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_SCSUStaticData, &_SCSUImpl); - -#endif diff --git a/source/common/ucnvsel.cpp b/source/common/ucnvsel.cpp index 573e8b0..ba062b3 100644 --- a/source/common/ucnvsel.cpp +++ b/source/common/ucnvsel.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/ucol_data.h b/source/common/ucol_data.h index cdd328e..83f54ab 100644 --- a/source/common/ucol_data.h +++ b/source/common/ucol_data.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucol_data.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucol_swp.cpp b/source/common/ucol_swp.cpp index 151800d..1822705 100644 --- a/source/common/ucol_swp.cpp +++ b/source/common/ucol_swp.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucol_swp.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucol_swp.h b/source/common/ucol_swp.h index 422436d..fd8be9a 100644 --- a/source/common/ucol_swp.h +++ b/source/common/ucol_swp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucol_swp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ucurr.cpp b/source/common/ucurr.cpp index db38173..885ca3a 100644 --- a/source/common/ucurr.cpp +++ b/source/common/ucurr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -1030,7 +1030,8 @@ collectCurrencyNames(const char* locale, const UnicodeString *symbol; while ((symbol = iter.next()) != NULL) { (*currencySymbols)[*total_currency_symbol_count].IsoCode = iso; - (*currencySymbols)[*total_currency_symbol_count].currencyName = (UChar*) symbol->getBuffer(); + (*currencySymbols)[*total_currency_symbol_count].currencyName = + const_cast(symbol->getBuffer()); (*currencySymbols)[*total_currency_symbol_count].flag = 0; (*currencySymbols)[(*total_currency_symbol_count)++].currencyNameLen = symbol->length(); } diff --git a/source/common/ucurrimp.h b/source/common/ucurrimp.h index b35d6f4..6e468fd 100644 --- a/source/common/ucurrimp.h +++ b/source/common/ucurrimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/udata.cpp b/source/common/udata.cpp index ec72a0c..29074a6 100644 --- a/source/common/udata.cpp +++ b/source/common/udata.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: udata.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -110,8 +110,12 @@ static u_atomic_int32_t gHaveTriedToLoadCommonData = ATOMIC_INT32_T_INITIALIZER( static UHashtable *gCommonDataCache = NULL; /* Global hash table of opened ICU data files. */ static icu::UInitOnce gCommonDataCacheInitOnce = U_INITONCE_INITIALIZER; +#if U_PLATFORM_HAS_WINUWP_API == 0 static UDataFileAccess gDataFileAccess = UDATA_DEFAULT_ACCESS; // Access not synchronized. // Modifying is documented as thread-unsafe. +#else +static UDataFileAccess gDataFileAccess = UDATA_NO_FILES; // Windows UWP looks in one spot explicitly +#endif static UBool U_CALLCONV udata_cleanup(void) @@ -619,12 +623,14 @@ U_NAMESPACE_END /*----------------------------------------------------------------------* * * - * Add a static reference to the common data library * + * Add a static reference to the common data library * * Unless overridden by an explicit udata_setCommonData, this will be * * our common data. * * * *----------------------------------------------------------------------*/ +#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT; +#endif /* * This would be a good place for weak-linkage declarations of @@ -672,6 +678,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ if(gCommonICUDataArray[commonDataIndex] != NULL) { return gCommonICUDataArray[commonDataIndex]; } +#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time int32_t i; for(i = 0; i < commonDataIndex; ++i) { if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) { @@ -679,6 +686,7 @@ openCommonData(const char *path, /* Path from OpenChoice? */ return NULL; } } +#endif } /* Add the linked-in data to the list. */ @@ -694,11 +702,13 @@ openCommonData(const char *path, /* Path from OpenChoice? */ setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode); } */ +#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT, FALSE, pErrorCode); { Mutex lock; return gCommonICUDataArray[commonDataIndex]; } +#endif } @@ -1245,9 +1255,14 @@ doOpenChoice(const char *path, const char *type, const char *name, fprintf(stderr, " tocEntryPath = %s\n", tocEntryName.data()); #endif +#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time if(path == NULL) { path = COMMON_DATA_NAME; /* "icudt26e" */ } +#else + // Windows UWP expects only a single data file. + path = COMMON_DATA_NAME; /* "icudt26e" */ +#endif /************************ Begin loop looking for ind. files ***************/ #ifdef UDATA_DEBUG diff --git a/source/common/udatamem.c b/source/common/udatamem.c deleted file mode 100644 index daa9193..0000000 --- a/source/common/udatamem.c +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************/ - - -/*---------------------------------------------------------------------------------- - * - * UDataMemory A class-like struct that serves as a handle to a piece of memory - * that contains some ICU data (resource, converters, whatever.) - * - * When an application opens ICU data (with udata_open, for example, - * a UDataMemory * is returned. - * - *----------------------------------------------------------------------------------*/ - -#include "unicode/utypes.h" -#include "cmemory.h" -#include "unicode/udata.h" - -#include "udatamem.h" - -U_CFUNC void UDataMemory_init(UDataMemory *This) { - uprv_memset(This, 0, sizeof(UDataMemory)); - This->length=-1; -} - - -U_CFUNC void UDatamemory_assign(UDataMemory *dest, UDataMemory *source) { - /* UDataMemory Assignment. Destination UDataMemory must be initialized first. */ - UBool mallocedFlag = dest->heapAllocated; - uprv_memcpy(dest, source, sizeof(UDataMemory)); - dest->heapAllocated = mallocedFlag; -} - -U_CFUNC UDataMemory *UDataMemory_createNewInstance(UErrorCode *pErr) { - UDataMemory *This; - - if (U_FAILURE(*pErr)) { - return NULL; - } - This = uprv_malloc(sizeof(UDataMemory)); - if (This == NULL) { - *pErr = U_MEMORY_ALLOCATION_ERROR; } - else { - UDataMemory_init(This); - This->heapAllocated = TRUE; - } - return This; -} - - -U_CFUNC const DataHeader * -UDataMemory_normalizeDataPointer(const void *p) { - /* allow the data to be optionally prepended with an alignment-forcing double value */ - const DataHeader *pdh = (const DataHeader *)p; - if(pdh==NULL || (pdh->dataHeader.magic1==0xda && pdh->dataHeader.magic2==0x27)) { - return pdh; - } else { -#if U_PLATFORM == U_PF_OS400 - /* - TODO: Fix this once the compiler implements this feature. Keep in sync with genccode.c - - This is here because this platform can't currently put - const data into the read-only pages of an object or - shared library (service program). Only strings are allowed in read-only - pages, so we use char * strings to store the data. - - In order to prevent the beginning of the data from ever matching the - magic numbers we must skip the initial double. - [grhoten 4/24/2003] - */ - return (const DataHeader *)*((const void **)p+1); -#else - return (const DataHeader *)((const double *)p+1); -#endif - } -} - - -U_CFUNC void UDataMemory_setData (UDataMemory *This, const void *dataAddr) { - This->pHeader = UDataMemory_normalizeDataPointer(dataAddr); -} - - -U_CAPI void U_EXPORT2 -udata_close(UDataMemory *pData) { - if(pData!=NULL) { - uprv_unmapFile(pData); - if(pData->heapAllocated ) { - uprv_free(pData); - } else { - UDataMemory_init(pData); - } - } -} - -U_CAPI const void * U_EXPORT2 -udata_getMemory(UDataMemory *pData) { - if(pData!=NULL && pData->pHeader!=NULL) { - return (char *)(pData->pHeader)+udata_getHeaderSize(pData->pHeader); - } else { - return NULL; - } -} - -/** - * Get the length of the data item if possible. - * The length may be up to 15 bytes larger than the actual data. - * - * TODO Consider making this function public. - * It would have to return the actual length in more cases. - * For example, the length of the last item in a .dat package could be - * computed from the size of the whole .dat package minus the offset of the - * last item. - * The size of a file that was directly memory-mapped could be determined - * using some system API. - * - * In order to get perfect values for all data items, we may have to add a - * length field to UDataInfo, but that complicates data generation - * and may be overkill. - * - * @param pData The data item. - * @return the length of the data item, or -1 if not known - * @internal Currently used only in cintltst/udatatst.c - */ -U_CAPI int32_t U_EXPORT2 -udata_getLength(const UDataMemory *pData) { - if(pData!=NULL && pData->pHeader!=NULL && pData->length>=0) { - /* - * subtract the header size, - * return only the size of the actual data starting at udata_getMemory() - */ - return pData->length-udata_getHeaderSize(pData->pHeader); - } else { - return -1; - } -} - -/** - * Get the memory including the data header. - * Used in cintltst/udatatst.c - * @internal - */ -U_CAPI const void * U_EXPORT2 -udata_getRawMemory(const UDataMemory *pData) { - if(pData!=NULL && pData->pHeader!=NULL) { - return pData->pHeader; - } else { - return NULL; - } -} - -U_CFUNC UBool UDataMemory_isLoaded(const UDataMemory *This) { - return This->pHeader != NULL; -} diff --git a/source/common/udatamem.h b/source/common/udatamem.h index 385a777..a05dd69 100644 --- a/source/common/udatamem.h +++ b/source/common/udatamem.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/udataswp.c b/source/common/udataswp.c deleted file mode 100644 index f47ac1f..0000000 --- a/source/common/udataswp.c +++ /dev/null @@ -1,473 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2003-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: udataswp.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2003jun05 -* created by: Markus W. Scherer -* -* Definitions for ICU data transformations for different platforms, -* changing between big- and little-endian data and/or between -* charset families (ASCII<->EBCDIC). -*/ - -#include -#include "unicode/utypes.h" -#include "unicode/udata.h" /* UDataInfo */ -#include "ucmndata.h" /* DataHeader */ -#include "cmemory.h" -#include "udataswp.h" - -/* swapping primitives ------------------------------------------------------ */ - -static int32_t U_CALLCONV -uprv_swapArray16(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint16_t *p; - uint16_t *q; - int32_t count; - uint16_t x; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&1)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and swapping */ - p=(const uint16_t *)inData; - q=(uint16_t *)outData; - count=length/2; - while(count>0) { - x=*p++; - *q++=(uint16_t)((x<<8)|(x>>8)); - --count; - } - - return length; -} - -static int32_t U_CALLCONV -uprv_copyArray16(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&1)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - if(length>0 && inData!=outData) { - uprv_memcpy(outData, inData, length); - } - return length; -} - -static int32_t U_CALLCONV -uprv_swapArray32(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint32_t *p; - uint32_t *q; - int32_t count; - uint32_t x; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&3)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and swapping */ - p=(const uint32_t *)inData; - q=(uint32_t *)outData; - count=length/4; - while(count>0) { - x=*p++; - *q++=(uint32_t)((x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24)); - --count; - } - - return length; -} - -static int32_t U_CALLCONV -uprv_copyArray32(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&3)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - if(length>0 && inData!=outData) { - uprv_memcpy(outData, inData, length); - } - return length; -} - -static int32_t U_CALLCONV -uprv_swapArray64(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint64_t *p; - uint64_t *q; - int32_t count; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&7)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and swapping */ - p=(const uint64_t *)inData; - q=(uint64_t *)outData; - count=length/8; - while(count>0) { - uint64_t x=*p++; - x=(x<<56)|((x&0xff00)<<40)|((x&0xff0000)<<24)|((x&0xff000000)<<8)| - ((x>>8)&0xff000000)|((x>>24)&0xff0000)|((x>>40)&0xff00)|(x>>56); - *q++=x; - --count; - } - - return length; -} - -static int32_t U_CALLCONV -uprv_copyArray64(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length&7)!=0 || outData==NULL) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - if(length>0 && inData!=outData) { - uprv_memcpy(outData, inData, length); - } - return length; -} - -static uint16_t U_CALLCONV -uprv_readSwapUInt16(uint16_t x) { - return (uint16_t)((x<<8)|(x>>8)); -} - -static uint16_t U_CALLCONV -uprv_readDirectUInt16(uint16_t x) { - return x; -} - -static uint32_t U_CALLCONV -uprv_readSwapUInt32(uint32_t x) { - return (uint32_t)((x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24)); -} - -static uint32_t U_CALLCONV -uprv_readDirectUInt32(uint32_t x) { - return x; -} - -static void U_CALLCONV -uprv_writeSwapUInt16(uint16_t *p, uint16_t x) { - *p=(uint16_t)((x<<8)|(x>>8)); -} - -static void U_CALLCONV -uprv_writeDirectUInt16(uint16_t *p, uint16_t x) { - *p=x; -} - -static void U_CALLCONV -uprv_writeSwapUInt32(uint32_t *p, uint32_t x) { - *p=(uint32_t)((x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24)); -} - -static void U_CALLCONV -uprv_writeDirectUInt32(uint32_t *p, uint32_t x) { - *p=x; -} - -U_CAPI int16_t U_EXPORT2 -udata_readInt16(const UDataSwapper *ds, int16_t x) { - return (int16_t)ds->readUInt16((uint16_t)x); -} - -U_CAPI int32_t U_EXPORT2 -udata_readInt32(const UDataSwapper *ds, int32_t x) { - return (int32_t)ds->readUInt32((uint32_t)x); -} - -/** - * Swap a block of invariant, NUL-terminated strings, but not padding - * bytes after the last string. - * @internal - */ -U_CAPI int32_t U_EXPORT2 -udata_swapInvStringBlock(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const char *inChars; - int32_t stringsLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* reduce the strings length to not include bytes after the last NUL */ - inChars=(const char *)inData; - stringsLength=length; - while(stringsLength>0 && inChars[stringsLength-1]!=0) { - --stringsLength; - } - - /* swap up to the last NUL */ - ds->swapInvChars(ds, inData, stringsLength, outData, pErrorCode); - - /* copy the bytes after the last NUL */ - if(inData!=outData && length>stringsLength) { - uprv_memcpy((char *)outData+stringsLength, inChars+stringsLength, length-stringsLength); - } - - /* return the length including padding bytes */ - if(U_SUCCESS(*pErrorCode)) { - return length; - } else { - return 0; - } -} - -U_CAPI void U_EXPORT2 -udata_printError(const UDataSwapper *ds, - const char *fmt, - ...) { - va_list args; - - if(ds->printError!=NULL) { - va_start(args, fmt); - ds->printError(ds->printErrorContext, fmt, args); - va_end(args); - } -} - -/* swap a data header ------------------------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -udata_swapDataHeader(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const DataHeader *pHeader; - uint16_t headerSize, infoSize; - - /* argument checking */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<-1 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* check minimum length and magic bytes */ - pHeader=(const DataHeader *)inData; - if( (length>=0 && length<(int32_t)sizeof(DataHeader)) || - pHeader->dataHeader.magic1!=0xda || - pHeader->dataHeader.magic2!=0x27 || - pHeader->info.sizeofUChar!=2 - ) { - udata_printError(ds, "udata_swapDataHeader(): initial bytes do not look like ICU data\n"); - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; - } - - headerSize=ds->readUInt16(pHeader->dataHeader.headerSize); - infoSize=ds->readUInt16(pHeader->info.size); - - if( headerSizedataHeader)+infoSize) || - (length>=0 && length0) { - DataHeader *outHeader; - const char *s; - int32_t maxLength; - - /* Most of the fields are just bytes and need no swapping. */ - if(inData!=outData) { - uprv_memcpy(outData, inData, headerSize); - } - outHeader=(DataHeader *)outData; - - outHeader->info.isBigEndian = ds->outIsBigEndian; - outHeader->info.charsetFamily = ds->outCharset; - - /* swap headerSize */ - ds->swapArray16(ds, &pHeader->dataHeader.headerSize, 2, &outHeader->dataHeader.headerSize, pErrorCode); - - /* swap UDataInfo size and reservedWord */ - ds->swapArray16(ds, &pHeader->info.size, 4, &outHeader->info.size, pErrorCode); - - /* swap copyright statement after the UDataInfo */ - infoSize+=sizeof(pHeader->dataHeader); - s=(const char *)inData+infoSize; - maxLength=headerSize-infoSize; - /* get the length of the string */ - for(length=0; lengthswapInvChars(ds, s, length, (char *)outData+infoSize, pErrorCode); - } - - return headerSize; -} - -/* API functions ------------------------------------------------------------ */ - -U_CAPI UDataSwapper * U_EXPORT2 -udata_openSwapper(UBool inIsBigEndian, uint8_t inCharset, - UBool outIsBigEndian, uint8_t outCharset, - UErrorCode *pErrorCode) { - UDataSwapper *swapper; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return NULL; - } - if(inCharset>U_EBCDIC_FAMILY || outCharset>U_EBCDIC_FAMILY) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - - /* allocate the swapper */ - swapper=uprv_malloc(sizeof(UDataSwapper)); - if(swapper==NULL) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uprv_memset(swapper, 0, sizeof(UDataSwapper)); - - /* set values and functions pointers according to in/out parameters */ - swapper->inIsBigEndian=inIsBigEndian; - swapper->inCharset=inCharset; - swapper->outIsBigEndian=outIsBigEndian; - swapper->outCharset=outCharset; - - swapper->readUInt16= inIsBigEndian==U_IS_BIG_ENDIAN ? uprv_readDirectUInt16 : uprv_readSwapUInt16; - swapper->readUInt32= inIsBigEndian==U_IS_BIG_ENDIAN ? uprv_readDirectUInt32 : uprv_readSwapUInt32; - - swapper->writeUInt16= outIsBigEndian==U_IS_BIG_ENDIAN ? uprv_writeDirectUInt16 : uprv_writeSwapUInt16; - swapper->writeUInt32= outIsBigEndian==U_IS_BIG_ENDIAN ? uprv_writeDirectUInt32 : uprv_writeSwapUInt32; - - swapper->compareInvChars= outCharset==U_ASCII_FAMILY ? uprv_compareInvAscii : uprv_compareInvEbcdic; - - if(inIsBigEndian==outIsBigEndian) { - swapper->swapArray16=uprv_copyArray16; - swapper->swapArray32=uprv_copyArray32; - swapper->swapArray64=uprv_copyArray64; - } else { - swapper->swapArray16=uprv_swapArray16; - swapper->swapArray32=uprv_swapArray32; - swapper->swapArray64=uprv_swapArray64; - } - - if(inCharset==U_ASCII_FAMILY) { - swapper->swapInvChars= outCharset==U_ASCII_FAMILY ? uprv_copyAscii : uprv_ebcdicFromAscii; - } else /* U_EBCDIC_FAMILY */ { - swapper->swapInvChars= outCharset==U_EBCDIC_FAMILY ? uprv_copyEbcdic : uprv_asciiFromEbcdic; - } - - return swapper; -} - -U_CAPI UDataSwapper * U_EXPORT2 -udata_openSwapperForInputData(const void *data, int32_t length, - UBool outIsBigEndian, uint8_t outCharset, - UErrorCode *pErrorCode) { - const DataHeader *pHeader; - uint16_t headerSize, infoSize; - UBool inIsBigEndian; - int8_t inCharset; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return NULL; - } - if( data==NULL || - (length>=0 && length<(int32_t)sizeof(DataHeader)) || - outCharset>U_EBCDIC_FAMILY - ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - - pHeader=(const DataHeader *)data; - if( (length>=0 && lengthdataHeader.magic1!=0xda || - pHeader->dataHeader.magic2!=0x27 || - pHeader->info.sizeofUChar!=2 - ) { - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; - } - - inIsBigEndian=(UBool)pHeader->info.isBigEndian; - inCharset=pHeader->info.charsetFamily; - - if(inIsBigEndian==U_IS_BIG_ENDIAN) { - headerSize=pHeader->dataHeader.headerSize; - infoSize=pHeader->info.size; - } else { - headerSize=uprv_readSwapUInt16(pHeader->dataHeader.headerSize); - infoSize=uprv_readSwapUInt16(pHeader->info.size); - } - - if( headerSizedataHeader)+infoSize) || - (length>=0 && lengthbaseContext != NULL) { - if (((_UEnumBuffer*) en->baseContext)->len < capacity) { - capacity += PAD; - en->baseContext = uprv_realloc(en->baseContext, - sizeof(int32_t) + capacity); - if (en->baseContext == NULL) { - return NULL; - } - ((_UEnumBuffer*) en->baseContext)->len = capacity; - } - } else { - capacity += PAD; - en->baseContext = uprv_malloc(sizeof(int32_t) + capacity); - if (en->baseContext == NULL) { - return NULL; - } - ((_UEnumBuffer*) en->baseContext)->len = capacity; - } - - return (void*) & ((_UEnumBuffer*) en->baseContext)->data; -} - -U_CAPI void U_EXPORT2 -uenum_close(UEnumeration* en) -{ - if (en) { - if (en->close != NULL) { - if (en->baseContext) { - uprv_free(en->baseContext); - } - en->close(en); - } else { /* this seems dangerous, but we better kill the object */ - uprv_free(en); - } - } -} - -U_CAPI int32_t U_EXPORT2 -uenum_count(UEnumeration* en, UErrorCode* status) -{ - if (!en || U_FAILURE(*status)) { - return -1; - } - if (en->count != NULL) { - return en->count(en, status); - } else { - *status = U_UNSUPPORTED_ERROR; - return -1; - } -} - -/* Don't call this directly. Only uenum_unext should be calling this. */ -U_CAPI const UChar* U_EXPORT2 -uenum_unextDefault(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status) -{ - UChar *ustr = NULL; - int32_t len = 0; - if (en->next != NULL) { - const char *cstr = en->next(en, &len, status); - if (cstr != NULL) { - ustr = (UChar*) _getBuffer(en, (len+1) * sizeof(UChar)); - if (ustr == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - } else { - u_charsToUChars(cstr, ustr, len+1); - } - } - } else { - *status = U_UNSUPPORTED_ERROR; - } - if (resultLength) { - *resultLength = len; - } - return ustr; -} - -/* Don't call this directly. Only uenum_next should be calling this. */ -U_CAPI const char* U_EXPORT2 -uenum_nextDefault(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status) -{ - if (en->uNext != NULL) { - char *tempCharVal; - const UChar *tempUCharVal = en->uNext(en, resultLength, status); - if (tempUCharVal == NULL) { - return NULL; - } - tempCharVal = (char*) - _getBuffer(en, (*resultLength+1) * sizeof(char)); - if (!tempCharVal) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - u_UCharsToChars(tempUCharVal, tempCharVal, *resultLength + 1); - return tempCharVal; - } else { - *status = U_UNSUPPORTED_ERROR; - return NULL; - } -} - -U_CAPI const UChar* U_EXPORT2 -uenum_unext(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status) -{ - if (!en || U_FAILURE(*status)) { - return NULL; - } - if (en->uNext != NULL) { - return en->uNext(en, resultLength, status); - } else { - *status = U_UNSUPPORTED_ERROR; - return NULL; - } -} - -U_CAPI const char* U_EXPORT2 -uenum_next(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status) -{ - if (!en || U_FAILURE(*status)) { - return NULL; - } - if (en->next != NULL) { - if (resultLength != NULL) { - return en->next(en, resultLength, status); - } - else { - int32_t dummyLength=0; - return en->next(en, &dummyLength, status); - } - } else { - *status = U_UNSUPPORTED_ERROR; - return NULL; - } -} - -U_CAPI void U_EXPORT2 -uenum_reset(UEnumeration* en, UErrorCode* status) -{ - if (!en || U_FAILURE(*status)) { - return; - } - if (en->reset != NULL) { - en->reset(en, status); - } else { - *status = U_UNSUPPORTED_ERROR; - } -} diff --git a/source/common/uenumimp.h b/source/common/uenumimp.h index 5d01f01..9c9df75 100644 --- a/source/common/uenumimp.h +++ b/source/common/uenumimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uenumimp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * diff --git a/source/common/uhash.c b/source/common/uhash.c deleted file mode 100644 index 282f89f..0000000 --- a/source/common/uhash.c +++ /dev/null @@ -1,975 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -* Date Name Description -* 03/22/00 aliu Adapted from original C++ ICU Hashtable. -* 07/06/01 aliu Modified to support int32_t keys on -* platforms with sizeof(void*) < 32. -****************************************************************************** -*/ - -#include "uhash.h" -#include "unicode/ustring.h" -#include "cstring.h" -#include "cmemory.h" -#include "uassert.h" -#include "ustr_imp.h" - -/* This hashtable is implemented as a double hash. All elements are - * stored in a single array with no secondary storage for collision - * resolution (no linked list, etc.). When there is a hash collision - * (when two unequal keys have the same hashcode) we resolve this by - * using a secondary hash. The secondary hash is an increment - * computed as a hash function (a different one) of the primary - * hashcode. This increment is added to the initial hash value to - * obtain further slots assigned to the same hash code. For this to - * work, the length of the array and the increment must be relatively - * prime. The easiest way to achieve this is to have the length of - * the array be prime, and the increment be any value from - * 1..length-1. - * - * Hashcodes are 32-bit integers. We make sure all hashcodes are - * non-negative by masking off the top bit. This has two effects: (1) - * modulo arithmetic is simplified. If we allowed negative hashcodes, - * then when we computed hashcode % length, we could get a negative - * result, which we would then have to adjust back into range. It's - * simpler to just make hashcodes non-negative. (2) It makes it easy - * to check for empty vs. occupied slots in the table. We just mark - * empty or deleted slots with a negative hashcode. - * - * The central function is _uhash_find(). This function looks for a - * slot matching the given key and hashcode. If one is found, it - * returns a pointer to that slot. If the table is full, and no match - * is found, it returns NULL -- in theory. This would make the code - * more complicated, since all callers of _uhash_find() would then - * have to check for a NULL result. To keep this from happening, we - * don't allow the table to fill. When there is only one - * empty/deleted slot left, uhash_put() will refuse to increase the - * count, and fail. This simplifies the code. In practice, one will - * seldom encounter this using default UHashtables. However, if a - * hashtable is set to a U_FIXED resize policy, or if memory is - * exhausted, then the table may fill. - * - * High and low water ratios control rehashing. They establish levels - * of fullness (from 0 to 1) outside of which the data array is - * reallocated and repopulated. Setting the low water ratio to zero - * means the table will never shrink. Setting the high water ratio to - * one means the table will never grow. The ratios should be - * coordinated with the ratio between successive elements of the - * PRIMES table, so that when the primeIndex is incremented or - * decremented during rehashing, it brings the ratio of count / length - * back into the desired range (between low and high water ratios). - */ - -/******************************************************************** - * PRIVATE Constants, Macros - ********************************************************************/ - -/* This is a list of non-consecutive primes chosen such that - * PRIMES[i+1] ~ 2*PRIMES[i]. (Currently, the ratio ranges from 1.81 - * to 2.18; the inverse ratio ranges from 0.459 to 0.552.) If this - * ratio is changed, the low and high water ratios should also be - * adjusted to suit. - * - * These prime numbers were also chosen so that they are the largest - * prime number while being less than a power of two. - */ -static const int32_t PRIMES[] = { - 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, - 65521, 131071, 262139, 524287, 1048573, 2097143, 4194301, 8388593, - 16777213, 33554393, 67108859, 134217689, 268435399, 536870909, - 1073741789, 2147483647 /*, 4294967291 */ -}; - -#define PRIMES_LENGTH UPRV_LENGTHOF(PRIMES) -#define DEFAULT_PRIME_INDEX 3 - -/* These ratios are tuned to the PRIMES array such that a resize - * places the table back into the zone of non-resizing. That is, - * after a call to _uhash_rehash(), a subsequent call to - * _uhash_rehash() should do nothing (should not churn). This is only - * a potential problem with U_GROW_AND_SHRINK. - */ -static const float RESIZE_POLICY_RATIO_TABLE[6] = { - /* low, high water ratio */ - 0.0F, 0.5F, /* U_GROW: Grow on demand, do not shrink */ - 0.1F, 0.5F, /* U_GROW_AND_SHRINK: Grow and shrink on demand */ - 0.0F, 1.0F /* U_FIXED: Never change size */ -}; - -/* - Invariants for hashcode values: - - * DELETED < 0 - * EMPTY < 0 - * Real hashes >= 0 - - Hashcodes may not start out this way, but internally they are - adjusted so that they are always positive. We assume 32-bit - hashcodes; adjust these constants for other hashcode sizes. -*/ -#define HASH_DELETED ((int32_t) 0x80000000) -#define HASH_EMPTY ((int32_t) HASH_DELETED + 1) - -#define IS_EMPTY_OR_DELETED(x) ((x) < 0) - -/* This macro expects a UHashTok.pointer as its keypointer and - valuepointer parameters */ -#define HASH_DELETE_KEY_VALUE(hash, keypointer, valuepointer) \ - if (hash->keyDeleter != NULL && keypointer != NULL) { \ - (*hash->keyDeleter)(keypointer); \ - } \ - if (hash->valueDeleter != NULL && valuepointer != NULL) { \ - (*hash->valueDeleter)(valuepointer); \ - } - -/* - * Constants for hinting whether a key or value is an integer - * or a pointer. If a hint bit is zero, then the associated - * token is assumed to be an integer. - */ -#define HINT_KEY_POINTER (1) -#define HINT_VALUE_POINTER (2) - -/******************************************************************** - * PRIVATE Implementation - ********************************************************************/ - -static UHashTok -_uhash_setElement(UHashtable *hash, UHashElement* e, - int32_t hashcode, - UHashTok key, UHashTok value, int8_t hint) { - - UHashTok oldValue = e->value; - if (hash->keyDeleter != NULL && e->key.pointer != NULL && - e->key.pointer != key.pointer) { /* Avoid double deletion */ - (*hash->keyDeleter)(e->key.pointer); - } - if (hash->valueDeleter != NULL) { - if (oldValue.pointer != NULL && - oldValue.pointer != value.pointer) { /* Avoid double deletion */ - (*hash->valueDeleter)(oldValue.pointer); - } - oldValue.pointer = NULL; - } - /* Compilers should copy the UHashTok union correctly, but even if - * they do, memory heap tools (e.g. BoundsChecker) can get - * confused when a pointer is cloaked in a union and then copied. - * TO ALLEVIATE THIS, we use hints (based on what API the user is - * calling) to copy pointers when we know the user thinks - * something is a pointer. */ - if (hint & HINT_KEY_POINTER) { - e->key.pointer = key.pointer; - } else { - e->key = key; - } - if (hint & HINT_VALUE_POINTER) { - e->value.pointer = value.pointer; - } else { - e->value = value; - } - e->hashcode = hashcode; - return oldValue; -} - -/** - * Assumes that the given element is not empty or deleted. - */ -static UHashTok -_uhash_internalRemoveElement(UHashtable *hash, UHashElement* e) { - UHashTok empty; - U_ASSERT(!IS_EMPTY_OR_DELETED(e->hashcode)); - --hash->count; - empty.pointer = NULL; empty.integer = 0; - return _uhash_setElement(hash, e, HASH_DELETED, empty, empty, 0); -} - -static void -_uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { - U_ASSERT(hash != NULL); - U_ASSERT(((int32_t)policy) >= 0); - U_ASSERT(((int32_t)policy) < 3); - hash->lowWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2]; - hash->highWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2 + 1]; -} - -/** - * Allocate internal data array of a size determined by the given - * prime index. If the index is out of range it is pinned into range. - * If the allocation fails the status is set to - * U_MEMORY_ALLOCATION_ERROR and all array storage is freed. In - * either case the previous array pointer is overwritten. - * - * Caller must ensure primeIndex is in range 0..PRIME_LENGTH-1. - */ -static void -_uhash_allocate(UHashtable *hash, - int32_t primeIndex, - UErrorCode *status) { - - UHashElement *p, *limit; - UHashTok emptytok; - - if (U_FAILURE(*status)) return; - - U_ASSERT(primeIndex >= 0 && primeIndex < PRIMES_LENGTH); - - hash->primeIndex = primeIndex; - hash->length = PRIMES[primeIndex]; - - p = hash->elements = (UHashElement*) - uprv_malloc(sizeof(UHashElement) * hash->length); - - if (hash->elements == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } - - emptytok.pointer = NULL; /* Only one of these two is needed */ - emptytok.integer = 0; /* but we don't know which one. */ - - limit = p + hash->length; - while (p < limit) { - p->key = emptytok; - p->value = emptytok; - p->hashcode = HASH_EMPTY; - ++p; - } - - hash->count = 0; - hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); -} - -static UHashtable* -_uhash_init(UHashtable *result, - UHashFunction *keyHash, - UKeyComparator *keyComp, - UValueComparator *valueComp, - int32_t primeIndex, - UErrorCode *status) -{ - if (U_FAILURE(*status)) return NULL; - U_ASSERT(keyHash != NULL); - U_ASSERT(keyComp != NULL); - - result->keyHasher = keyHash; - result->keyComparator = keyComp; - result->valueComparator = valueComp; - result->keyDeleter = NULL; - result->valueDeleter = NULL; - result->allocated = FALSE; - _uhash_internalSetResizePolicy(result, U_GROW); - - _uhash_allocate(result, primeIndex, status); - - if (U_FAILURE(*status)) { - return NULL; - } - - return result; -} - -static UHashtable* -_uhash_create(UHashFunction *keyHash, - UKeyComparator *keyComp, - UValueComparator *valueComp, - int32_t primeIndex, - UErrorCode *status) { - UHashtable *result; - - if (U_FAILURE(*status)) return NULL; - - result = (UHashtable*) uprv_malloc(sizeof(UHashtable)); - if (result == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - - _uhash_init(result, keyHash, keyComp, valueComp, primeIndex, status); - result->allocated = TRUE; - - if (U_FAILURE(*status)) { - uprv_free(result); - return NULL; - } - - return result; -} - -/** - * Look for a key in the table, or if no such key exists, the first - * empty slot matching the given hashcode. Keys are compared using - * the keyComparator function. - * - * First find the start position, which is the hashcode modulo - * the length. Test it to see if it is: - * - * a. identical: First check the hash values for a quick check, - * then compare keys for equality using keyComparator. - * b. deleted - * c. empty - * - * Stop if it is identical or empty, otherwise continue by adding a - * "jump" value (moduloing by the length again to keep it within - * range) and retesting. For efficiency, there need enough empty - * values so that the searchs stop within a reasonable amount of time. - * This can be changed by changing the high/low water marks. - * - * In theory, this function can return NULL, if it is full (no empty - * or deleted slots) and if no matching key is found. In practice, we - * prevent this elsewhere (in uhash_put) by making sure the last slot - * in the table is never filled. - * - * The size of the table should be prime for this algorithm to work; - * otherwise we are not guaranteed that the jump value (the secondary - * hash) is relatively prime to the table length. - */ -static UHashElement* -_uhash_find(const UHashtable *hash, UHashTok key, - int32_t hashcode) { - - int32_t firstDeleted = -1; /* assume invalid index */ - int32_t theIndex, startIndex; - int32_t jump = 0; /* lazy evaluate */ - int32_t tableHash; - UHashElement *elements = hash->elements; - - hashcode &= 0x7FFFFFFF; /* must be positive */ - startIndex = theIndex = (hashcode ^ 0x4000000) % hash->length; - - do { - tableHash = elements[theIndex].hashcode; - if (tableHash == hashcode) { /* quick check */ - if ((*hash->keyComparator)(key, elements[theIndex].key)) { - return &(elements[theIndex]); - } - } else if (!IS_EMPTY_OR_DELETED(tableHash)) { - /* We have hit a slot which contains a key-value pair, - * but for which the hash code does not match. Keep - * looking. - */ - } else if (tableHash == HASH_EMPTY) { /* empty, end o' the line */ - break; - } else if (firstDeleted < 0) { /* remember first deleted */ - firstDeleted = theIndex; - } - if (jump == 0) { /* lazy compute jump */ - /* The jump value must be relatively prime to the table - * length. As long as the length is prime, then any value - * 1..length-1 will be relatively prime to it. - */ - jump = (hashcode % (hash->length - 1)) + 1; - } - theIndex = (theIndex + jump) % hash->length; - } while (theIndex != startIndex); - - if (firstDeleted >= 0) { - theIndex = firstDeleted; /* reset if had deleted slot */ - } else if (tableHash != HASH_EMPTY) { - /* We get to this point if the hashtable is full (no empty or - * deleted slots), and we've failed to find a match. THIS - * WILL NEVER HAPPEN as long as uhash_put() makes sure that - * count is always < length. - */ - U_ASSERT(FALSE); - return NULL; /* Never happens if uhash_put() behaves */ - } - return &(elements[theIndex]); -} - -/** - * Attempt to grow or shrink the data arrays in order to make the - * count fit between the high and low water marks. hash_put() and - * hash_remove() call this method when the count exceeds the high or - * low water marks. This method may do nothing, if memory allocation - * fails, or if the count is already in range, or if the length is - * already at the low or high limit. In any case, upon return the - * arrays will be valid. - */ -static void -_uhash_rehash(UHashtable *hash, UErrorCode *status) { - - UHashElement *old = hash->elements; - int32_t oldLength = hash->length; - int32_t newPrimeIndex = hash->primeIndex; - int32_t i; - - if (hash->count > hash->highWaterMark) { - if (++newPrimeIndex >= PRIMES_LENGTH) { - return; - } - } else if (hash->count < hash->lowWaterMark) { - if (--newPrimeIndex < 0) { - return; - } - } else { - return; - } - - _uhash_allocate(hash, newPrimeIndex, status); - - if (U_FAILURE(*status)) { - hash->elements = old; - hash->length = oldLength; - return; - } - - for (i = oldLength - 1; i >= 0; --i) { - if (!IS_EMPTY_OR_DELETED(old[i].hashcode)) { - UHashElement *e = _uhash_find(hash, old[i].key, old[i].hashcode); - U_ASSERT(e != NULL); - U_ASSERT(e->hashcode == HASH_EMPTY); - e->key = old[i].key; - e->value = old[i].value; - e->hashcode = old[i].hashcode; - ++hash->count; - } - } - - uprv_free(old); -} - -static UHashTok -_uhash_remove(UHashtable *hash, - UHashTok key) { - /* First find the position of the key in the table. If the object - * has not been removed already, remove it. If the user wanted - * keys deleted, then delete it also. We have to put a special - * hashcode in that position that means that something has been - * deleted, since when we do a find, we have to continue PAST any - * deleted values. - */ - UHashTok result; - UHashElement* e = _uhash_find(hash, key, hash->keyHasher(key)); - U_ASSERT(e != NULL); - result.pointer = NULL; - result.integer = 0; - if (!IS_EMPTY_OR_DELETED(e->hashcode)) { - result = _uhash_internalRemoveElement(hash, e); - if (hash->count < hash->lowWaterMark) { - UErrorCode status = U_ZERO_ERROR; - _uhash_rehash(hash, &status); - } - } - return result; -} - -static UHashTok -_uhash_put(UHashtable *hash, - UHashTok key, - UHashTok value, - int8_t hint, - UErrorCode *status) { - - /* Put finds the position in the table for the new value. If the - * key is already in the table, it is deleted, if there is a - * non-NULL keyDeleter. Then the key, the hash and the value are - * all put at the position in their respective arrays. - */ - int32_t hashcode; - UHashElement* e; - UHashTok emptytok; - - if (U_FAILURE(*status)) { - goto err; - } - U_ASSERT(hash != NULL); - /* Cannot always check pointer here or iSeries sees NULL every time. */ - if ((hint & HINT_VALUE_POINTER) && value.pointer == NULL) { - /* Disallow storage of NULL values, since NULL is returned by - * get() to indicate an absent key. Storing NULL == removing. - */ - return _uhash_remove(hash, key); - } - if (hash->count > hash->highWaterMark) { - _uhash_rehash(hash, status); - if (U_FAILURE(*status)) { - goto err; - } - } - - hashcode = (*hash->keyHasher)(key); - e = _uhash_find(hash, key, hashcode); - U_ASSERT(e != NULL); - - if (IS_EMPTY_OR_DELETED(e->hashcode)) { - /* Important: We must never actually fill the table up. If we - * do so, then _uhash_find() will return NULL, and we'll have - * to check for NULL after every call to _uhash_find(). To - * avoid this we make sure there is always at least one empty - * or deleted slot in the table. This only is a problem if we - * are out of memory and rehash isn't working. - */ - ++hash->count; - if (hash->count == hash->length) { - /* Don't allow count to reach length */ - --hash->count; - *status = U_MEMORY_ALLOCATION_ERROR; - goto err; - } - } - - /* We must in all cases handle storage properly. If there was an - * old key, then it must be deleted (if the deleter != NULL). - * Make hashcodes stored in table positive. - */ - return _uhash_setElement(hash, e, hashcode & 0x7FFFFFFF, key, value, hint); - - err: - /* If the deleters are non-NULL, this method adopts its key and/or - * value arguments, and we must be sure to delete the key and/or - * value in all cases, even upon failure. - */ - HASH_DELETE_KEY_VALUE(hash, key.pointer, value.pointer); - emptytok.pointer = NULL; emptytok.integer = 0; - return emptytok; -} - - -/******************************************************************** - * PUBLIC API - ********************************************************************/ - -U_CAPI UHashtable* U_EXPORT2 -uhash_open(UHashFunction *keyHash, - UKeyComparator *keyComp, - UValueComparator *valueComp, - UErrorCode *status) { - - return _uhash_create(keyHash, keyComp, valueComp, DEFAULT_PRIME_INDEX, status); -} - -U_CAPI UHashtable* U_EXPORT2 -uhash_openSize(UHashFunction *keyHash, - UKeyComparator *keyComp, - UValueComparator *valueComp, - int32_t size, - UErrorCode *status) { - - /* Find the smallest index i for which PRIMES[i] >= size. */ - int32_t i = 0; - while (i<(PRIMES_LENGTH-1) && PRIMES[i]elements != NULL) { - if (hash->keyDeleter != NULL || hash->valueDeleter != NULL) { - int32_t pos=UHASH_FIRST; - UHashElement *e; - while ((e = (UHashElement*) uhash_nextElement(hash, &pos)) != NULL) { - HASH_DELETE_KEY_VALUE(hash, e->key.pointer, e->value.pointer); - } - } - uprv_free(hash->elements); - hash->elements = NULL; - } - if (hash->allocated) { - uprv_free(hash); - } -} - -U_CAPI UHashFunction *U_EXPORT2 -uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn) { - UHashFunction *result = hash->keyHasher; - hash->keyHasher = fn; - return result; -} - -U_CAPI UKeyComparator *U_EXPORT2 -uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn) { - UKeyComparator *result = hash->keyComparator; - hash->keyComparator = fn; - return result; -} -U_CAPI UValueComparator *U_EXPORT2 -uhash_setValueComparator(UHashtable *hash, UValueComparator *fn){ - UValueComparator *result = hash->valueComparator; - hash->valueComparator = fn; - return result; -} - -U_CAPI UObjectDeleter *U_EXPORT2 -uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn) { - UObjectDeleter *result = hash->keyDeleter; - hash->keyDeleter = fn; - return result; -} - -U_CAPI UObjectDeleter *U_EXPORT2 -uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) { - UObjectDeleter *result = hash->valueDeleter; - hash->valueDeleter = fn; - return result; -} - -U_CAPI void U_EXPORT2 -uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { - UErrorCode status = U_ZERO_ERROR; - _uhash_internalSetResizePolicy(hash, policy); - hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); - _uhash_rehash(hash, &status); -} - -U_CAPI int32_t U_EXPORT2 -uhash_count(const UHashtable *hash) { - return hash->count; -} - -U_CAPI void* U_EXPORT2 -uhash_get(const UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; -} - -U_CAPI void* U_EXPORT2 -uhash_iget(const UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; -} - -U_CAPI int32_t U_EXPORT2 -uhash_geti(const UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; -} - -U_CAPI int32_t U_EXPORT2 -uhash_igeti(const UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; -} - -U_CAPI void* U_EXPORT2 -uhash_put(UHashtable *hash, - void* key, - void* value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.pointer = key; - valueholder.pointer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_KEY_POINTER | HINT_VALUE_POINTER, - status).pointer; -} - -U_CAPI void* U_EXPORT2 -uhash_iput(UHashtable *hash, - int32_t key, - void* value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.integer = key; - valueholder.pointer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_VALUE_POINTER, - status).pointer; -} - -U_CAPI int32_t U_EXPORT2 -uhash_puti(UHashtable *hash, - void* key, - int32_t value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.pointer = key; - valueholder.integer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_KEY_POINTER, - status).integer; -} - - -U_CAPI int32_t U_EXPORT2 -uhash_iputi(UHashtable *hash, - int32_t key, - int32_t value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.integer = key; - valueholder.integer = value; - return _uhash_put(hash, keyholder, valueholder, - 0, /* neither is a ptr */ - status).integer; -} - -U_CAPI void* U_EXPORT2 -uhash_remove(UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_remove(hash, keyholder).pointer; -} - -U_CAPI void* U_EXPORT2 -uhash_iremove(UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_remove(hash, keyholder).pointer; -} - -U_CAPI int32_t U_EXPORT2 -uhash_removei(UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_remove(hash, keyholder).integer; -} - -U_CAPI int32_t U_EXPORT2 -uhash_iremovei(UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_remove(hash, keyholder).integer; -} - -U_CAPI void U_EXPORT2 -uhash_removeAll(UHashtable *hash) { - int32_t pos = UHASH_FIRST; - const UHashElement *e; - U_ASSERT(hash != NULL); - if (hash->count != 0) { - while ((e = uhash_nextElement(hash, &pos)) != NULL) { - uhash_removeElement(hash, e); - } - } - U_ASSERT(hash->count == 0); -} - -U_CAPI const UHashElement* U_EXPORT2 -uhash_find(const UHashtable *hash, const void* key) { - UHashTok keyholder; - const UHashElement *e; - keyholder.pointer = (void*) key; - e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder)); - return IS_EMPTY_OR_DELETED(e->hashcode) ? NULL : e; -} - -U_CAPI const UHashElement* U_EXPORT2 -uhash_nextElement(const UHashtable *hash, int32_t *pos) { - /* Walk through the array until we find an element that is not - * EMPTY and not DELETED. - */ - int32_t i; - U_ASSERT(hash != NULL); - for (i = *pos + 1; i < hash->length; ++i) { - if (!IS_EMPTY_OR_DELETED(hash->elements[i].hashcode)) { - *pos = i; - return &(hash->elements[i]); - } - } - - /* No more elements */ - return NULL; -} - -U_CAPI void* U_EXPORT2 -uhash_removeElement(UHashtable *hash, const UHashElement* e) { - U_ASSERT(hash != NULL); - U_ASSERT(e != NULL); - if (!IS_EMPTY_OR_DELETED(e->hashcode)) { - UHashElement *nce = (UHashElement *)e; - return _uhash_internalRemoveElement(hash, nce).pointer; - } - return NULL; -} - -/******************************************************************** - * UHashTok convenience - ********************************************************************/ - -/** - * Return a UHashTok for an integer. - */ -/*U_CAPI UHashTok U_EXPORT2 -uhash_toki(int32_t i) { - UHashTok tok; - tok.integer = i; - return tok; -}*/ - -/** - * Return a UHashTok for a pointer. - */ -/*U_CAPI UHashTok U_EXPORT2 -uhash_tokp(void* p) { - UHashTok tok; - tok.pointer = p; - return tok; -}*/ - -/******************************************************************** - * PUBLIC Key Hash Functions - ********************************************************************/ - -U_CAPI int32_t U_EXPORT2 -uhash_hashUChars(const UHashTok key) { - const UChar *s = (const UChar *)key.pointer; - return s == NULL ? 0 : ustr_hashUCharsN(s, u_strlen(s)); -} - -U_CAPI int32_t U_EXPORT2 -uhash_hashChars(const UHashTok key) { - const char *s = (const char *)key.pointer; - return s == NULL ? 0 : ustr_hashCharsN(s, uprv_strlen(s)); -} - -U_CAPI int32_t U_EXPORT2 -uhash_hashIChars(const UHashTok key) { - const char *s = (const char *)key.pointer; - return s == NULL ? 0 : ustr_hashICharsN(s, uprv_strlen(s)); -} - -U_CAPI UBool U_EXPORT2 -uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ - int32_t count1, count2, pos, i; - - if(hash1==hash2){ - return TRUE; - } - - /* - * Make sure that we are comparing 2 valid hashes of the same type - * with valid comparison functions. - * Without valid comparison functions, a binary comparison - * of the hash values will yield random results on machines - * with 64-bit pointers and 32-bit integer hashes. - * A valueComparator is normally optional. - */ - if (hash1==NULL || hash2==NULL || - hash1->keyComparator != hash2->keyComparator || - hash1->valueComparator != hash2->valueComparator || - hash1->valueComparator == NULL) - { - /* - Normally we would return an error here about incompatible hash tables, - but we return FALSE instead. - */ - return FALSE; - } - - count1 = uhash_count(hash1); - count2 = uhash_count(hash2); - if(count1!=count2){ - return FALSE; - } - - pos=UHASH_FIRST; - for(i=0; ikey; - const UHashTok val1 = elem1->value; - /* here the keys are not compared, instead the key form hash1 is used to fetch - * value from hash2. If the hashes are equal then then both hashes should - * contain equal values for the same key! - */ - const UHashElement* elem2 = _uhash_find(hash2, key1, hash2->keyHasher(key1)); - const UHashTok val2 = elem2->value; - if(hash1->valueComparator(val1, val2)==FALSE){ - return FALSE; - } - } - return TRUE; -} - -/******************************************************************** - * PUBLIC Comparator Functions - ********************************************************************/ - -U_CAPI UBool U_EXPORT2 -uhash_compareUChars(const UHashTok key1, const UHashTok key2) { - const UChar *p1 = (const UChar*) key1.pointer; - const UChar *p2 = (const UChar*) key2.pointer; - if (p1 == p2) { - return TRUE; - } - if (p1 == NULL || p2 == NULL) { - return FALSE; - } - while (*p1 != 0 && *p1 == *p2) { - ++p1; - ++p2; - } - return (UBool)(*p1 == *p2); -} - -U_CAPI UBool U_EXPORT2 -uhash_compareChars(const UHashTok key1, const UHashTok key2) { - const char *p1 = (const char*) key1.pointer; - const char *p2 = (const char*) key2.pointer; - if (p1 == p2) { - return TRUE; - } - if (p1 == NULL || p2 == NULL) { - return FALSE; - } - while (*p1 != 0 && *p1 == *p2) { - ++p1; - ++p2; - } - return (UBool)(*p1 == *p2); -} - -U_CAPI UBool U_EXPORT2 -uhash_compareIChars(const UHashTok key1, const UHashTok key2) { - const char *p1 = (const char*) key1.pointer; - const char *p2 = (const char*) key2.pointer; - if (p1 == p2) { - return TRUE; - } - if (p1 == NULL || p2 == NULL) { - return FALSE; - } - while (*p1 != 0 && uprv_tolower(*p1) == uprv_tolower(*p2)) { - ++p1; - ++p2; - } - return (UBool)(*p1 == *p2); -} - -/******************************************************************** - * PUBLIC int32_t Support Functions - ********************************************************************/ - -U_CAPI int32_t U_EXPORT2 -uhash_hashLong(const UHashTok key) { - return key.integer; -} - -U_CAPI UBool U_EXPORT2 -uhash_compareLong(const UHashTok key1, const UHashTok key2) { - return (UBool)(key1.integer == key2.integer); -} diff --git a/source/common/uhash.h b/source/common/uhash.h index e53ce73..6369f8e 100644 --- a/source/common/uhash.h +++ b/source/common/uhash.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uhash_us.cpp b/source/common/uhash_us.cpp index ac76c1b..ef482c2 100644 --- a/source/common/uhash_us.cpp +++ b/source/common/uhash_us.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uidna.cpp b/source/common/uidna.cpp index e01c9ae..7cc97a9 100644 --- a/source/common/uidna.cpp +++ b/source/common/uidna.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uidna.cpp - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uinit.cpp b/source/common/uinit.cpp index 34e82a3..624431b 100644 --- a/source/common/uinit.cpp +++ b/source/common/uinit.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: uinit.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uinvchar.c b/source/common/uinvchar.c deleted file mode 100644 index 79dd051..0000000 --- a/source/common/uinvchar.c +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 1999-2010, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: uinvchar.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:2 -* -* created on: 2004sep14 -* created by: Markus W. Scherer -* -* Functions for handling invariant characters, moved here from putil.c -* for better modularization. -*/ - -#include "unicode/utypes.h" -#include "unicode/ustring.h" -#include "udataswp.h" -#include "cstring.h" -#include "cmemory.h" -#include "uassert.h" -#include "uinvchar.h" - -/* invariant-character handling --------------------------------------------- */ - -/* - * These maps for ASCII to/from EBCDIC map invariant characters (see utypes.h) - * appropriately for most EBCDIC codepages. - * - * They currently also map most other ASCII graphic characters, - * appropriately for codepages 37 and 1047. - * Exceptions: The characters for []^ have different codes in 37 & 1047. - * Both versions are mapped to ASCII. - * - * ASCII 37 1047 - * [ 5B BA AD - * ] 5D BB BD - * ^ 5E B0 5F - * - * There are no mappings for variant characters from Unicode to EBCDIC. - * - * Currently, C0 control codes are also included in these maps. - * Exceptions: S/390 Open Edition swaps LF and NEL codes compared with other - * EBCDIC platforms; both codes (15 and 25) are mapped to ASCII LF (0A), - * but there is no mapping for ASCII LF back to EBCDIC. - * - * ASCII EBCDIC S/390-OE - * LF 0A 25 15 - * NEL 85 15 25 - * - * The maps below explicitly exclude the variant - * control and graphical characters that are in ASCII-based - * codepages at 0x80 and above. - * "No mapping" is expressed by mapping to a 00 byte. - * - * These tables do not establish a converter or a codepage. - */ - -static const uint8_t asciiFromEbcdic[256]={ - 0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x00, 0x0a, 0x08, 0x00, 0x18, 0x19, 0x00, 0x00, 0x1c, 0x1d, 0x1e, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x17, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1a, - - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, - 0x2d, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, - - 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5d, 0x00, 0x5d, 0x00, 0x00, - - 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const uint8_t ebcdicFromAscii[256]={ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x00, 0x7f, 0x00, 0x00, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - - 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x6d, - 0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x07, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* Same as asciiFromEbcdic[] except maps all letters to lowercase. */ -static const uint8_t lowercaseAsciiFromEbcdic[256]={ - 0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x00, 0x0a, 0x08, 0x00, 0x18, 0x19, 0x00, 0x00, 0x1c, 0x1d, 0x1e, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x17, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1a, - - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, - 0x2d, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, - - 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5d, 0x00, 0x5d, 0x00, 0x00, - - 0x7b, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7d, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -/* - * Bit sets indicating which characters of the ASCII repertoire - * (by ASCII/Unicode code) are "invariant". - * See utypes.h for more details. - * - * As invariant are considered the characters of the ASCII repertoire except - * for the following: - * 21 '!' - * 23 '#' - * 24 '$' - * - * 40 '@' - * - * 5b '[' - * 5c '\' - * 5d ']' - * 5e '^' - * - * 60 '`' - * - * 7b '{' - * 7c '|' - * 7d '}' - * 7e '~' - */ -static const uint32_t invariantChars[4]={ - 0xfffffbff, /* 00..1f but not 0a */ - 0xffffffe5, /* 20..3f but not 21 23 24 */ - 0x87fffffe, /* 40..5f but not 40 5b..5e */ - 0x87fffffe /* 60..7f but not 60 7b..7e */ -}; - -/* - * test unsigned types (or values known to be non-negative) for invariant characters, - * tests ASCII-family character values - */ -#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0) - -/* test signed types for invariant characters, adds test for positive values */ -#define SCHAR_IS_INVARIANT(c) ((0<=(c)) && UCHAR_IS_INVARIANT(c)) - -#if U_CHARSET_FAMILY==U_ASCII_FAMILY -#define CHAR_TO_UCHAR(c) c -#define UCHAR_TO_CHAR(c) c -#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY -#define CHAR_TO_UCHAR(u) asciiFromEbcdic[u] -#define UCHAR_TO_CHAR(u) ebcdicFromAscii[u] -#else -# error U_CHARSET_FAMILY is not valid -#endif - - -U_CAPI void U_EXPORT2 -u_charsToUChars(const char *cs, UChar *us, int32_t length) { - UChar u; - uint8_t c; - - /* - * Allow the entire ASCII repertoire to be mapped _to_ Unicode. - * For EBCDIC systems, this works for characters with codes from - * codepages 37 and 1047 or compatible. - */ - while(length>0) { - c=(uint8_t)(*cs++); - u=(UChar)CHAR_TO_UCHAR(c); - U_ASSERT((u!=0 || c==0)); /* only invariant chars converted? */ - *us++=u; - --length; - } -} - -U_CAPI void U_EXPORT2 -u_UCharsToChars(const UChar *us, char *cs, int32_t length) { - UChar u; - - while(length>0) { - u=*us++; - if(!UCHAR_IS_INVARIANT(u)) { - U_ASSERT(FALSE); /* Variant characters were used. These are not portable in ICU. */ - u=0; - } - *cs++=(char)UCHAR_TO_CHAR(u); - --length; - } -} - -U_CAPI UBool U_EXPORT2 -uprv_isInvariantString(const char *s, int32_t length) { - uint8_t c; - - for(;;) { - if(length<0) { - /* NUL-terminated */ - c=(uint8_t)*s++; - if(c==0) { - break; - } - } else { - /* count length */ - if(length==0) { - break; - } - --length; - c=(uint8_t)*s++; - if(c==0) { - continue; /* NUL is invariant */ - } - } - /* c!=0 now, one branch below checks c==0 for variant characters */ - - /* - * no assertions here because these functions are legitimately called - * for strings with variant characters - */ -#if U_CHARSET_FAMILY==U_ASCII_FAMILY - if(!UCHAR_IS_INVARIANT(c)) { - return FALSE; /* found a variant char */ - } -#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY - c=CHAR_TO_UCHAR(c); - if(c==0 || !UCHAR_IS_INVARIANT(c)) { - return FALSE; /* found a variant char */ - } -#else -# error U_CHARSET_FAMILY is not valid -#endif - } - return TRUE; -} - -U_CAPI UBool U_EXPORT2 -uprv_isInvariantUString(const UChar *s, int32_t length) { - UChar c; - - for(;;) { - if(length<0) { - /* NUL-terminated */ - c=*s++; - if(c==0) { - break; - } - } else { - /* count length */ - if(length==0) { - break; - } - --length; - c=*s++; - } - - /* - * no assertions here because these functions are legitimately called - * for strings with variant characters - */ - if(!UCHAR_IS_INVARIANT(c)) { - return FALSE; /* found a variant char */ - } - } - return TRUE; -} - -/* UDataSwapFn implementations used in udataswp.c ------- */ - -/* convert ASCII to EBCDIC and verify that all characters are invariant */ -U_CAPI int32_t U_EXPORT2 -uprv_ebcdicFromAscii(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint8_t *s; - uint8_t *t; - uint8_t c; - - int32_t count; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and swapping */ - s=(const uint8_t *)inData; - t=(uint8_t *)outData; - count=length; - while(count>0) { - c=*s++; - if(!UCHAR_IS_INVARIANT(c)) { - udata_printError(ds, "uprv_ebcdicFromAscii() string[%d] contains a variant character in position %d\n", - length, length-count); - *pErrorCode=U_INVALID_CHAR_FOUND; - return 0; - } - *t++=ebcdicFromAscii[c]; - --count; - } - - return length; -} - -/* this function only checks and copies ASCII strings without conversion */ -U_CFUNC int32_t -uprv_copyAscii(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint8_t *s; - uint8_t c; - - int32_t count; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and checking */ - s=(const uint8_t *)inData; - count=length; - while(count>0) { - c=*s++; - if(!UCHAR_IS_INVARIANT(c)) { - udata_printError(ds, "uprv_copyFromAscii() string[%d] contains a variant character in position %d\n", - length, length-count); - *pErrorCode=U_INVALID_CHAR_FOUND; - return 0; - } - --count; - } - - if(length>0 && inData!=outData) { - uprv_memcpy(outData, inData, length); - } - - return length; -} - -/* convert EBCDIC to ASCII and verify that all characters are invariant */ -U_CFUNC int32_t -uprv_asciiFromEbcdic(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint8_t *s; - uint8_t *t; - uint8_t c; - - int32_t count; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and swapping */ - s=(const uint8_t *)inData; - t=(uint8_t *)outData; - count=length; - while(count>0) { - c=*s++; - if(c!=0 && ((c=asciiFromEbcdic[c])==0 || !UCHAR_IS_INVARIANT(c))) { - udata_printError(ds, "uprv_asciiFromEbcdic() string[%d] contains a variant character in position %d\n", - length, length-count); - *pErrorCode=U_INVALID_CHAR_FOUND; - return 0; - } - *t++=c; - --count; - } - - return length; -} - -/* this function only checks and copies EBCDIC strings without conversion */ -U_CFUNC int32_t -uprv_copyEbcdic(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const uint8_t *s; - uint8_t c; - - int32_t count; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - if(ds==NULL || inData==NULL || length<0 || (length>0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - /* setup and checking */ - s=(const uint8_t *)inData; - count=length; - while(count>0) { - c=*s++; - if(c!=0 && ((c=asciiFromEbcdic[c])==0 || !UCHAR_IS_INVARIANT(c))) { - udata_printError(ds, "uprv_copyEbcdic() string[%] contains a variant character in position %d\n", - length, length-count); - *pErrorCode=U_INVALID_CHAR_FOUND; - return 0; - } - --count; - } - - if(length>0 && inData!=outData) { - uprv_memcpy(outData, inData, length); - } - - return length; -} - -/* compare invariant strings; variant characters compare less than others and unlike each other */ -U_CFUNC int32_t -uprv_compareInvAscii(const UDataSwapper *ds, - const char *outString, int32_t outLength, - const UChar *localString, int32_t localLength) { - int32_t minLength; - UChar32 c1, c2; - uint8_t c; - - if(outString==NULL || outLength<-1 || localString==NULL || localLength<-1) { - return 0; - } - - if(outLength<0) { - outLength=(int32_t)uprv_strlen(outString); - } - if(localLength<0) { - localLength=u_strlen(localString); - } - - minLength= outLength0) { - c=(uint8_t)*outString++; - if(UCHAR_IS_INVARIANT(c)) { - c1=c; - } else { - c1=-1; - } - - c2=*localString++; - if(!UCHAR_IS_INVARIANT(c2)) { - c2=-2; - } - - if((c1-=c2)!=0) { - return c1; - } - - --minLength; - } - - /* strings start with same prefix, compare lengths */ - return outLength-localLength; -} - -U_CFUNC int32_t -uprv_compareInvEbcdic(const UDataSwapper *ds, - const char *outString, int32_t outLength, - const UChar *localString, int32_t localLength) { - int32_t minLength; - UChar32 c1, c2; - uint8_t c; - - if(outString==NULL || outLength<-1 || localString==NULL || localLength<-1) { - return 0; - } - - if(outLength<0) { - outLength=(int32_t)uprv_strlen(outString); - } - if(localLength<0) { - localLength=u_strlen(localString); - } - - minLength= outLength0) { - c=(uint8_t)*outString++; - if(c==0) { - c1=0; - } else if((c1=asciiFromEbcdic[c])!=0 && UCHAR_IS_INVARIANT(c1)) { - /* c1 is set */ - } else { - c1=-1; - } - - c2=*localString++; - if(!UCHAR_IS_INVARIANT(c2)) { - c2=-2; - } - - if((c1-=c2)!=0) { - return c1; - } - - --minLength; - } - - /* strings start with same prefix, compare lengths */ - return outLength-localLength; -} - -U_CAPI int32_t U_EXPORT2 -uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2) { - int32_t c1, c2; - - for(;; ++s1, ++s2) { - c1=(uint8_t)*s1; - c2=(uint8_t)*s2; - if(c1!=c2) { - if(c1!=0 && ((c1=asciiFromEbcdic[c1])==0 || !UCHAR_IS_INVARIANT(c1))) { - c1=-(int32_t)(uint8_t)*s1; - } - if(c2!=0 && ((c2=asciiFromEbcdic[c2])==0 || !UCHAR_IS_INVARIANT(c2))) { - c2=-(int32_t)(uint8_t)*s2; - } - return c1-c2; - } else if(c1==0) { - return 0; - } - } -} - -U_CAPI char U_EXPORT2 -uprv_ebcdicToLowercaseAscii(char c) { - return (char)lowercaseAsciiFromEbcdic[(uint8_t)c]; -} - -U_INTERNAL uint8_t* U_EXPORT2 -uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n) -{ - uint8_t *orig_dst = dst; - - if(n==-1) { - n = uprv_strlen((const char*)src)+1; /* copy NUL */ - } - /* copy non-null */ - while(*src && n>0) { - *(dst++) = asciiFromEbcdic[*(src++)]; - n--; - } - /* pad */ - while(n>0) { - *(dst++) = 0; - n--; - } - return orig_dst; -} - -U_INTERNAL uint8_t* U_EXPORT2 -uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n) -{ - uint8_t *orig_dst = dst; - - if(n==-1) { - n = uprv_strlen((const char*)src)+1; /* copy NUL */ - } - /* copy non-null */ - while(*src && n>0) { - char ch = ebcdicFromAscii[*(src++)]; - if(ch == 0) { - ch = ebcdicFromAscii[0x3f]; /* questionmark (subchar) */ - } - *(dst++) = ch; - n--; - } - /* pad */ - while(n>0) { - *(dst++) = 0; - n--; - } - return orig_dst; -} - diff --git a/source/common/uinvchar.h b/source/common/uinvchar.h index 19a3b26..c4f9f88 100644 --- a/source/common/uinvchar.h +++ b/source/common/uinvchar.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uinvchar.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * @@ -64,7 +64,7 @@ uprv_isInvariantUString(const UChar *s, int32_t length); */ U_INTERNAL inline UBool U_EXPORT2 uprv_isInvariantUnicodeString(const icu::UnicodeString &s) { - return uprv_isInvariantUString(s.getBuffer(), s.length()); + return uprv_isInvariantUString(icu::toUCharPtr(s.getBuffer()), s.length()); } #endif /* __cplusplus */ diff --git a/source/common/uiter.cpp b/source/common/uiter.cpp index 26ca877..b9252d8 100644 --- a/source/common/uiter.cpp +++ b/source/common/uiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uiter.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ulist.c b/source/common/ulist.c deleted file mode 100644 index 7f7fdd9..0000000 --- a/source/common/ulist.c +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 2009-2016, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -*/ - -#include "ulist.h" -#include "cmemory.h" -#include "cstring.h" -#include "uenumimp.h" - -typedef struct UListNode UListNode; -struct UListNode { - void *data; - - UListNode *next; - UListNode *previous; - - /* When data is created with uprv_malloc, needs to be freed during deleteList function. */ - UBool forceDelete; -}; - -struct UList { - UListNode *curr; - UListNode *head; - UListNode *tail; - - int32_t size; - int32_t currentIndex; -}; - -static void ulist_addFirstItem(UList *list, UListNode *newItem); - -U_CAPI UList *U_EXPORT2 ulist_createEmptyList(UErrorCode *status) { - UList *newList = NULL; - - if (U_FAILURE(*status)) { - return NULL; - } - - newList = (UList *)uprv_malloc(sizeof(UList)); - if (newList == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - - newList->curr = NULL; - newList->head = NULL; - newList->tail = NULL; - newList->size = 0; - newList->currentIndex = -1; - - return newList; -} - -/* - * Function called by addItemEndList or addItemBeginList when the first item is added to the list. - * This function properly sets the pointers for the first item added. - */ -static void ulist_addFirstItem(UList *list, UListNode *newItem) { - newItem->next = NULL; - newItem->previous = NULL; - list->head = newItem; - list->tail = newItem; -} - -static void ulist_removeItem(UList *list, UListNode *p) { - if (p->previous == NULL) { - // p is the list head. - list->head = p->next; - } else { - p->previous->next = p->next; - } - if (p->next == NULL) { - // p is the list tail. - list->tail = p->previous; - } else { - p->next->previous = p->previous; - } - list->curr = NULL; - list->currentIndex = 0; - --list->size; - if (p->forceDelete) { - uprv_free(p->data); - } - uprv_free(p); -} - -U_CAPI void U_EXPORT2 ulist_addItemEndList(UList *list, const void *data, UBool forceDelete, UErrorCode *status) { - UListNode *newItem = NULL; - - if (U_FAILURE(*status) || list == NULL || data == NULL) { - if (forceDelete) { - uprv_free((void *)data); - } - return; - } - - newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); - if (newItem == NULL) { - if (forceDelete) { - uprv_free((void *)data); - } - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } - newItem->data = (void *)(data); - newItem->forceDelete = forceDelete; - - if (list->size == 0) { - ulist_addFirstItem(list, newItem); - } else { - newItem->next = NULL; - newItem->previous = list->tail; - list->tail->next = newItem; - list->tail = newItem; - } - - list->size++; -} - -U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBool forceDelete, UErrorCode *status) { - UListNode *newItem = NULL; - - if (U_FAILURE(*status) || list == NULL || data == NULL) { - if (forceDelete) { - uprv_free((void *)data); - } - return; - } - - newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); - if (newItem == NULL) { - if (forceDelete) { - uprv_free((void *)data); - } - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } - newItem->data = (void *)(data); - newItem->forceDelete = forceDelete; - - if (list->size == 0) { - ulist_addFirstItem(list, newItem); - } else { - newItem->previous = NULL; - newItem->next = list->head; - list->head->previous = newItem; - list->head = newItem; - list->currentIndex++; - } - - list->size++; -} - -U_CAPI UBool U_EXPORT2 ulist_containsString(const UList *list, const char *data, int32_t length) { - if (list != NULL) { - const UListNode *pointer; - for (pointer = list->head; pointer != NULL; pointer = pointer->next) { - if (length == uprv_strlen(pointer->data)) { - if (uprv_memcmp(data, pointer->data, length) == 0) { - return TRUE; - } - } - } - } - return FALSE; -} - -U_CAPI UBool U_EXPORT2 ulist_removeString(UList *list, const char *data) { - if (list != NULL) { - UListNode *pointer; - for (pointer = list->head; pointer != NULL; pointer = pointer->next) { - if (uprv_strcmp(data, pointer->data) == 0) { - ulist_removeItem(list, pointer); - // Remove only the first occurrence, like Java LinkedList.remove(Object). - return TRUE; - } - } - } - return FALSE; -} - -U_CAPI void *U_EXPORT2 ulist_getNext(UList *list) { - UListNode *curr = NULL; - - if (list == NULL || list->curr == NULL) { - return NULL; - } - - curr = list->curr; - list->curr = curr->next; - list->currentIndex++; - - return curr->data; -} - -U_CAPI int32_t U_EXPORT2 ulist_getListSize(const UList *list) { - if (list != NULL) { - return list->size; - } - - return -1; -} - -U_CAPI void U_EXPORT2 ulist_resetList(UList *list) { - if (list != NULL) { - list->curr = list->head; - list->currentIndex = 0; - } -} - -U_CAPI void U_EXPORT2 ulist_deleteList(UList *list) { - UListNode *listHead = NULL; - - if (list != NULL) { - listHead = list->head; - while (listHead != NULL) { - UListNode *listPointer = listHead->next; - - if (listHead->forceDelete) { - uprv_free(listHead->data); - } - - uprv_free(listHead); - listHead = listPointer; - } - uprv_free(list); - list = NULL; - } -} - -U_CAPI void U_EXPORT2 ulist_close_keyword_values_iterator(UEnumeration *en) { - if (en != NULL) { - ulist_deleteList((UList *)(en->context)); - uprv_free(en); - } -} - -U_CAPI int32_t U_EXPORT2 ulist_count_keyword_values(UEnumeration *en, UErrorCode *status) { - if (U_FAILURE(*status)) { - return -1; - } - - return ulist_getListSize((UList *)(en->context)); -} - -U_CAPI const char * U_EXPORT2 ulist_next_keyword_value(UEnumeration *en, int32_t *resultLength, UErrorCode *status) { - const char *s; - if (U_FAILURE(*status)) { - return NULL; - } - - s = (const char *)ulist_getNext((UList *)(en->context)); - if (s != NULL && resultLength != NULL) { - *resultLength = uprv_strlen(s); - } - return s; -} - -U_CAPI void U_EXPORT2 ulist_reset_keyword_values_iterator(UEnumeration *en, UErrorCode *status) { - if (U_FAILURE(*status)) { - return ; - } - - ulist_resetList((UList *)(en->context)); -} - -U_CAPI UList * U_EXPORT2 ulist_getListFromEnum(UEnumeration *en) { - return (UList *)(en->context); -} - diff --git a/source/common/ulist.h b/source/common/ulist.h index 6f292bf..de58a4a 100644 --- a/source/common/ulist.h +++ b/source/common/ulist.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/ulistformatter.cpp b/source/common/ulistformatter.cpp index 98aa50e..c140c78 100644 --- a/source/common/ulistformatter.cpp +++ b/source/common/ulistformatter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** diff --git a/source/common/uloc.cpp b/source/common/uloc.cpp index 2a02b27..4d854bb 100644 --- a/source/common/uloc.cpp +++ b/source/common/uloc.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -44,10 +44,11 @@ #include "uarrsort.h" #include "uenumimp.h" #include "uassert.h" +#include "charstr.h" #include /* for sprintf */ -using namespace icu; +U_NAMESPACE_USE /* ### Declarations **************************************************/ @@ -101,7 +102,7 @@ static const char * const LANGUAGES[] = { "aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain", "ak", "akk", "akz", "ale", "aln", "alt", "am", "an", "ang", "anp", "ar", "arc", - "arn", "aro", "arp", "arq", "arw", "ary", "arz", "as", + "arn", "aro", "arp", "arq", "ars", "arw", "ary", "arz", "as", "asa", "ase", "ast", "av", "avk", "awa", "ay", "az", "ba", "bal", "ban", "bar", "bas", "bax", "bbc", "bbj", "be", "bej", "bem", "bew", "bez", "bfd", "bfq", "bg", @@ -216,7 +217,7 @@ static const char * const LANGUAGES_3[] = { "aar", "abk", "ace", "ach", "ada", "ady", "ave", "aeb", "afr", "afh", "agq", "ain", "aka", "akk", "akz", "ale", "aln", "alt", "amh", "arg", "ang", "anp", "ara", "arc", - "arn", "aro", "arp", "arq", "arw", "ary", "arz", "asm", + "arn", "aro", "arp", "arq", "ars", "arw", "ary", "arz", "asm", "asa", "ase", "ast", "ava", "avk", "awa", "aym", "aze", "bak", "bal", "ban", "bar", "bas", "bax", "bbc", "bbj", "bel", "bej", "bem", "bew", "bez", "bfd", "bfq", "bul", @@ -560,6 +561,10 @@ static int32_t getShortestSubtagLength(const char *localeID) { } /* ### Keywords **************************************************/ +#define UPRV_ISDIGIT(c) (((c) >= '0') && ((c) <= '9')) +#define UPRV_ISALPHANUM(c) (uprv_isASCIILetter(c) || UPRV_ISDIGIT(c) ) +/* Punctuation/symbols allowed in legacy key values */ +#define UPRV_OK_VALUE_PUNCTUATION(c) ((c) == '_' || (c) == '-' || (c) == '+' || (c) == '/') #define ULOC_KEYWORD_BUFFER_LEN 25 #define ULOC_MAX_NO_KEYWORDS 25 @@ -596,20 +601,26 @@ locale_getKeywordsStart(const char *localeID) { */ static int32_t locale_canonKeywordName(char *buf, const char *keywordName, UErrorCode *status) { - int32_t i; - int32_t keywordNameLen = (int32_t)uprv_strlen(keywordName); + int32_t keywordNameLen = 0; - if(keywordNameLen >= ULOC_KEYWORD_BUFFER_LEN) { - /* keyword name too long for internal buffer */ - *status = U_INTERNAL_PROGRAM_ERROR; - return 0; + for (; *keywordName != 0; keywordName++) { + if (!UPRV_ISALPHANUM(*keywordName)) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */ + return 0; + } + if (keywordNameLen < ULOC_KEYWORD_BUFFER_LEN - 1) { + buf[keywordNameLen++] = uprv_tolower(*keywordName); + } else { + /* keyword name too long for internal buffer */ + *status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } } - - /* normalize the keyword name */ - for(i = 0; i < keywordNameLen; i++) { - buf[i] = uprv_tolower(keywordName[i]); + if (keywordNameLen == 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name */ + return 0; } - buf[i] = 0; + buf[keywordNameLen] = 0; /* terminate */ return keywordNameLen; } @@ -837,87 +848,108 @@ uloc_getKeywordValue(const char* localeID, const char* nextSeparator = NULL; char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; char localeKeywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; - int32_t i = 0; int32_t result = 0; if(status && U_SUCCESS(*status) && localeID) { char tempBuffer[ULOC_FULLNAME_CAPACITY]; const char* tmpLocaleID; + if (keywordName == NULL || keywordName[0] == 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + locale_canonKeywordName(keywordNameBuffer, keywordName, status); + if(U_FAILURE(*status)) { + return 0; + } + if (_hasBCP47Extension(localeID)) { _ConvertBCP47(tmpLocaleID, localeID, tempBuffer, sizeof(tempBuffer), status); } else { tmpLocaleID=localeID; } - startSearchHere = uprv_strchr(tmpLocaleID, '@'); /* TODO: REVISIT: shouldn't this be locale_getKeywordsStart ? */ + startSearchHere = locale_getKeywordsStart(tmpLocaleID); if(startSearchHere == NULL) { /* no keywords, return at once */ return 0; } - locale_canonKeywordName(keywordNameBuffer, keywordName, status); - if(U_FAILURE(*status)) { - return 0; - } - /* find the first keyword */ while(startSearchHere) { - startSearchHere++; - /* skip leading spaces (allowed?) */ + const char* keyValueTail; + int32_t keyValueLen; + + startSearchHere++; /* skip @ or ; */ + nextSeparator = uprv_strchr(startSearchHere, '='); + if(!nextSeparator) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */ + return 0; + } + /* strip leading & trailing spaces (TC decided to tolerate these) */ while(*startSearchHere == ' ') { startSearchHere++; } - nextSeparator = uprv_strchr(startSearchHere, '='); - /* need to normalize both keyword and keyword name */ - if(!nextSeparator) { - break; + keyValueTail = nextSeparator; + while (keyValueTail > startSearchHere && *(keyValueTail-1) == ' ') { + keyValueTail--; + } + /* now keyValueTail points to first char after the keyName */ + /* copy & normalize keyName from locale */ + if (startSearchHere == keyValueTail) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */ + return 0; } - if(nextSeparator - startSearchHere >= ULOC_KEYWORD_BUFFER_LEN) { + keyValueLen = 0; + while (startSearchHere < keyValueTail) { + if (!UPRV_ISALPHANUM(*startSearchHere)) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */ + return 0; + } + if (keyValueLen < ULOC_KEYWORD_BUFFER_LEN - 1) { + localeKeywordNameBuffer[keyValueLen++] = uprv_tolower(*startSearchHere++); + } else { /* keyword name too long for internal buffer */ *status = U_INTERNAL_PROGRAM_ERROR; return 0; + } } - for(i = 0; i < nextSeparator - startSearchHere; i++) { - localeKeywordNameBuffer[i] = uprv_tolower(startSearchHere[i]); - } - /* trim trailing spaces */ - while(startSearchHere[i-1] == ' ') { - i--; - U_ASSERT(i>=0); - } - localeKeywordNameBuffer[i] = 0; + localeKeywordNameBuffer[keyValueLen] = 0; /* terminate */ startSearchHere = uprv_strchr(nextSeparator, ';'); if(uprv_strcmp(keywordNameBuffer, localeKeywordNameBuffer) == 0) { - nextSeparator++; + /* current entry matches the keyword. */ + nextSeparator++; /* skip '=' */ + /* First strip leading & trailing spaces (TC decided to tolerate these) */ while(*nextSeparator == ' ') { - nextSeparator++; + nextSeparator++; + } + keyValueTail = (startSearchHere)? startSearchHere: nextSeparator + uprv_strlen(nextSeparator); + while(keyValueTail > nextSeparator && *(keyValueTail-1) == ' ') { + keyValueTail--; + } + /* Now copy the value, but check well-formedness */ + if (nextSeparator == keyValueTail) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */ + return 0; } - /* we actually found the keyword. Copy the value */ - if(startSearchHere && startSearchHere - nextSeparator < bufferCapacity) { - while(*(startSearchHere-1) == ' ') { - startSearchHere--; - } - uprv_strncpy(buffer, nextSeparator, startSearchHere - nextSeparator); - result = u_terminateChars(buffer, bufferCapacity, (int32_t)(startSearchHere - nextSeparator), status); - } else if(!startSearchHere && (int32_t)uprv_strlen(nextSeparator) < bufferCapacity) { /* last item in string */ - i = (int32_t)uprv_strlen(nextSeparator); - while(nextSeparator[i - 1] == ' ') { - i--; - } - uprv_strncpy(buffer, nextSeparator, i); - result = u_terminateChars(buffer, bufferCapacity, i, status); - } else { - /* give a bigger buffer, please */ - *status = U_BUFFER_OVERFLOW_ERROR; - if(startSearchHere) { - result = (int32_t)(startSearchHere - nextSeparator); - } else { - result = (int32_t)uprv_strlen(nextSeparator); - } + keyValueLen = 0; + while (nextSeparator < keyValueTail) { + if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */ + return 0; + } + if (keyValueLen < bufferCapacity) { + /* Should we lowercase value to return here? Tests expect as-is. */ + buffer[keyValueLen++] = *nextSeparator++; + } else { /* keep advancing so we return correct length in case of overflow */ + keyValueLen++; + nextSeparator++; + } } + result = u_terminateChars(buffer, bufferCapacity, keyValueLen, status); return result; } } @@ -936,46 +968,59 @@ uloc_setKeywordValue(const char* keywordName, int32_t keywordValueLen; int32_t bufLen; int32_t needLen = 0; - int32_t foundValueLen; - int32_t keywordAtEnd = 0; /* is the keyword at the end of the string? */ char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; + char keywordValueBuffer[ULOC_KEYWORDS_CAPACITY+1]; char localeKeywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; - int32_t i = 0; int32_t rc; char* nextSeparator = NULL; char* nextEqualsign = NULL; char* startSearchHere = NULL; char* keywordStart = NULL; - char *insertHere = NULL; + CharString updatedKeysAndValues; + int32_t updatedKeysAndValuesLen; + UBool handledInputKeyAndValue = FALSE; + char keyValuePrefix = '@'; + if(U_FAILURE(*status)) { return -1; } - if(bufferCapacity>1) { - bufLen = (int32_t)uprv_strlen(buffer); - } else { + if (keywordName == NULL || keywordName[0] == 0 || bufferCapacity <= 1) { *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } + bufLen = (int32_t)uprv_strlen(buffer); if(bufferCapacity= ULOC_KEYWORD_BUFFER_LEN) { - /* keyword name too long for internal buffer */ - *status = U_INTERNAL_PROGRAM_ERROR; + /* now keyValueTail points to first char after the keyName */ + /* copy & normalize keyName from locale */ + if (keywordStart == keyValueTail) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */ return 0; } - for(i = 0; i < nextEqualsign - keywordStart; i++) { - localeKeywordNameBuffer[i] = uprv_tolower(keywordStart[i]); - } - /* trim trailing spaces */ - while(keywordStart[i-1] == ' ') { - i--; + keyValueLen = 0; + while (keywordStart < keyValueTail) { + if (!UPRV_ISALPHANUM(*keywordStart)) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */ + return 0; + } + if (keyValueLen < ULOC_KEYWORD_BUFFER_LEN - 1) { + localeKeywordNameBuffer[keyValueLen++] = uprv_tolower(*keywordStart++); + } else { + /* keyword name too long for internal buffer */ + *status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } } - U_ASSERT(i>=0 && i nextEqualsign && *(keyValueTail-1) == ' ') { + keyValueTail--; + } + if (nextEqualsign == keyValueTail) { + *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value in passed-in locale */ + return 0; + } + rc = uprv_strcmp(keywordNameBuffer, localeKeywordNameBuffer); if(rc == 0) { - nextEqualsign++; - while(*nextEqualsign == ' ') { - nextEqualsign++; - } - /* we actually found the keyword. Change the value */ - if (nextSeparator) { - keywordAtEnd = 0; - foundValueLen = (int32_t)(nextSeparator - nextEqualsign); - } else { - keywordAtEnd = 1; - foundValueLen = (int32_t)uprv_strlen(nextEqualsign); - } - if(keywordValue) { /* adding a value - not removing */ - if(foundValueLen == keywordValueLen) { - uprv_strncpy(nextEqualsign, keywordValue, keywordValueLen); - return bufLen; /* no change in size */ - } else if(foundValueLen > keywordValueLen) { - int32_t delta = foundValueLen - keywordValueLen; - if(nextSeparator) { /* RH side */ - uprv_memmove(nextSeparator - delta, nextSeparator, bufLen-(nextSeparator-buffer)); - } - uprv_strncpy(nextEqualsign, keywordValue, keywordValueLen); - bufLen -= delta; - buffer[bufLen]=0; - return bufLen; - } else { /* FVL < KVL */ - int32_t delta = keywordValueLen - foundValueLen; - if((bufLen+delta) >= bufferCapacity) { - *status = U_BUFFER_OVERFLOW_ERROR; - return bufLen+delta; - } - if(nextSeparator) { /* RH side */ - uprv_memmove(nextSeparator+delta,nextSeparator, bufLen-(nextSeparator-buffer)); - } - uprv_strncpy(nextEqualsign, keywordValue, keywordValueLen); - bufLen += delta; - buffer[bufLen]=0; - return bufLen; - } - } else { /* removing a keyword */ - if(keywordAtEnd) { - /* zero out the ';' or '@' just before startSearchhere */ - keywordStart[-1] = 0; - return (int32_t)((keywordStart-buffer)-1); /* (string length without keyword) minus separator */ - } else { - uprv_memmove(keywordStart, nextSeparator+1, bufLen-((nextSeparator+1)-buffer)); - keywordStart[bufLen-((nextSeparator+1)-buffer)]=0; - return (int32_t)(bufLen-((nextSeparator+1)-keywordStart)); - } + /* Current entry matches the input keyword. Update the entry */ + if(keywordValueLen > 0) { /* updating a value */ + updatedKeysAndValues.append(keyValuePrefix, *status); + keyValuePrefix = ';'; /* for any subsequent key-value pair */ + updatedKeysAndValues.append(keywordNameBuffer, keywordNameLen, *status); + updatedKeysAndValues.append('=', *status); + updatedKeysAndValues.append(keywordValueBuffer, keywordValueLen, *status); + } /* else removing this entry, don't emit anything */ + handledInputKeyAndValue = TRUE; + } else { + /* input keyword sorts earlier than current entry, add before current entry */ + if (rc < 0 && keywordValueLen > 0 && !handledInputKeyAndValue) { + /* insert new entry at this location */ + updatedKeysAndValues.append(keyValuePrefix, *status); + keyValuePrefix = ';'; /* for any subsequent key-value pair */ + updatedKeysAndValues.append(keywordNameBuffer, keywordNameLen, *status); + updatedKeysAndValues.append('=', *status); + updatedKeysAndValues.append(keywordValueBuffer, keywordValueLen, *status); + handledInputKeyAndValue = TRUE; } - } else if(rc<0){ /* end match keyword */ - /* could insert at this location. */ - insertHere = keywordStart; + /* copy the current entry */ + updatedKeysAndValues.append(keyValuePrefix, *status); + keyValuePrefix = ';'; /* for any subsequent key-value pair */ + updatedKeysAndValues.append(localeKeywordNameBuffer, keyValueLen, *status); + updatedKeysAndValues.append('=', *status); + updatedKeysAndValues.append(nextEqualsign, keyValueTail-nextEqualsign, *status); + } + if (!nextSeparator && keywordValueLen > 0 && !handledInputKeyAndValue) { + /* append new entry at the end, it sorts later than existing entries */ + updatedKeysAndValues.append(keyValuePrefix, *status); + /* skip keyValuePrefix update, no subsequent key-value pair */ + updatedKeysAndValues.append(keywordNameBuffer, keywordNameLen, *status); + updatedKeysAndValues.append('=', *status); + updatedKeysAndValues.append(keywordValueBuffer, keywordValueLen, *status); + handledInputKeyAndValue = TRUE; } keywordStart = nextSeparator; } /* end loop searching */ - if(!keywordValue) { - return bufLen; /* removal of non-extant keyword - no change */ - } - - /* we know there is at least one keyword. */ - needLen = bufLen+1+keywordNameLen+1+keywordValueLen; + /* Any error from updatedKeysAndValues.append above would be internal and not due to + * problems with the passed-in locale. So if we did encounter problems with the + * passed-in locale above, those errors took precedence and overrode any error + * status from updatedKeysAndValues.append, and also caused a return of 0. If there + * are errors here they are from updatedKeysAndValues.append; they do cause an + * error return but the passed-in locale is unmodified and the original bufLen is + * returned. + */ + if (!handledInputKeyAndValue || U_FAILURE(*status)) { + /* if input key/value specified removal of a keyword not present in locale, or + * there was an error in CharString.append, leave original locale alone. */ + return bufLen; + } + + updatedKeysAndValuesLen = updatedKeysAndValues.length(); + /* needLen = length of the part before '@' + length of updated key-value part including '@' */ + needLen = (int32_t)(startSearchHere - buffer) + updatedKeysAndValuesLen; if(needLen >= bufferCapacity) { *status = U_BUFFER_OVERFLOW_ERROR; return needLen; /* no change */ } - - if(insertHere) { - uprv_memmove(insertHere+(1+keywordNameLen+1+keywordValueLen), insertHere, bufLen-(insertHere-buffer)); - keywordStart = insertHere; - } else { - keywordStart = buffer+bufLen; - *keywordStart = ';'; - keywordStart++; - } - uprv_strncpy(keywordStart, keywordNameBuffer, keywordNameLen); - keywordStart += keywordNameLen; - *keywordStart = '='; - keywordStart++; - uprv_strncpy(keywordStart, keywordValue, keywordValueLen); /* terminates. */ - keywordStart+=keywordValueLen; - if(insertHere) { - *keywordStart = ';'; - keywordStart++; + if (updatedKeysAndValuesLen > 0) { + uprv_strncpy(startSearchHere, updatedKeysAndValues.data(), updatedKeysAndValuesLen); } buffer[needLen]=0; return needLen; @@ -2119,6 +2168,20 @@ uloc_getLCID(const char* localeID) { UErrorCode status = U_ZERO_ERROR; char langID[ULOC_FULLNAME_CAPACITY]; + uint32_t lcid = 0; + + /* Check for incomplete id. */ + if (!localeID || uprv_strlen(localeID) < 2) { + return 0; + } + + // Attempt platform lookup if available + lcid = uprv_convertToLCIDPlatform(localeID); + if (lcid > 0) + { + // Windows found an LCID, return that + return lcid; + } uloc_getLanguage(localeID, langID, sizeof(langID), &status); if (U_FAILURE(status)) { @@ -2529,9 +2592,6 @@ uloc_toUnicodeLocaleType(const char* keyword, const char* value) return bcpType; } -#define UPRV_ISDIGIT(c) (((c) >= '0') && ((c) <= '9')) -#define UPRV_ISALPHANUM(c) (uprv_isASCIILetter(c) || UPRV_ISDIGIT(c) ) - static UBool isWellFormedLegacyKey(const char* legacyKey) { @@ -2574,11 +2634,10 @@ uloc_toLegacyKey(const char* keyword) // Checks if the specified locale key is well-formed with the legacy locale syntax. // // Note: - // Neither ICU nor LDML/CLDR provides the definition of keyword syntax. - // However, a key should not contain '=' obviously. For now, all existing - // keys are using ASCII alphabetic letters only. We won't add any new key - // that is not compatible with the BCP 47 syntax. Therefore, we assume - // a valid key consist from [0-9a-zA-Z], no symbols. + // LDML/CLDR provides some definition of keyword syntax in + // * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier and + // * http://www.unicode.org/reports/tr35/#Old_Locale_Extension_Syntax + // Keys can only consist of [0-9a-zA-Z]. if (isWellFormedLegacyKey(keyword)) { return keyword; } @@ -2594,12 +2653,11 @@ uloc_toLegacyType(const char* keyword, const char* value) // Checks if the specified locale type is well-formed with the legacy locale syntax. // // Note: - // Neither ICU nor LDML/CLDR provides the definition of keyword syntax. - // However, a type should not contain '=' obviously. For now, all existing - // types are using ASCII alphabetic letters with a few symbol letters. We won't - // add any new type that is not compatible with the BCP 47 syntax except timezone - // IDs. For now, we assume a valid type start with [0-9a-zA-Z], but may contain - // '-' '_' '/' in the middle. + // LDML/CLDR provides some definition of keyword syntax in + // * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier and + // * http://www.unicode.org/reports/tr35/#Old_Locale_Extension_Syntax + // Values (types) can only consist of [0-9a-zA-Z], plus for legacy values + // we allow [/_-+] in the middle (e.g. "Etc/GMT+1", "Asia/Tel_Aviv") if (isWellFormedLegacyType(value)) { return value; } diff --git a/source/common/uloc_keytype.cpp b/source/common/uloc_keytype.cpp index fcb066c..4eea504 100644 --- a/source/common/uloc_keytype.cpp +++ b/source/common/uloc_keytype.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uloc_tag.c b/source/common/uloc_tag.c deleted file mode 100644 index 224470a..0000000 --- a/source/common/uloc_tag.c +++ /dev/null @@ -1,2531 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2009-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ - -#include "unicode/utypes.h" -#include "unicode/ures.h" -#include "unicode/putil.h" -#include "unicode/uloc.h" -#include "ustr_imp.h" -#include "cmemory.h" -#include "cstring.h" -#include "putilimp.h" -#include "uinvchar.h" -#include "ulocimp.h" -#include "uassert.h" - - -/* struct holding a single variant */ -typedef struct VariantListEntry { - const char *variant; - struct VariantListEntry *next; -} VariantListEntry; - -/* struct holding a single attribute value */ -typedef struct AttributeListEntry { - const char *attribute; - struct AttributeListEntry *next; -} AttributeListEntry; - -/* struct holding a single extension */ -typedef struct ExtensionListEntry { - const char *key; - const char *value; - struct ExtensionListEntry *next; -} ExtensionListEntry; - -#define MAXEXTLANG 3 -typedef struct ULanguageTag { - char *buf; /* holding parsed subtags */ - const char *language; - const char *extlang[MAXEXTLANG]; - const char *script; - const char *region; - VariantListEntry *variants; - ExtensionListEntry *extensions; - const char *privateuse; - const char *grandfathered; -} ULanguageTag; - -#define MINLEN 2 -#define SEP '-' -#define PRIVATEUSE 'x' -#define LDMLEXT 'u' - -#define LOCALE_SEP '_' -#define LOCALE_EXT_SEP '@' -#define LOCALE_KEYWORD_SEP ';' -#define LOCALE_KEY_TYPE_SEP '=' - -#define ISALPHA(c) uprv_isASCIILetter(c) -#define ISNUMERIC(c) ((c)>='0' && (c)<='9') - -static const char EMPTY[] = ""; -static const char LANG_UND[] = "und"; -static const char PRIVATEUSE_KEY[] = "x"; -static const char _POSIX[] = "_POSIX"; -static const char POSIX_KEY[] = "va"; -static const char POSIX_VALUE[] = "posix"; -static const char LOCALE_ATTRIBUTE_KEY[] = "attribute"; -static const char PRIVUSE_VARIANT_PREFIX[] = "lvariant"; -static const char LOCALE_TYPE_YES[] = "yes"; - -#define LANG_UND_LEN 3 - -static const char* const GRANDFATHERED[] = { -/* grandfathered preferred */ - "art-lojban", "jbo", - "cel-gaulish", "xtg-x-cel-gaulish", - "en-GB-oed", "en-GB-x-oed", - "i-ami", "ami", - "i-bnn", "bnn", - "i-default", "en-x-i-default", - "i-enochian", "und-x-i-enochian", - "i-hak", "hak", - "i-klingon", "tlh", - "i-lux", "lb", - "i-mingo", "see-x-i-mingo", - "i-navajo", "nv", - "i-pwn", "pwn", - "i-tao", "tao", - "i-tay", "tay", - "i-tsu", "tsu", - "no-bok", "nb", - "no-nyn", "nn", - "sgn-be-fr", "sfb", - "sgn-be-nl", "vgt", - "sgn-ch-de", "sgg", - "zh-guoyu", "cmn", - "zh-hakka", "hak", - "zh-min", "nan-x-zh-min", - "zh-min-nan", "nan", - "zh-xiang", "hsn", - NULL, NULL -}; - -static const char DEPRECATEDLANGS[][4] = { -/* deprecated new */ - "iw", "he", - "ji", "yi", - "in", "id" -}; - -/* -* ------------------------------------------------- -* -* These ultag_ functions may be exposed as APIs later -* -* ------------------------------------------------- -*/ - -static ULanguageTag* -ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status); - -static void -ultag_close(ULanguageTag* langtag); - -static const char* -ultag_getLanguage(const ULanguageTag* langtag); - -#if 0 -static const char* -ultag_getJDKLanguage(const ULanguageTag* langtag); -#endif - -static const char* -ultag_getExtlang(const ULanguageTag* langtag, int32_t idx); - -static int32_t -ultag_getExtlangSize(const ULanguageTag* langtag); - -static const char* -ultag_getScript(const ULanguageTag* langtag); - -static const char* -ultag_getRegion(const ULanguageTag* langtag); - -static const char* -ultag_getVariant(const ULanguageTag* langtag, int32_t idx); - -static int32_t -ultag_getVariantsSize(const ULanguageTag* langtag); - -static const char* -ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx); - -static const char* -ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx); - -static int32_t -ultag_getExtensionsSize(const ULanguageTag* langtag); - -static const char* -ultag_getPrivateUse(const ULanguageTag* langtag); - -#if 0 -static const char* -ultag_getGrandfathered(const ULanguageTag* langtag); -#endif - -/* -* ------------------------------------------------- -* -* Language subtag syntax validation functions -* -* ------------------------------------------------- -*/ - -static UBool -_isAlphaString(const char* s, int32_t len) { - int32_t i; - for (i = 0; i < len; i++) { - if (!ISALPHA(*(s + i))) { - return FALSE; - } - } - return TRUE; -} - -static UBool -_isNumericString(const char* s, int32_t len) { - int32_t i; - for (i = 0; i < len; i++) { - if (!ISNUMERIC(*(s + i))) { - return FALSE; - } - } - return TRUE; -} - -static UBool -_isAlphaNumericString(const char* s, int32_t len) { - int32_t i; - for (i = 0; i < len; i++) { - if (!ISALPHA(*(s + i)) && !ISNUMERIC(*(s + i))) { - return FALSE; - } - } - return TRUE; -} - -static UBool -_isLanguageSubtag(const char* s, int32_t len) { - /* - * language = 2*3ALPHA ; shortest ISO 639 code - * ["-" extlang] ; sometimes followed by - * ; extended language subtags - * / 4ALPHA ; or reserved for future use - * / 5*8ALPHA ; or registered language subtag - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len >= 2 && len <= 8 && _isAlphaString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isExtlangSubtag(const char* s, int32_t len) { - /* - * extlang = 3ALPHA ; selected ISO 639 codes - * *2("-" 3ALPHA) ; permanently reserved - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len == 3 && _isAlphaString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isScriptSubtag(const char* s, int32_t len) { - /* - * script = 4ALPHA ; ISO 15924 code - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len == 4 && _isAlphaString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isRegionSubtag(const char* s, int32_t len) { - /* - * region = 2ALPHA ; ISO 3166-1 code - * / 3DIGIT ; UN M.49 code - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len == 2 && _isAlphaString(s, len)) { - return TRUE; - } - if (len == 3 && _isNumericString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isVariantSubtag(const char* s, int32_t len) { - /* - * variant = 5*8alphanum ; registered variants - * / (DIGIT 3alphanum) - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len >= 5 && len <= 8 && _isAlphaNumericString(s, len)) { - return TRUE; - } - if (len == 4 && ISNUMERIC(*s) && _isAlphaNumericString(s + 1, 3)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isPrivateuseVariantSubtag(const char* s, int32_t len) { - /* - * variant = 1*8alphanum ; registered variants - * / (DIGIT 3alphanum) - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len >= 1 && len <= 8 && _isAlphaNumericString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isExtensionSingleton(const char* s, int32_t len) { - /* - * extension = singleton 1*("-" (2*8alphanum)) - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len == 1 && ISALPHA(*s) && (uprv_tolower(*s) != PRIVATEUSE)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isExtensionSubtag(const char* s, int32_t len) { - /* - * extension = singleton 1*("-" (2*8alphanum)) - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len >= 2 && len <= 8 && _isAlphaNumericString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isExtensionSubtags(const char* s, int32_t len) { - const char *p = s; - const char *pSubtag = NULL; - - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - - while ((p - s) < len) { - if (*p == SEP) { - if (pSubtag == NULL) { - return FALSE; - } - if (!_isExtensionSubtag(pSubtag, (int32_t)(p - pSubtag))) { - return FALSE; - } - pSubtag = NULL; - } else if (pSubtag == NULL) { - pSubtag = p; - } - p++; - } - if (pSubtag == NULL) { - return FALSE; - } - return _isExtensionSubtag(pSubtag, (int32_t)(p - pSubtag)); -} - -static UBool -_isPrivateuseValueSubtag(const char* s, int32_t len) { - /* - * privateuse = "x" 1*("-" (1*8alphanum)) - */ - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len >= 1 && len <= 8 && _isAlphaNumericString(s, len)) { - return TRUE; - } - return FALSE; -} - -static UBool -_isPrivateuseValueSubtags(const char* s, int32_t len) { - const char *p = s; - const char *pSubtag = NULL; - - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - - while ((p - s) < len) { - if (*p == SEP) { - if (pSubtag == NULL) { - return FALSE; - } - if (!_isPrivateuseValueSubtag(pSubtag, (int32_t)(p - pSubtag))) { - return FALSE; - } - pSubtag = NULL; - } else if (pSubtag == NULL) { - pSubtag = p; - } - p++; - } - if (pSubtag == NULL) { - return FALSE; - } - return _isPrivateuseValueSubtag(pSubtag, (int32_t)(p - pSubtag)); -} - -U_CFUNC UBool -ultag_isUnicodeLocaleKey(const char* s, int32_t len) { - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - if (len == 2 && _isAlphaNumericString(s, len)) { - return TRUE; - } - return FALSE; -} - -U_CFUNC UBool -ultag_isUnicodeLocaleType(const char*s, int32_t len) { - const char* p; - int32_t subtagLen = 0; - - if (len < 0) { - len = (int32_t)uprv_strlen(s); - } - - for (p = s; len > 0; p++, len--) { - if (*p == SEP) { - if (subtagLen < 3) { - return FALSE; - } - subtagLen = 0; - } else if (ISALPHA(*p) || ISNUMERIC(*p)) { - subtagLen++; - if (subtagLen > 8) { - return FALSE; - } - } else { - return FALSE; - } - } - - return (subtagLen >= 3); -} -/* -* ------------------------------------------------- -* -* Helper functions -* -* ------------------------------------------------- -*/ - -static UBool -_addVariantToList(VariantListEntry **first, VariantListEntry *var) { - UBool bAdded = TRUE; - - if (*first == NULL) { - var->next = NULL; - *first = var; - } else { - VariantListEntry *prev, *cur; - int32_t cmp; - - /* variants order should be preserved */ - prev = NULL; - cur = *first; - while (TRUE) { - if (cur == NULL) { - prev->next = var; - var->next = NULL; - break; - } - - /* Checking for duplicate variant */ - cmp = uprv_compareInvCharsAsAscii(var->variant, cur->variant); - if (cmp == 0) { - /* duplicated variant */ - bAdded = FALSE; - break; - } - prev = cur; - cur = cur->next; - } - } - - return bAdded; -} - -static UBool -_addAttributeToList(AttributeListEntry **first, AttributeListEntry *attr) { - UBool bAdded = TRUE; - - if (*first == NULL) { - attr->next = NULL; - *first = attr; - } else { - AttributeListEntry *prev, *cur; - int32_t cmp; - - /* reorder variants in alphabetical order */ - prev = NULL; - cur = *first; - while (TRUE) { - if (cur == NULL) { - prev->next = attr; - attr->next = NULL; - break; - } - cmp = uprv_compareInvCharsAsAscii(attr->attribute, cur->attribute); - if (cmp < 0) { - if (prev == NULL) { - *first = attr; - } else { - prev->next = attr; - } - attr->next = cur; - break; - } - if (cmp == 0) { - /* duplicated variant */ - bAdded = FALSE; - break; - } - prev = cur; - cur = cur->next; - } - } - - return bAdded; -} - - -static UBool -_addExtensionToList(ExtensionListEntry **first, ExtensionListEntry *ext, UBool localeToBCP) { - UBool bAdded = TRUE; - - if (*first == NULL) { - ext->next = NULL; - *first = ext; - } else { - ExtensionListEntry *prev, *cur; - int32_t cmp; - - /* reorder variants in alphabetical order */ - prev = NULL; - cur = *first; - while (TRUE) { - if (cur == NULL) { - prev->next = ext; - ext->next = NULL; - break; - } - if (localeToBCP) { - /* special handling for locale to bcp conversion */ - int32_t len, curlen; - - len = (int32_t)uprv_strlen(ext->key); - curlen = (int32_t)uprv_strlen(cur->key); - - if (len == 1 && curlen == 1) { - if (*(ext->key) == *(cur->key)) { - cmp = 0; - } else if (*(ext->key) == PRIVATEUSE) { - cmp = 1; - } else if (*(cur->key) == PRIVATEUSE) { - cmp = -1; - } else { - cmp = *(ext->key) - *(cur->key); - } - } else if (len == 1) { - cmp = *(ext->key) - LDMLEXT; - } else if (curlen == 1) { - cmp = LDMLEXT - *(cur->key); - } else { - cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); - /* Both are u extension keys - we need special handling for 'attribute' */ - if (cmp != 0) { - if (uprv_strcmp(cur->key, LOCALE_ATTRIBUTE_KEY) == 0) { - cmp = 1; - } else if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { - cmp = -1; - } - } - } - } else { - cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); - } - if (cmp < 0) { - if (prev == NULL) { - *first = ext; - } else { - prev->next = ext; - } - ext->next = cur; - break; - } - if (cmp == 0) { - /* duplicated extension key */ - bAdded = FALSE; - break; - } - prev = cur; - cur = cur->next; - } - } - - return bAdded; -} - -static void -_initializeULanguageTag(ULanguageTag* langtag) { - int32_t i; - - langtag->buf = NULL; - - langtag->language = EMPTY; - for (i = 0; i < MAXEXTLANG; i++) { - langtag->extlang[i] = NULL; - } - - langtag->script = EMPTY; - langtag->region = EMPTY; - - langtag->variants = NULL; - langtag->extensions = NULL; - - langtag->grandfathered = EMPTY; - langtag->privateuse = EMPTY; -} - -static int32_t -_appendLanguageToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UErrorCode* status) { - char buf[ULOC_LANG_CAPACITY]; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t len, i; - int32_t reslen = 0; - - if (U_FAILURE(*status)) { - return 0; - } - - len = uloc_getLanguage(localeID, buf, sizeof(buf), &tmpStatus); - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - len = 0; - } - - /* Note: returned language code is in lower case letters */ - - if (len == 0) { - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, LANG_UND, uprv_min(LANG_UND_LEN, capacity - reslen)); - } - reslen += LANG_UND_LEN; - } else if (!_isLanguageSubtag(buf, len)) { - /* invalid language code */ - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, LANG_UND, uprv_min(LANG_UND_LEN, capacity - reslen)); - } - reslen += LANG_UND_LEN; - } else { - /* resolve deprecated */ - for (i = 0; i < UPRV_LENGTHOF(DEPRECATEDLANGS); i += 2) { - if (uprv_compareInvCharsAsAscii(buf, DEPRECATEDLANGS[i]) == 0) { - uprv_strcpy(buf, DEPRECATEDLANGS[i + 1]); - len = (int32_t)uprv_strlen(buf); - break; - } - } - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, buf, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - u_terminateChars(appendAt, capacity, reslen, status); - return reslen; -} - -static int32_t -_appendScriptToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UErrorCode* status) { - char buf[ULOC_SCRIPT_CAPACITY]; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t len; - int32_t reslen = 0; - - if (U_FAILURE(*status)) { - return 0; - } - - len = uloc_getScript(localeID, buf, sizeof(buf), &tmpStatus); - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } - - if (len > 0) { - if (!_isScriptSubtag(buf, len)) { - /* invalid script code */ - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } else { - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, buf, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - } - u_terminateChars(appendAt, capacity, reslen, status); - return reslen; -} - -static int32_t -_appendRegionToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UErrorCode* status) { - char buf[ULOC_COUNTRY_CAPACITY]; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t len; - int32_t reslen = 0; - - if (U_FAILURE(*status)) { - return 0; - } - - len = uloc_getCountry(localeID, buf, sizeof(buf), &tmpStatus); - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } - - if (len > 0) { - if (!_isRegionSubtag(buf, len)) { - /* invalid region code */ - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } else { - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, buf, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - } - u_terminateChars(appendAt, capacity, reslen, status); - return reslen; -} - -static int32_t -_appendVariantsToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UBool *hadPosix, UErrorCode* status) { - char buf[ULOC_FULLNAME_CAPACITY]; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t len, i; - int32_t reslen = 0; - - if (U_FAILURE(*status)) { - return 0; - } - - len = uloc_getVariant(localeID, buf, sizeof(buf), &tmpStatus); - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } - - if (len > 0) { - char *p, *pVar; - UBool bNext = TRUE; - VariantListEntry *var; - VariantListEntry *varFirst = NULL; - - pVar = NULL; - p = buf; - while (bNext) { - if (*p == SEP || *p == LOCALE_SEP || *p == 0) { - if (*p == 0) { - bNext = FALSE; - } else { - *p = 0; /* terminate */ - } - if (pVar == NULL) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - /* ignore empty variant */ - } else { - /* ICU uses upper case letters for variants, but - the canonical format is lowercase in BCP47 */ - for (i = 0; *(pVar + i) != 0; i++) { - *(pVar + i) = uprv_tolower(*(pVar + i)); - } - - /* validate */ - if (_isVariantSubtag(pVar, -1)) { - if (uprv_strcmp(pVar,POSIX_VALUE) || len != uprv_strlen(POSIX_VALUE)) { - /* emit the variant to the list */ - var = (VariantListEntry*)uprv_malloc(sizeof(VariantListEntry)); - if (var == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - var->variant = pVar; - if (!_addVariantToList(&varFirst, var)) { - /* duplicated variant */ - uprv_free(var); - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - } - } else { - /* Special handling for POSIX variant, need to remember that we had it and then */ - /* treat it like an extension later. */ - *hadPosix = TRUE; - } - } else if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } else if (_isPrivateuseValueSubtag(pVar, -1)) { - /* Handle private use subtags separately */ - break; - } - } - /* reset variant starting position */ - pVar = NULL; - } else if (pVar == NULL) { - pVar = p; - } - p++; - } - - if (U_SUCCESS(*status)) { - if (varFirst != NULL) { - int32_t varLen; - - /* write out validated/normalized variants to the target */ - var = varFirst; - while (var != NULL) { - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - varLen = (int32_t)uprv_strlen(var->variant); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, var->variant, uprv_min(varLen, capacity - reslen)); - } - reslen += varLen; - var = var->next; - } - } - } - - /* clean up */ - var = varFirst; - while (var != NULL) { - VariantListEntry *tmpVar = var->next; - uprv_free(var); - var = tmpVar; - } - - if (U_FAILURE(*status)) { - return 0; - } - } - - u_terminateChars(appendAt, capacity, reslen, status); - return reslen; -} - -static int32_t -_appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UBool hadPosix, UErrorCode* status) { - char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; - char attrBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY] = { 0 }; - int32_t attrBufLength = 0; - UEnumeration *keywordEnum = NULL; - int32_t reslen = 0; - - keywordEnum = uloc_openKeywords(localeID, status); - if (U_FAILURE(*status) && !hadPosix) { - uenum_close(keywordEnum); - return 0; - } - if (keywordEnum != NULL || hadPosix) { - /* reorder extensions */ - int32_t len; - const char *key; - ExtensionListEntry *firstExt = NULL; - ExtensionListEntry *ext; - AttributeListEntry *firstAttr = NULL; - AttributeListEntry *attr; - char *attrValue; - char extBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; - char *pExtBuf = extBuf; - int32_t extBufCapacity = sizeof(extBuf); - const char *bcpKey, *bcpValue; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t keylen; - UBool isBcpUExt; - - while (TRUE) { - key = uenum_next(keywordEnum, NULL, status); - if (key == NULL) { - break; - } - len = uloc_getKeywordValue(localeID, key, buf, sizeof(buf), &tmpStatus); - /* buf must be null-terminated */ - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - /* ignore this keyword */ - tmpStatus = U_ZERO_ERROR; - continue; - } - - keylen = (int32_t)uprv_strlen(key); - isBcpUExt = (keylen > 1); - - /* special keyword used for representing Unicode locale attributes */ - if (uprv_strcmp(key, LOCALE_ATTRIBUTE_KEY) == 0) { - if (len > 0) { - int32_t i = 0; - while (TRUE) { - attrBufLength = 0; - for (; i < len; i++) { - if (buf[i] != '-') { - attrBuf[attrBufLength++] = buf[i]; - } else { - i++; - break; - } - } - if (attrBufLength > 0) { - attrBuf[attrBufLength] = 0; - - } else if (i >= len){ - break; - } - - /* create AttributeListEntry */ - attr = (AttributeListEntry*)uprv_malloc(sizeof(AttributeListEntry)); - if (attr == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - attrValue = (char*)uprv_malloc(attrBufLength + 1); - if (attrValue == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - uprv_strcpy(attrValue, attrBuf); - attr->attribute = attrValue; - - if (!_addAttributeToList(&firstAttr, attr)) { - uprv_free(attr); - uprv_free(attrValue); - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - } - } - /* for a place holder ExtensionListEntry */ - bcpKey = LOCALE_ATTRIBUTE_KEY; - bcpValue = NULL; - } - } else if (isBcpUExt) { - bcpKey = uloc_toUnicodeLocaleKey(key); - if (bcpKey == NULL) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - continue; - } - - /* we've checked buf is null-terminated above */ - bcpValue = uloc_toUnicodeLocaleType(key, buf); - if (bcpValue == NULL) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - continue; - } - if (bcpValue == buf) { - /* - When uloc_toUnicodeLocaleType(key, buf) returns the - input value as is, the value is well-formed, but has - no known mapping. This implementation normalizes the - the value to lower case - */ - int32_t bcpValueLen = uprv_strlen(bcpValue); - if (bcpValueLen < extBufCapacity) { - uprv_strcpy(pExtBuf, bcpValue); - T_CString_toLowerCase(pExtBuf); - - bcpValue = pExtBuf; - - pExtBuf += (bcpValueLen + 1); - extBufCapacity -= (bcpValueLen + 1); - } else { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - continue; - } - } - } else { - if (*key == PRIVATEUSE) { - if (!_isPrivateuseValueSubtags(buf, len)) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - continue; - } - } else { - if (!_isExtensionSingleton(key, keylen) || !_isExtensionSubtags(buf, len)) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - continue; - } - } - bcpKey = key; - if ((len + 1) < extBufCapacity) { - uprv_memcpy(pExtBuf, buf, len); - bcpValue = pExtBuf; - - pExtBuf += len; - - *pExtBuf = 0; - pExtBuf++; - - extBufCapacity -= (len + 1); - } else { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - } - - /* create ExtensionListEntry */ - ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (ext == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - ext->key = bcpKey; - ext->value = bcpValue; - - if (!_addExtensionToList(&firstExt, ext, TRUE)) { - uprv_free(ext); - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - } - } - - /* Special handling for POSIX variant - add the keywords for POSIX */ - if (hadPosix) { - /* create ExtensionListEntry for POSIX */ - ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (ext == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - ext->key = POSIX_KEY; - ext->value = POSIX_VALUE; - - if (!_addExtensionToList(&firstExt, ext, TRUE)) { - uprv_free(ext); - } - } - - if (U_SUCCESS(*status) && (firstExt != NULL || firstAttr != NULL)) { - UBool startLDMLExtension = FALSE; - for (ext = firstExt; ext; ext = ext->next) { - if (!startLDMLExtension && uprv_strlen(ext->key) > 1) { - /* first LDML u singlton extension */ - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - if (reslen < capacity) { - *(appendAt + reslen) = LDMLEXT; - } - reslen++; - - startLDMLExtension = TRUE; - } - - /* write out the sorted BCP47 attributes, extensions and private use */ - if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { - /* write the value for the attributes */ - for (attr = firstAttr; attr; attr = attr->next) { - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - len = (int32_t)uprv_strlen(attr->attribute); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, attr->attribute, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - } else { - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - len = (int32_t)uprv_strlen(ext->key); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, ext->key, uprv_min(len, capacity - reslen)); - } - reslen += len; - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - len = (int32_t)uprv_strlen(ext->value); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, ext->value, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - } - } -cleanup: - /* clean up */ - ext = firstExt; - while (ext != NULL) { - ExtensionListEntry *tmpExt = ext->next; - uprv_free(ext); - ext = tmpExt; - } - - attr = firstAttr; - while (attr != NULL) { - AttributeListEntry *tmpAttr = attr->next; - char *pValue = (char *)attr->attribute; - uprv_free(pValue); - uprv_free(attr); - attr = tmpAttr; - } - - uenum_close(keywordEnum); - - if (U_FAILURE(*status)) { - return 0; - } - } - - return u_terminateChars(appendAt, capacity, reslen, status); -} - -/** - * Append keywords parsed from LDML extension value - * e.g. "u-ca-gregory-co-trad" -> {calendar = gregorian} {collation = traditional} - * Note: char* buf is used for storing keywords - */ -static void -_appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendTo, char* buf, int32_t bufSize, UBool *posixVariant, UErrorCode *status) { - const char *pTag; /* beginning of current subtag */ - const char *pKwds; /* beginning of key-type pairs */ - UBool variantExists = *posixVariant; - - ExtensionListEntry *kwdFirst = NULL; /* first LDML keyword */ - ExtensionListEntry *kwd, *nextKwd; - - AttributeListEntry *attrFirst = NULL; /* first attribute */ - AttributeListEntry *attr, *nextAttr; - - int32_t len; - int32_t bufIdx = 0; - - char attrBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; - int32_t attrBufIdx = 0; - - /* Reset the posixVariant value */ - *posixVariant = FALSE; - - pTag = ldmlext; - pKwds = NULL; - - /* Iterate through u extension attributes */ - while (*pTag) { - /* locate next separator char */ - for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++); - - if (ultag_isUnicodeLocaleKey(pTag, len)) { - pKwds = pTag; - break; - } - - /* add this attribute to the list */ - attr = (AttributeListEntry*)uprv_malloc(sizeof(AttributeListEntry)); - if (attr == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - - if (len < (int32_t)sizeof(attrBuf) - attrBufIdx) { - uprv_memcpy(&attrBuf[attrBufIdx], pTag, len); - attrBuf[attrBufIdx + len] = 0; - attr->attribute = &attrBuf[attrBufIdx]; - attrBufIdx += (len + 1); - } else { - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - - if (!_addAttributeToList(&attrFirst, attr)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - uprv_free(attr); - goto cleanup; - } - - /* next tag */ - pTag += len; - if (*pTag) { - /* next to the separator */ - pTag++; - } - } - - if (attrFirst) { - /* emit attributes as an LDML keyword, e.g. attribute=attr1-attr2 */ - - if (attrBufIdx > bufSize) { - /* attrBufIdx == + 1 */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - - kwd = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (kwd == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - - kwd->key = LOCALE_ATTRIBUTE_KEY; - kwd->value = buf; - - /* attribute subtags sorted in alphabetical order as type */ - attr = attrFirst; - while (attr != NULL) { - nextAttr = attr->next; - - /* buffer size check is done above */ - if (attr != attrFirst) { - *(buf + bufIdx) = SEP; - bufIdx++; - } - - len = uprv_strlen(attr->attribute); - uprv_memcpy(buf + bufIdx, attr->attribute, len); - bufIdx += len; - - attr = nextAttr; - } - *(buf + bufIdx) = 0; - bufIdx++; - - if (!_addExtensionToList(&kwdFirst, kwd, FALSE)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - uprv_free(kwd); - goto cleanup; - } - - /* once keyword entry is created, delete the attribute list */ - attr = attrFirst; - while (attr != NULL) { - nextAttr = attr->next; - uprv_free(attr); - attr = nextAttr; - } - attrFirst = NULL; - } - - if (pKwds) { - const char *pBcpKey = NULL; /* u extenstion key subtag */ - const char *pBcpType = NULL; /* beginning of u extension type subtag(s) */ - int32_t bcpKeyLen = 0; - int32_t bcpTypeLen = 0; - UBool isDone = FALSE; - - pTag = pKwds; - /* BCP47 representation of LDML key/type pairs */ - while (!isDone) { - const char *pNextBcpKey = NULL; - int32_t nextBcpKeyLen = 0; - UBool emitKeyword = FALSE; - - if (*pTag) { - /* locate next separator char */ - for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++); - - if (ultag_isUnicodeLocaleKey(pTag, len)) { - if (pBcpKey) { - emitKeyword = TRUE; - pNextBcpKey = pTag; - nextBcpKeyLen = len; - } else { - pBcpKey = pTag; - bcpKeyLen = len; - } - } else { - U_ASSERT(pBcpKey != NULL); - /* within LDML type subtags */ - if (pBcpType) { - bcpTypeLen += (len + 1); - } else { - pBcpType = pTag; - bcpTypeLen = len; - } - } - - /* next tag */ - pTag += len; - if (*pTag) { - /* next to the separator */ - pTag++; - } - } else { - /* processing last one */ - emitKeyword = TRUE; - isDone = TRUE; - } - - if (emitKeyword) { - const char *pKey = NULL; /* LDML key */ - const char *pType = NULL; /* LDML type */ - - char bcpKeyBuf[9]; /* BCP key length is always 2 for now */ - - U_ASSERT(pBcpKey != NULL); - - if (bcpKeyLen >= sizeof(bcpKeyBuf)) { - /* the BCP key is invalid */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - - uprv_strncpy(bcpKeyBuf, pBcpKey, bcpKeyLen); - bcpKeyBuf[bcpKeyLen] = 0; - - /* u extension key to LDML key */ - pKey = uloc_toLegacyKey(bcpKeyBuf); - if (pKey == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - if (pKey == bcpKeyBuf) { - /* - The key returned by toLegacyKey points to the input buffer. - We normalize the result key to lower case. - */ - T_CString_toLowerCase(bcpKeyBuf); - if (bufSize - bufIdx - 1 >= bcpKeyLen) { - uprv_memcpy(buf + bufIdx, bcpKeyBuf, bcpKeyLen); - pKey = buf + bufIdx; - bufIdx += bcpKeyLen; - *(buf + bufIdx) = 0; - bufIdx++; - } else { - *status = U_BUFFER_OVERFLOW_ERROR; - goto cleanup; - } - } - - if (pBcpType) { - char bcpTypeBuf[128]; /* practically long enough even considering multiple subtag type */ - if (bcpTypeLen >= sizeof(bcpTypeBuf)) { - /* the BCP type is too long */ - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - - uprv_strncpy(bcpTypeBuf, pBcpType, bcpTypeLen); - bcpTypeBuf[bcpTypeLen] = 0; - - /* BCP type to locale type */ - pType = uloc_toLegacyType(pKey, bcpTypeBuf); - if (pType == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - goto cleanup; - } - if (pType == bcpTypeBuf) { - /* - The type returned by toLegacyType points to the input buffer. - We normalize the result type to lower case. - */ - /* normalize to lower case */ - T_CString_toLowerCase(bcpTypeBuf); - if (bufSize - bufIdx - 1 >= bcpTypeLen) { - uprv_memcpy(buf + bufIdx, bcpTypeBuf, bcpTypeLen); - pType = buf + bufIdx; - bufIdx += bcpTypeLen; - *(buf + bufIdx) = 0; - bufIdx++; - } else { - *status = U_BUFFER_OVERFLOW_ERROR; - goto cleanup; - } - } - } else { - /* typeless - default type value is "yes" */ - pType = LOCALE_TYPE_YES; - } - - /* Special handling for u-va-posix, since we want to treat this as a variant, - not as a keyword */ - if (!variantExists && !uprv_strcmp(pKey, POSIX_KEY) && !uprv_strcmp(pType, POSIX_VALUE) ) { - *posixVariant = TRUE; - } else { - /* create an ExtensionListEntry for this keyword */ - kwd = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (kwd == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - - kwd->key = pKey; - kwd->value = pType; - - if (!_addExtensionToList(&kwdFirst, kwd, FALSE)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - uprv_free(kwd); - goto cleanup; - } - } - - pBcpKey = pNextBcpKey; - bcpKeyLen = pNextBcpKey != NULL ? nextBcpKeyLen : 0; - pBcpType = NULL; - bcpTypeLen = 0; - } - } - } - - kwd = kwdFirst; - while (kwd != NULL) { - nextKwd = kwd->next; - _addExtensionToList(appendTo, kwd, FALSE); - kwd = nextKwd; - } - - return; - -cleanup: - attr = attrFirst; - while (attr != NULL) { - nextAttr = attr->next; - uprv_free(attr); - attr = nextAttr; - } - - kwd = kwdFirst; - while (kwd != NULL) { - nextKwd = kwd->next; - uprv_free(kwd); - kwd = nextKwd; - } -} - - -static int32_t -_appendKeywords(ULanguageTag* langtag, char* appendAt, int32_t capacity, UErrorCode* status) { - int32_t reslen = 0; - int32_t i, n; - int32_t len; - ExtensionListEntry *kwdFirst = NULL; - ExtensionListEntry *kwd; - const char *key, *type; - char *kwdBuf = NULL; - int32_t kwdBufLength = capacity; - UBool posixVariant = FALSE; - - if (U_FAILURE(*status)) { - return 0; - } - - kwdBuf = (char*)uprv_malloc(kwdBufLength); - if (kwdBuf == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - - /* Determine if variants already exists */ - if (ultag_getVariantsSize(langtag)) { - posixVariant = TRUE; - } - - n = ultag_getExtensionsSize(langtag); - - /* resolve locale keywords and reordering keys */ - for (i = 0; i < n; i++) { - key = ultag_getExtensionKey(langtag, i); - type = ultag_getExtensionValue(langtag, i); - if (*key == LDMLEXT) { - _appendLDMLExtensionAsKeywords(type, &kwdFirst, kwdBuf, kwdBufLength, &posixVariant, status); - if (U_FAILURE(*status)) { - break; - } - } else { - kwd = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (kwd == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - kwd->key = key; - kwd->value = type; - if (!_addExtensionToList(&kwdFirst, kwd, FALSE)) { - uprv_free(kwd); - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } - } - } - - if (U_SUCCESS(*status)) { - type = ultag_getPrivateUse(langtag); - if ((int32_t)uprv_strlen(type) > 0) { - /* add private use as a keyword */ - kwd = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (kwd == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - } else { - kwd->key = PRIVATEUSE_KEY; - kwd->value = type; - if (!_addExtensionToList(&kwdFirst, kwd, FALSE)) { - uprv_free(kwd); - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - } - } - } - - /* If a POSIX variant was in the extensions, write it out before writing the keywords. */ - - if (U_SUCCESS(*status) && posixVariant) { - len = (int32_t) uprv_strlen(_POSIX); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, _POSIX, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - - if (U_SUCCESS(*status) && kwdFirst != NULL) { - /* write out the sorted keywords */ - UBool firstValue = TRUE; - kwd = kwdFirst; - do { - if (reslen < capacity) { - if (firstValue) { - /* '@' */ - *(appendAt + reslen) = LOCALE_EXT_SEP; - firstValue = FALSE; - } else { - /* ';' */ - *(appendAt + reslen) = LOCALE_KEYWORD_SEP; - } - } - reslen++; - - /* key */ - len = (int32_t)uprv_strlen(kwd->key); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, kwd->key, uprv_min(len, capacity - reslen)); - } - reslen += len; - - /* '=' */ - if (reslen < capacity) { - *(appendAt + reslen) = LOCALE_KEY_TYPE_SEP; - } - reslen++; - - /* type */ - len = (int32_t)uprv_strlen(kwd->value); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, kwd->value, uprv_min(len, capacity - reslen)); - } - reslen += len; - - kwd = kwd->next; - } while (kwd); - } - - /* clean up */ - kwd = kwdFirst; - while (kwd != NULL) { - ExtensionListEntry *tmpKwd = kwd->next; - uprv_free(kwd); - kwd = tmpKwd; - } - - uprv_free(kwdBuf); - - if (U_FAILURE(*status)) { - return 0; - } - - return u_terminateChars(appendAt, capacity, reslen, status); -} - -static int32_t -_appendPrivateuseToLanguageTag(const char* localeID, char* appendAt, int32_t capacity, UBool strict, UBool hadPosix, UErrorCode* status) { - char buf[ULOC_FULLNAME_CAPACITY]; - char tmpAppend[ULOC_FULLNAME_CAPACITY]; - UErrorCode tmpStatus = U_ZERO_ERROR; - int32_t len, i; - int32_t reslen = 0; - - if (U_FAILURE(*status)) { - return 0; - } - - len = uloc_getVariant(localeID, buf, sizeof(buf), &tmpStatus); - if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - return 0; - } - - if (len > 0) { - char *p, *pPriv; - UBool bNext = TRUE; - UBool firstValue = TRUE; - UBool writeValue; - - pPriv = NULL; - p = buf; - while (bNext) { - writeValue = FALSE; - if (*p == SEP || *p == LOCALE_SEP || *p == 0) { - if (*p == 0) { - bNext = FALSE; - } else { - *p = 0; /* terminate */ - } - if (pPriv != NULL) { - /* Private use in the canonical format is lowercase in BCP47 */ - for (i = 0; *(pPriv + i) != 0; i++) { - *(pPriv + i) = uprv_tolower(*(pPriv + i)); - } - - /* validate */ - if (_isPrivateuseValueSubtag(pPriv, -1)) { - if (firstValue) { - if (!_isVariantSubtag(pPriv, -1)) { - writeValue = TRUE; - } - } else { - writeValue = TRUE; - } - } else if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } else { - break; - } - - if (writeValue) { - if (reslen < capacity) { - tmpAppend[reslen++] = SEP; - } - - if (firstValue) { - if (reslen < capacity) { - tmpAppend[reslen++] = *PRIVATEUSE_KEY; - } - - if (reslen < capacity) { - tmpAppend[reslen++] = SEP; - } - - len = (int32_t)uprv_strlen(PRIVUSE_VARIANT_PREFIX); - if (reslen < capacity) { - uprv_memcpy(tmpAppend + reslen, PRIVUSE_VARIANT_PREFIX, uprv_min(len, capacity - reslen)); - } - reslen += len; - - if (reslen < capacity) { - tmpAppend[reslen++] = SEP; - } - - firstValue = FALSE; - } - - len = (int32_t)uprv_strlen(pPriv); - if (reslen < capacity) { - uprv_memcpy(tmpAppend + reslen, pPriv, uprv_min(len, capacity - reslen)); - } - reslen += len; - } - } - /* reset private use starting position */ - pPriv = NULL; - } else if (pPriv == NULL) { - pPriv = p; - } - p++; - } - - if (U_FAILURE(*status)) { - return 0; - } - } - - if (U_SUCCESS(*status)) { - len = reslen; - if (reslen < capacity) { - uprv_memcpy(appendAt, tmpAppend, uprv_min(len, capacity - reslen)); - } - } - - u_terminateChars(appendAt, capacity, reslen, status); - - return reslen; -} - -/* -* ------------------------------------------------- -* -* ultag_ functions -* -* ------------------------------------------------- -*/ - -/* Bit flags used by the parser */ -#define LANG 0x0001 -#define EXTL 0x0002 -#define SCRT 0x0004 -#define REGN 0x0008 -#define VART 0x0010 -#define EXTS 0x0020 -#define EXTV 0x0040 -#define PRIV 0x0080 - -/** - * Ticket #12705 - Visual Studio 2015 Update 3 contains a new code optimizer which has problems optimizing - * this function. (See https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ ) - * As a workaround, we will turn off optimization just for this function on VS2015 Update 3 and above. - */ -#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) -#pragma optimize( "", off ) -#endif - -static ULanguageTag* -ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status) { - ULanguageTag *t; - char *tagBuf; - int16_t next; - char *pSubtag, *pNext, *pLastGoodPosition; - int32_t subtagLen; - int32_t extlangIdx; - ExtensionListEntry *pExtension; - char *pExtValueSubtag, *pExtValueSubtagEnd; - int32_t i; - UBool privateuseVar = FALSE; - int32_t grandfatheredLen = 0; - - if (parsedLen != NULL) { - *parsedLen = 0; - } - - if (U_FAILURE(*status)) { - return NULL; - } - - if (tagLen < 0) { - tagLen = (int32_t)uprv_strlen(tag); - } - - /* copy the entire string */ - tagBuf = (char*)uprv_malloc(tagLen + 1); - if (tagBuf == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uprv_memcpy(tagBuf, tag, tagLen); - *(tagBuf + tagLen) = 0; - - /* create a ULanguageTag */ - t = (ULanguageTag*)uprv_malloc(sizeof(ULanguageTag)); - if (t == NULL) { - uprv_free(tagBuf); - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - _initializeULanguageTag(t); - t->buf = tagBuf; - - if (tagLen < MINLEN) { - /* the input tag is too short - return empty ULanguageTag */ - return t; - } - - /* check if the tag is grandfathered */ - for (i = 0; GRANDFATHERED[i] != NULL; i += 2) { - if (uprv_stricmp(GRANDFATHERED[i], tagBuf) == 0) { - int32_t newTagLength; - - grandfatheredLen = tagLen; /* back up for output parsedLen */ - newTagLength = uprv_strlen(GRANDFATHERED[i+1]); - if (tagLen < newTagLength) { - uprv_free(tagBuf); - tagBuf = (char*)uprv_malloc(newTagLength + 1); - if (tagBuf == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - ultag_close(t); - return NULL; - } - t->buf = tagBuf; - tagLen = newTagLength; - } - uprv_strcpy(t->buf, GRANDFATHERED[i + 1]); - break; - } - } - - /* - * langtag = language - * ["-" script] - * ["-" region] - * *("-" variant) - * *("-" extension) - * ["-" privateuse] - */ - - next = LANG | PRIV; - pNext = pLastGoodPosition = tagBuf; - extlangIdx = 0; - pExtension = NULL; - pExtValueSubtag = NULL; - pExtValueSubtagEnd = NULL; - - while (pNext) { - char *pSep; - - pSubtag = pNext; - - /* locate next separator char */ - pSep = pSubtag; - while (*pSep) { - if (*pSep == SEP) { - break; - } - pSep++; - } - if (*pSep == 0) { - /* last subtag */ - pNext = NULL; - } else { - pNext = pSep + 1; - } - subtagLen = (int32_t)(pSep - pSubtag); - - if (next & LANG) { - if (_isLanguageSubtag(pSubtag, subtagLen)) { - *pSep = 0; /* terminate */ - t->language = T_CString_toLowerCase(pSubtag); - - pLastGoodPosition = pSep; - next = EXTL | SCRT | REGN | VART | EXTS | PRIV; - continue; - } - } - if (next & EXTL) { - if (_isExtlangSubtag(pSubtag, subtagLen)) { - *pSep = 0; - t->extlang[extlangIdx++] = T_CString_toLowerCase(pSubtag); - - pLastGoodPosition = pSep; - if (extlangIdx < 3) { - next = EXTL | SCRT | REGN | VART | EXTS | PRIV; - } else { - next = SCRT | REGN | VART | EXTS | PRIV; - } - continue; - } - } - if (next & SCRT) { - if (_isScriptSubtag(pSubtag, subtagLen)) { - char *p = pSubtag; - - *pSep = 0; - - /* to title case */ - *p = uprv_toupper(*p); - p++; - for (; *p; p++) { - *p = uprv_tolower(*p); - } - - t->script = pSubtag; - - pLastGoodPosition = pSep; - next = REGN | VART | EXTS | PRIV; - continue; - } - } - if (next & REGN) { - if (_isRegionSubtag(pSubtag, subtagLen)) { - *pSep = 0; - t->region = T_CString_toUpperCase(pSubtag); - - pLastGoodPosition = pSep; - next = VART | EXTS | PRIV; - continue; - } - } - if (next & VART) { - if (_isVariantSubtag(pSubtag, subtagLen) || - (privateuseVar && _isPrivateuseVariantSubtag(pSubtag, subtagLen))) { - VariantListEntry *var; - UBool isAdded; - - var = (VariantListEntry*)uprv_malloc(sizeof(VariantListEntry)); - if (var == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto error; - } - *pSep = 0; - var->variant = T_CString_toUpperCase(pSubtag); - isAdded = _addVariantToList(&(t->variants), var); - if (!isAdded) { - /* duplicated variant entry */ - uprv_free(var); - break; - } - pLastGoodPosition = pSep; - next = VART | EXTS | PRIV; - continue; - } - } - if (next & EXTS) { - if (_isExtensionSingleton(pSubtag, subtagLen)) { - if (pExtension != NULL) { - if (pExtValueSubtag == NULL || pExtValueSubtagEnd == NULL) { - /* the previous extension is incomplete */ - uprv_free(pExtension); - pExtension = NULL; - break; - } - - /* terminate the previous extension value */ - *pExtValueSubtagEnd = 0; - pExtension->value = T_CString_toLowerCase(pExtValueSubtag); - - /* insert the extension to the list */ - if (_addExtensionToList(&(t->extensions), pExtension, FALSE)) { - pLastGoodPosition = pExtValueSubtagEnd; - } else { - /* stop parsing here */ - uprv_free(pExtension); - pExtension = NULL; - break; - } - } - - /* create a new extension */ - pExtension = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (pExtension == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto error; - } - *pSep = 0; - pExtension->key = T_CString_toLowerCase(pSubtag); - pExtension->value = NULL; /* will be set later */ - - /* - * reset the start and the end location of extension value - * subtags for this extension - */ - pExtValueSubtag = NULL; - pExtValueSubtagEnd = NULL; - - next = EXTV; - continue; - } - } - if (next & EXTV) { - if (_isExtensionSubtag(pSubtag, subtagLen)) { - if (pExtValueSubtag == NULL) { - /* if the start postion of this extension's value is not yet, - this one is the first value subtag */ - pExtValueSubtag = pSubtag; - } - - /* Mark the end of this subtag */ - pExtValueSubtagEnd = pSep; - next = EXTS | EXTV | PRIV; - - continue; - } - } - if (next & PRIV) { - if (uprv_tolower(*pSubtag) == PRIVATEUSE) { - char *pPrivuseVal; - - if (pExtension != NULL) { - /* Process the last extension */ - if (pExtValueSubtag == NULL || pExtValueSubtagEnd == NULL) { - /* the previous extension is incomplete */ - uprv_free(pExtension); - pExtension = NULL; - break; - } else { - /* terminate the previous extension value */ - *pExtValueSubtagEnd = 0; - pExtension->value = T_CString_toLowerCase(pExtValueSubtag); - - /* insert the extension to the list */ - if (_addExtensionToList(&(t->extensions), pExtension, FALSE)) { - pLastGoodPosition = pExtValueSubtagEnd; - pExtension = NULL; - } else { - /* stop parsing here */ - uprv_free(pExtension); - pExtension = NULL; - break; - } - } - } - - /* The rest of part will be private use value subtags */ - if (pNext == NULL) { - /* empty private use subtag */ - break; - } - /* back up the private use value start position */ - pPrivuseVal = pNext; - - /* validate private use value subtags */ - while (pNext) { - pSubtag = pNext; - pSep = pSubtag; - while (*pSep) { - if (*pSep == SEP) { - break; - } - pSep++; - } - if (*pSep == 0) { - /* last subtag */ - pNext = NULL; - } else { - pNext = pSep + 1; - } - subtagLen = (int32_t)(pSep - pSubtag); - - if (uprv_strncmp(pSubtag, PRIVUSE_VARIANT_PREFIX, uprv_strlen(PRIVUSE_VARIANT_PREFIX)) == 0) { - *pSep = 0; - next = VART; - privateuseVar = TRUE; - break; - } else if (_isPrivateuseValueSubtag(pSubtag, subtagLen)) { - pLastGoodPosition = pSep; - } else { - break; - } - } - - if (next == VART) { - continue; - } - - if (pLastGoodPosition - pPrivuseVal > 0) { - *pLastGoodPosition = 0; - t->privateuse = T_CString_toLowerCase(pPrivuseVal); - } - /* No more subtags, exiting the parse loop */ - break; - } - break; - } - - /* If we fell through here, it means this subtag is illegal - quit parsing */ - break; - } - - if (pExtension != NULL) { - /* Process the last extension */ - if (pExtValueSubtag == NULL || pExtValueSubtagEnd == NULL) { - /* the previous extension is incomplete */ - uprv_free(pExtension); - } else { - /* terminate the previous extension value */ - *pExtValueSubtagEnd = 0; - pExtension->value = T_CString_toLowerCase(pExtValueSubtag); - /* insert the extension to the list */ - if (_addExtensionToList(&(t->extensions), pExtension, FALSE)) { - pLastGoodPosition = pExtValueSubtagEnd; - } else { - uprv_free(pExtension); - } - } - } - - if (parsedLen != NULL) { - *parsedLen = (grandfatheredLen > 0) ? grandfatheredLen : (int32_t)(pLastGoodPosition - t->buf); - } - - return t; - -error: - ultag_close(t); - return NULL; -} - -/** -* Ticket #12705 - Turn optimization back on. -*/ -#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) -#pragma optimize( "", on ) -#endif - -static void -ultag_close(ULanguageTag* langtag) { - - if (langtag == NULL) { - return; - } - - uprv_free(langtag->buf); - - if (langtag->variants) { - VariantListEntry *curVar = langtag->variants; - while (curVar) { - VariantListEntry *nextVar = curVar->next; - uprv_free(curVar); - curVar = nextVar; - } - } - - if (langtag->extensions) { - ExtensionListEntry *curExt = langtag->extensions; - while (curExt) { - ExtensionListEntry *nextExt = curExt->next; - uprv_free(curExt); - curExt = nextExt; - } - } - - uprv_free(langtag); -} - -static const char* -ultag_getLanguage(const ULanguageTag* langtag) { - return langtag->language; -} - -#if 0 -static const char* -ultag_getJDKLanguage(const ULanguageTag* langtag) { - int32_t i; - for (i = 0; DEPRECATEDLANGS[i] != NULL; i += 2) { - if (uprv_compareInvCharsAsAscii(DEPRECATEDLANGS[i], langtag->language) == 0) { - return DEPRECATEDLANGS[i + 1]; - } - } - return langtag->language; -} -#endif - -static const char* -ultag_getExtlang(const ULanguageTag* langtag, int32_t idx) { - if (idx >= 0 && idx < MAXEXTLANG) { - return langtag->extlang[idx]; - } - return NULL; -} - -static int32_t -ultag_getExtlangSize(const ULanguageTag* langtag) { - int32_t size = 0; - int32_t i; - for (i = 0; i < MAXEXTLANG; i++) { - if (langtag->extlang[i]) { - size++; - } - } - return size; -} - -static const char* -ultag_getScript(const ULanguageTag* langtag) { - return langtag->script; -} - -static const char* -ultag_getRegion(const ULanguageTag* langtag) { - return langtag->region; -} - -static const char* -ultag_getVariant(const ULanguageTag* langtag, int32_t idx) { - const char *var = NULL; - VariantListEntry *cur = langtag->variants; - int32_t i = 0; - while (cur) { - if (i == idx) { - var = cur->variant; - break; - } - cur = cur->next; - i++; - } - return var; -} - -static int32_t -ultag_getVariantsSize(const ULanguageTag* langtag) { - int32_t size = 0; - VariantListEntry *cur = langtag->variants; - while (TRUE) { - if (cur == NULL) { - break; - } - size++; - cur = cur->next; - } - return size; -} - -static const char* -ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx) { - const char *key = NULL; - ExtensionListEntry *cur = langtag->extensions; - int32_t i = 0; - while (cur) { - if (i == idx) { - key = cur->key; - break; - } - cur = cur->next; - i++; - } - return key; -} - -static const char* -ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx) { - const char *val = NULL; - ExtensionListEntry *cur = langtag->extensions; - int32_t i = 0; - while (cur) { - if (i == idx) { - val = cur->value; - break; - } - cur = cur->next; - i++; - } - return val; -} - -static int32_t -ultag_getExtensionsSize(const ULanguageTag* langtag) { - int32_t size = 0; - ExtensionListEntry *cur = langtag->extensions; - while (TRUE) { - if (cur == NULL) { - break; - } - size++; - cur = cur->next; - } - return size; -} - -static const char* -ultag_getPrivateUse(const ULanguageTag* langtag) { - return langtag->privateuse; -} - -#if 0 -static const char* -ultag_getGrandfathered(const ULanguageTag* langtag) { - return langtag->grandfathered; -} -#endif - - -/* -* ------------------------------------------------- -* -* Locale/BCP47 conversion APIs, exposed as uloc_* -* -* ------------------------------------------------- -*/ -U_CAPI int32_t U_EXPORT2 -uloc_toLanguageTag(const char* localeID, - char* langtag, - int32_t langtagCapacity, - UBool strict, - UErrorCode* status) { - /* char canonical[ULOC_FULLNAME_CAPACITY]; */ /* See #6822 */ - char canonical[256]; - int32_t reslen = 0; - UErrorCode tmpStatus = U_ZERO_ERROR; - UBool hadPosix = FALSE; - const char* pKeywordStart; - - /* Note: uloc_canonicalize returns "en_US_POSIX" for input locale ID "". See #6835 */ - canonical[0] = 0; - if (uprv_strlen(localeID) > 0) { - uloc_canonicalize(localeID, canonical, sizeof(canonical), &tmpStatus); - if (tmpStatus != U_ZERO_ERROR) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - } - - /* For handling special case - private use only tag */ - pKeywordStart = locale_getKeywordsStart(canonical); - if (pKeywordStart == canonical) { - UEnumeration *kwdEnum; - int kwdCnt = 0; - UBool done = FALSE; - - kwdEnum = uloc_openKeywords((const char*)canonical, &tmpStatus); - if (kwdEnum != NULL) { - kwdCnt = uenum_count(kwdEnum, &tmpStatus); - if (kwdCnt == 1) { - const char *key; - int32_t len = 0; - - key = uenum_next(kwdEnum, &len, &tmpStatus); - if (len == 1 && *key == PRIVATEUSE) { - char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; - buf[0] = PRIVATEUSE; - buf[1] = SEP; - len = uloc_getKeywordValue(localeID, key, &buf[2], sizeof(buf) - 2, &tmpStatus); - if (U_SUCCESS(tmpStatus)) { - if (_isPrivateuseValueSubtags(&buf[2], len)) { - /* return private use only tag */ - reslen = len + 2; - uprv_memcpy(langtag, buf, uprv_min(reslen, langtagCapacity)); - u_terminateChars(langtag, langtagCapacity, reslen, status); - done = TRUE; - } else if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - done = TRUE; - } - /* if not strict mode, then "und" will be returned */ - } else { - *status = U_ILLEGAL_ARGUMENT_ERROR; - done = TRUE; - } - } - } - uenum_close(kwdEnum); - if (done) { - return reslen; - } - } - } - - reslen += _appendLanguageToLanguageTag(canonical, langtag, langtagCapacity, strict, status); - reslen += _appendScriptToLanguageTag(canonical, langtag + reslen, langtagCapacity - reslen, strict, status); - reslen += _appendRegionToLanguageTag(canonical, langtag + reslen, langtagCapacity - reslen, strict, status); - reslen += _appendVariantsToLanguageTag(canonical, langtag + reslen, langtagCapacity - reslen, strict, &hadPosix, status); - reslen += _appendKeywordsToLanguageTag(canonical, langtag + reslen, langtagCapacity - reslen, strict, hadPosix, status); - reslen += _appendPrivateuseToLanguageTag(canonical, langtag + reslen, langtagCapacity - reslen, strict, hadPosix, status); - - return reslen; -} - - -U_CAPI int32_t U_EXPORT2 -uloc_forLanguageTag(const char* langtag, - char* localeID, - int32_t localeIDCapacity, - int32_t* parsedLength, - UErrorCode* status) { - ULanguageTag *lt; - int32_t reslen = 0; - const char *subtag, *p; - int32_t len; - int32_t i, n; - UBool noRegion = TRUE; - - lt = ultag_parse(langtag, -1, parsedLength, status); - if (U_FAILURE(*status)) { - return 0; - } - - /* language */ - subtag = ultag_getExtlangSize(lt) > 0 ? ultag_getExtlang(lt, 0) : ultag_getLanguage(lt); - if (uprv_compareInvCharsAsAscii(subtag, LANG_UND) != 0) { - len = (int32_t)uprv_strlen(subtag); - if (len > 0) { - if (reslen < localeIDCapacity) { - uprv_memcpy(localeID, subtag, uprv_min(len, localeIDCapacity - reslen)); - } - reslen += len; - } - } - - /* script */ - subtag = ultag_getScript(lt); - len = (int32_t)uprv_strlen(subtag); - if (len > 0) { - if (reslen < localeIDCapacity) { - *(localeID + reslen) = LOCALE_SEP; - } - reslen++; - - /* write out the script in title case */ - p = subtag; - while (*p) { - if (reslen < localeIDCapacity) { - if (p == subtag) { - *(localeID + reslen) = uprv_toupper(*p); - } else { - *(localeID + reslen) = *p; - } - } - reslen++; - p++; - } - } - - /* region */ - subtag = ultag_getRegion(lt); - len = (int32_t)uprv_strlen(subtag); - if (len > 0) { - if (reslen < localeIDCapacity) { - *(localeID + reslen) = LOCALE_SEP; - } - reslen++; - /* write out the retion in upper case */ - p = subtag; - while (*p) { - if (reslen < localeIDCapacity) { - *(localeID + reslen) = uprv_toupper(*p); - } - reslen++; - p++; - } - noRegion = FALSE; - } - - /* variants */ - n = ultag_getVariantsSize(lt); - if (n > 0) { - if (noRegion) { - if (reslen < localeIDCapacity) { - *(localeID + reslen) = LOCALE_SEP; - } - reslen++; - } - - for (i = 0; i < n; i++) { - subtag = ultag_getVariant(lt, i); - if (reslen < localeIDCapacity) { - *(localeID + reslen) = LOCALE_SEP; - } - reslen++; - /* write out the variant in upper case */ - p = subtag; - while (*p) { - if (reslen < localeIDCapacity) { - *(localeID + reslen) = uprv_toupper(*p); - } - reslen++; - p++; - } - } - } - - /* keywords */ - n = ultag_getExtensionsSize(lt); - subtag = ultag_getPrivateUse(lt); - if (n > 0 || uprv_strlen(subtag) > 0) { - if (reslen == 0 && n > 0) { - /* need a language */ - if (reslen < localeIDCapacity) { - uprv_memcpy(localeID + reslen, LANG_UND, uprv_min(LANG_UND_LEN, localeIDCapacity - reslen)); - } - reslen += LANG_UND_LEN; - } - len = _appendKeywords(lt, localeID + reslen, localeIDCapacity - reslen, status); - reslen += len; - } - - ultag_close(lt); - return u_terminateChars(localeID, localeIDCapacity, reslen, status); -} - - diff --git a/source/common/ulocimp.h b/source/common/ulocimp.h index f54e216..869f296 100644 --- a/source/common/ulocimp.h +++ b/source/common/ulocimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/umapfile.c b/source/common/umapfile.c deleted file mode 100644 index d5d2033..0000000 --- a/source/common/umapfile.c +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************/ - - -/*---------------------------------------------------------------------------- - * - * Memory mapped file wrappers for use by the ICU Data Implementation - * All of the platform-specific implementation for mapping data files - * is here. The rest of the ICU Data implementation uses only the - * wrapper functions. - * - *----------------------------------------------------------------------------*/ -/* Defines _XOPEN_SOURCE for access to POSIX functions. - * Must be before any other #includes. */ -#include "uposixdefs.h" - -#include "unicode/putil.h" -#include "udatamem.h" -#include "umapfile.h" - -/* memory-mapping base definitions ------------------------------------------ */ - -#if MAP_IMPLEMENTATION==MAP_WIN32 -# define WIN32_LEAN_AND_MEAN -# define VC_EXTRALEAN -# define NOUSER -# define NOSERVICE -# define NOIME -# define NOMCX -# include -# include "cmemory.h" - - typedef HANDLE MemoryMap; - -# define IS_MAP(map) ((map)!=NULL) -#elif MAP_IMPLEMENTATION==MAP_POSIX || MAP_IMPLEMENTATION==MAP_390DLL - typedef size_t MemoryMap; - -# define IS_MAP(map) ((map)!=0) - -# include -# include -# include -# include - -# ifndef MAP_FAILED -# define MAP_FAILED ((void*)-1) -# endif - -# if MAP_IMPLEMENTATION==MAP_390DLL - /* No memory mapping for 390 batch mode. Fake it using dll loading. */ -# include -# include "cstring.h" -# include "cmemory.h" -# include "unicode/udata.h" -# define LIB_PREFIX "lib" -# define LIB_SUFFIX ".dll" - /* This is inconvienient until we figure out what to do with U_ICUDATA_NAME in utypes.h */ -# define U_ICUDATA_ENTRY_NAME "icudt" U_ICU_VERSION_SHORT U_LIB_SUFFIX_C_NAME_STRING "_dat" -# endif -#elif MAP_IMPLEMENTATION==MAP_STDIO -# include -# include "cmemory.h" - - typedef void *MemoryMap; - -# define IS_MAP(map) ((map)!=NULL) -#endif - -/*----------------------------------------------------------------------------* - * * - * Memory Mapped File support. Platform dependent implementation of * - * functions used by the rest of the implementation.* - * * - *----------------------------------------------------------------------------*/ -#if MAP_IMPLEMENTATION==MAP_NONE - U_CFUNC UBool - uprv_mapFile(UDataMemory *pData, const char *path) { - UDataMemory_init(pData); /* Clear the output struct. */ - return FALSE; /* no file access */ - } - - U_CFUNC void uprv_unmapFile(UDataMemory *pData) { - /* nothing to do */ - } -#elif MAP_IMPLEMENTATION==MAP_WIN32 - U_CFUNC UBool - uprv_mapFile( - UDataMemory *pData, /* Fill in with info on the result doing the mapping. */ - /* Output only; any original contents are cleared. */ - const char *path /* File path to be opened/mapped */ - ) - { - HANDLE map; - HANDLE file; - SECURITY_ATTRIBUTES mappingAttributes; - SECURITY_ATTRIBUTES *mappingAttributesPtr = NULL; - SECURITY_DESCRIPTOR securityDesc; - - UDataMemory_init(pData); /* Clear the output struct. */ - - /* open the input file */ - file=CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS, NULL); - if(file==INVALID_HANDLE_VALUE) { - return FALSE; - } - - /* Declare and initialize a security descriptor. - This is required for multiuser systems on Windows 2000 SP4 and beyond */ - if (InitializeSecurityDescriptor(&securityDesc, SECURITY_DESCRIPTOR_REVISION)) { - /* give the security descriptor a Null Dacl done using the "TRUE, (PACL)NULL" here */ - if (SetSecurityDescriptorDacl(&securityDesc, TRUE, (PACL)NULL, FALSE)) { - /* Make the security attributes point to the security descriptor */ - uprv_memset(&mappingAttributes, 0, sizeof(mappingAttributes)); - mappingAttributes.nLength = sizeof(mappingAttributes); - mappingAttributes.lpSecurityDescriptor = &securityDesc; - mappingAttributes.bInheritHandle = FALSE; /* object uninheritable */ - mappingAttributesPtr = &mappingAttributes; - } - } - /* else creating security descriptors can fail when we are on Windows 98, - and mappingAttributesPtr == NULL for that case. */ - - /* create an unnamed Windows file-mapping object for the specified file */ - map=CreateFileMapping(file, mappingAttributesPtr, PAGE_READONLY, 0, 0, NULL); - CloseHandle(file); - if(map==NULL) { - return FALSE; - } - - /* map a view of the file into our address space */ - pData->pHeader=(const DataHeader *)MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0); - if(pData->pHeader==NULL) { - CloseHandle(map); - return FALSE; - } - pData->map=map; - return TRUE; - } - - U_CFUNC void - uprv_unmapFile(UDataMemory *pData) { - if(pData!=NULL && pData->map!=NULL) { - UnmapViewOfFile(pData->pHeader); - CloseHandle(pData->map); - pData->pHeader=NULL; - pData->map=NULL; - } - } - - - -#elif MAP_IMPLEMENTATION==MAP_POSIX - U_CFUNC UBool - uprv_mapFile(UDataMemory *pData, const char *path) { - int fd; - int length; - struct stat mystat; - void *data; - - UDataMemory_init(pData); /* Clear the output struct. */ - - /* determine the length of the file */ - if(stat(path, &mystat)!=0 || mystat.st_size<=0) { - return FALSE; - } - length=mystat.st_size; - - /* open the file */ - fd=open(path, O_RDONLY); - if(fd==-1) { - return FALSE; - } - - /* get a view of the mapping */ -#if U_PLATFORM != U_PF_HPUX - data=mmap(0, length, PROT_READ, MAP_SHARED, fd, 0); -#else - data=mmap(0, length, PROT_READ, MAP_PRIVATE, fd, 0); -#endif - close(fd); /* no longer needed */ - if(data==MAP_FAILED) { - return FALSE; - } - - pData->map = (char *)data + length; - pData->pHeader=(const DataHeader *)data; - pData->mapAddr = data; -#if U_PLATFORM == U_PF_IPHONE - posix_madvise(data, length, POSIX_MADV_RANDOM); -#endif - return TRUE; - } - - U_CFUNC void - uprv_unmapFile(UDataMemory *pData) { - if(pData!=NULL && pData->map!=NULL) { - size_t dataLen = (char *)pData->map - (char *)pData->mapAddr; - if(munmap(pData->mapAddr, dataLen)==-1) { - } - pData->pHeader=NULL; - pData->map=0; - pData->mapAddr=NULL; - } - } - - - -#elif MAP_IMPLEMENTATION==MAP_STDIO - /* copy of the filestrm.c/T_FileStream_size() implementation */ - static int32_t - umap_fsize(FILE *f) { - int32_t savedPos = ftell(f); - int32_t size = 0; - - /*Changes by Bertrand A. D. doesn't affect the current position - goes to the end of the file before ftell*/ - fseek(f, 0, SEEK_END); - size = (int32_t)ftell(f); - fseek(f, savedPos, SEEK_SET); - return size; - } - - U_CFUNC UBool - uprv_mapFile(UDataMemory *pData, const char *path) { - FILE *file; - int32_t fileLength; - void *p; - - UDataMemory_init(pData); /* Clear the output struct. */ - /* open the input file */ - file=fopen(path, "rb"); - if(file==NULL) { - return FALSE; - } - - /* get the file length */ - fileLength=umap_fsize(file); - if(ferror(file) || fileLength<=20) { - fclose(file); - return FALSE; - } - - /* allocate the memory to hold the file data */ - p=uprv_malloc(fileLength); - if(p==NULL) { - fclose(file); - return FALSE; - } - - /* read the file */ - if(fileLength!=fread(p, 1, fileLength, file)) { - uprv_free(p); - fclose(file); - return FALSE; - } - - fclose(file); - pData->map=p; - pData->pHeader=(const DataHeader *)p; - pData->mapAddr=p; - return TRUE; - } - - U_CFUNC void - uprv_unmapFile(UDataMemory *pData) { - if(pData!=NULL && pData->map!=NULL) { - uprv_free(pData->map); - pData->map = NULL; - pData->mapAddr = NULL; - pData->pHeader = NULL; - } - } - - -#elif MAP_IMPLEMENTATION==MAP_390DLL - /* 390 specific Library Loading. - * This is the only platform left that dynamically loads an ICU Data Library. - * All other platforms use .data files when dynamic loading is required, but - * this turn out to be awkward to support in 390 batch mode. - * - * The idea here is to hide the fact that 390 is using dll loading from the - * rest of ICU, and make it look like there is file loading happening. - * - */ - - static char *strcpy_returnEnd(char *dest, const char *src) - { - while((*dest=*src)!=0) { - ++dest; - ++src; - } - return dest; - } - - /*------------------------------------------------------------------------------ - * - * computeDirPath given a user-supplied path of an item to be opened, - * compute and return - * - the full directory path to be used - * when opening the file. - * - Pointer to null at end of above returned path - * - * Parameters: - * path: input path. Buffer is not altered. - * pathBuffer: Output buffer. Any contents are overwritten. - * - * Returns: - * Pointer to null termination in returned pathBuffer. - * - * TODO: This works the way ICU historically has, but the - * whole data fallback search path is so complicated that - * proabably almost no one will ever really understand it, - * the potential for confusion is large. (It's not just - * this one function, but the whole scheme.) - * - *------------------------------------------------------------------------------*/ - static char *uprv_computeDirPath(const char *path, char *pathBuffer) - { - char *finalSlash; /* Ptr to last dir separator in input path, or null if none. */ - int32_t pathLen; /* Length of the returned directory path */ - - finalSlash = 0; - if (path != 0) { - finalSlash = uprv_strrchr(path, U_FILE_SEP_CHAR); - } - - *pathBuffer = 0; - if (finalSlash == 0) { - /* No user-supplied path. - * Copy the ICU_DATA path to the path buffer and return that*/ - const char *icuDataDir; - icuDataDir=u_getDataDirectory(); - if(icuDataDir!=NULL && *icuDataDir!=0) { - return strcpy_returnEnd(pathBuffer, icuDataDir); - } else { - /* there is no icuDataDir either. Just return the empty pathBuffer. */ - return pathBuffer; - } - } - - /* User supplied path did contain a directory portion. - * Copy it to the output path buffer */ - pathLen = (int32_t)(finalSlash - path + 1); - uprv_memcpy(pathBuffer, path, pathLen); - *(pathBuffer+pathLen) = 0; - return pathBuffer+pathLen; - } - - -# define DATA_TYPE "dat" - - U_CFUNC UBool uprv_mapFile(UDataMemory *pData, const char *path) { - const char *inBasename; - char *basename; - char pathBuffer[1024]; - const DataHeader *pHeader; - dllhandle *handle; - void *val=0; - - inBasename=uprv_strrchr(path, U_FILE_SEP_CHAR); - if(inBasename==NULL) { - inBasename = path; - } else { - inBasename++; - } - basename=uprv_computeDirPath(path, pathBuffer); - if(uprv_strcmp(inBasename, U_ICUDATA_NAME".dat") != 0) { - /* must mmap file... for build */ - int fd; - int length; - struct stat mystat; - void *data; - UDataMemory_init(pData); /* Clear the output struct. */ - - /* determine the length of the file */ - if(stat(path, &mystat)!=0 || mystat.st_size<=0) { - return FALSE; - } - length=mystat.st_size; - - /* open the file */ - fd=open(path, O_RDONLY); - if(fd==-1) { - return FALSE; - } - - /* get a view of the mapping */ - data=mmap(0, length, PROT_READ, MAP_PRIVATE, fd, 0); - close(fd); /* no longer needed */ - if(data==MAP_FAILED) { - return FALSE; - } - pData->map = (char *)data + length; - pData->pHeader=(const DataHeader *)data; - pData->mapAddr = data; - return TRUE; - } - -# ifdef OS390BATCH - /* ### hack: we still need to get u_getDataDirectory() fixed - for OS/390 (batch mode - always return "//"? ) - and this here straightened out with LIB_PREFIX and LIB_SUFFIX (both empty?!) - This is probably due to the strange file system on OS/390. It's more like - a database with short entry names than a typical file system. */ - /* U_ICUDATA_NAME should always have the correct name */ - /* BUT FOR BATCH MODE IT IS AN EXCEPTION BECAUSE */ - /* THE FIRST THREE LETTERS ARE PREASSIGNED TO THE */ - /* PROJECT!!!!! */ - uprv_strcpy(pathBuffer, "IXMI" U_ICU_VERSION_SHORT "DA"); -# else - /* set up the library name */ - uprv_strcpy(basename, LIB_PREFIX U_LIBICUDATA_NAME U_ICU_VERSION_SHORT LIB_SUFFIX); -# endif - -# ifdef UDATA_DEBUG - fprintf(stderr, "dllload: %s ", pathBuffer); -# endif - - handle=dllload(pathBuffer); - -# ifdef UDATA_DEBUG - fprintf(stderr, " -> %08X\n", handle ); -# endif - - if(handle != NULL) { - /* we have a data DLL - what kind of lookup do we need here? */ - /* try to find the Table of Contents */ - UDataMemory_init(pData); /* Clear the output struct. */ - val=dllqueryvar((dllhandle*)handle, U_ICUDATA_ENTRY_NAME); - if(val == 0) { - /* failed... so keep looking */ - return FALSE; - } -# ifdef UDATA_DEBUG - fprintf(stderr, "dllqueryvar(%08X, %s) -> %08X\n", handle, U_ICUDATA_ENTRY_NAME, val); -# endif - - pData->pHeader=(const DataHeader *)val; - return TRUE; - } else { - return FALSE; /* no handle */ - } - } - - U_CFUNC void uprv_unmapFile(UDataMemory *pData) { - if(pData!=NULL && pData->map!=NULL) { - uprv_free(pData->map); - pData->map = NULL; - pData->mapAddr = NULL; - pData->pHeader = NULL; - } - } - -#else -# error MAP_IMPLEMENTATION is set incorrectly -#endif diff --git a/source/common/umapfile.h b/source/common/umapfile.h index 70a6cc5..24e476b 100644 --- a/source/common/umapfile.h +++ b/source/common/umapfile.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/umath.c b/source/common/umath.c deleted file mode 100644 index 78f1ca0..0000000 --- a/source/common/umath.c +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2006, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* This file contains platform independent math. -*/ - -#include "putilimp.h" - -U_CAPI int32_t U_EXPORT2 -uprv_max(int32_t x, int32_t y) -{ - return (x > y ? x : y); -} - -U_CAPI int32_t U_EXPORT2 -uprv_min(int32_t x, int32_t y) -{ - return (x > y ? y : x); -} - diff --git a/source/common/umutex.cpp b/source/common/umutex.cpp index 0532838..77c1778 100644 --- a/source/common/umutex.cpp +++ b/source/common/umutex.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/umutex.h b/source/common/umutex.h index b52010f..8e1f6e9 100644 --- a/source/common/umutex.h +++ b/source/common/umutex.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -86,7 +86,9 @@ U_NAMESPACE_END // Original plan was to use gcc atomics for MinGW, but they // aren't supported, so we fold MinGW into this path. +#ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN +#endif # define VC_EXTRALEAN # define NOUSER # define NOSERVICE @@ -331,7 +333,9 @@ U_NAMESPACE_END * win32 APIs for Critical Sections. */ +#ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN +#endif # define VC_EXTRALEAN # define NOUSER # define NOSERVICE diff --git a/source/common/unames.cpp b/source/common/unames.cpp index 9da2045..6ad349c 100644 --- a/source/common/unames.cpp +++ b/source/common/unames.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: unames.c -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/appendable.h b/source/common/unicode/appendable.h index 2ae3345..8512c2f 100644 --- a/source/common/unicode/appendable.h +++ b/source/common/unicode/appendable.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: appendable.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -19,7 +19,7 @@ /** * \file - * \brief C++ API: Appendable class: Sink for Unicode code points and 16-bit code units (UChars). + * \brief C++ API: Appendable class: Sink for Unicode code points and 16-bit code units (char16_ts). */ #include "unicode/utypes.h" @@ -34,10 +34,10 @@ class UnicodeString; * Combines elements of Java Appendable and ICU4C ByteSink. * * This class can be used in APIs where it does not matter whether the actual destination is - * a UnicodeString, a UChar[] array, a UnicodeSet, or any other object + * a UnicodeString, a char16_t[] array, a UnicodeSet, or any other object * that receives and processes characters and/or strings. * - * Implementation classes must implement at least appendCodeUnit(UChar). + * Implementation classes must implement at least appendCodeUnit(char16_t). * The base class provides default implementations for the other methods. * * The methods do not take UErrorCode parameters. @@ -62,11 +62,11 @@ public: * @return TRUE if the operation succeeded * @stable ICU 4.8 */ - virtual UBool appendCodeUnit(UChar c) = 0; + virtual UBool appendCodeUnit(char16_t c) = 0; /** * Appends a code point. - * The default implementation calls appendCodeUnit(UChar) once or twice. + * The default implementation calls appendCodeUnit(char16_t) once or twice. * @param c code point 0..0x10ffff * @return TRUE if the operation succeeded * @stable ICU 4.8 @@ -75,20 +75,20 @@ public: /** * Appends a string. - * The default implementation calls appendCodeUnit(UChar) for each code unit. + * The default implementation calls appendCodeUnit(char16_t) for each code unit. * @param s string, must not be NULL if length!=0 * @param length string length, or -1 if NUL-terminated * @return TRUE if the operation succeeded * @stable ICU 4.8 */ - virtual UBool appendString(const UChar *s, int32_t length); + virtual UBool appendString(const char16_t *s, int32_t length); /** * Tells the object that the caller is going to append roughly - * appendCapacity UChars. A subclass might use this to pre-allocate + * appendCapacity char16_ts. A subclass might use this to pre-allocate * a larger buffer if necessary. * The default implementation does nothing. (It always returns TRUE.) - * @param appendCapacity estimated number of UChars that will be appended + * @param appendCapacity estimated number of char16_ts that will be appended * @return TRUE if the operation succeeded * @stable ICU 4.8 */ @@ -102,19 +102,19 @@ public: * The returned buffer is only valid until the next operation * on this Appendable. * - * After writing at most *resultCapacity UChars, call appendString() with the - * pointer returned from this function and the number of UChars written. - * Many appendString() implementations will avoid copying UChars if this function + * After writing at most *resultCapacity char16_ts, call appendString() with the + * pointer returned from this function and the number of char16_ts written. + * Many appendString() implementations will avoid copying char16_ts if this function * returned an internal buffer. * * Partial usage example: * \code * int32_t capacity; - * UChar* buffer = app.getAppendBuffer(..., &capacity); - * ... Write n UChars into buffer, with n <= capacity. + * char16_t* buffer = app.getAppendBuffer(..., &capacity); + * ... Write n char16_ts into buffer, with n <= capacity. * app.appendString(buffer, n); * \endcode - * In many implementations, that call to append will avoid copying UChars. + * In many implementations, that call to append will avoid copying char16_ts. * * If the Appendable allocates or reallocates an internal buffer, it should use * the desiredCapacityHint if appropriate. @@ -138,9 +138,9 @@ public: * @return a buffer with *resultCapacity>=minCapacity * @stable ICU 4.8 */ - virtual UChar *getAppendBuffer(int32_t minCapacity, + virtual char16_t *getAppendBuffer(int32_t minCapacity, int32_t desiredCapacityHint, - UChar *scratch, int32_t scratchCapacity, + char16_t *scratch, int32_t scratchCapacity, int32_t *resultCapacity); }; @@ -171,7 +171,7 @@ public: * @return TRUE if the operation succeeded * @stable ICU 4.8 */ - virtual UBool appendCodeUnit(UChar c); + virtual UBool appendCodeUnit(char16_t c); /** * Appends a code point to the string. @@ -188,12 +188,12 @@ public: * @return TRUE if the operation succeeded * @stable ICU 4.8 */ - virtual UBool appendString(const UChar *s, int32_t length); + virtual UBool appendString(const char16_t *s, int32_t length); /** * Tells the UnicodeString that the caller is going to append roughly - * appendCapacity UChars. - * @param appendCapacity estimated number of UChars that will be appended + * appendCapacity char16_ts. + * @param appendCapacity estimated number of char16_ts that will be appended * @return TRUE if the operation succeeded * @stable ICU 4.8 */ @@ -220,9 +220,9 @@ public: * @return a buffer with *resultCapacity>=minCapacity * @stable ICU 4.8 */ - virtual UChar *getAppendBuffer(int32_t minCapacity, + virtual char16_t *getAppendBuffer(int32_t minCapacity, int32_t desiredCapacityHint, - UChar *scratch, int32_t scratchCapacity, + char16_t *scratch, int32_t scratchCapacity, int32_t *resultCapacity); private: diff --git a/source/common/unicode/brkiter.h b/source/common/unicode/brkiter.h index 88b39c6..b1e4cc6 100644 --- a/source/common/unicode/brkiter.h +++ b/source/common/unicode/brkiter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** diff --git a/source/common/unicode/bytestream.h b/source/common/unicode/bytestream.h index 1556227..a31992e 100644 --- a/source/common/unicode/bytestream.h +++ b/source/common/unicode/bytestream.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2012, International Business Machines // Corporation and others. All Rights Reserved. @@ -222,8 +222,6 @@ private: CheckedArrayByteSink &operator=(const CheckedArrayByteSink &); ///< assignment operator not implemented }; -#if U_HAVE_STD_STRING - /** * Implementation of ByteSink that writes to a "string". * The StringClass is usually instantiated with a std::string. @@ -252,8 +250,6 @@ class StringByteSink : public ByteSink { StringByteSink &operator=(const StringByteSink &); ///< assignment operator not implemented }; -#endif - U_NAMESPACE_END #endif // __BYTESTREAM_H__ diff --git a/source/common/unicode/bytestrie.h b/source/common/unicode/bytestrie.h index 4a30ce1..c57b8cc 100644 --- a/source/common/unicode/bytestrie.h +++ b/source/common/unicode/bytestrie.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: bytestrie.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/bytestriebuilder.h b/source/common/unicode/bytestriebuilder.h index fe96887..a8412d3 100644 --- a/source/common/unicode/bytestriebuilder.h +++ b/source/common/unicode/bytestriebuilder.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: bytestriebuilder.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -127,14 +127,14 @@ private: void buildBytes(UStringTrieBuildOption buildOption, UErrorCode &errorCode); virtual int32_t getElementStringLength(int32_t i) const; - virtual UChar getElementUnit(int32_t i, int32_t byteIndex) const; + virtual char16_t getElementUnit(int32_t i, int32_t byteIndex) const; virtual int32_t getElementValue(int32_t i) const; virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t byteIndex) const; virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t byteIndex) const; virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const; - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, UChar byte) const; + virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const; virtual UBool matchNodesCanHaveValues() const { return FALSE; } diff --git a/source/common/unicode/caniter.h b/source/common/unicode/caniter.h index 7c1bf6a..5a882fb 100644 --- a/source/common/unicode/caniter.h +++ b/source/common/unicode/caniter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -187,7 +187,7 @@ private: UnicodeString *getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status); //private String[] getEquivalents(String segment) //Set getEquivalents2(String segment); - Hashtable *getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status); + Hashtable *getEquivalents2(Hashtable *fillinResult, const char16_t *segment, int32_t segLen, UErrorCode &status); //Hashtable *getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status); /** @@ -196,7 +196,7 @@ private: * If so, take the remainder, and return the equivalents */ //Set extract(int comp, String segment, int segmentPos, StringBuffer buffer); - Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); + Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const char16_t *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); //Hashtable *extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); void cleanPieces(); diff --git a/source/common/unicode/chariter.h b/source/common/unicode/chariter.h index 07d1ca3..7a4e1a2 100644 --- a/source/common/unicode/chariter.h +++ b/source/common/unicode/chariter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** @@ -78,7 +78,7 @@ U_NAMESPACE_BEGIN * } * * void function1(ForwardCharacterIterator &it) { - * UChar c; + * char16_t c; * while((c=it.nextPostInc())!=ForwardCharacterIterator::DONE) { * // use c * } @@ -149,7 +149,7 @@ public: * @return the current code unit. * @stable ICU 2.0 */ - virtual UChar nextPostInc(void) = 0; + virtual char16_t nextPostInc(void) = 0; /** * Gets the current code point for returning and advances to the next code point @@ -230,7 +230,7 @@ protected: * showing a way to convert simple for() loops: * \code * void forward2(CharacterIterator &it) { - * UChar c; + * char16_t c; * for(c=it.firstPostInc(); c!=CharacterIterator::DONE; c=it.nextPostInc()) { * // use c * } @@ -249,7 +249,7 @@ protected: * Backward iteration with a more traditional for() loop: * \code * void backward2(CharacterIterator &it) { - * UChar c; + * char16_t c; * for(c=it.last(); c!=CharacterIterator::DONE; c=it.previous()) { * // use c * } @@ -266,7 +266,7 @@ protected: * // get the position * int32_t pos=it.getIndex(); * // get the previous code unit - * UChar u=it.previous(); + * char16_t u=it.previous(); * // move back one more code unit * it.move(-1, CharacterIterator::kCurrent); * // set the position back to where it was @@ -283,7 +283,7 @@ protected: * Function processing characters, in this example simple output *
      * \code
    - *  void processChar( UChar c )
    + *  void processChar( char16_t c )
      *  {
      *      cout << " " << c;
      *  }
    @@ -294,7 +294,7 @@ protected:
      * \code
      *  void traverseForward(CharacterIterator& iter)
      *  {
    - *      for(UChar c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
    + *      for(char16_t c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
      *          processChar(c);
      *      }
      *  }
    @@ -305,7 +305,7 @@ protected:
      * \code
      *  void traverseBackward(CharacterIterator& iter)
      *  {
    - *      for(UChar c = iter.last(); c != CharacterIterator.DONE; c = iter.previous()) {
    + *      for(char16_t c = iter.last(); c != CharacterIterator.DONE; c = iter.previous()) {
      *          processChar(c);
      *      }
      *  }
    @@ -317,7 +317,7 @@ protected:
      * \code
      * void traverseOut(CharacterIterator& iter, int32_t pos)
      * {
    - *      UChar c;
    + *      char16_t c;
      *      for (c = iter.setIndex(pos);
      *      c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
      *          c = iter.next()) {}
    @@ -386,7 +386,7 @@ public:
          * @return the first code unit in its iteration range.
          * @stable ICU 2.0
          */
    -    virtual UChar         first(void) = 0;
    +    virtual char16_t         first(void) = 0;
     
         /**
          * Sets the iterator to refer to the first code unit in its
    @@ -396,7 +396,7 @@ public:
          * @return the first code unit in its iteration range.
          * @stable ICU 2.0
          */
    -    virtual UChar         firstPostInc(void);
    +    virtual char16_t         firstPostInc(void);
     
         /**
          * Sets the iterator to refer to the first code point in its
    @@ -435,7 +435,7 @@ public:
          * @return the last code unit.
          * @stable ICU 2.0
          */
    -    virtual UChar         last(void) = 0;
    +    virtual char16_t         last(void) = 0;
             
         /**
          * Sets the iterator to refer to the last code point in its
    @@ -463,7 +463,7 @@ public:
          * @return the "position"-th code unit.
          * @stable ICU 2.0
          */
    -    virtual UChar         setIndex(int32_t position) = 0;
    +    virtual char16_t         setIndex(int32_t position) = 0;
     
         /**
          * Sets the iterator to refer to the beginning of the code point
    @@ -483,7 +483,7 @@ public:
          * @return the current code unit. 
          * @stable ICU 2.0
          */
    -    virtual UChar         current(void) const = 0;
    +    virtual char16_t         current(void) const = 0;
             
         /**
          * Returns the code point the iterator currently refers to.  
    @@ -499,7 +499,7 @@ public:
          * @return the next code unit.
          * @stable ICU 2.0
          */
    -    virtual UChar         next(void) = 0;
    +    virtual char16_t         next(void) = 0;
             
         /**
          * Advances to the next code point in the iteration range
    @@ -520,7 +520,7 @@ public:
          * @return the previous code unit.
          * @stable ICU 2.0
          */
    -    virtual UChar         previous(void) = 0;
    +    virtual char16_t         previous(void) = 0;
     
         /**
          * Advances to the previous code point in the iteration range
    @@ -607,6 +607,10 @@ public:
          * @return the new position
          * @stable ICU 2.0
          */
    +#ifdef move32
    +     // One of the system headers right now is sometimes defining a conflicting macro we don't use
    +#undef move32
    +#endif
         virtual int32_t      move32(int32_t delta, EOrigin origin) = 0;
     
         /**
    diff --git a/source/common/unicode/dbbi.h b/source/common/unicode/dbbi.h
    index 590b6f37..a2c3d7d 100644
    --- a/source/common/unicode/dbbi.h
    +++ b/source/common/unicode/dbbi.h
    @@ -1,4 +1,4 @@
    -// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// © 2016 and later: Unicode, Inc. and others.
     // License & terms of use: http://www.unicode.org/copyright.html
     /*
     **********************************************************************
    diff --git a/source/common/unicode/docmain.h b/source/common/unicode/docmain.h
    index 7fc1084..698e2ae 100644
    --- a/source/common/unicode/docmain.h
    +++ b/source/common/unicode/docmain.h
    @@ -1,4 +1,4 @@
    -// Copyright (C) 2016 and later: Unicode, Inc. and others.
    +// © 2016 and later: Unicode, Inc. and others.
     // License & terms of use: http://www.unicode.org/copyright.html
     /********************************************************************
      * COPYRIGHT: 
    @@ -98,6 +98,11 @@
      *     C API
      *   
      *   
    + *     Codepage Detection
    + *     ucsdet.h
    + *     C API
    + *   
    + *   
      *     Unicode Text Compression
      *     ucnv.h
    (encoding name "SCSU" or "BOCU-1") * C API diff --git a/source/common/unicode/dtintrv.h b/source/common/unicode/dtintrv.h index d45614a..10b566a 100644 --- a/source/common/unicode/dtintrv.h +++ b/source/common/unicode/dtintrv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/unicode/enumset.h b/source/common/unicode/enumset.h index 9c15b9a..f63dd16 100644 --- a/source/common/unicode/enumset.h +++ b/source/common/unicode/enumset.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/errorcode.h b/source/common/unicode/errorcode.h index 13f43e1..81cad20 100644 --- a/source/common/unicode/errorcode.h +++ b/source/common/unicode/errorcode.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: errorcode.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/filteredbrk.h b/source/common/unicode/filteredbrk.h index 2611511..51bb651 100644 --- a/source/common/unicode/filteredbrk.h +++ b/source/common/unicode/filteredbrk.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** diff --git a/source/common/unicode/icudataver.h b/source/common/unicode/icudataver.h index 99e7c28..1cb202e 100644 --- a/source/common/unicode/icudataver.h +++ b/source/common/unicode/icudataver.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/icuplug.h b/source/common/unicode/icuplug.h index cffa6f3..1a894a7 100644 --- a/source/common/unicode/icuplug.h +++ b/source/common/unicode/icuplug.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/idna.h b/source/common/unicode/idna.h index 23a1d7c..f08658e 100644 --- a/source/common/unicode/idna.h +++ b/source/common/unicode/idna.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: idna.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/listformatter.h b/source/common/unicode/listformatter.h index f2c8988..180fbcb 100644 --- a/source/common/unicode/listformatter.h +++ b/source/common/unicode/listformatter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: listformatter.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -157,6 +157,8 @@ class U_COMMON_API ListFormatter : public UObject{ private: static void initializeHash(UErrorCode& errorCode); static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode); + struct ListPatternsSink; + static ListFormatInternal* loadListFormatInternal(const Locale& locale, const char* style, UErrorCode& errorCode); ListFormatter(); diff --git a/source/common/unicode/localpointer.h b/source/common/unicode/localpointer.h index 9ac5de5..3ab8201 100644 --- a/source/common/unicode/localpointer.h +++ b/source/common/unicode/localpointer.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: localpointer.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -174,9 +174,9 @@ private: * \code * LocalPointer s(new UnicodeString((UChar32)0x50005)); * int32_t length=s->length(); // 2 - * UChar lead=s->charAt(0); // 0xd900 + * char16_t lead=s->charAt(0); // 0xd900 * if(some condition) { return; } // no need to explicitly delete the pointer - * s.adoptInstead(new UnicodeString((UChar)0xfffc)); + * s.adoptInstead(new UnicodeString((char16_t)0xfffc)); * length=s->length(); // 1 * // no need to explicitly delete the pointer * \endcode @@ -323,10 +323,10 @@ public: * Usage example: * \code * LocalArray a(new UnicodeString[2]); - * a[0].append((UChar)0x61); + * a[0].append((char16_t)0x61); * if(some condition) { return; } // no need to explicitly delete the array * a.adoptInstead(new UnicodeString[4]); - * a[3].append((UChar)0x62).append((UChar)0x63).reverse(); + * a[3].append((char16_t)0x62).append((char16_t)0x63).reverse(); * // no need to explicitly delete the array * \endcode * diff --git a/source/common/unicode/locdspnm.h b/source/common/unicode/locdspnm.h index b8c7a0c..7f22782 100644 --- a/source/common/unicode/locdspnm.h +++ b/source/common/unicode/locdspnm.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -20,6 +20,7 @@ #if !UCONFIG_NO_FORMATTING #include "unicode/locid.h" +#include "unicode/strenum.h" #include "unicode/uscript.h" #include "unicode/uldnames.h" #include "unicode/udisplaycontext.h" diff --git a/source/common/unicode/locid.h b/source/common/unicode/locid.h index a8ddb7f..a37c4a3 100644 --- a/source/common/unicode/locid.h +++ b/source/common/unicode/locid.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -33,10 +33,8 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" -#include "unicode/unistr.h" #include "unicode/putil.h" #include "unicode/uloc.h" -#include "unicode/strenum.h" /** * \file @@ -48,6 +46,9 @@ U_NAMESPACE_BEGIN // Forward Declarations void U_CALLCONV locale_available_init(); /**< @internal */ +class StringEnumeration; +class UnicodeString; + /** * A Locale object represents a specific geographical, political, * or cultural region. An operation that requires a Locale to perform diff --git a/source/common/unicode/messagepattern.h b/source/common/unicode/messagepattern.h index 8c1115e..f28adaf 100644 --- a/source/common/unicode/messagepattern.h +++ b/source/common/unicode/messagepattern.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: messagepattern.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/normalizer2.h b/source/common/unicode/normalizer2.h index 6a7668b..d326da9 100644 --- a/source/common/unicode/normalizer2.h +++ b/source/common/unicode/normalizer2.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: normalizer2.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -282,7 +282,7 @@ public: * * When used on a standard NFC Normalizer2 instance, * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can); - * in this case, the result contains either one or two code points (=1..4 UChars). + * in this case, the result contains either one or two code points (=1..4 char16_ts). * * This function is independent of the mode of the Normalizer2. * The default implementation returns FALSE. diff --git a/source/common/unicode/normlzr.h b/source/common/unicode/normlzr.h index d529aa2..0141058 100644 --- a/source/common/unicode/normlzr.h +++ b/source/common/unicode/normlzr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** @@ -168,7 +168,7 @@ public: * @param mode The normalization mode. * @deprecated ICU 56 Use Normalizer2 instead. */ - Normalizer(const UChar* str, int32_t length, UNormalizationMode mode); + Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode); /** * Creates a new Normalizer object for iterating over the @@ -704,7 +704,7 @@ public: * @param status a UErrorCode * @deprecated ICU 56 Use Normalizer2 instead. */ - void setText(const UChar* newText, + void setText(ConstChar16Ptr newText, int32_t length, UErrorCode &status); /** @@ -796,8 +796,8 @@ Normalizer::compare(const UnicodeString &s1, const UnicodeString &s2, uint32_t options, UErrorCode &errorCode) { // all argument checking is done in unorm_compare - return unorm_compare(s1.getBuffer(), s1.length(), - s2.getBuffer(), s2.length(), + return unorm_compare(toUCharPtr(s1.getBuffer()), s1.length(), + toUCharPtr(s2.getBuffer()), s2.length(), options, &errorCode); } diff --git a/source/common/unicode/parseerr.h b/source/common/unicode/parseerr.h index 71aef40..fc1e3f4 100644 --- a/source/common/unicode/parseerr.h +++ b/source/common/unicode/parseerr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/parsepos.h b/source/common/unicode/parsepos.h index 1f74ebd..bbebca7 100644 --- a/source/common/unicode/parsepos.h +++ b/source/common/unicode/parsepos.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. diff --git a/source/common/unicode/platform.h b/source/common/unicode/platform.h index b42bef8..057182d 100644 --- a/source/common/unicode/platform.h +++ b/source/common/unicode/platform.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -150,7 +150,7 @@ # define U_PLATFORM U_PF_ANDROID /* Android wchar_t support depends on the API level. */ # include -#elif defined(__native_client__) +#elif defined(__pnacl__) || defined(__native_client__) # define U_PLATFORM U_PF_BROWSER_NATIVE_CLIENT #elif defined(linux) || defined(__linux__) || defined(__linux) # define U_PLATFORM U_PF_LINUX @@ -234,6 +234,18 @@ #endif /** + * \def U_PLATFORM_HAS_WINUWP_API + * Defines whether target is intended for Universal Windows Platform API + * Set to 1 for Windows10 Release Solution Configuration + * @internal + */ +#ifdef U_PLATFORM_HAS_WINUWP_API + /* Use the predefined value. */ +#else +# define U_PLATFORM_HAS_WINUWP_API 0 +#endif + +/** * \def U_PLATFORM_IMPLEMENTS_POSIX * Defines whether the platform implements (most of) the POSIX API. * Set to 1 for Cygwin and most other platforms. @@ -343,17 +355,6 @@ #define U_IOSTREAM_SOURCE 199711 #endif -/** - * \def U_HAVE_STD_STRING - * Defines whether the standard C++ (STL) <string> header is available. - * @internal - */ -#ifdef U_HAVE_STD_STRING - /* Use the predefined value. */ -#else -# define U_HAVE_STD_STRING 1 -#endif - /*===========================================================================*/ /** @{ Compiler and environment features */ /*===========================================================================*/ @@ -430,7 +431,7 @@ # define U_HAVE_DEBUG_LOCATION_NEW 0 #endif -/* Compatibility with non clang compilers: http://clang.llvm.org/docs/LanguageExtensions.html */ +/* Compatibility with compilers other than clang: http://clang.llvm.org/docs/LanguageExtensions.html */ #ifndef __has_attribute # define __has_attribute(x) 0 #endif @@ -497,6 +498,13 @@ # define U_CPLUSPLUS_VERSION 1 #endif +#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) +// add in std::nullptr_t +namespace std { + typedef decltype(nullptr) nullptr_t; +}; +#endif + /** * \def U_HAVE_RVALUE_REFERENCES * Set to 1 if the compiler supports rvalue references. @@ -537,17 +545,22 @@ * http://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough * @internal */ -#ifdef __cplusplus +#ifndef __cplusplus + // Not for C. +#elif defined(U_FALLTHROUGH) + // Use the predefined value. +#elif defined(__clang__) + // Test for compiler vs. feature separately. + // Other compilers might choke on the feature test. # if __has_cpp_attribute(clang::fallthrough) || \ (__has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")) # define U_FALLTHROUGH [[clang::fallthrough]] -# else -# define U_FALLTHROUGH # endif -#else -# define U_FALLTHROUGH #endif +#ifndef U_FALLTHROUGH +# define U_FALLTHROUGH +#endif /** @} */ @@ -764,6 +777,7 @@ * gcc 4.4 defines the __CHAR16_TYPE__ macro to a usable type but * does not support u"abc" string literals. * C++11 and C11 require support for UTF-16 literals + * TODO: Fix for plain C. Doesn't work on Mac. */ # if U_CPLUSPLUS_VERSION >= 11 || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) # define U_HAVE_CHAR16_T 1 diff --git a/source/common/unicode/ptypes.h b/source/common/unicode/ptypes.h index 69d7286..6eaf2db 100644 --- a/source/common/unicode/ptypes.h +++ b/source/common/unicode/ptypes.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/putil.h b/source/common/unicode/putil.h index 63a7b9b..406551a 100644 --- a/source/common/unicode/putil.h +++ b/source/common/unicode/putil.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/rbbi.h b/source/common/unicode/rbbi.h index 9f2a1a6..d654154 100644 --- a/source/common/unicode/rbbi.h +++ b/source/common/unicode/rbbi.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** diff --git a/source/common/unicode/rep.h b/source/common/unicode/rep.h index 6ffd1f4..41fdc04 100644 --- a/source/common/unicode/rep.h +++ b/source/common/unicode/rep.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** @@ -93,7 +93,7 @@ public: * @return 16-bit code unit of text at given offset * @stable ICU 1.8 */ - inline UChar charAt(int32_t offset) const; + inline char16_t charAt(int32_t offset) const; /** * Returns the 32-bit code point at the given 16-bit offset into @@ -230,7 +230,7 @@ protected: * Virtual version of charAt(). * @stable ICU 2.4 */ - virtual UChar getCharAt(int32_t offset) const = 0; + virtual char16_t getCharAt(int32_t offset) const = 0; /** * Virtual version of char32At(). @@ -246,7 +246,7 @@ Replaceable::length() const { return getLength(); } -inline UChar +inline char16_t Replaceable::charAt(int32_t offset) const { return getCharAt(offset); } diff --git a/source/common/unicode/resbund.h b/source/common/unicode/resbund.h index 927a65b..b522a7a 100644 --- a/source/common/unicode/resbund.h +++ b/source/common/unicode/resbund.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -216,7 +216,7 @@ public: * could be U_MISSING_RESOURCE_ERROR if the key is not found * could be a warning * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. + * @return a pointer to a zero-terminated char16_t array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ UnicodeString diff --git a/source/common/unicode/schriter.h b/source/common/unicode/schriter.h index e52b97c..b1dc939 100644 --- a/source/common/unicode/schriter.h +++ b/source/common/unicode/schriter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -175,7 +175,7 @@ protected: * @param newTextLength The length of the String * @stable ICU 2.0 */ - void setText(const UChar* newText, int32_t newTextLength); + void setText(const char16_t* newText, int32_t newTextLength); /** * Copy of the iterated string object. diff --git a/source/common/unicode/simpleformatter.h b/source/common/unicode/simpleformatter.h index 2b74f5c..26eae01 100644 --- a/source/common/unicode/simpleformatter.h +++ b/source/common/unicode/simpleformatter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -19,8 +19,6 @@ #include "unicode/utypes.h" #include "unicode/unistr.h" -#ifndef U_HIDE_DRAFT_API - U_NAMESPACE_BEGIN /** @@ -49,15 +47,15 @@ U_NAMESPACE_BEGIN * * @see MessageFormat * @see UMessagePatternApostropheMode - * @draft ICU 57 + * @stable ICU 57 */ class U_COMMON_API SimpleFormatter U_FINAL : public UMemory { public: /** * Default constructor. - * @draft ICU 57 + * @stable ICU 57 */ - SimpleFormatter() : compiledPattern((UChar)0) {} + SimpleFormatter() : compiledPattern((char16_t)0) {} /** * Constructs a formatter from the pattern string. @@ -66,7 +64,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax. - * @draft ICU 57 + * @stable ICU 57 */ SimpleFormatter(const UnicodeString& pattern, UErrorCode &errorCode) { applyPattern(pattern, errorCode); @@ -84,7 +82,7 @@ public: * Must fulfill U_SUCCESS before the function call. * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and * too few or too many arguments. - * @draft ICU 57 + * @stable ICU 57 */ SimpleFormatter(const UnicodeString& pattern, int32_t min, int32_t max, UErrorCode &errorCode) { @@ -93,20 +91,20 @@ public: /** * Copy constructor. - * @draft ICU 57 + * @stable ICU 57 */ SimpleFormatter(const SimpleFormatter& other) : compiledPattern(other.compiledPattern) {} /** * Assignment operator. - * @draft ICU 57 + * @stable ICU 57 */ SimpleFormatter &operator=(const SimpleFormatter& other); /** * Destructor. - * @draft ICU 57 + * @stable ICU 57 */ ~SimpleFormatter(); @@ -118,7 +116,7 @@ public: * Must fulfill U_SUCCESS before the function call. * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax. * @return TRUE if U_SUCCESS(errorCode). - * @draft ICU 57 + * @stable ICU 57 */ UBool applyPattern(const UnicodeString &pattern, UErrorCode &errorCode) { return applyPatternMinMaxArguments(pattern, 0, INT32_MAX, errorCode); @@ -137,14 +135,14 @@ public: * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and * too few or too many arguments. * @return TRUE if U_SUCCESS(errorCode). - * @draft ICU 57 + * @stable ICU 57 */ UBool applyPatternMinMaxArguments(const UnicodeString &pattern, int32_t min, int32_t max, UErrorCode &errorCode); /** * @return The max argument number + 1. - * @draft ICU 57 + * @stable ICU 57 */ int32_t getArgumentLimit() const { return getArgumentLimit(compiledPattern.getBuffer(), compiledPattern.length()); @@ -160,7 +158,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return appendTo - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString &format( const UnicodeString &value0, @@ -177,7 +175,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return appendTo - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString &format( const UnicodeString &value0, @@ -196,7 +194,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return appendTo - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString &format( const UnicodeString &value0, @@ -221,7 +219,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return appendTo - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString &formatAndAppend( const UnicodeString *const *values, int32_t valuesLength, @@ -247,7 +245,7 @@ public: * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return result - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString &formatAndReplace( const UnicodeString *const *values, int32_t valuesLength, @@ -257,7 +255,7 @@ public: /** * Returns the pattern text with none of the arguments. * Like formatting with all-empty string values. - * @draft ICU 57 + * @stable ICU 57 */ UnicodeString getTextWithNoArguments() const { return getTextWithNoArguments(compiledPattern.getBuffer(), compiledPattern.length()); @@ -275,15 +273,15 @@ private: */ UnicodeString compiledPattern; - static inline int32_t getArgumentLimit(const UChar *compiledPattern, + static inline int32_t getArgumentLimit(const char16_t *compiledPattern, int32_t compiledPatternLength) { return compiledPatternLength == 0 ? 0 : compiledPattern[0]; } - static UnicodeString getTextWithNoArguments(const UChar *compiledPattern, int32_t compiledPatternLength); + static UnicodeString getTextWithNoArguments(const char16_t *compiledPattern, int32_t compiledPatternLength); static UnicodeString &format( - const UChar *compiledPattern, int32_t compiledPatternLength, + const char16_t *compiledPattern, int32_t compiledPatternLength, const UnicodeString *const *values, UnicodeString &result, const UnicodeString *resultCopy, UBool forbidResultAsValue, int32_t *offsets, int32_t offsetsLength, @@ -292,6 +290,4 @@ private: U_NAMESPACE_END -#endif /* U_HIDE_DRAFT_API */ - #endif // __SIMPLEFORMATTER_H__ diff --git a/source/common/unicode/std_string.h b/source/common/unicode/std_string.h index 104ef0c..729c563 100644 --- a/source/common/unicode/std_string.h +++ b/source/common/unicode/std_string.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: std_string.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -27,13 +27,11 @@ #include "unicode/utypes.h" -#if U_HAVE_STD_STRING - -#if !defined(_MSC_VER) -namespace std { class type_info; } // WORKAROUND: http://llvm.org/bugs/show_bug.cgi?id=13364 +// Workaround for a libstdc++ bug before libstdc++4.6 (2011). +// https://bugs.llvm.org/show_bug.cgi?id=13364 +#if defined(__GLIBCXX__) +namespace std { class type_info; } #endif #include -#endif // U_HAVE_STD_STRING - #endif // __STD_STRING_H__ diff --git a/source/common/unicode/strenum.h b/source/common/unicode/strenum.h index 5a33f7f..61d5148 100644 --- a/source/common/unicode/strenum.h +++ b/source/common/unicode/strenum.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -35,7 +35,7 @@ U_NAMESPACE_BEGIN * call, so the returned string still might not be 'valid' on * subsequent use.

    * - *

    Strings may take the form of const char*, const UChar*, or const + *

    Strings may take the form of const char*, const char16_t*, or const * UnicodeString*. The type you get is determine by the variant of * 'next' that you call. In general the StringEnumeration is * optimized for one of these types, but all StringEnumerations can @@ -112,7 +112,7 @@ public: *

    If the iterator is out of sync with its service, status is set * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.

    * - *

    If the native service string is a UChar* string, it is + *

    If the native service string is a char16_t* string, it is * converted to char* with the invariant converter. If the * conversion fails (because a character cannot be converted) then * status is set to U_INVARIANT_CONVERSION_ERROR and the return @@ -131,7 +131,7 @@ public: virtual const char* next(int32_t *resultLength, UErrorCode& status); /** - *

    Returns the next element as a NUL-terminated UChar*. If there + *

    Returns the next element as a NUL-terminated char16_t*. If there * are no more elements, returns NULL. If the resultLength pointer * is not NULL, the length of the string (not counting the * terminating NUL) is returned at that address. If an error @@ -153,7 +153,7 @@ public: * * @stable ICU 2.4 */ - virtual const UChar* unext(int32_t *resultLength, UErrorCode& status); + virtual const char16_t* unext(int32_t *resultLength, UErrorCode& status); /** *

    Returns the next element a UnicodeString*. If there are no diff --git a/source/common/unicode/stringpiece.h b/source/common/unicode/stringpiece.h index 5e40d4a..b0887ef 100644 --- a/source/common/unicode/stringpiece.h +++ b/source/common/unicode/stringpiece.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. @@ -68,14 +68,12 @@ class U_COMMON_API StringPiece : public UMemory { * @stable ICU 4.2 */ StringPiece(const char* str); -#if U_HAVE_STD_STRING /** * Constructs from a std::string. * @stable ICU 4.2 */ StringPiece(const std::string& str) : ptr_(str.data()), length_(static_cast(str.size())) { } -#endif /** * Constructs from a const char * pointer and a specified length. * @param offset a const char * pointer (need not be terminated) diff --git a/source/common/unicode/stringtriebuilder.h b/source/common/unicode/stringtriebuilder.h index 95cd841..bcad248 100644 --- a/source/common/unicode/stringtriebuilder.h +++ b/source/common/unicode/stringtriebuilder.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: stringtriebuilder.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -105,7 +105,7 @@ protected: /** @internal */ virtual int32_t getElementStringLength(int32_t i) const = 0; /** @internal */ - virtual UChar getElementUnit(int32_t i, int32_t unitIndex) const = 0; + virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const = 0; /** @internal */ virtual int32_t getElementValue(int32_t i) const = 0; @@ -120,7 +120,7 @@ protected: /** @internal */ virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const = 0; /** @internal */ - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, UChar unit) const = 0; + virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const = 0; /** @internal */ virtual UBool matchNodesCanHaveValues() const = 0; @@ -137,7 +137,7 @@ protected: /** @internal */ static const int32_t kMaxBranchLinearSubNodeLength=5; - // Maximum number of nested split-branch levels for a branch on all 2^16 possible UChar units. + // Maximum number of nested split-branch levels for a branch on all 2^16 possible char16_t units. // log2(2^16/kMaxBranchLinearSubNodeLength) rounded up. /** @internal */ static const int32_t kMaxSplitBranchLevels=14; @@ -338,7 +338,7 @@ protected: virtual void write(StringTrieBuilder &builder); // Adds a unit with a final value. void add(int32_t c, int32_t value) { - units[length]=(UChar)c; + units[length]=(char16_t)c; equal[length]=NULL; values[length]=value; ++length; @@ -346,7 +346,7 @@ protected: } // Adds a unit which leads to another match node. void add(int32_t c, Node *node) { - units[length]=(UChar)c; + units[length]=(char16_t)c; equal[length]=node; values[length]=0; ++length; @@ -356,7 +356,7 @@ protected: Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value". int32_t length; int32_t values[kMaxBranchLinearSubNodeLength]; - UChar units[kMaxBranchLinearSubNodeLength]; + char16_t units[kMaxBranchLinearSubNodeLength]; }; /** @@ -364,7 +364,7 @@ protected: */ class SplitBranchNode : public BranchNode { public: - SplitBranchNode(UChar middleUnit, Node *lessThanNode, Node *greaterOrEqualNode) + SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode) : BranchNode(((0x555555*37+middleUnit)*37+ hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)), unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {} @@ -372,7 +372,7 @@ protected: virtual int32_t markRightEdgesFirst(int32_t edgeNumber); virtual void write(StringTrieBuilder &builder); protected: - UChar unit; + char16_t unit; Node *lessThan; Node *greaterOrEqual; }; diff --git a/source/common/unicode/symtable.h b/source/common/unicode/symtable.h index cf2c4f0..35e5f23 100644 --- a/source/common/unicode/symtable.h +++ b/source/common/unicode/symtable.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ubidi.h b/source/common/unicode/ubidi.h index e599698..ef21f24 100644 --- a/source/common/unicode/ubidi.h +++ b/source/common/unicode/ubidi.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ubidi.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -1196,11 +1196,14 @@ ubidi_setContext(UBiDi *pBiDi, * A level overrides the directional property of its corresponding * (same index) character if the level has the * #UBIDI_LEVEL_OVERRIDE bit set.

    - * Except for that bit, it must be + * Aside from that bit, it must be * paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL, - * with one exception: a level of zero may be specified for a paragraph - * separator even if paraLevel>0 when multiple paragraphs - * are submitted in the same call to ubidi_setPara().

    + * except that level 0 is always allowed. + * Level 0 for a paragraph separator prevents reordering of paragraphs; + * this only works reliably if #UBIDI_LEVEL_OVERRIDE + * is also set for paragraph separators. + * Level 0 for other characters is treated as a wildcard + * and is lifted up to the resolved level of the surrounding paragraph.

    * Caution: A copy of this pointer, not of the levels, * will be stored in the UBiDi object; * the embeddingLevels array must not be diff --git a/source/common/unicode/ubiditransform.h b/source/common/unicode/ubiditransform.h index 509f68b..724587d 100644 --- a/source/common/unicode/ubiditransform.h +++ b/source/common/unicode/ubiditransform.h @@ -1,12 +1,12 @@ /* ****************************************************************************** * -* Copyright (C) 2016 and later: Unicode, Inc. and others. +* © 2016 and later: Unicode, Inc. and others. * License & terms of use: http://www.unicode.org/copyright.html * ****************************************************************************** * file name: ubiditransform.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/ubrk.h b/source/common/unicode/ubrk.h index f43943e..22a4b99 100644 --- a/source/common/unicode/ubrk.h +++ b/source/common/unicode/ubrk.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -267,6 +267,34 @@ ubrk_openRules(const UChar *rules, UParseError *parseErr, UErrorCode *status); +#ifndef U_HIDE_DRAFT_API +/** + * Open a new UBreakIterator for locating text boundaries using precompiled binary rules. + * Opening a UBreakIterator this way is substantially faster than using ubrk_openRules. + * Binary rules may be obtained using ubrk_getBinaryRules. The compiled rules are not + * compatible across different major versions of ICU, nor across platforms of different + * endianness or different base character set family (ASCII vs EBCDIC). + * @param binaryRules A set of compiled binary rules specifying the text breaking + * conventions. Ownership of the storage containing the compiled + * rules remains with the caller of this function. The compiled + * rules must not be modified or deleted during the life of the + * break iterator. + * @param rulesLength The length of binaryRules in bytes; must be >= 0. + * @param text The text to be iterated over. May be null, in which case + * ubrk_setText() is used to specify the text to be iterated. + * @param textLength The number of characters in text, or -1 if null-terminated. + * @param status Pointer to UErrorCode to receive any errors. + * @return UBreakIterator for the specified rules. + * @see ubrk_getBinaryRules + * @draft ICU 59 + */ +U_DRAFT UBreakIterator* U_EXPORT2 +ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, + const UChar * text, int32_t textLength, + UErrorCode * status); + +#endif /* U_HIDE_DRAFT_API */ + /** * Thread safe cloning operation * @param bi iterator to be cloned @@ -566,6 +594,40 @@ ubrk_refreshUText(UBreakIterator *bi, UText *text, UErrorCode *status); + +#ifndef U_HIDE_DRAFT_API +/** + * Get a compiled binary version of the rules specifying the behavior of a UBreakIterator. + * The binary rules may be used with ubrk_openBinaryRules to open a new UBreakIterator + * more quickly than using ubrk_openRules. The compiled rules are not compatible across + * different major versions of ICU, nor across platforms of different endianness or + * different base character set family (ASCII vs EBCDIC). Supports preflighting (with + * binaryRules=NULL and rulesCapacity=0) to get the rules length without copying them to + * the binaryRules buffer. However, whether preflighting or not, if the actual length + * is greater than INT32_MAX, then the function returns 0 and sets *status to + * U_INDEX_OUTOFBOUNDS_ERROR. + + * @param bi The break iterator to use. + * @param binaryRules Buffer to receive the compiled binary rules; set to NULL for + * preflighting. + * @param rulesCapacity Capacity (in bytes) of the binaryRules buffer; set to 0 for + * preflighting. Must be >= 0. + * @param status Pointer to UErrorCode to receive any errors, such as + * U_BUFFER_OVERFLOW_ERROR, U_INDEX_OUTOFBOUNDS_ERROR, or + * U_ILLEGAL_ARGUMENT_ERROR. + * @return The actual byte length of the binary rules, if <= INT32_MAX; + * otherwise 0. If not preflighting and this is larger than + * rulesCapacity, *status will be set to an error. + * @see ubrk_openBinaryRules + * @draft ICU 59 + */ +U_DRAFT int32_t U_EXPORT2 +ubrk_getBinaryRules(UBreakIterator *bi, + uint8_t * binaryRules, int32_t rulesCapacity, + UErrorCode * status); + +#endif /* U_HIDE_DRAFT_API */ + #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ #endif diff --git a/source/common/unicode/ucasemap.h b/source/common/unicode/ucasemap.h index d7345e8..18e6c2b 100644 --- a/source/common/unicode/ucasemap.h +++ b/source/common/unicode/ucasemap.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ucasemap.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -22,8 +22,8 @@ #define __UCASEMAP_H__ #include "unicode/utypes.h" -#include "unicode/ustring.h" #include "unicode/localpointer.h" +#include "unicode/ustring.h" /** * \file @@ -185,6 +185,15 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); */ #define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200 +/** + * Omit unchanged text when case-mapping with Edits. + * + * @see CaseMap + * @see Edits + * @draft ICU 59 + */ +#define UCASEMAP_OMIT_UNCHANGED_TEXT 0x4000 + #if !UCONFIG_NO_BREAK_ITERATION /** @@ -253,7 +262,7 @@ ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * @param dest A buffer for the result string. The result will be NUL-terminated if * the buffer is large enough. * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then + * @param destCapacity The size of the buffer (number of UChars). If it is 0, then * dest may be NULL and the function will only return the length of the result * without writing any of the result string. * @param src The original string. @@ -272,7 +281,7 @@ ucasemap_toTitle(UCaseMap *csm, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode); -#endif +#endif // UCONFIG_NO_BREAK_ITERATION /** * Lowercase the characters in a UTF-8 string. diff --git a/source/common/unicode/ucat.h b/source/common/unicode/ucat.h index c52e4d9..4d1ff3f 100644 --- a/source/common/unicode/ucat.h +++ b/source/common/unicode/ucat.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/uchar.h b/source/common/unicode/uchar.h index 7f6ea6d..8174ca2 100644 --- a/source/common/unicode/uchar.h +++ b/source/common/unicode/uchar.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -399,36 +399,34 @@ typedef enum UProperty { UCHAR_CHANGES_WHEN_CASEMAPPED=55, /** Binary property Changes_When_NFKC_Casefolded. @stable ICU 4.4 */ UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED=56, -#ifndef U_HIDE_DRAFT_API /** * Binary property Emoji. * See http://www.unicode.org/reports/tr51/#Emoji_Properties * - * @draft ICU 57 + * @stable ICU 57 */ UCHAR_EMOJI=57, /** * Binary property Emoji_Presentation. * See http://www.unicode.org/reports/tr51/#Emoji_Properties * - * @draft ICU 57 + * @stable ICU 57 */ UCHAR_EMOJI_PRESENTATION=58, /** * Binary property Emoji_Modifier. * See http://www.unicode.org/reports/tr51/#Emoji_Properties * - * @draft ICU 57 + * @stable ICU 57 */ UCHAR_EMOJI_MODIFIER=59, /** * Binary property Emoji_Modifier_Base. * See http://www.unicode.org/reports/tr51/#Emoji_Properties * - * @draft ICU 57 + * @stable ICU 57 */ UCHAR_EMOJI_MODIFIER_BASE=60, -#endif /* U_HIDE_DRAFT_API */ #ifndef U_HIDE_DEPRECATED_API /** * One more than the last constant for binary Unicode properties. diff --git a/source/common/unicode/ucharstrie.h b/source/common/unicode/ucharstrie.h index 8daed44..dfc93f6 100644 --- a/source/common/unicode/ucharstrie.h +++ b/source/common/unicode/ucharstrie.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucharstrie.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -36,7 +36,7 @@ class UVector32; /** * Light-weight, non-const reader class for a UCharsTrie. - * Traverses a UChar-serialized data structure with minimal state, + * Traverses a char16_t-serialized data structure with minimal state, * for mapping strings (16-bit-unit sequences) to non-negative integer values. * * This class owns the serialized trie data only if it was constructed by @@ -52,18 +52,18 @@ public: /** * Constructs a UCharsTrie reader instance. * - * The trieUChars must contain a copy of a UChar sequence from the UCharsTrieBuilder, - * starting with the first UChar of that sequence. - * The UCharsTrie object will not read more UChars than + * The trieUChars must contain a copy of a char16_t sequence from the UCharsTrieBuilder, + * starting with the first char16_t of that sequence. + * The UCharsTrie object will not read more char16_ts than * the UCharsTrieBuilder generated in the corresponding build() call. * * The array is not copied/cloned and must not be modified while * the UCharsTrie object is in use. * - * @param trieUChars The UChar array that contains the serialized trie. + * @param trieUChars The char16_t array that contains the serialized trie. * @stable ICU 4.8 */ - UCharsTrie(const UChar *trieUChars) + UCharsTrie(ConstChar16Ptr trieUChars) : ownedArray_(NULL), uchars_(trieUChars), pos_(uchars_), remainingMatchLength_(-1) {} @@ -75,7 +75,7 @@ public: /** * Copy constructor, copies the other trie reader object and its state, - * but not the UChar array which will be shared. (Shallow copy.) + * but not the char16_t array which will be shared. (Shallow copy.) * @param other Another UCharsTrie object. * @stable ICU 4.8 */ @@ -109,8 +109,8 @@ public: private: friend class UCharsTrie; - const UChar *uchars; - const UChar *pos; + const char16_t *uchars; + const char16_t *pos; int32_t remainingMatchLength; }; @@ -148,14 +148,14 @@ public: /** * Determines whether the string so far matches, whether it has a value, - * and whether another input UChar can continue a matching string. + * and whether another input char16_t can continue a matching string. * @return The match/value Result. * @stable ICU 4.8 */ UStringTrieResult current() const; /** - * Traverses the trie from the initial state for this input UChar. + * Traverses the trie from the initial state for this input char16_t. * Equivalent to reset().next(uchar). * @param uchar Input char value. Values below 0 and above 0xffff will never match. * @return The match/value Result. @@ -177,7 +177,7 @@ public: UStringTrieResult firstForCodePoint(UChar32 cp); /** - * Traverses the trie from the current state for this input UChar. + * Traverses the trie from the current state for this input char16_t. * @param uchar Input char value. Values below 0 and above 0xffff will never match. * @return The match/value Result. * @stable ICU 4.8 @@ -208,7 +208,7 @@ public: * @return The match/value Result. * @stable ICU 4.8 */ - UStringTrieResult next(const UChar *s, int32_t length); + UStringTrieResult next(ConstChar16Ptr s, int32_t length); /** * Returns a matching string's value if called immediately after @@ -220,7 +220,7 @@ public: * @stable ICU 4.8 */ inline int32_t getValue() const { - const UChar *pos=pos_; + const char16_t *pos=pos_; int32_t leadUnit=*pos++; // U_ASSERT(leadUnit>=kMinValueLead); return leadUnit&kValueIsFinal ? @@ -237,16 +237,16 @@ public: * @stable ICU 4.8 */ inline UBool hasUniqueValue(int32_t &uniqueValue) const { - const UChar *pos=pos_; + const char16_t *pos=pos_; // Skip the rest of a pending linear-match node. return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue); } /** - * Finds each UChar which continues the string from the current state. - * That is, each UChar c for which it would be next(c)!=USTRINGTRIE_NO_MATCH now. - * @param out Each next UChar is appended to this object. - * @return the number of UChars which continue the string from here + * Finds each char16_t which continues the string from the current state. + * That is, each char16_t c for which it would be next(c)!=USTRINGTRIE_NO_MATCH now. + * @param out Each next char16_t is appended to this object. + * @return the number of char16_ts which continue the string from here * @stable ICU 4.8 */ int32_t getNextUChars(Appendable &out) const; @@ -258,8 +258,8 @@ public: class U_COMMON_API Iterator : public UMemory { public: /** - * Iterates from the root of a UChar-serialized UCharsTrie. - * @param trieUChars The trie UChars. + * Iterates from the root of a char16_t-serialized UCharsTrie. + * @param trieUChars The trie char16_ts. * @param maxStringLength If 0, the iterator returns full strings. * Otherwise, the iterator returns strings with this maximum length. * @param errorCode Standard ICU error code. Its input value must @@ -268,7 +268,7 @@ public: * function chaining. (See User Guide for details.) * @stable ICU 4.8 */ - Iterator(const UChar *trieUChars, int32_t maxStringLength, UErrorCode &errorCode); + Iterator(ConstChar16Ptr trieUChars, int32_t maxStringLength, UErrorCode &errorCode); /** * Iterates from the current state of the specified UCharsTrie. @@ -336,11 +336,11 @@ public: return TRUE; } - const UChar *branchNext(const UChar *pos, int32_t length, UErrorCode &errorCode); + const char16_t *branchNext(const char16_t *pos, int32_t length, UErrorCode &errorCode); - const UChar *uchars_; - const UChar *pos_; - const UChar *initialPos_; + const char16_t *uchars_; + const char16_t *pos_; + const char16_t *initialPos_; int32_t remainingMatchLength_; int32_t initialRemainingMatchLength_; UBool skipValue_; // Skip intermediate value which was already delivered. @@ -368,7 +368,7 @@ private: * this constructor adopts the builder's array. * This constructor is only called by the builder. */ - UCharsTrie(UChar *adoptUChars, const UChar *trieUChars) + UCharsTrie(char16_t *adoptUChars, const char16_t *trieUChars) : ownedArray_(adoptUChars), uchars_(trieUChars), pos_(uchars_), remainingMatchLength_(-1) {} @@ -381,7 +381,7 @@ private: // Reads a compact 32-bit integer. // pos is already after the leadUnit, and the lead unit has bit 15 reset. - static inline int32_t readValue(const UChar *pos, int32_t leadUnit) { + static inline int32_t readValue(const char16_t *pos, int32_t leadUnit) { int32_t value; if(leadUnit=kMinTwoUnitValueLead) { if(leadUnit=kMinTwoUnitNodeValueLead) { if(leadUnit=kMinTwoUnitDeltaLead) { if(delta==kThreeUnitDeltaLead) { @@ -444,7 +444,7 @@ private: return pos+delta; } - static const UChar *skipDelta(const UChar *pos) { + static const char16_t *skipDelta(const char16_t *pos) { int32_t delta=*pos++; if(delta>=kMinTwoUnitDeltaLead) { if(delta==kThreeUnitDeltaLead) { @@ -461,28 +461,28 @@ private: } // Handles a branch node for both next(uchar) and next(string). - UStringTrieResult branchNext(const UChar *pos, int32_t length, int32_t uchar); + UStringTrieResult branchNext(const char16_t *pos, int32_t length, int32_t uchar); // Requires remainingLength_<0. - UStringTrieResult nextImpl(const UChar *pos, int32_t uchar); + UStringTrieResult nextImpl(const char16_t *pos, int32_t uchar); // Helper functions for hasUniqueValue(). // Recursively finds a unique value (or whether there is not a unique one) // from a branch. - static const UChar *findUniqueValueFromBranch(const UChar *pos, int32_t length, + static const char16_t *findUniqueValueFromBranch(const char16_t *pos, int32_t length, UBool haveUniqueValue, int32_t &uniqueValue); // Recursively finds a unique value (or whether there is not a unique one) // starting from a position on a node lead unit. - static UBool findUniqueValue(const UChar *pos, UBool haveUniqueValue, int32_t &uniqueValue); + static UBool findUniqueValue(const char16_t *pos, UBool haveUniqueValue, int32_t &uniqueValue); // Helper functions for getNextUChars(). // getNextUChars() when pos is on a branch node. - static void getNextBranchUChars(const UChar *pos, int32_t length, Appendable &out); + static void getNextBranchUChars(const char16_t *pos, int32_t length, Appendable &out); // UCharsTrie data structure // - // The trie consists of a series of UChar-serialized nodes for incremental - // Unicode string/UChar sequence matching. (UChar=16-bit unsigned integer) + // The trie consists of a series of char16_t-serialized nodes for incremental + // Unicode string/char16_t sequence matching. (char16_t=16-bit unsigned integer) // The root node is at the beginning of the trie data. // // Types of nodes are distinguished by their node lead unit ranges. @@ -491,9 +491,9 @@ private: // // Node types: // - Final-value node: Stores a 32-bit integer in a compact, variable-length format. - // The value is for the string/UChar sequence so far. + // The value is for the string/char16_t sequence so far. // - Match node, optionally with an intermediate value in a different compact format. - // The value, if present, is for the string/UChar sequence so far. + // The value, if present, is for the string/char16_t sequence so far. // // Aside from the value, which uses the node lead unit's high bits: // @@ -560,15 +560,15 @@ private: static const int32_t kMaxTwoUnitDelta=((kThreeUnitDeltaLead-kMinTwoUnitDeltaLead)<<16)-1; // 0x03feffff - UChar *ownedArray_; + char16_t *ownedArray_; // Fixed value referencing the UCharsTrie words. - const UChar *uchars_; + const char16_t *uchars_; // Iterator variables. // Pointer to next trie unit to read. NULL if no more matches. - const UChar *pos_; + const char16_t *pos_; // Remaining length of a linear-match node, minus 1. Negative if not in such a node. int32_t remainingMatchLength_; }; diff --git a/source/common/unicode/ucharstriebuilder.h b/source/common/unicode/ucharstriebuilder.h index cc9fb77..2aa4757 100644 --- a/source/common/unicode/ucharstriebuilder.h +++ b/source/common/unicode/ucharstriebuilder.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucharstriebuilder.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -89,21 +89,21 @@ public: UCharsTrie *build(UStringTrieBuildOption buildOption, UErrorCode &errorCode); /** - * Builds a UCharsTrie for the add()ed data and UChar-serializes it. + * Builds a UCharsTrie for the add()ed data and char16_t-serializes it. * Once built, no further data can be add()ed until clear() is called. * * A UCharsTrie cannot be empty. At least one (string, value) pair * must have been add()ed. * * Multiple calls to buildUnicodeString() set the UnicodeStrings to the - * builder's same UChar array, without rebuilding. + * builder's same char16_t array, without rebuilding. * If buildUnicodeString() is called after build(), the trie will be * re-serialized into a new array. * If build() is called after buildUnicodeString(), the trie object will become * the owner of the previously returned array. * After clear() has been called, a new array will be used as well. * @param buildOption Build option, see UStringTrieBuildOption. - * @param result A UnicodeString which will be set to the UChar-serialized + * @param result A UnicodeString which will be set to the char16_t-serialized * UCharsTrie for the add()ed data. * @param errorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns @@ -135,14 +135,14 @@ private: void buildUChars(UStringTrieBuildOption buildOption, UErrorCode &errorCode); virtual int32_t getElementStringLength(int32_t i) const; - virtual UChar getElementUnit(int32_t i, int32_t unitIndex) const; + virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const; virtual int32_t getElementValue(int32_t i) const; virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t unitIndex) const; virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t unitIndex) const; virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const; - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, UChar unit) const; + virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const; virtual UBool matchNodesCanHaveValues() const { return TRUE; } @@ -152,11 +152,11 @@ private: class UCTLinearMatchNode : public LinearMatchNode { public: - UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode); + UCTLinearMatchNode(const char16_t *units, int32_t len, Node *nextNode); virtual UBool operator==(const Node &other) const; virtual void write(StringTrieBuilder &builder); private: - const UChar *s; + const char16_t *s; }; virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length, @@ -164,7 +164,7 @@ private: UBool ensureCapacity(int32_t length); virtual int32_t write(int32_t unit); - int32_t write(const UChar *s, int32_t length); + int32_t write(const char16_t *s, int32_t length); virtual int32_t writeElementUnits(int32_t i, int32_t unitIndex, int32_t length); virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal); virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node); @@ -175,9 +175,9 @@ private: int32_t elementsCapacity; int32_t elementsLength; - // UChar serialization of the trie. + // char16_t serialization of the trie. // Grows from the back: ucharsLength measures from the end of the buffer! - UChar *uchars; + char16_t *uchars; int32_t ucharsCapacity; int32_t ucharsLength; }; diff --git a/source/common/unicode/uchriter.h b/source/common/unicode/uchriter.h index d87ffb1..efcd263 100644 --- a/source/common/unicode/uchriter.h +++ b/source/common/unicode/uchriter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -15,18 +15,18 @@ /** * \file - * \brief C++ API: UChar Character Iterator + * \brief C++ API: char16_t Character Iterator */ U_NAMESPACE_BEGIN /** * A concrete subclass of CharacterIterator that iterates over the - * characters (code units or code points) in a UChar array. + * characters (code units or code points) in a char16_t array. * It's possible not only to create an - * iterator that iterates over an entire UChar array, but also to - * create one that iterates over only a subrange of a UChar array - * (iterators over different subranges of the same UChar array don't + * iterator that iterates over an entire char16_t array, but also to + * create one that iterates over only a subrange of a char16_t array + * (iterators over different subranges of the same char16_t array don't * compare equal). * @see CharacterIterator * @see ForwardCharacterIterator @@ -35,34 +35,34 @@ U_NAMESPACE_BEGIN class U_COMMON_API UCharCharacterIterator : public CharacterIterator { public: /** - * Create an iterator over the UChar array referred to by "textPtr". + * Create an iterator over the char16_t array referred to by "textPtr". * The iteration range is 0 to length-1. * text is only aliased, not adopted (the * destructor will not delete it). - * @param textPtr The UChar array to be iterated over - * @param length The length of the UChar array + * @param textPtr The char16_t array to be iterated over + * @param length The length of the char16_t array * @stable ICU 2.0 */ - UCharCharacterIterator(const UChar* textPtr, int32_t length); + UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length); /** - * Create an iterator over the UChar array referred to by "textPtr". + * Create an iterator over the char16_t array referred to by "textPtr". * The iteration range is 0 to length-1. * text is only aliased, not adopted (the * destructor will not delete it). * The starting * position is specified by "position". If "position" is outside the valid * iteration range, the behavior of this object is undefined. - * @param textPtr The UChar array to be iteratd over - * @param length The length of the UChar array + * @param textPtr The char16_t array to be iteratd over + * @param length The length of the char16_t array * @param position The starting position of the iteration * @stable ICU 2.0 */ - UCharCharacterIterator(const UChar* textPtr, int32_t length, + UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, int32_t position); /** - * Create an iterator over the UChar array referred to by "textPtr". + * Create an iterator over the char16_t array referred to by "textPtr". * The iteration range is 0 to end-1. * text is only aliased, not adopted (the * destructor will not delete it). @@ -70,14 +70,14 @@ public: * position is specified by "position". If begin and end do not * form a valid iteration range or "position" is outside the valid * iteration range, the behavior of this object is undefined. - * @param textPtr The UChar array to be iterated over - * @param length The length of the UChar array + * @param textPtr The char16_t array to be iterated over + * @param length The length of the char16_t array * @param textBegin The begin position of the iteration range * @param textEnd The end position of the iteration range * @param position The starting position of the iteration * @stable ICU 2.0 */ - UCharCharacterIterator(const UChar* textPtr, int32_t length, + UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, int32_t textBegin, int32_t textEnd, int32_t position); @@ -141,7 +141,7 @@ public: * @return the first code unit in its iteration range. * @stable ICU 2.0 */ - virtual UChar first(void); + virtual char16_t first(void); /** * Sets the iterator to refer to the first code unit in its @@ -151,7 +151,7 @@ public: * @return the first code unit in its iteration range * @stable ICU 2.0 */ - virtual UChar firstPostInc(void); + virtual char16_t firstPostInc(void); /** * Sets the iterator to refer to the first code point in its @@ -181,7 +181,7 @@ public: * @return the last code unit in its iteration range. * @stable ICU 2.0 */ - virtual UChar last(void); + virtual char16_t last(void); /** * Sets the iterator to refer to the last code point in its @@ -200,7 +200,7 @@ public: * @return the code unit * @stable ICU 2.0 */ - virtual UChar setIndex(int32_t position); + virtual char16_t setIndex(int32_t position); /** * Sets the iterator to refer to the beginning of the code point @@ -220,7 +220,7 @@ public: * @return the code unit the iterator currently refers to. * @stable ICU 2.0 */ - virtual UChar current(void) const; + virtual char16_t current(void) const; /** * Returns the code point the iterator currently refers to. @@ -236,7 +236,7 @@ public: * @return the next code unit in the iteration range. * @stable ICU 2.0 */ - virtual UChar next(void); + virtual char16_t next(void); /** * Gets the current code unit for returning and advances to the next code unit @@ -246,7 +246,7 @@ public: * @return the current code unit. * @stable ICU 2.0 */ - virtual UChar nextPostInc(void); + virtual char16_t nextPostInc(void); /** * Advances to the next code point in the iteration range (toward @@ -288,7 +288,7 @@ public: * @return the previous code unit in the iteration range. * @stable ICU 2.0 */ - virtual UChar previous(void); + virtual char16_t previous(void); /** * Advances to the previous code point in the iteration range (toward @@ -334,16 +334,20 @@ public: * @return the new position * @stable ICU 2.0 */ +#ifdef move32 + // One of the system headers right now is sometimes defining a conflicting macro we don't use +#undef move32 +#endif virtual int32_t move32(int32_t delta, EOrigin origin); /** * Sets the iterator to iterate over a new range of text * @stable ICU 2.0 */ - void setText(const UChar* newText, int32_t newTextLength); + void setText(ConstChar16Ptr newText, int32_t newTextLength); /** - * Copies the UChar array under iteration into the UnicodeString + * Copies the char16_t array under iteration into the UnicodeString * referred to by "result". Even if this iterator iterates across * only a part of this string, the whole string is copied. * @param result Receives a copy of the text under iteration. @@ -375,7 +379,7 @@ protected: * Protected member text * @stable ICU 2.0 */ - const UChar* text; + const char16_t* text; }; diff --git a/source/common/unicode/uclean.h b/source/common/unicode/uclean.h index d7801d6..5beb1f7 100644 --- a/source/common/unicode/uclean.h +++ b/source/common/unicode/uclean.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: uclean.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -101,7 +101,7 @@ u_init(UErrorCode *status); U_STABLE void U_EXPORT2 u_cleanup(void); - +U_CDECL_BEGIN /** * Pointer type for a user supplied memory allocation function. * @param context user supplied value, obtained from from u_setMemoryFunctions(). @@ -149,9 +149,10 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); * @system */ U_STABLE void U_EXPORT2 -u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, +u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV a, UMemReallocFn * U_CALLCONV r, UMemFreeFn * U_CALLCONV f, UErrorCode *status); +U_CDECL_END #ifndef U_HIDE_DEPRECATED_API /********************************************************************************* @@ -172,6 +173,7 @@ u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMem */ typedef void *UMTX; +U_CDECL_BEGIN /** * Function Pointer type for a user supplied mutex initialization function. * The user-supplied function will be called by ICU whenever ICU needs to create a @@ -201,7 +203,7 @@ typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCod * @system */ typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); - +U_CDECL_END /** * Set the functions that ICU will use for mutex operations diff --git a/source/common/unicode/ucnv.h b/source/common/unicode/ucnv.h index 767c1a2..86e3b84 100644 --- a/source/common/unicode/ucnv.h +++ b/source/common/unicode/ucnv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ucnv_cb.h b/source/common/unicode/ucnv_cb.h index 7104c72..14169ed 100644 --- a/source/common/unicode/ucnv_cb.h +++ b/source/common/unicode/ucnv_cb.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ucnv_err.h b/source/common/unicode/ucnv_err.h index b970b89..2f74754 100644 --- a/source/common/unicode/ucnv_err.h +++ b/source/common/unicode/ucnv_err.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ucnvsel.h b/source/common/unicode/ucnvsel.h index 3eed081..d423845 100644 --- a/source/common/unicode/ucnvsel.h +++ b/source/common/unicode/ucnvsel.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/unicode/uconfig.h b/source/common/unicode/uconfig.h index 77a476d..c26fce4 100644 --- a/source/common/unicode/uconfig.h +++ b/source/common/unicode/uconfig.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ********************************************************************** * file name: uconfig.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/ucurr.h b/source/common/unicode/ucurr.h index 56bad0a..1abb3b2 100644 --- a/source/common/unicode/ucurr.h +++ b/source/common/unicode/ucurr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/udata.h b/source/common/unicode/udata.h index bde719d..a0286e1 100644 --- a/source/common/unicode/udata.h +++ b/source/common/unicode/udata.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: udata.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/udisplaycontext.h b/source/common/unicode/udisplaycontext.h index eaef02d..c4f6c95 100644 --- a/source/common/unicode/udisplaycontext.h +++ b/source/common/unicode/udisplaycontext.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** diff --git a/source/common/unicode/uenum.h b/source/common/unicode/uenum.h index 8da1bd4..fc6efa2 100644 --- a/source/common/unicode/uenum.h +++ b/source/common/unicode/uenum.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uenum.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * @@ -23,7 +23,9 @@ #include "unicode/localpointer.h" #if U_SHOW_CPLUSPLUS_API -#include "unicode/strenum.h" +U_NAMESPACE_BEGIN +class StringEnumeration; +U_NAMESPACE_END #endif /** diff --git a/source/common/unicode/uidna.h b/source/common/unicode/uidna.h index af3455c..0dafb76 100644 --- a/source/common/unicode/uidna.h +++ b/source/common/unicode/uidna.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uidna.h - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/uiter.h b/source/common/unicode/uiter.h index e6cb838..11ad75a 100644 --- a/source/common/unicode/uiter.h +++ b/source/common/unicode/uiter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uiter.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/uldnames.h b/source/common/unicode/uldnames.h index 30f465a..3ebffa2 100644 --- a/source/common/unicode/uldnames.h +++ b/source/common/unicode/uldnames.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/unicode/ulistformatter.h b/source/common/unicode/ulistformatter.h index 2167f60..9fe24f7 100644 --- a/source/common/unicode/ulistformatter.h +++ b/source/common/unicode/ulistformatter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** @@ -49,7 +49,7 @@ typedef struct UListFormatter UListFormatter; /**< C typedef for struct UListFo * or NULL if an error occurred. * @stable ICU 55 */ -U_STABLE UListFormatter* U_EXPORT2 +U_CAPI UListFormatter* U_EXPORT2 ulistfmt_open(const char* locale, UErrorCode* status); @@ -59,7 +59,7 @@ ulistfmt_open(const char* locale, * The UListFormatter object to close. * @stable ICU 55 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulistfmt_close(UListFormatter *listfmt); @@ -116,7 +116,7 @@ U_NAMESPACE_END * total buffer size needed (e.g. for illegal arguments). * @stable ICU 55 */ -U_DRAFT int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ulistfmt_format(const UListFormatter* listfmt, const UChar* const strings[], const int32_t * stringLengths, diff --git a/source/common/unicode/uloc.h b/source/common/unicode/uloc.h index 92ce20e..23a54a9 100644 --- a/source/common/unicode/uloc.h +++ b/source/common/unicode/uloc.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -61,7 +61,7 @@ * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt * *

    - * The second option includes an additonal ISO Country + * The second option includes an additional ISO Country * Code. These codes are the upper-case two-letter codes * as defined by ISO-3166. * You can find a full list of these codes at a number of sites, such as: @@ -69,7 +69,7 @@ * http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html * *

    - * The third option requires another additonal information--the + * The third option requires another additional information--the * Variant. * The Variant codes are vendor and browser-specific. * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. @@ -157,7 +157,7 @@ * just a mechanism for identifying these services. * *

    - * Each international serivce that performs locale-sensitive operations + * Each international service that performs locale-sensitive operations * allows you * to get all the available objects of that type. You can sift * through these objects by language, country, or variant, @@ -539,6 +539,9 @@ uloc_getISO3Country(const char* localeID); * Gets the Win32 LCID value for the specified locale. * If the ICU locale is not recognized by Windows, 0 will be returned. * + * LCIDs were deprecated with Windows Vista and Microsoft recommends + * that developers use BCP47 style tags instead (uloc_toLanguageTag). + * * @param localeID the locale to get the Win32 LCID value with * @return country the Win32 LCID for localeID * @stable ICU 2.0 @@ -577,7 +580,7 @@ uloc_getDisplayLanguage(const char* locale, * if the locale's language code is "en", passing Locale::getFrench() for * inLocale would result in "", while passing Locale::getGerman() * for inLocale would result in "". NULL may be used to specify the default. - * @param script the displayable country code for localeID + * @param script the displayable script for the localeID * @param scriptCapacity the size of the script buffer to store the * displayable script code with * @param status error information if retrieving the displayable script code failed @@ -852,10 +855,12 @@ uloc_openKeywords(const char* localeID, * Get the value for a keyword. Locale name does not need to be normalized. * * @param localeID locale name containing the keyword ("de_DE@currency=EURO;collation=PHONEBOOK") - * @param keywordName name of the keyword for which we want the value. Case insensitive. + * @param keywordName name of the keyword for which we want the value; must not be + * NULL or empty, and must consist only of [A-Za-z0-9]. Case insensitive. * @param buffer receiving buffer * @param bufferCapacity capacity of receiving buffer - * @param status containing error code - buffer not big enough. + * @param status containing error code: e.g. buffer not big enough or ill-formed localeID + * or keywordName parameters. * @return the length of keyword value * @stable ICU 2.8 */ @@ -872,18 +877,26 @@ uloc_getKeywordValue(const char* localeID, * For removing all keywords, use uloc_getBaseName(). * * NOTE: Unlike almost every other ICU function which takes a - * buffer, this function will NOT truncate the output text. If a - * BUFFER_OVERFLOW_ERROR is received, it means that the original - * buffer is untouched. This is done to prevent incorrect or possibly - * even malformed locales from being generated and used. + * buffer, this function will NOT truncate the output text, and will + * not update the buffer with unterminated text setting a status of + * U_STRING_NOT_TERMINATED_WARNING. If a BUFFER_OVERFLOW_ERROR is received, + * it means a terminated version of the updated locale ID would not fit + * in the buffer, and the original buffer is untouched. This is done to + * prevent incorrect or possibly even malformed locales from being generated + * and used. * - * @param keywordName name of the keyword to be set. Case insensitive. + * @param keywordName name of the keyword to be set; must not be + * NULL or empty, and must consist only of [A-Za-z0-9]. Case insensitive. * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed. No error is given if - * that keyword does not exist. - * @param buffer input buffer containing locale to be modified. + * NULL, will result in the keyword being removed; no error is given if + * that keyword does not exist. Otherwise, must consist only of + * [A-Za-z0-9] and [/_+-]. + * @param buffer input buffer containing well-formed locale ID to be + * modified. * @param bufferCapacity capacity of receiving buffer - * @param status containing error code - buffer not big enough. + * @param status containing error code: e.g. buffer not big enough + * or ill-formed keywordName or keywordValue parameters, or ill-formed + * locale ID in buffer on input. * @return the length needed for the buffer * @see uloc_getKeywordValue * @stable ICU 3.2 diff --git a/source/common/unicode/umachine.h b/source/common/unicode/umachine.h index 51581c7..3ba9161 100644 --- a/source/common/unicode/umachine.h +++ b/source/common/unicode/umachine.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: umachine.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -51,29 +51,6 @@ */ #include -#ifndef U_HIDE_INTERNAL_API -/* - * U_USE_CHAR16_T - * When defined, force use of char16_t for UChar. - * Note: char16_t is expected to become the default and required in the future, - * and this option will be removed. - * @internal - */ -#ifdef U_USE_CHAR16_T -#ifdef UCHAR_TYPE -#undef UCHAR_TYPE -#endif -#define UCHAR_TYPE char16_t - -/* - * In plain C, is needed for the definition of char16_t - */ -#ifndef __cplusplus -#include -#endif -#endif -#endif /* U_HIDE_INTERNAL_API */ - /*==========================================================================*/ /* For C wrappers, we use the symbol U_STABLE. */ /* This works properly if the includer is C or C++. */ @@ -314,30 +291,92 @@ typedef int8_t UBool; #define U_SIZEOF_UCHAR 2 /** + * \def U_CHAR16_IS_TYPEDEF + * If 1, then char16_t is a typedef and not a real type (yet) + * @internal + */ +#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) +// for AIX, uchar.h needs to be included +# include +# define U_CHAR16_IS_TYPEDEF 1 +#else +# define U_CHAR16_IS_TYPEDEF 0 +#endif + + +/** * \var UChar - * Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), - * or wchar_t if that is 16 bits wide; always assumed to be unsigned. - * If neither is available, then define UChar to be uint16_t. * - * This makes the definition of UChar platform-dependent - * but allows direct string type compatibility with platforms with - * 16-bit wchar_t types. + * The base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. + * + * UChar is configurable by defining the macro UCHAR_TYPE + * on the preprocessor or compiler command line: + * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. + * (The UCHAR_TYPE can also be #defined earlier in this file, for outside the ICU library code.) + * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. + * + * The default is UChar=char16_t. + * + * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. + * + * In C, char16_t is a simple typedef of uint_least16_t. + * ICU requires uint_least16_t=uint16_t for data memory mapping. + * On macOS, char16_t is not available because the uchar.h standard header is missing. * * @stable ICU 4.4 */ -#if defined(UCHAR_TYPE) + +#if 1 + // #if 1 is normal. UChar defaults to char16_t in C++. + // For configuration testing of UChar=uint16_t temporarily change this to #if 0. + // The intltest Makefile #defines UCHAR_TYPE=char16_t, + // so we only #define it to uint16_t if it is undefined so far. +#elif !defined(UCHAR_TYPE) +# define UCHAR_TYPE uint16_t +#endif + +#if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ + defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) + // Inside the ICU library code, never configurable. + typedef char16_t UChar; +#elif defined(UCHAR_TYPE) typedef UCHAR_TYPE UChar; -/* Not #elif U_HAVE_CHAR16_T -- because that is type-incompatible with pre-C++11 callers - typedef char16_t UChar; */ -#elif U_SIZEOF_WCHAR_T==2 - typedef wchar_t UChar; -#elif defined(__CHAR16_TYPE__) - typedef __CHAR16_TYPE__ UChar; +#elif defined(__cplusplus) + typedef char16_t UChar; #else typedef uint16_t UChar; #endif /** + * \var OldUChar + * Default ICU 58 definition of UChar. + * A base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * + * Define OldUChar to be wchar_t if that is 16 bits wide. + * If wchar_t is not 16 bits wide, then define UChar to be uint16_t. + * + * This makes the definition of OldUChar platform-dependent + * but allows direct string type compatibility with platforms with + * 16-bit wchar_t types. + * + * This is how UChar was defined in ICU 58, for transition convenience. + * Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. + * The current UChar responds to UCHAR_TYPE but OldUChar does not. + * + * @draft ICU 59 + */ +#if U_SIZEOF_WCHAR_T==2 + typedef wchar_t OldUChar; +#elif defined(__CHAR16_TYPE__) + typedef __CHAR16_TYPE__ OldUChar; +#else + typedef uint16_t OldUChar; +#endif + +/** * Define UChar32 as a type for single Unicode code points. * UChar32 is a signed 32-bit integer (same as int32_t). * diff --git a/source/common/unicode/umisc.h b/source/common/unicode/umisc.h index 7b6d35f..213290b 100644 --- a/source/common/unicode/umisc.h +++ b/source/common/unicode/umisc.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ********************************************************************** * file name: umisc.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/unifilt.h b/source/common/unicode/unifilt.h index 0fdcd14..e105271 100644 --- a/source/common/unicode/unifilt.h +++ b/source/common/unicode/unifilt.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -30,7 +30,7 @@ U_NAMESPACE_BEGIN * defined range. * @stable ICU 3.0 */ -#define U_ETHER ((UChar)0xFFFF) +#define U_ETHER ((char16_t)0xFFFF) /** * diff --git a/source/common/unicode/unifunct.h b/source/common/unicode/unifunct.h index b40027c..1c50759 100644 --- a/source/common/unicode/unifunct.h +++ b/source/common/unicode/unifunct.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/unimatch.h b/source/common/unicode/unimatch.h index 605f3f5..ee4326f 100644 --- a/source/common/unicode/unimatch.h +++ b/source/common/unicode/unimatch.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. diff --git a/source/common/unicode/uniset.h b/source/common/unicode/uniset.h index fdd7fc3..4a4ce19 100644 --- a/source/common/unicode/uniset.h +++ b/source/common/unicode/uniset.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** @@ -294,7 +294,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { * indicating that toPattern() must generate a pattern * representation from the inversion list. */ - UChar *pat; + char16_t *pat; UVector* strings; // maintained in sorted order UnicodeSetStringSpan *stringSpan; @@ -891,7 +891,7 @@ public: * @stable ICU 3.8 * @see USetSpanCondition */ - int32_t span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const; + int32_t span(const char16_t *s, int32_t length, USetSpanCondition spanCondition) const; /** * Returns the end of the substring of the input string according to the USetSpanCondition. @@ -924,7 +924,7 @@ public: * @stable ICU 3.8 * @see USetSpanCondition */ - int32_t spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const; + int32_t spanBack(const char16_t *s, int32_t length, USetSpanCondition spanCondition) const; /** * Returns the start of the substring of the input string according to the USetSpanCondition. diff --git a/source/common/unicode/unistr.h b/source/common/unicode/unistr.h index 6f62244..e0ab0b9 100644 --- a/source/common/unicode/unistr.h +++ b/source/common/unicode/unistr.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -28,12 +28,13 @@ * \brief C++ API: Unicode String */ +#include #include "unicode/utypes.h" +#include "unicode/char16ptr.h" #include "unicode/rep.h" #include "unicode/std_string.h" #include "unicode/stringpiece.h" #include "unicode/bytestream.h" -#include "unicode/ucasemap.h" struct UConverter; // unicode/ucnv.h @@ -55,30 +56,34 @@ U_STABLE int32_t U_EXPORT2 u_strlen(const UChar *s); #endif -/** - * \def U_STRING_CASE_MAPPER_DEFINED - * @internal - */ -#ifndef U_STRING_CASE_MAPPER_DEFINED -#define U_STRING_CASE_MAPPER_DEFINED +U_NAMESPACE_BEGIN +#if !UCONFIG_NO_BREAK_ITERATION +class BreakIterator; // unicode/brkiter.h +#endif +class Edits; + +U_NAMESPACE_END + +// Not #ifndef U_HIDE_INTERNAL_API because UnicodeString needs the UStringCaseMapper. /** * Internal string case mapping function type. + * All error checking must be done. + * src and dest must not overlap. * @internal */ typedef int32_t U_CALLCONV -UStringCaseMapper(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - +UStringCaseMapper(int32_t caseLocale, uint32_t options, +#if !UCONFIG_NO_BREAK_ITERATION + icu::BreakIterator *iter, #endif + char16_t *dest, int32_t destCapacity, + const char16_t *src, int32_t srcLength, + icu::Edits *edits, + UErrorCode &errorCode); U_NAMESPACE_BEGIN -#if !UCONFIG_NO_BREAK_ITERATION -class BreakIterator; // unicode/brkiter.h -#endif class Locale; // unicode/locid.h class StringCharacterIterator; class UnicodeStringAppendable; // unicode/appendable.h @@ -99,10 +104,12 @@ class UnicodeStringAppendable; // unicode/appendable.h /** * Unicode String literals in C++. - * Dependent on the platform properties, different UnicodeString - * constructors should be used to create a UnicodeString object from - * a string literal. - * The macros are defined for maximum performance. + * + * Note: these macros are not recommended for new code. + * Prior to the availability of C++11 and u"unicode string literals", + * these macros were provided for portability and efficiency when + * initializing UnicodeStrings from literals. + * * They work only for strings that contain "invariant characters", i.e., * only latin letters, digits, and some punctuation. * See utypes.h for details. @@ -110,18 +117,12 @@ class UnicodeStringAppendable; // unicode/appendable.h * The string parameter must be a C string literal. * The length of the string, not including the terminating * NUL, must be specified as a constant. - * The U_STRING_DECL macro should be invoked exactly once for one - * such string variable before it is used. * @stable ICU 2.0 */ -#if defined(U_DECLARE_UTF16) -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)U_DECLARE_UTF16(cs), _length) -#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)L ## cs, _length) -#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)cs, _length) +#if !U_CHAR16_IS_TYPEDEF +# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length) #else -# define UNICODE_STRING(cs, _length) icu::UnicodeString(cs, _length, US_INV) +# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length) #endif /** @@ -142,7 +143,7 @@ class UnicodeStringAppendable; // unicode/appendable.h /** * \def UNISTR_FROM_CHAR_EXPLICIT * This can be defined to be empty or "explicit". - * If explicit, then the UnicodeString(UChar) and UnicodeString(UChar32) + * If explicit, then the UnicodeString(char16_t) and UnicodeString(UChar32) * constructors are marked as explicit, preventing their inadvertent use. * @stable ICU 49 */ @@ -159,7 +160,7 @@ class UnicodeStringAppendable; // unicode/appendable.h /** * \def UNISTR_FROM_STRING_EXPLICIT * This can be defined to be empty or "explicit". - * If explicit, then the UnicodeString(const char *) and UnicodeString(const UChar *) + * If explicit, then the UnicodeString(const char *) and UnicodeString(const char16_t *) * constructors are marked as explicit, preventing their inadvertent use. * * In particular, this helps prevent accidentally depending on ICU conversion code @@ -193,18 +194,18 @@ class UnicodeStringAppendable; // unicode/appendable.h * to 4 * sizeof(pointer) (or 3 * sizeof(pointer) for P128 data models), * to hold the fields for heap-allocated strings. * Such a minimum size also ensures that the object is easily large enough - * to hold at least 2 UChars, for one supplementary code point (U16_MAX_LENGTH). + * to hold at least 2 char16_ts, for one supplementary code point (U16_MAX_LENGTH). * * sizeof(UnicodeString) >= 48 should work for all known platforms. * * For example, on a 64-bit machine where sizeof(vtable pointer) is 8, * sizeof(UnicodeString) = 64 would leave space for * (64 - sizeof(vtable pointer) - 2) / U_SIZEOF_UCHAR = (64 - 8 - 2) / 2 = 27 - * UChars stored inside the object. + * char16_ts stored inside the object. * * The minimum object size on a 64-bit machine would be * 4 * sizeof(pointer) = 4 * 8 = 32 bytes, - * and the internal buffer would hold up to 11 UChars in that case. + * and the internal buffer would hold up to 11 char16_ts in that case. * * @see U16_MAX_LENGTH * @stable ICU 56 @@ -236,7 +237,7 @@ class UnicodeStringAppendable; // unicode/appendable.h *

    In ICU, a Unicode string consists of 16-bit Unicode code units. * A Unicode character may be stored with either one code unit * (the most common case) or with a matched pair of special code units - * ("surrogates"). The data type for code units is UChar. + * ("surrogates"). The data type for code units is char16_t. * For single-character handling, a Unicode character code point is a value * in the range 0..0x10ffff. ICU uses the UChar32 type for code points.

    * @@ -252,7 +253,7 @@ class UnicodeStringAppendable; // unicode/appendable.h * than other ICU APIs. In particular: * - If indexes are out of bounds for a UnicodeString object * (<0 or >length()) then they are "pinned" to the nearest boundary. - * - If primitive string pointer values (e.g., const UChar * or char *) + * - If primitive string pointer values (e.g., const char16_t * or char *) * for input strings are NULL, then those input string parameters are treated * as if they pointed to an empty string. * However, this is not the case for char * parameters for charset names @@ -439,7 +440,7 @@ public: * in srcChars. * @stable ICU 2.0 */ - inline int8_t compare(const UChar *srcChars, + inline int8_t compare(ConstChar16Ptr srcChars, int32_t srcLength) const; /** @@ -458,7 +459,7 @@ public: */ inline int8_t compare(int32_t start, int32_t length, - const UChar *srcChars) const; + const char16_t *srcChars) const; /** * Compare the characters bitwise in the range @@ -479,7 +480,7 @@ public: */ inline int8_t compare(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -593,7 +594,7 @@ public: * in code point order * @stable ICU 2.0 */ - inline int8_t compareCodePointOrder(const UChar *srcChars, + inline int8_t compareCodePointOrder(ConstChar16Ptr srcChars, int32_t srcLength) const; /** @@ -617,7 +618,7 @@ public: */ inline int8_t compareCodePointOrder(int32_t start, int32_t length, - const UChar *srcChars) const; + const char16_t *srcChars) const; /** * Compare two Unicode strings in code point order. @@ -642,7 +643,7 @@ public: */ inline int8_t compareCodePointOrder(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -766,7 +767,7 @@ public: * @return A negative, zero, or positive integer indicating the comparison result. * @stable ICU 2.0 */ - inline int8_t caseCompare(const UChar *srcChars, + inline int8_t caseCompare(ConstChar16Ptr srcChars, int32_t srcLength, uint32_t options) const; @@ -792,7 +793,7 @@ public: */ inline int8_t caseCompare(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, uint32_t options) const; /** @@ -819,7 +820,7 @@ public: */ inline int8_t caseCompare(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength, uint32_t options) const; @@ -884,7 +885,7 @@ public: * FALSE otherwise * @stable ICU 2.0 */ - inline UBool startsWith(const UChar *srcChars, + inline UBool startsWith(ConstChar16Ptr srcChars, int32_t srcLength) const; /** @@ -896,7 +897,7 @@ public: * @return TRUE if this ends with the characters in srcChars, FALSE otherwise * @stable ICU 2.0 */ - inline UBool startsWith(const UChar *srcChars, + inline UBool startsWith(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -931,7 +932,7 @@ public: * FALSE otherwise * @stable ICU 2.0 */ - inline UBool endsWith(const UChar *srcChars, + inline UBool endsWith(ConstChar16Ptr srcChars, int32_t srcLength) const; /** @@ -944,7 +945,7 @@ public: * FALSE otherwise * @stable ICU 2.0 */ - inline UBool endsWith(const UChar *srcChars, + inline UBool endsWith(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -1021,7 +1022,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - inline int32_t indexOf(const UChar *srcChars, + inline int32_t indexOf(const char16_t *srcChars, int32_t srcLength, int32_t start) const; @@ -1037,7 +1038,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - inline int32_t indexOf(const UChar *srcChars, + inline int32_t indexOf(ConstChar16Ptr srcChars, int32_t srcLength, int32_t start, int32_t length) const; @@ -1058,7 +1059,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - int32_t indexOf(const UChar *srcChars, + int32_t indexOf(const char16_t *srcChars, int32_t srcStart, int32_t srcLength, int32_t start, @@ -1071,7 +1072,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t indexOf(UChar c) const; + inline int32_t indexOf(char16_t c) const; /** * Locate in this the first occurrence of the code point c, @@ -1091,7 +1092,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t indexOf(UChar c, + inline int32_t indexOf(char16_t c, int32_t start) const; /** @@ -1116,7 +1117,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t indexOf(UChar c, + inline int32_t indexOf(char16_t c, int32_t start, int32_t length) const; @@ -1204,7 +1205,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - inline int32_t lastIndexOf(const UChar *srcChars, + inline int32_t lastIndexOf(const char16_t *srcChars, int32_t srcLength, int32_t start) const; @@ -1220,7 +1221,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - inline int32_t lastIndexOf(const UChar *srcChars, + inline int32_t lastIndexOf(ConstChar16Ptr srcChars, int32_t srcLength, int32_t start, int32_t length) const; @@ -1241,7 +1242,7 @@ public: * or -1 if not found. * @stable ICU 2.0 */ - int32_t lastIndexOf(const UChar *srcChars, + int32_t lastIndexOf(const char16_t *srcChars, int32_t srcStart, int32_t srcLength, int32_t start, @@ -1254,7 +1255,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t lastIndexOf(UChar c) const; + inline int32_t lastIndexOf(char16_t c) const; /** * Locate in this the last occurrence of the code point c, @@ -1274,7 +1275,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t lastIndexOf(UChar c, + inline int32_t lastIndexOf(char16_t c, int32_t start) const; /** @@ -1299,7 +1300,7 @@ public: * @return The offset into this of c, or -1 if not found. * @stable ICU 2.0 */ - inline int32_t lastIndexOf(UChar c, + inline int32_t lastIndexOf(char16_t c, int32_t start, int32_t length) const; @@ -1329,7 +1330,7 @@ public: * or 0xffff if the offset is not valid for this string * @stable ICU 2.0 */ - inline UChar charAt(int32_t offset) const; + inline char16_t charAt(int32_t offset) const; /** * Return the code unit at offset offset. @@ -1338,7 +1339,7 @@ public: * @return the code unit at offset offset * @stable ICU 2.0 */ - inline UChar operator[] (int32_t offset) const; + inline char16_t operator[] (int32_t offset) const; /** * Return the code point that contains the code unit @@ -1459,7 +1460,7 @@ public: */ inline void extract(int32_t start, int32_t length, - UChar *dst, + Char16Ptr dst, int32_t dstStart = 0) const; /** @@ -1478,13 +1479,13 @@ public: * then extract() will not copy the contents. * * @param dest Destination string buffer. - * @param destCapacity Number of UChars available at dest. + * @param destCapacity Number of char16_ts available at dest. * @param errorCode ICU error code. * @return length() * @stable ICU 2.0 */ int32_t - extract(UChar *dest, int32_t destCapacity, + extract(Char16Ptr dest, int32_t destCapacity, UErrorCode &errorCode) const; /** @@ -1514,7 +1515,7 @@ public: */ inline void extractBetween(int32_t start, int32_t limit, - UChar *dst, + char16_t *dst, int32_t dstStart = 0) const; /** @@ -1715,8 +1716,6 @@ public: */ void toUTF8(ByteSink &sink) const; -#if U_HAVE_STD_STRING - /** * Convert the UnicodeString to UTF-8 and append the result * to a standard string. @@ -1736,8 +1735,6 @@ public: return result; } -#endif - /** * Convert the UnicodeString to UTF-32. * Unpaired surrogates are replaced with U+FFFD. @@ -1759,7 +1756,7 @@ public: /** * Return the length of the UnicodeString object. - * The length is the number of UChar code units are in the UnicodeString. + * The length is the number of char16_t code units are in the UnicodeString. * If you want the number of code points, please use countChar32(). * @return the length of the UnicodeString object * @see countChar32 @@ -1768,14 +1765,14 @@ public: inline int32_t length(void) const; /** - * Count Unicode code points in the length UChar code units of the string. - * A code point may occupy either one or two UChar code units. + * Count Unicode code points in the length char16_t code units of the string. + * A code point may occupy either one or two char16_t code units. * Counting code points involves reading all code units. * * This functions is basically the inverse of moveIndex32(). * * @param start the index of the first code unit to check - * @param length the number of UChar code units to check + * @param length the number of char16_t code units to check * @return the number of code points in the specified code units * @see length * @stable ICU 2.0 @@ -1784,7 +1781,7 @@ public: countChar32(int32_t start=0, int32_t length=INT32_MAX) const; /** - * Check if the length UChar code units of the string + * Check if the length char16_t code units of the string * contain more Unicode code points than a certain number. * This is more efficient than counting all code points in this part of the string * and comparing that number with a threshold. @@ -1792,10 +1789,10 @@ public: * falls within a certain range, and * never needs to count more than 'number+1' code points. * Logically equivalent to (countChar32(start, length)>number). - * A Unicode code point may occupy either one or two UChar code units. + * A Unicode code point may occupy either one or two char16_t code units. * * @param start the index of the first code unit to check (0 for the entire string) - * @param length the number of UChar code units to check + * @param length the number of char16_t code units to check * (use INT32_MAX for the entire string; remember that start/length * values are pinned) * @param number The number of code points in the (sub)string is compared against @@ -1821,7 +1818,7 @@ public: * This is useful together with the getBuffer functions. * See there for details. * - * @return the number of UChars available in the internal buffer + * @return the number of char16_ts available in the internal buffer * @see getBuffer * @stable ICU 2.0 */ @@ -1955,7 +1952,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& operator= (UChar ch); + inline UnicodeString& operator= (char16_t ch); /** * Assignment operator. Replace the characters in this UnicodeString @@ -2015,7 +2012,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& setTo(const UChar *srcChars, + inline UnicodeString& setTo(const char16_t *srcChars, int32_t srcLength); /** @@ -2026,7 +2023,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - UnicodeString& setTo(UChar srcChar); + UnicodeString& setTo(char16_t srcChar); /** * Set the characters in the UnicodeString object to the code point @@ -2039,7 +2036,7 @@ public: UnicodeString& setTo(UChar32 srcChar); /** - * Aliasing setTo() function, analogous to the readonly-aliasing UChar* constructor. + * Aliasing setTo() function, analogous to the readonly-aliasing char16_t* constructor. * The text will be used for the UnicodeString object, but * it will not be released when the UnicodeString is destroyed. * This has copy-on-write semantics: @@ -2062,11 +2059,11 @@ public: * @stable ICU 2.0 */ UnicodeString &setTo(UBool isTerminated, - const UChar *text, + ConstChar16Ptr text, int32_t textLength); /** - * Aliasing setTo() function, analogous to the writable-aliasing UChar* constructor. + * Aliasing setTo() function, analogous to the writable-aliasing char16_t* constructor. * The text will be used for the UnicodeString object, but * it will not be released when the UnicodeString is destroyed. * This has write-through semantics: @@ -2075,16 +2072,16 @@ public: * a new buffer will be allocated and the contents copied as with regularly * constructed strings. * In an assignment to another UnicodeString, the buffer will be copied. - * The extract(UChar *dst) function detects whether the dst pointer is the same + * The extract(Char16Ptr dst) function detects whether the dst pointer is the same * as the string buffer itself and will in this case not copy the contents. * * @param buffer The characters to alias for the UnicodeString. * @param buffLength The number of Unicode characters in buffer to alias. - * @param buffCapacity The size of buffer in UChars. + * @param buffCapacity The size of buffer in char16_ts. * @return a reference to this * @stable ICU 2.0 */ - UnicodeString &setTo(UChar *buffer, + UnicodeString &setTo(char16_t *buffer, int32_t buffLength, int32_t buffCapacity); @@ -2120,7 +2117,7 @@ public: * s.truncate(0); // set to an empty string (complete truncation), or * s=UnicodeString(); // assign an empty string, or * s.setTo((UChar32)-1); // set to a pseudo code point that is out of range, or - * static const UChar nul=0; + * static const char16_t nul=0; * s.setTo(&nul, 0); // set to an empty C Unicode string * } * \endcode @@ -2138,7 +2135,7 @@ public: * @stable ICU 2.0 */ UnicodeString& setCharAt(int32_t offset, - UChar ch); + char16_t ch); /* Append operations */ @@ -2150,7 +2147,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& operator+= (UChar ch); + inline UnicodeString& operator+= (char16_t ch); /** * Append operator. Append the code point ch to the UnicodeString @@ -2210,7 +2207,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& append(const UChar *srcChars, + inline UnicodeString& append(const char16_t *srcChars, int32_t srcStart, int32_t srcLength); @@ -2223,7 +2220,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& append(const UChar *srcChars, + inline UnicodeString& append(ConstChar16Ptr srcChars, int32_t srcLength); /** @@ -2232,7 +2229,7 @@ public: * @return a reference to this * @stable ICU 2.0 */ - inline UnicodeString& append(UChar srcChar); + inline UnicodeString& append(char16_t srcChar); /** * Append the code point srcChar to the UnicodeString object. @@ -2288,7 +2285,7 @@ public: * @stable ICU 2.0 */ inline UnicodeString& insert(int32_t start, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength); @@ -2302,7 +2299,7 @@ public: * @stable ICU 2.0 */ inline UnicodeString& insert(int32_t start, - const UChar *srcChars, + ConstChar16Ptr srcChars, int32_t srcLength); /** @@ -2314,7 +2311,7 @@ public: * @stable ICU 2.0 */ inline UnicodeString& insert(int32_t start, - UChar srcChar); + char16_t srcChar); /** * Insert the code point srcChar into the UnicodeString object at @@ -2388,7 +2385,7 @@ public: */ UnicodeString& replace(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength); @@ -2406,7 +2403,7 @@ public: */ inline UnicodeString& replace(int32_t start, int32_t length, - const UChar *srcChars, + ConstChar16Ptr srcChars, int32_t srcLength); /** @@ -2422,7 +2419,7 @@ public: */ inline UnicodeString& replace(int32_t start, int32_t length, - UChar srcChar); + char16_t srcChar); /** * Replace the characters in the range @@ -2620,7 +2617,7 @@ public: * @stable ICU 2.0 */ UBool padLeading(int32_t targetLength, - UChar padChar = 0x0020); + char16_t padChar = 0x0020); /** * Pad the end of this UnicodeString with the character padChar. @@ -2634,7 +2631,7 @@ public: * @stable ICU 2.0 */ UBool padTrailing(int32_t targetLength, - UChar padChar = 0x0020); + char16_t padChar = 0x0020); /** * Truncate this UnicodeString to the targetLength. @@ -2821,7 +2818,7 @@ public: /** * Get a read/write pointer to the internal buffer. - * The buffer is guaranteed to be large enough for at least minCapacity UChars, + * The buffer is guaranteed to be large enough for at least minCapacity char16_ts, * writable, and is still owned by the UnicodeString object. * Calls to getBuffer(minCapacity) must not be nested, and * must be matched with calls to releaseBuffer(newLength). @@ -2852,17 +2849,17 @@ public: * - You must call releaseBuffer(newLength) before and in order to * return to normal UnicodeString operation. * - * @param minCapacity the minimum number of UChars that are to be available + * @param minCapacity the minimum number of char16_ts that are to be available * in the buffer, starting at the returned pointer; * default to the current string capacity if minCapacity==-1 * @return a writable pointer to the internal string buffer, - * or 0 if an error occurs (nested calls, out of memory) + * or nullptr if an error occurs (nested calls, out of memory) * * @see releaseBuffer * @see getTerminatedBuffer() * @stable ICU 2.0 */ - UChar *getBuffer(int32_t minCapacity); + char16_t *getBuffer(int32_t minCapacity); /** * Release a read/write buffer on a UnicodeString object with an @@ -2910,13 +2907,13 @@ public: * be modified. * * @return a read-only pointer to the internal string buffer, - * or 0 if the string is empty or bogus + * or nullptr if the string is empty or bogus * * @see getBuffer(int32_t minCapacity) * @see getTerminatedBuffer() * @stable ICU 2.0 */ - inline const UChar *getBuffer() const; + inline const char16_t *getBuffer() const; /** * Get a read-only pointer to the internal buffer, @@ -2951,7 +2948,7 @@ public: * @see getBuffer() * @stable ICU 2.2 */ - const UChar *getTerminatedBuffer(); + const char16_t *getTerminatedBuffer(); //======================================== // Constructors @@ -2963,8 +2960,8 @@ public: inline UnicodeString(); /** - * Construct a UnicodeString with capacity to hold capacity UChars - * @param capacity the number of UChars this UnicodeString should hold + * Construct a UnicodeString with capacity to hold capacity char16_ts + * @param capacity the number of char16_ts this UnicodeString should hold * before a resize is necessary; if count is greater than 0 and count * code points c take up more space than capacity, then capacity is adjusted * accordingly. @@ -2976,7 +2973,7 @@ public: UnicodeString(int32_t capacity, UChar32 c, int32_t count); /** - * Single UChar (code unit) constructor. + * Single char16_t (code unit) constructor. * * It is recommended to mark this constructor "explicit" by * -DUNISTR_FROM_CHAR_EXPLICIT=explicit @@ -2984,7 +2981,7 @@ public: * @param ch the character to place in the UnicodeString * @stable ICU 2.0 */ - UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar ch); + UNISTR_FROM_CHAR_EXPLICIT UnicodeString(char16_t ch); /** * Single UChar32 (code point) constructor. @@ -2998,7 +2995,7 @@ public: UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar32 ch); /** - * UChar* constructor. + * char16_t* constructor. * * It is recommended to mark this constructor "explicit" by * -DUNISTR_FROM_STRING_EXPLICIT=explicit @@ -3007,20 +3004,121 @@ public: * must be NULL (U+0000) terminated. * @stable ICU 2.0 */ - UNISTR_FROM_STRING_EXPLICIT UnicodeString(const UChar *text); + UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char16_t *text); + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if !U_CHAR16_IS_TYPEDEF + /** + * uint16_t * constructor. + * Delegates to UnicodeString(const char16_t *). + * + * It is recommended to mark this constructor "explicit" by + * -DUNISTR_FROM_STRING_EXPLICIT=explicit + * on the compiler command line or similar. + * @param text NUL-terminated UTF-16 string + * @draft ICU 59 + */ + UNISTR_FROM_STRING_EXPLICIT UnicodeString(const uint16_t *text) : + UnicodeString(ConstChar16Ptr(text)) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) + /** + * wchar_t * constructor. + * (Only defined if U_SIZEOF_WCHAR_T==2.) + * Delegates to UnicodeString(const char16_t *). + * + * It is recommended to mark this constructor "explicit" by + * -DUNISTR_FROM_STRING_EXPLICIT=explicit + * on the compiler command line or similar. + * @param text NUL-terminated UTF-16 string + * @draft ICU 59 + */ + UNISTR_FROM_STRING_EXPLICIT UnicodeString(const wchar_t *text) : + UnicodeString(ConstChar16Ptr(text)) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ + /** + * nullptr_t constructor. + * Effectively the same as the default constructor, makes an empty string object. + * + * It is recommended to mark this constructor "explicit" by + * -DUNISTR_FROM_STRING_EXPLICIT=explicit + * on the compiler command line or similar. + * @param text nullptr + * @draft ICU 59 + */ + UNISTR_FROM_STRING_EXPLICIT inline UnicodeString(const std::nullptr_t text); /** - * UChar* constructor. + * char16_t* constructor. * @param text The characters to place in the UnicodeString. * @param textLength The number of Unicode characters in text * to copy. * @stable ICU 2.0 */ - UnicodeString(const UChar *text, + UnicodeString(const char16_t *text, int32_t textLength); + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if !U_CHAR16_IS_TYPEDEF /** - * Readonly-aliasing UChar* constructor. + * uint16_t * constructor. + * Delegates to UnicodeString(const char16_t *, int32_t). + * @param text UTF-16 string + * @param length string length + * @draft ICU 59 + */ + UnicodeString(const uint16_t *text, int32_t length) : + UnicodeString(ConstChar16Ptr(text), length) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) + /** + * wchar_t * constructor. + * (Only defined if U_SIZEOF_WCHAR_T==2.) + * Delegates to UnicodeString(const char16_t *, int32_t). + * @param text NUL-terminated UTF-16 string + * @param length string length + * @draft ICU 59 + */ + UnicodeString(const wchar_t *text, int32_t length) : + UnicodeString(ConstChar16Ptr(text), length) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ + /** + * nullptr_t constructor. + * Effectively the same as the default constructor, makes an empty string object. + * @param text nullptr + * @param length ignored + * @draft ICU 59 + */ + inline UnicodeString(const std::nullptr_t text, int32_t length); + + /** + * Readonly-aliasing char16_t* constructor. * The text will be used for the UnicodeString object, but * it will not be released when the UnicodeString is destroyed. * This has copy-on-write semantics: @@ -3042,11 +3140,11 @@ public: * @stable ICU 2.0 */ UnicodeString(UBool isTerminated, - const UChar *text, + ConstChar16Ptr text, int32_t textLength); /** - * Writable-aliasing UChar* constructor. + * Writable-aliasing char16_t* constructor. * The text will be used for the UnicodeString object, but * it will not be released when the UnicodeString is destroyed. * This has write-through semantics: @@ -3055,15 +3153,64 @@ public: * a new buffer will be allocated and the contents copied as with regularly * constructed strings. * In an assignment to another UnicodeString, the buffer will be copied. - * The extract(UChar *dst) function detects whether the dst pointer is the same + * The extract(Char16Ptr dst) function detects whether the dst pointer is the same * as the string buffer itself and will in this case not copy the contents. * * @param buffer The characters to alias for the UnicodeString. * @param buffLength The number of Unicode characters in buffer to alias. - * @param buffCapacity The size of buffer in UChars. + * @param buffCapacity The size of buffer in char16_ts. * @stable ICU 2.0 */ - UnicodeString(UChar *buffer, int32_t buffLength, int32_t buffCapacity); + UnicodeString(char16_t *buffer, int32_t buffLength, int32_t buffCapacity); + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if !U_CHAR16_IS_TYPEDEF + /** + * Writable-aliasing uint16_t * constructor. + * Delegates to UnicodeString(const char16_t *, int32_t, int32_t). + * @param buffer writable buffer of/for UTF-16 text + * @param buffLength length of the current buffer contents + * @param buffCapacity buffer capacity + * @draft ICU 59 + */ + UnicodeString(uint16_t *buffer, int32_t buffLength, int32_t buffCapacity) : + UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ +#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) + /** + * Writable-aliasing wchar_t * constructor. + * (Only defined if U_SIZEOF_WCHAR_T==2.) + * Delegates to UnicodeString(const char16_t *, int32_t, int32_t). + * @param buffer writable buffer of/for UTF-16 text + * @param buffLength length of the current buffer contents + * @param buffCapacity buffer capacity + * @draft ICU 59 + */ + UnicodeString(wchar_t *buffer, int32_t buffLength, int32_t buffCapacity) : + UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} +#endif + + /* + * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, + * it should always be available regardless of U_HIDE_DRAFT_API status + */ + /** + * Writable-aliasing nullptr_t constructor. + * Effectively the same as the default constructor, makes an empty string object. + * @param buffer nullptr + * @param buffLength ignored + * @param buffCapacity ignored + * @draft ICU 59 + */ + inline UnicodeString(std::nullptr_t buffer, int32_t buffLength, int32_t buffCapacity); #if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION @@ -3380,7 +3527,7 @@ protected: * UnicodeString::charAt() to be inline again (see jitterbug 709). * @stable ICU 2.4 */ - virtual UChar getCharAt(int32_t offset) const; + virtual char16_t getCharAt(int32_t offset) const; /** * The change in Replaceable to use virtual getChar32At() allows @@ -3416,7 +3563,7 @@ private: int8_t doCompare(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -3429,7 +3576,7 @@ private: int8_t doCompareCodePointOrder(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const; @@ -3444,12 +3591,12 @@ private: int8_t doCaseCompare(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength, uint32_t options) const; - int32_t doIndexOf(UChar c, + int32_t doIndexOf(char16_t c, int32_t start, int32_t length) const; @@ -3457,7 +3604,7 @@ private: int32_t start, int32_t length) const; - int32_t doLastIndexOf(UChar c, + int32_t doLastIndexOf(char16_t c, int32_t start, int32_t length) const; @@ -3467,14 +3614,14 @@ private: void doExtract(int32_t start, int32_t length, - UChar *dst, + char16_t *dst, int32_t dstStart) const; inline void doExtract(int32_t start, int32_t length, UnicodeString& target) const; - inline UChar doCharAt(int32_t offset) const; + inline char16_t doCharAt(int32_t offset) const; UnicodeString& doReplace(int32_t start, int32_t length, @@ -3484,12 +3631,12 @@ private: UnicodeString& doReplace(int32_t start, int32_t length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength); UnicodeString& doAppend(const UnicodeString& src, int32_t srcStart, int32_t srcLength); - UnicodeString& doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLength); + UnicodeString& doAppend(const char16_t *srcChars, int32_t srcStart, int32_t srcLength); UnicodeString& doReverse(int32_t start, int32_t length); @@ -3499,8 +3646,8 @@ private: // get pointer to start of array // these do not check for kOpenGetBuffer, unlike the public getBuffer() function - inline UChar* getArrayStart(void); - inline const UChar* getArrayStart(void) const; + inline char16_t* getArrayStart(void); + inline const char16_t* getArrayStart(void) const; inline UBool hasShortLength() const; inline int32_t getShortLength() const; @@ -3517,7 +3664,7 @@ private: inline void setShortLength(int32_t len); inline void setLength(int32_t len); inline void setToEmpty(); - inline void setArray(UChar *array, int32_t len, int32_t capacity); // sets length but not flags + inline void setArray(char16_t *array, int32_t len, int32_t capacity); // sets length but not flags // allocate the array; result may be the stack buffer // sets refCount to 1 if appropriate @@ -3600,7 +3747,11 @@ private: * as in ustr_imp.h for ustrcase_map(). */ UnicodeString & - caseMap(const UCaseMap *csm, UStringCaseMapper *stringCaseMapper); + caseMap(int32_t caseLocale, uint32_t options, +#if !UCONFIG_NO_BREAK_ITERATION + BreakIterator *iter, +#endif + UStringCaseMapper *stringCaseMapper); // ref counting void addRef(void); @@ -3691,15 +3842,15 @@ private: // Each struct of the union must begin with fLengthAndFlags. struct { int16_t fLengthAndFlags; // bit fields: see constants above - UChar fBuffer[US_STACKBUF_SIZE]; // buffer for short strings + char16_t fBuffer[US_STACKBUF_SIZE]; // buffer for short strings } fStackFields; struct { int16_t fLengthAndFlags; // bit fields: see constants above int32_t fLength; // number of characters in fArray if >127; else undefined - int32_t fCapacity; // capacity of fArray (in UChars) + int32_t fCapacity; // capacity of fArray (in char16_ts) // array pointer last to minimize padding for machines with P128 data model // or pointer sizes that are not a power of 2 - UChar *fArray; // the Unicode data + char16_t *fArray; // the Unicode data } fFields; } fUnion; }; @@ -3752,13 +3903,13 @@ UnicodeString::pinIndices(int32_t& start, } } -inline UChar* +inline char16_t* UnicodeString::getArrayStart() { return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ? fUnion.fStackFields.fBuffer : fUnion.fFields.fArray; } -inline const UChar* +inline const char16_t* UnicodeString::getArrayStart() const { return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ? fUnion.fStackFields.fBuffer : fUnion.fFields.fArray; @@ -3773,6 +3924,18 @@ UnicodeString::UnicodeString() { fUnion.fStackFields.fLengthAndFlags=kShortString; } +inline UnicodeString::UnicodeString(const std::nullptr_t /*text*/) { + fUnion.fStackFields.fLengthAndFlags=kShortString; +} + +inline UnicodeString::UnicodeString(const std::nullptr_t /*text*/, int32_t /*length*/) { + fUnion.fStackFields.fLengthAndFlags=kShortString; +} + +inline UnicodeString::UnicodeString(std::nullptr_t /*buffer*/, int32_t /*buffLength*/, int32_t /*buffCapacity*/) { + fUnion.fStackFields.fLengthAndFlags=kShortString; +} + //======================================== // Read-only implementation methods //======================================== @@ -3819,10 +3982,10 @@ UnicodeString::isBufferWritable() const (!(fUnion.fFields.fLengthAndFlags&kRefCounted) || refCount()==1)); } -inline const UChar * +inline const char16_t * UnicodeString::getBuffer() const { if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) { - return 0; + return nullptr; } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) { return fUnion.fStackFields.fBuffer; } else { @@ -3890,7 +4053,7 @@ UnicodeString::compare(int32_t start, { return doCompare(start, _length, srcText, 0, srcText.length()); } inline int8_t -UnicodeString::compare(const UChar *srcChars, +UnicodeString::compare(ConstChar16Ptr srcChars, int32_t srcLength) const { return doCompare(0, length(), srcChars, 0, srcLength); } @@ -3905,13 +4068,13 @@ UnicodeString::compare(int32_t start, inline int8_t UnicodeString::compare(int32_t start, int32_t _length, - const UChar *srcChars) const + const char16_t *srcChars) const { return doCompare(start, _length, srcChars, 0, _length); } inline int8_t UnicodeString::compare(int32_t start, int32_t _length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const { return doCompare(start, _length, srcChars, srcStart, srcLength); } @@ -3951,7 +4114,7 @@ UnicodeString::compareCodePointOrder(int32_t start, { return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); } inline int8_t -UnicodeString::compareCodePointOrder(const UChar *srcChars, +UnicodeString::compareCodePointOrder(ConstChar16Ptr srcChars, int32_t srcLength) const { return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); } @@ -3966,13 +4129,13 @@ UnicodeString::compareCodePointOrder(int32_t start, inline int8_t UnicodeString::compareCodePointOrder(int32_t start, int32_t _length, - const UChar *srcChars) const + const char16_t *srcChars) const { return doCompareCodePointOrder(start, _length, srcChars, 0, _length); } inline int8_t UnicodeString::compareCodePointOrder(int32_t start, int32_t _length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const { return doCompareCodePointOrder(start, _length, srcChars, srcStart, srcLength); } @@ -4016,7 +4179,7 @@ UnicodeString::caseCompare(int32_t start, } inline int8_t -UnicodeString::caseCompare(const UChar *srcChars, +UnicodeString::caseCompare(ConstChar16Ptr srcChars, int32_t srcLength, uint32_t options) const { return doCaseCompare(0, length(), srcChars, 0, srcLength, options); @@ -4035,7 +4198,7 @@ UnicodeString::caseCompare(int32_t start, inline int8_t UnicodeString::caseCompare(int32_t start, int32_t _length, - const UChar *srcChars, + const char16_t *srcChars, uint32_t options) const { return doCaseCompare(start, _length, srcChars, 0, _length, options); } @@ -4043,7 +4206,7 @@ UnicodeString::caseCompare(int32_t start, inline int8_t UnicodeString::caseCompare(int32_t start, int32_t _length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength, uint32_t options) const { @@ -4094,7 +4257,7 @@ UnicodeString::indexOf(const UnicodeString& text, { return indexOf(text, 0, text.length(), start, _length); } inline int32_t -UnicodeString::indexOf(const UChar *srcChars, +UnicodeString::indexOf(const char16_t *srcChars, int32_t srcLength, int32_t start) const { pinIndex(start); @@ -4102,14 +4265,14 @@ UnicodeString::indexOf(const UChar *srcChars, } inline int32_t -UnicodeString::indexOf(const UChar *srcChars, +UnicodeString::indexOf(ConstChar16Ptr srcChars, int32_t srcLength, int32_t start, int32_t _length) const { return indexOf(srcChars, 0, srcLength, start, _length); } inline int32_t -UnicodeString::indexOf(UChar c, +UnicodeString::indexOf(char16_t c, int32_t start, int32_t _length) const { return doIndexOf(c, start, _length); } @@ -4121,7 +4284,7 @@ UnicodeString::indexOf(UChar32 c, { return doIndexOf(c, start, _length); } inline int32_t -UnicodeString::indexOf(UChar c) const +UnicodeString::indexOf(char16_t c) const { return doIndexOf(c, 0, length()); } inline int32_t @@ -4129,7 +4292,7 @@ UnicodeString::indexOf(UChar32 c) const { return indexOf(c, 0, length()); } inline int32_t -UnicodeString::indexOf(UChar c, +UnicodeString::indexOf(char16_t c, int32_t start) const { pinIndex(start); return doIndexOf(c, start, length() - start); @@ -4143,14 +4306,14 @@ UnicodeString::indexOf(UChar32 c, } inline int32_t -UnicodeString::lastIndexOf(const UChar *srcChars, +UnicodeString::lastIndexOf(ConstChar16Ptr srcChars, int32_t srcLength, int32_t start, int32_t _length) const { return lastIndexOf(srcChars, 0, srcLength, start, _length); } inline int32_t -UnicodeString::lastIndexOf(const UChar *srcChars, +UnicodeString::lastIndexOf(const char16_t *srcChars, int32_t srcLength, int32_t start) const { pinIndex(start); @@ -4191,7 +4354,7 @@ UnicodeString::lastIndexOf(const UnicodeString& text) const { return lastIndexOf(text, 0, text.length(), 0, length()); } inline int32_t -UnicodeString::lastIndexOf(UChar c, +UnicodeString::lastIndexOf(char16_t c, int32_t start, int32_t _length) const { return doLastIndexOf(c, start, _length); } @@ -4204,7 +4367,7 @@ UnicodeString::lastIndexOf(UChar32 c, } inline int32_t -UnicodeString::lastIndexOf(UChar c) const +UnicodeString::lastIndexOf(char16_t c) const { return doLastIndexOf(c, 0, length()); } inline int32_t @@ -4213,7 +4376,7 @@ UnicodeString::lastIndexOf(UChar32 c) const { } inline int32_t -UnicodeString::lastIndexOf(UChar c, +UnicodeString::lastIndexOf(char16_t c, int32_t start) const { pinIndex(start); return doLastIndexOf(c, start, length() - start); @@ -4237,17 +4400,17 @@ UnicodeString::startsWith(const UnicodeString& srcText, { return doCompare(0, srcLength, srcText, srcStart, srcLength) == 0; } inline UBool -UnicodeString::startsWith(const UChar *srcChars, int32_t srcLength) const { +UnicodeString::startsWith(ConstChar16Ptr srcChars, int32_t srcLength) const { if(srcLength < 0) { - srcLength = u_strlen(srcChars); + srcLength = u_strlen(toUCharPtr(srcChars)); } return doCompare(0, srcLength, srcChars, 0, srcLength) == 0; } inline UBool -UnicodeString::startsWith(const UChar *srcChars, int32_t srcStart, int32_t srcLength) const { +UnicodeString::startsWith(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const { if(srcLength < 0) { - srcLength = u_strlen(srcChars); + srcLength = u_strlen(toUCharPtr(srcChars)); } return doCompare(0, srcLength, srcChars, srcStart, srcLength) == 0; } @@ -4267,21 +4430,21 @@ UnicodeString::endsWith(const UnicodeString& srcText, } inline UBool -UnicodeString::endsWith(const UChar *srcChars, +UnicodeString::endsWith(ConstChar16Ptr srcChars, int32_t srcLength) const { if(srcLength < 0) { - srcLength = u_strlen(srcChars); + srcLength = u_strlen(toUCharPtr(srcChars)); } return doCompare(length() - srcLength, srcLength, srcChars, 0, srcLength) == 0; } inline UBool -UnicodeString::endsWith(const UChar *srcChars, +UnicodeString::endsWith(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const { if(srcLength < 0) { - srcLength = u_strlen(srcChars + srcStart); + srcLength = u_strlen(toUCharPtr(srcChars + srcStart)); } return doCompare(length() - srcLength, srcLength, srcChars, srcStart, srcLength) == 0; @@ -4307,14 +4470,14 @@ UnicodeString::replace(int32_t start, inline UnicodeString& UnicodeString::replace(int32_t start, int32_t _length, - const UChar *srcChars, + ConstChar16Ptr srcChars, int32_t srcLength) { return doReplace(start, _length, srcChars, 0, srcLength); } inline UnicodeString& UnicodeString::replace(int32_t start, int32_t _length, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) { return doReplace(start, _length, srcChars, srcStart, srcLength); } @@ -4322,7 +4485,7 @@ UnicodeString::replace(int32_t start, inline UnicodeString& UnicodeString::replace(int32_t start, int32_t _length, - UChar srcChar) + char16_t srcChar) { return doReplace(start, _length, &srcChar, 0, 1); } inline UnicodeString& @@ -4365,7 +4528,7 @@ UnicodeString::doExtract(int32_t start, inline void UnicodeString::extract(int32_t start, int32_t _length, - UChar *target, + Char16Ptr target, int32_t targetStart) const { doExtract(start, _length, target, targetStart); } @@ -4393,7 +4556,7 @@ UnicodeString::extract(int32_t start, inline void UnicodeString::extractBetween(int32_t start, int32_t limit, - UChar *dst, + char16_t *dst, int32_t dstStart) const { pinIndex(start); pinIndex(limit); @@ -4405,7 +4568,7 @@ UnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const { return tempSubString(start, limit - start); } -inline UChar +inline char16_t UnicodeString::doCharAt(int32_t offset) const { if((uint32_t)offset < (uint32_t)length()) { @@ -4415,11 +4578,11 @@ UnicodeString::doCharAt(int32_t offset) const } } -inline UChar +inline char16_t UnicodeString::charAt(int32_t offset) const { return doCharAt(offset); } -inline UChar +inline char16_t UnicodeString::operator[] (int32_t offset) const { return doCharAt(offset); } @@ -4460,14 +4623,14 @@ UnicodeString::setToEmpty() { } inline void -UnicodeString::setArray(UChar *array, int32_t len, int32_t capacity) { +UnicodeString::setArray(char16_t *array, int32_t len, int32_t capacity) { setLength(len); fUnion.fFields.fArray = array; fUnion.fFields.fCapacity = capacity; } inline UnicodeString& -UnicodeString::operator= (UChar ch) +UnicodeString::operator= (char16_t ch) { return doReplace(0, length(), &ch, 0, 1); } inline UnicodeString& @@ -4499,7 +4662,7 @@ UnicodeString::setTo(const UnicodeString& srcText) } inline UnicodeString& -UnicodeString::setTo(const UChar *srcChars, +UnicodeString::setTo(const char16_t *srcChars, int32_t srcLength) { unBogus(); @@ -4507,7 +4670,7 @@ UnicodeString::setTo(const UChar *srcChars, } inline UnicodeString& -UnicodeString::setTo(UChar srcChar) +UnicodeString::setTo(char16_t srcChar) { unBogus(); return doReplace(0, length(), &srcChar, 0, 1); @@ -4531,22 +4694,22 @@ UnicodeString::append(const UnicodeString& srcText) { return doAppend(srcText, 0, srcText.length()); } inline UnicodeString& -UnicodeString::append(const UChar *srcChars, +UnicodeString::append(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) { return doAppend(srcChars, srcStart, srcLength); } inline UnicodeString& -UnicodeString::append(const UChar *srcChars, +UnicodeString::append(ConstChar16Ptr srcChars, int32_t srcLength) { return doAppend(srcChars, 0, srcLength); } inline UnicodeString& -UnicodeString::append(UChar srcChar) +UnicodeString::append(char16_t srcChar) { return doAppend(&srcChar, 0, 1); } inline UnicodeString& -UnicodeString::operator+= (UChar ch) +UnicodeString::operator+= (char16_t ch) { return doAppend(&ch, 0, 1); } inline UnicodeString& @@ -4572,20 +4735,20 @@ UnicodeString::insert(int32_t start, inline UnicodeString& UnicodeString::insert(int32_t start, - const UChar *srcChars, + const char16_t *srcChars, int32_t srcStart, int32_t srcLength) { return doReplace(start, 0, srcChars, srcStart, srcLength); } inline UnicodeString& UnicodeString::insert(int32_t start, - const UChar *srcChars, + ConstChar16Ptr srcChars, int32_t srcLength) { return doReplace(start, 0, srcChars, 0, srcLength); } inline UnicodeString& UnicodeString::insert(int32_t start, - UChar srcChar) + char16_t srcChar) { return doReplace(start, 0, &srcChar, 0, 1); } inline UnicodeString& diff --git a/source/common/unicode/unorm.h b/source/common/unicode/unorm.h index f527c26..1b5af16 100644 --- a/source/common/unicode/unorm.h +++ b/source/common/unicode/unorm.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* diff --git a/source/common/unicode/unorm2.h b/source/common/unicode/unorm2.h index 56e99b2..c6d3494 100644 --- a/source/common/unicode/unorm2.h +++ b/source/common/unicode/unorm2.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unorm2.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/uobject.h b/source/common/unicode/uobject.h index ec231ee..9782f27 100644 --- a/source/common/unicode/uobject.h +++ b/source/common/unicode/uobject.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: uobject.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/urename.h b/source/common/unicode/urename.h index b220a54..21c839a 100644 --- a/source/common/unicode/urename.h +++ b/source/common/unicode/urename.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -7,7 +7,7 @@ ******************************************************************************* * * file name: urename.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -100,12 +100,16 @@ #define _UTF16BEData U_ICU_ENTRY_POINT_RENAME(_UTF16BEData) #define _UTF16Data U_ICU_ENTRY_POINT_RENAME(_UTF16Data) #define _UTF16LEData U_ICU_ENTRY_POINT_RENAME(_UTF16LEData) +#define _UTF16v2Data U_ICU_ENTRY_POINT_RENAME(_UTF16v2Data) #define _UTF32BEData U_ICU_ENTRY_POINT_RENAME(_UTF32BEData) #define _UTF32Data U_ICU_ENTRY_POINT_RENAME(_UTF32Data) #define _UTF32LEData U_ICU_ENTRY_POINT_RENAME(_UTF32LEData) #define _UTF7Data U_ICU_ENTRY_POINT_RENAME(_UTF7Data) #define _UTF8Data U_ICU_ENTRY_POINT_RENAME(_UTF8Data) +#define allowedHourFormatsCleanup U_ICU_ENTRY_POINT_RENAME(allowedHourFormatsCleanup) #define cmemory_cleanup U_ICU_ENTRY_POINT_RENAME(cmemory_cleanup) +#define dayPeriodRulesCleanup U_ICU_ENTRY_POINT_RENAME(dayPeriodRulesCleanup) +#define deleteAllowedHourFormats U_ICU_ENTRY_POINT_RENAME(deleteAllowedHourFormats) #define gTimeZoneFilesInitOnce U_ICU_ENTRY_POINT_RENAME(gTimeZoneFilesInitOnce) #define izrule_clone U_ICU_ENTRY_POINT_RENAME(izrule_clone) #define izrule_close U_ICU_ENTRY_POINT_RENAME(izrule_close) @@ -121,16 +125,6 @@ #define izrule_getStaticClassID U_ICU_ENTRY_POINT_RENAME(izrule_getStaticClassID) #define izrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(izrule_isEquivalentTo) #define izrule_open U_ICU_ENTRY_POINT_RENAME(izrule_open) -#define le_close U_ICU_ENTRY_POINT_RENAME(le_close) -#define le_create U_ICU_ENTRY_POINT_RENAME(le_create) -#define le_getCharIndices U_ICU_ENTRY_POINT_RENAME(le_getCharIndices) -#define le_getCharIndicesWithBase U_ICU_ENTRY_POINT_RENAME(le_getCharIndicesWithBase) -#define le_getGlyphCount U_ICU_ENTRY_POINT_RENAME(le_getGlyphCount) -#define le_getGlyphPosition U_ICU_ENTRY_POINT_RENAME(le_getGlyphPosition) -#define le_getGlyphPositions U_ICU_ENTRY_POINT_RENAME(le_getGlyphPositions) -#define le_getGlyphs U_ICU_ENTRY_POINT_RENAME(le_getGlyphs) -#define le_layoutChars U_ICU_ENTRY_POINT_RENAME(le_layoutChars) -#define le_reset U_ICU_ENTRY_POINT_RENAME(le_reset) #define locale_getKeywords U_ICU_ENTRY_POINT_RENAME(locale_getKeywords) #define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart) #define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default) @@ -486,6 +480,7 @@ #define ubrk_first U_ICU_ENTRY_POINT_RENAME(ubrk_first) #define ubrk_following U_ICU_ENTRY_POINT_RENAME(ubrk_following) #define ubrk_getAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_getAvailable) +#define ubrk_getBinaryRules U_ICU_ENTRY_POINT_RENAME(ubrk_getBinaryRules) #define ubrk_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ubrk_getLocaleByType) #define ubrk_getRuleStatus U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatus) #define ubrk_getRuleStatusVec U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatusVec) @@ -493,6 +488,7 @@ #define ubrk_last U_ICU_ENTRY_POINT_RENAME(ubrk_last) #define ubrk_next U_ICU_ENTRY_POINT_RENAME(ubrk_next) #define ubrk_open U_ICU_ENTRY_POINT_RENAME(ubrk_open) +#define ubrk_openBinaryRules U_ICU_ENTRY_POINT_RENAME(ubrk_openBinaryRules) #define ubrk_openRules U_ICU_ENTRY_POINT_RENAME(ubrk_openRules) #define ubrk_preceding U_ICU_ENTRY_POINT_RENAME(ubrk_preceding) #define ubrk_previous U_ICU_ENTRY_POINT_RENAME(ubrk_previous) @@ -554,7 +550,6 @@ #define ucase_addStringCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addStringCaseClosure) #define ucase_fold U_ICU_ENTRY_POINT_RENAME(ucase_fold) #define ucase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ucase_getCaseLocale) -#define ucase_getSingleton U_ICU_ENTRY_POINT_RENAME(ucase_getSingleton) #define ucase_getType U_ICU_ENTRY_POINT_RENAME(ucase_getType) #define ucase_getTypeOrIgnorable U_ICU_ENTRY_POINT_RENAME(ucase_getTypeOrIgnorable) #define ucase_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(ucase_hasBinaryProperty) @@ -1150,6 +1145,7 @@ #define unum_formatDecimal U_ICU_ENTRY_POINT_RENAME(unum_formatDecimal) #define unum_formatDouble U_ICU_ENTRY_POINT_RENAME(unum_formatDouble) #define unum_formatDoubleCurrency U_ICU_ENTRY_POINT_RENAME(unum_formatDoubleCurrency) +#define unum_formatDoubleForFields U_ICU_ENTRY_POINT_RENAME(unum_formatDoubleForFields) #define unum_formatInt64 U_ICU_ENTRY_POINT_RENAME(unum_formatInt64) #define unum_formatUFormattable U_ICU_ENTRY_POINT_RENAME(unum_formatUFormattable) #define unum_getAttribute U_ICU_ENTRY_POINT_RENAME(unum_getAttribute) @@ -1181,9 +1177,11 @@ #define unumsys_openAvailableNames U_ICU_ENTRY_POINT_RENAME(unumsys_openAvailableNames) #define unumsys_openByName U_ICU_ENTRY_POINT_RENAME(unumsys_openByName) #define uplrules_close U_ICU_ENTRY_POINT_RENAME(uplrules_close) +#define uplrules_getKeywords U_ICU_ENTRY_POINT_RENAME(uplrules_getKeywords) #define uplrules_open U_ICU_ENTRY_POINT_RENAME(uplrules_open) #define uplrules_openForType U_ICU_ENTRY_POINT_RENAME(uplrules_openForType) #define uplrules_select U_ICU_ENTRY_POINT_RENAME(uplrules_select) +#define uplrules_selectWithFormat U_ICU_ENTRY_POINT_RENAME(uplrules_selectWithFormat) #define uplug_closeLibrary U_ICU_ENTRY_POINT_RENAME(uplug_closeLibrary) #define uplug_findLibrary U_ICU_ENTRY_POINT_RENAME(uplug_findLibrary) #define uplug_getConfiguration U_ICU_ENTRY_POINT_RENAME(uplug_getConfiguration) @@ -1220,6 +1218,7 @@ #define uprv_compareInvEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdic) #define uprv_compareInvEbcdicAsAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdicAsAscii) #define uprv_convertToLCID U_ICU_ENTRY_POINT_RENAME(uprv_convertToLCID) +#define uprv_convertToLCIDPlatform U_ICU_ENTRY_POINT_RENAME(uprv_convertToLCIDPlatform) #define uprv_convertToPosix U_ICU_ENTRY_POINT_RENAME(uprv_convertToPosix) #define uprv_copyAscii U_ICU_ENTRY_POINT_RENAME(uprv_copyAscii) #define uprv_copyEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_copyEbcdic) @@ -1654,12 +1653,13 @@ #define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN) #define ustr_hashICharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashICharsN) #define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN) +#define ustrcase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ustrcase_getCaseLocale) #define ustrcase_internalFold U_ICU_ENTRY_POINT_RENAME(ustrcase_internalFold) #define ustrcase_internalToLower U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToLower) #define ustrcase_internalToTitle U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToTitle) #define ustrcase_internalToUpper U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToUpper) #define ustrcase_map U_ICU_ENTRY_POINT_RENAME(ustrcase_map) -#define ustrcase_setTempCaseMapLocale U_ICU_ENTRY_POINT_RENAME(ustrcase_setTempCaseMapLocale) +#define ustrcase_mapWithOverlap U_ICU_ENTRY_POINT_RENAME(ustrcase_mapWithOverlap) #define utext_char32At U_ICU_ENTRY_POINT_RENAME(utext_char32At) #define utext_clone U_ICU_ENTRY_POINT_RENAME(utext_clone) #define utext_close U_ICU_ENTRY_POINT_RENAME(utext_close) @@ -1704,7 +1704,6 @@ #define utrace_functionName U_ICU_ENTRY_POINT_RENAME(utrace_functionName) #define utrace_getFunctions U_ICU_ENTRY_POINT_RENAME(utrace_getFunctions) #define utrace_getLevel U_ICU_ENTRY_POINT_RENAME(utrace_getLevel) -#define utrace_level U_ICU_ENTRY_POINT_RENAME(utrace_level) #define utrace_setFunctions U_ICU_ENTRY_POINT_RENAME(utrace_setFunctions) #define utrace_setLevel U_ICU_ENTRY_POINT_RENAME(utrace_setLevel) #define utrace_vformat U_ICU_ENTRY_POINT_RENAME(utrace_vformat) diff --git a/source/common/unicode/urep.h b/source/common/unicode/urep.h index b559b24..932202d 100644 --- a/source/common/unicode/urep.h +++ b/source/common/unicode/urep.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unicode/ures.h b/source/common/unicode/ures.h index 620d926..918b9f2 100644 --- a/source/common/unicode/ures.h +++ b/source/common/unicode/ures.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/uscript.h b/source/common/unicode/uscript.h index a20cd15..1420578 100644 --- a/source/common/unicode/uscript.h +++ b/source/common/unicode/uscript.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/uset.h b/source/common/unicode/uset.h index 8baabbe..59f4650 100644 --- a/source/common/unicode/uset.h +++ b/source/common/unicode/uset.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uset.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/usetiter.h b/source/common/unicode/usetiter.h index 26591d0..d0d9918 100644 --- a/source/common/unicode/usetiter.h +++ b/source/common/unicode/usetiter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ushape.h b/source/common/unicode/ushape.h index 0ea3231..c64fe22 100644 --- a/source/common/unicode/ushape.h +++ b/source/common/unicode/ushape.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ushape.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/usprep.h b/source/common/unicode/usprep.h index 5bd837e..da0848d 100644 --- a/source/common/unicode/usprep.h +++ b/source/common/unicode/usprep.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: usprep.h - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/ustring.h b/source/common/unicode/ustring.h index e62fef5..31b0556 100644 --- a/source/common/unicode/ustring.h +++ b/source/common/unicode/ustring.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unicode/ustringtrie.h b/source/common/unicode/ustringtrie.h index 50d31ba..fd85648 100644 --- a/source/common/unicode/ustringtrie.h +++ b/source/common/unicode/ustringtrie.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: udicttrie.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utext.h b/source/common/unicode/utext.h index fd11995..80ce8af 100644 --- a/source/common/unicode/utext.h +++ b/source/common/unicode/utext.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utext.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utf.h b/source/common/unicode/utf.h index ffb094f..dff4286 100644 --- a/source/common/unicode/utf.h +++ b/source/common/unicode/utf.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utf.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utf16.h b/source/common/unicode/utf16.h index 6e7d1da..9cc73f7 100644 --- a/source/common/unicode/utf16.h +++ b/source/common/unicode/utf16.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utf16.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utf32.h b/source/common/unicode/utf32.h index f93727c..8822c4d 100644 --- a/source/common/unicode/utf32.h +++ b/source/common/unicode/utf32.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utf32.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utf8.h b/source/common/unicode/utf8.h index 55f7b9d..18e7e94 100644 --- a/source/common/unicode/utf8.h +++ b/source/common/unicode/utf8.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utf8.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -41,25 +41,7 @@ /* internal definitions ----------------------------------------------------- */ -/** - * \var utf8_countTrailBytes - * Internal array with numbers of trail bytes for any given byte used in - * lead byte position. - * - * This is internal since it is not meant to be called directly by external clients; - * however it is called by public macros in this file and thus must remain stable, - * and should not be hidden when other internal functions are hidden (otherwise - * public macros would fail to compile). - * @internal - */ -#ifdef U_UTF8_IMPL -U_EXPORT const uint8_t -#elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) -U_CFUNC const uint8_t -#else -U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ -#endif -utf8_countTrailBytes[256]; + /** * Counts the trail bytes for a UTF-8 lead byte. diff --git a/source/common/unicode/utf_old.h b/source/common/unicode/utf_old.h index c7d5145..250cb8c 100644 --- a/source/common/unicode/utf_old.h +++ b/source/common/unicode/utf_old.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utf_old.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -17,12 +17,12 @@ */ /** - * \file + * \file * \brief C API: Deprecated macros for Unicode string handling */ /** - * + * * The macros in utf_old.h are all deprecated and their use discouraged. * Some of the design principles behind the set of UTF macros * have changed or proved impractical. @@ -268,6 +268,25 @@ typedef int32_t UTextOffset; /* Formerly utf8.h ---------------------------------------------------------- */ /** +* \var utf8_countTrailBytes +* Internal array with numbers of trail bytes for any given byte used in +* lead byte position. +* +* This is internal since it is not meant to be called directly by external clients; +* however it is called by public macros in this file and thus must remain stable, +* and should not be hidden when other internal functions are hidden (otherwise +* public macros would fail to compile). +* @internal +*/ +#ifdef U_UTF8_IMPL +// No forward declaration if compiling utf_impl.cpp, which defines utf8_countTrailBytes. +#elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) +U_CFUNC const uint8_t utf8_countTrailBytes[]; +#else +U_CFUNC U_IMPORT const uint8_t utf8_countTrailBytes[]; /* U_IMPORT2? */ /*U_IMPORT*/ +#endif + +/** * Count the trail bytes for a UTF-8 lead byte. * @deprecated ICU 2.4. Renamed to U8_COUNT_TRAIL_BYTES, see utf_old.h. */ diff --git a/source/common/unicode/utrace.h b/source/common/unicode/utrace.h index c55f8c1..6b4c4df 100644 --- a/source/common/unicode/utrace.h +++ b/source/common/unicode/utrace.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utrace.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unicode/utypes.h b/source/common/unicode/utypes.h index 3d19c50..d60450b 100644 --- a/source/common/unicode/utypes.h +++ b/source/common/unicode/utypes.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -178,12 +178,12 @@ /** * \def NULL - * Define NULL if necessary, to 0 for C++ and to ((void *)0) for C. + * Define NULL if necessary, to nullptr for C++ and to ((void *)0) for C. * @stable ICU 2.0 */ #ifndef NULL #ifdef __cplusplus -#define NULL 0 +#define NULL nullptr #else #define NULL ((void *)0) #endif diff --git a/source/common/unicode/uvernum.h b/source/common/unicode/uvernum.h index 5590f9a..cae59ad 100644 --- a/source/common/unicode/uvernum.h +++ b/source/common/unicode/uvernum.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -7,7 +7,7 @@ ******************************************************************************* * * file name: uvernum.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -58,13 +58,13 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 58 +#define U_ICU_VERSION_MAJOR_NUM 59 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_MINOR_NUM 2 +#define U_ICU_VERSION_MINOR_NUM 1 /** The current ICU patchlevel version as an integer. * This value will change in the subsequent releases of ICU @@ -84,7 +84,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _58 +#define U_ICU_VERSION_SUFFIX _59 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -119,19 +119,24 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "58.2" +#define U_ICU_VERSION "59.1" /** The current ICU library major/minor version as a string without dots, for library name suffixes. * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "58" +#if U_PLATFORM_HAS_WINUWP_API == 0 +#define U_ICU_VERSION_SHORT "59" +#else +// U_DISABLE_RENAMING does not impact dat file name +#define U_ICU_VERSION_SHORT +#endif /* U_PLATFORM_HAS_WINUWP_API == 0 */ #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "58.2" +#define U_ICU_DATA_VERSION "59.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/source/common/unicode/uversion.h b/source/common/unicode/uversion.h index 3f8ad36..e24068d 100644 --- a/source/common/unicode/uversion.h +++ b/source/common/unicode/uversion.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -7,7 +7,7 @@ ******************************************************************************* * * file name: uversion.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unifiedcache.cpp b/source/common/unifiedcache.cpp index 6e7156f..fd2d107 100644 --- a/source/common/unifiedcache.cpp +++ b/source/common/unifiedcache.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unifiedcache.h b/source/common/unifiedcache.h index 72b8a79..97da7ff 100644 --- a/source/common/unifiedcache.h +++ b/source/common/unifiedcache.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unifilt.cpp b/source/common/unifilt.cpp index 2d8ce35..4ab0d9b 100644 --- a/source/common/unifilt.cpp +++ b/source/common/unifilt.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/unifunct.cpp b/source/common/unifunct.cpp index 8fdc638..f3995b2 100644 --- a/source/common/unifunct.cpp +++ b/source/common/unifunct.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uniset.cpp b/source/common/uniset.cpp index 7866719..fe5a157 100644 --- a/source/common/uniset.cpp +++ b/source/common/uniset.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uniset_closure.cpp b/source/common/uniset_closure.cpp index b6bc64f..44bb4bc 100644 --- a/source/common/uniset_closure.cpp +++ b/source/common/uniset_closure.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uniset_closure.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -184,7 +184,6 @@ UnicodeSet& UnicodeSet::closeOver(int32_t attribute) { return *this; } if (attribute & (USET_CASE_INSENSITIVE | USET_ADD_CASE_MAPPINGS)) { - const UCaseProps *csp = ucase_getSingleton(); { UnicodeSet foldSet(*this); UnicodeString str; @@ -207,7 +206,6 @@ UnicodeSet& UnicodeSet::closeOver(int32_t attribute) { int32_t n = getRangeCount(); UChar32 result; const UChar *full; - int32_t locCache = 0; for (int32_t i=0; isize(); ++j) { str = *(const UnicodeString *) strings->elementAt(j); str.foldCase(); - if(!ucase_addStringCaseClosure(csp, str.getBuffer(), str.length(), &sa)) { + if(!ucase_addStringCaseClosure(str.getBuffer(), str.length(), &sa)) { foldSet.add(str); // does not map to code points: add the folded string itself } } diff --git a/source/common/uniset_props.cpp b/source/common/uniset_props.cpp index ed31946..0a13740 100644 --- a/source/common/uniset_props.cpp +++ b/source/common/uniset_props.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uniset_props.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -195,7 +195,7 @@ void U_CALLCONV UnicodeSet_initInclusion(int32_t src, UErrorCode &status) { if(U_SUCCESS(status)) { impl->addPropertyStarts(&sa, status); } - ucase_addPropertyStarts(ucase_getSingleton(), &sa, &status); + ucase_addPropertyStarts(&sa, &status); break; } case UPROPS_SRC_NFC: { @@ -228,7 +228,7 @@ void U_CALLCONV UnicodeSet_initInclusion(int32_t src, UErrorCode &status) { } #endif case UPROPS_SRC_CASE: - ucase_addPropertyStarts(ucase_getSingleton(), &sa, &status); + ucase_addPropertyStarts(&sa, &status); break; case UPROPS_SRC_BIDI: ubidi_addPropertyStarts(ubidi_getSingleton(), &sa, &status); diff --git a/source/common/unisetspan.cpp b/source/common/unisetspan.cpp index 2e77dfd..83bc794 100644 --- a/source/common/unisetspan.cpp +++ b/source/common/unisetspan.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: unisetspan.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unisetspan.h b/source/common/unisetspan.h index 36cdd98..f1e78ff 100644 --- a/source/common/unisetspan.h +++ b/source/common/unisetspan.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: unisetspan.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/unistr.cpp b/source/common/unistr.cpp index bdd58ec..1bfb71a 100644 --- a/source/common/unistr.cpp +++ b/source/common/unistr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -218,9 +218,10 @@ UnicodeString::UnicodeString(const UChar *text, } UnicodeString::UnicodeString(UBool isTerminated, - const UChar *text, + ConstChar16Ptr textPtr, int32_t textLength) { fUnion.fFields.fLengthAndFlags = kReadonlyAlias; + const UChar *text = textPtr; if(text == NULL) { // treat as an empty string, do not alias setToEmpty(); @@ -234,7 +235,8 @@ UnicodeString::UnicodeString(UBool isTerminated, // text is terminated, or else it would have failed the above test textLength = u_strlen(text); } - setArray((UChar *)text, textLength, isTerminated ? textLength + 1 : textLength); + setArray(const_cast(text), textLength, + isTerminated ? textLength + 1 : textLength); } } @@ -873,7 +875,7 @@ UnicodeString::doExtract(int32_t start, } int32_t -UnicodeString::extract(UChar *dest, int32_t destCapacity, +UnicodeString::extract(Char16Ptr dest, int32_t destCapacity, UErrorCode &errorCode) const { int32_t len = length(); if(U_SUCCESS(errorCode)) { @@ -1215,10 +1217,10 @@ UnicodeString::unBogus() { } } -const UChar * +const char16_t * UnicodeString::getTerminatedBuffer() { if(!isWritable()) { - return 0; + return nullptr; } UChar *array = getArrayStart(); int32_t len = length(); @@ -1249,14 +1251,14 @@ UnicodeString::getTerminatedBuffer() { array[len] = 0; return array; } else { - return NULL; + return nullptr; } } // setTo() analogous to the readonly-aliasing constructor with the same signature UnicodeString & UnicodeString::setTo(UBool isTerminated, - const UChar *text, + ConstChar16Ptr textPtr, int32_t textLength) { if(fUnion.fFields.fLengthAndFlags & kOpenGetBuffer) { @@ -1264,6 +1266,7 @@ UnicodeString::setTo(UBool isTerminated, return *this; } + const UChar *text = textPtr; if(text == NULL) { // treat as an empty string, do not alias releaseArray(); @@ -1713,14 +1716,14 @@ UnicodeString::doHashCode() const // External Buffer //======================================== -UChar * +char16_t * UnicodeString::getBuffer(int32_t minCapacity) { if(minCapacity>=-1 && cloneArrayIfNeeded(minCapacity)) { fUnion.fFields.fLengthAndFlags|=kOpenGetBuffer; setZeroLength(); return getArrayStart(); } else { - return 0; + return nullptr; } } diff --git a/source/common/unistr_case.cpp b/source/common/unistr_case.cpp index 1715b6e..1c62ce5 100644 --- a/source/common/unistr_case.cpp +++ b/source/common/unistr_case.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unistr_case.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * @@ -19,14 +19,17 @@ */ #include "unicode/utypes.h" +#include "unicode/casemap.h" +#include "unicode/edits.h" #include "unicode/putil.h" #include "cstring.h" #include "cmemory.h" #include "unicode/ustring.h" #include "unicode/unistr.h" #include "unicode/uchar.h" +#include "uassert.h" +#include "ucasemap_imp.h" #include "uelement.h" -#include "ustr_imp.h" U_NAMESPACE_BEGIN @@ -87,56 +90,104 @@ UnicodeString::doCaseCompare(int32_t start, //======================================== UnicodeString & -UnicodeString::caseMap(const UCaseMap *csm, +UnicodeString::caseMap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM UStringCaseMapper *stringCaseMapper) { if(isEmpty() || !isWritable()) { // nothing to do return *this; } - // We need to allocate a new buffer for the internal string case mapping function. - // This is very similar to how doReplace() keeps the old array pointer - // and deletes the old array itself after it is done. - // In addition, we are forcing cloneArrayIfNeeded() to always allocate a new array. - UChar oldStackBuffer[US_STACKBUF_SIZE]; + UChar oldBuffer[2 * US_STACKBUF_SIZE]; UChar *oldArray; - int32_t oldLength; - - if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) { - // copy the stack buffer contents because it will be overwritten - oldArray = oldStackBuffer; - oldLength = getShortLength(); - u_memcpy(oldStackBuffer, fUnion.fStackFields.fBuffer, oldLength); + int32_t oldLength = length(); + int32_t newLength; + UBool writable = isBufferWritable(); + UErrorCode errorCode = U_ZERO_ERROR; + + // Try to avoid heap-allocating a new character array for this string. + if (writable ? oldLength <= UPRV_LENGTHOF(oldBuffer) : oldLength < US_STACKBUF_SIZE) { + // Short string: Copy the contents into a temporary buffer and + // case-map back into the current array, or into the stack buffer. + UChar *buffer = getArrayStart(); + int32_t capacity; + oldArray = oldBuffer; + u_memcpy(oldBuffer, buffer, oldLength); + if (writable) { + capacity = getCapacity(); + } else { + // Switch from the read-only alias or shared heap buffer to the stack buffer. + if (!cloneArrayIfNeeded(US_STACKBUF_SIZE, US_STACKBUF_SIZE, /* doCopyArray= */ FALSE)) { + return *this; + } + U_ASSERT(fUnion.fFields.fLengthAndFlags & kUsingStackBuffer); + buffer = fUnion.fStackFields.fBuffer; + capacity = US_STACKBUF_SIZE; + } + newLength = stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + buffer, capacity, + oldArray, oldLength, NULL, errorCode); + if (U_SUCCESS(errorCode)) { + setLength(newLength); + return *this; + } else if (errorCode == U_BUFFER_OVERFLOW_ERROR) { + // common overflow handling below + } else { + setToBogus(); + return *this; + } } else { + // Longer string or read-only buffer: + // Collect only changes and then apply them to this string. + // Case mapping often changes only small parts of a string, + // and often does not change its length. oldArray = getArrayStart(); - oldLength = length(); + Edits edits; + UChar replacementChars[200]; + stringCaseMapper(caseLocale, options | UCASEMAP_OMIT_UNCHANGED_TEXT, UCASEMAP_BREAK_ITERATOR + replacementChars, UPRV_LENGTHOF(replacementChars), + oldArray, oldLength, &edits, errorCode); + if (U_SUCCESS(errorCode)) { + // Grow the buffer at most once, not for multiple doReplace() calls. + newLength = oldLength + edits.lengthDelta(); + if (newLength > oldLength && !cloneArrayIfNeeded(newLength, newLength)) { + return *this; + } + for (Edits::Iterator ei = edits.getCoarseChangesIterator(); ei.next(errorCode);) { + doReplace(ei.destinationIndex(), ei.oldLength(), + replacementChars, ei.replacementIndex(), ei.newLength()); + } + if (U_FAILURE(errorCode)) { + setToBogus(); + } + return *this; + } else if (errorCode == U_BUFFER_OVERFLOW_ERROR) { + // common overflow handling below + newLength = oldLength + edits.lengthDelta(); + } else { + setToBogus(); + return *this; + } } - int32_t capacity; - if(oldLength <= US_STACKBUF_SIZE) { - capacity = US_STACKBUF_SIZE; - } else { - capacity = oldLength + 20; - } + // Handle buffer overflow, newLength is known. + // We need to allocate a new buffer for the internal string case mapping function. + // This is very similar to how doReplace() keeps the old array pointer + // and deletes the old array itself after it is done. + // In addition, we are forcing cloneArrayIfNeeded() to always allocate a new array. int32_t *bufferToDelete = 0; - if(!cloneArrayIfNeeded(capacity, capacity, FALSE, &bufferToDelete, TRUE)) { + if (!cloneArrayIfNeeded(newLength, newLength, FALSE, &bufferToDelete, TRUE)) { return *this; } - - // Case-map, and if the result is too long, then reallocate and repeat. - UErrorCode errorCode; - int32_t newLength; - do { - errorCode = U_ZERO_ERROR; - newLength = stringCaseMapper(csm, getArrayStart(), getCapacity(), - oldArray, oldLength, &errorCode); - setLength(newLength); - } while(errorCode==U_BUFFER_OVERFLOW_ERROR && cloneArrayIfNeeded(newLength, newLength, FALSE)); - + errorCode = U_ZERO_ERROR; + newLength = stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + getArrayStart(), getCapacity(), + oldArray, oldLength, NULL, errorCode); if (bufferToDelete) { uprv_free(bufferToDelete); } - if(U_FAILURE(errorCode)) { + if (U_SUCCESS(errorCode)) { + setLength(newLength); + } else { setToBogus(); } return *this; @@ -144,10 +195,7 @@ UnicodeString::caseMap(const UCaseMap *csm, UnicodeString & UnicodeString::foldCase(uint32_t options) { - UCaseMap csm=UCASEMAP_INITIALIZER; - csm.csp=ucase_getSingleton(); - csm.options=options; - return caseMap(&csm, ustrcase_internalFold); + return caseMap(UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL ustrcase_internalFold); } U_NAMESPACE_END diff --git a/source/common/unistr_case_locale.cpp b/source/common/unistr_case_locale.cpp index a01be5c..f0f3048 100644 --- a/source/common/unistr_case_locale.cpp +++ b/source/common/unistr_case_locale.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: unistr_case_locale.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -19,9 +19,9 @@ #include "unicode/utypes.h" #include "unicode/locid.h" +#include "unicode/ucasemap.h" #include "unicode/unistr.h" -#include "cmemory.h" -#include "ustr_imp.h" +#include "ucasemap_imp.h" U_NAMESPACE_BEGIN @@ -29,44 +29,28 @@ U_NAMESPACE_BEGIN // Write implementation //======================================== -/* - * Set parameters on an empty UCaseMap, for UCaseMap-less API functions. - * Do this fast because it is called with every function call. - */ -static inline void -setTempCaseMap(UCaseMap *csm, const char *locale) { - if(csm->csp==NULL) { - csm->csp=ucase_getSingleton(); - } - if(locale!=NULL && locale[0]==0) { - csm->locale[0]=0; - } else { - ustrcase_setTempCaseMapLocale(csm, locale); - } -} - UnicodeString & UnicodeString::toLower() { - return toLower(Locale::getDefault()); + return caseMap(ustrcase_getCaseLocale(NULL), 0, + UCASEMAP_BREAK_ITERATOR_NULL ustrcase_internalToLower); } UnicodeString & UnicodeString::toLower(const Locale &locale) { - UCaseMap csm=UCASEMAP_INITIALIZER; - setTempCaseMap(&csm, locale.getName()); - return caseMap(&csm, ustrcase_internalToLower); + return caseMap(ustrcase_getCaseLocale(locale.getBaseName()), 0, + UCASEMAP_BREAK_ITERATOR_NULL ustrcase_internalToLower); } UnicodeString & UnicodeString::toUpper() { - return toUpper(Locale::getDefault()); + return caseMap(ustrcase_getCaseLocale(NULL), 0, + UCASEMAP_BREAK_ITERATOR_NULL ustrcase_internalToUpper); } UnicodeString & UnicodeString::toUpper(const Locale &locale) { - UCaseMap csm=UCASEMAP_INITIALIZER; - setTempCaseMap(&csm, locale.getName()); - return caseMap(&csm, ustrcase_internalToUpper); + return caseMap(ustrcase_getCaseLocale(locale.getBaseName()), 0, + UCASEMAP_BREAK_ITERATOR_NULL ustrcase_internalToUpper); } U_NAMESPACE_END diff --git a/source/common/unistr_cnv.cpp b/source/common/unistr_cnv.cpp index a9b44ee..64d3c16 100644 --- a/source/common/unistr_cnv.cpp +++ b/source/common/unistr_cnv.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unistr_cnv.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * diff --git a/source/common/unistr_props.cpp b/source/common/unistr_props.cpp index f099779..4006475 100644 --- a/source/common/unistr_props.cpp +++ b/source/common/unistr_props.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unistr_props.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * diff --git a/source/common/unistr_titlecase_brkiter.cpp b/source/common/unistr_titlecase_brkiter.cpp index 3d6737c..3156fdf 100644 --- a/source/common/unistr_titlecase_brkiter.cpp +++ b/source/common/unistr_titlecase_brkiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: unistr_titlecase_brkiter.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:2 * @@ -22,36 +22,10 @@ #if !UCONFIG_NO_BREAK_ITERATION #include "unicode/brkiter.h" -#include "unicode/ubrk.h" +#include "unicode/locid.h" +#include "unicode/ucasemap.h" #include "unicode/unistr.h" -#include "unicode/ustring.h" -#include "cmemory.h" -#include "ustr_imp.h" - -static int32_t U_CALLCONV -unistr_case_internalToTitle(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - ubrk_setText(csm->iter, src, srcLength, pErrorCode); - return ustrcase_internalToTitle(csm, dest, destCapacity, src, srcLength, pErrorCode); -} - -/* - * Set parameters on an empty UCaseMap, for UCaseMap-less API functions. - * Do this fast because it is called with every function call. - */ -static inline void -setTempCaseMap(UCaseMap *csm, const char *locale) { - if(csm->csp==NULL) { - csm->csp=ucase_getSingleton(); - } - if(locale!=NULL && locale[0]==0) { - csm->locale[0]=0; - } else { - ustrcase_setTempCaseMapLocale(csm, locale); - } -} +#include "ucasemap_imp.h" U_NAMESPACE_BEGIN @@ -67,9 +41,6 @@ UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale) { UnicodeString & UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options) { - UCaseMap csm=UCASEMAP_INITIALIZER; - csm.options=options; - setTempCaseMap(&csm, locale.getName()); BreakIterator *bi=titleIter; if(bi==NULL) { UErrorCode errorCode=U_ZERO_ERROR; @@ -79,8 +50,12 @@ UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t return *this; } } - csm.iter=reinterpret_cast(bi); - caseMap(&csm, unistr_case_internalToTitle); + // Because the "this" string is both the source and the destination, + // make a copy of the original source for use by the break iterator. + // See tickets #13127 and #13128 + UnicodeString copyOfInput(*this); + bi->setText(copyOfInput); + caseMap(ustrcase_getCaseLocale(locale.getBaseName()), options, bi, ustrcase_internalToTitle); if(titleIter==NULL) { delete bi; } diff --git a/source/common/unistrappender.h b/source/common/unistrappender.h index 330f3a5..75fcb9e 100644 --- a/source/common/unistrappender.h +++ b/source/common/unistrappender.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unorm.cpp b/source/common/unorm.cpp index a9df6d2..2d9f460 100644 --- a/source/common/unorm.cpp +++ b/source/common/unorm.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/unormcmp.cpp b/source/common/unormcmp.cpp index b40a10a..689b0b5 100644 --- a/source/common/unormcmp.cpp +++ b/source/common/unormcmp.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unormcmp.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -145,7 +145,6 @@ unorm_cmpEquivFold(const UChar *s1, int32_t length1, uint32_t options, UErrorCode *pErrorCode) { const Normalizer2Impl *nfcImpl; - const UCaseProps *csp; /* current-level start/limit - s1/s2 as current */ const UChar *start1, *start2, *limit1, *limit2; @@ -183,11 +182,6 @@ unorm_cmpEquivFold(const UChar *s1, int32_t length1, } else { nfcImpl=NULL; } - if((options&U_COMPARE_IGNORE_CASE)!=0) { - csp=ucase_getSingleton(); - } else { - csp=NULL; - } if(U_FAILURE(*pErrorCode)) { return 0; } @@ -319,7 +313,7 @@ unorm_cmpEquivFold(const UChar *s1, int32_t length1, */ if( level1==0 && (options&U_COMPARE_IGNORE_CASE) && - (length=ucase_toFullFolding(csp, (UChar32)cp1, &p, options))>=0 + (length=ucase_toFullFolding((UChar32)cp1, &p, options))>=0 ) { /* cp1 case-folds to the code point "length" or to p[length] */ if(U_IS_SURROGATE(c1)) { @@ -364,7 +358,7 @@ unorm_cmpEquivFold(const UChar *s1, int32_t length1, } if( level2==0 && (options&U_COMPARE_IGNORE_CASE) && - (length=ucase_toFullFolding(csp, (UChar32)cp2, &p, options))>=0 + (length=ucase_toFullFolding((UChar32)cp2, &p, options))>=0 ) { /* cp2 case-folds to the code point "length" or to p[length] */ if(U_IS_SURROGATE(c2)) { diff --git a/source/common/unormimp.h b/source/common/unormimp.h index cd1d9a8..88c7975 100644 --- a/source/common/unormimp.h +++ b/source/common/unormimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: unormimp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uobject.cpp b/source/common/uobject.cpp index 37406e4..1133dd9 100644 --- a/source/common/uobject.cpp +++ b/source/common/uobject.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: uobject.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uposixdefs.h b/source/common/uposixdefs.h index 495deea..45ca123 100644 --- a/source/common/uposixdefs.h +++ b/source/common/uposixdefs.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: uposixdefs.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -54,22 +54,18 @@ * * z/OS needs this definition for timeval and to get usleep. */ -#if !defined(_XOPEN_SOURCE_EXTENDED) +#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__) # define _XOPEN_SOURCE_EXTENDED 1 #endif -/* - * There is an issue with turning on _XOPEN_SOURCE_EXTENDED on certain platforms. - * A compatibility issue exists between turning on _XOPEN_SOURCE_EXTENDED and using - * standard C++ string class. As a result, standard C++ string class needs to be - * turned off for the follwing platforms: - * -AIX/VACPP - * -Solaris/GCC +/** + * Solaris says: + * "...it is invalid to compile an XPG6 or a POSIX.1-2001 application with anything other + * than a c99 or later compiler." + * Apparently C++11 is not "or later". Work around this. */ -#if (U_PLATFORM == U_PF_AIX && !defined(__GNUC__)) || (U_PLATFORM == U_PF_SOLARIS && defined(__GNUC__)) -# if _XOPEN_SOURCE_EXTENDED && !defined(U_HAVE_STD_STRING) -# define U_HAVE_STD_STRING 0 -# endif +#if defined(__cplusplus) && (defined(sun) || defined(__sun)) && !defined (_STDC_C99) +# define _STDC_C99 #endif #endif /* __UPOSIXDEFS_H__ */ diff --git a/source/common/uprops.cpp b/source/common/uprops.cpp index 46ceb66..fc91c89 100644 --- a/source/common/uprops.cpp +++ b/source/common/uprops.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uprops.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -128,9 +128,8 @@ static UBool changesWhenCasefolded(const BinaryProperty &/*prop*/, UChar32 c, UP } if(c>=0) { /* single code point */ - const UCaseProps *csp=ucase_getSingleton(); const UChar *resultString; - return (UBool)(ucase_toFullFolding(csp, c, &resultString, U_FOLD_CASE_DEFAULT)>=0); + return (UBool)(ucase_toFullFolding(c, &resultString, U_FOLD_CASE_DEFAULT)>=0); } else { /* guess some large but stack-friendly capacity */ UChar dest[2*UCASE_MAX_STRING_LENGTH]; @@ -576,14 +575,13 @@ u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *p // case folding and NFKC.) // For the derivation, see Unicode's DerivedNormalizationProps.txt. const Normalizer2 *nfkc=Normalizer2::getNFKCInstance(*pErrorCode); - const UCaseProps *csp=ucase_getSingleton(); if(U_FAILURE(*pErrorCode)) { return 0; } // first: b = NFKC(Fold(a)) UnicodeString folded1String; const UChar *folded1; - int32_t folded1Length=ucase_toFullFolding(csp, c, &folded1, U_FOLD_CASE_DEFAULT); + int32_t folded1Length=ucase_toFullFolding(c, &folded1, U_FOLD_CASE_DEFAULT); if(folded1Length<0) { const Normalizer2Impl *nfkcImpl=Normalizer2Factory::getImpl(nfkc); if(nfkcImpl->getCompQuickCheck(nfkcImpl->getNorm16(c))!=UNORM_NO) { diff --git a/source/common/uprops.h b/source/common/uprops.h index 63c5880..f5d69fe 100644 --- a/source/common/uprops.h +++ b/source/common/uprops.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uprops.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ures_cnv.c b/source/common/ures_cnv.c deleted file mode 100644 index 58c6cd0..0000000 --- a/source/common/ures_cnv.c +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 1997-2006, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ures_cnv.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2004aug25 -* created by: Markus W. Scherer -* -* Character conversion functions moved here from uresbund.c -*/ - -#include "unicode/utypes.h" -#include "unicode/putil.h" -#include "unicode/ustring.h" -#include "unicode/ucnv.h" -#include "unicode/ures.h" -#include "uinvchar.h" -#include "ustr_cnv.h" - -U_CAPI UResourceBundle * U_EXPORT2 -ures_openU(const UChar *myPath, - const char *localeID, - UErrorCode *status) -{ - char pathBuffer[1024]; - int32_t length; - char *path = pathBuffer; - - if(status==NULL || U_FAILURE(*status)) { - return NULL; - } - if(myPath==NULL) { - path = NULL; - } - else { - length=u_strlen(myPath); - if(length>=sizeof(pathBuffer)) { - *status=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } else if(uprv_isInvariantUString(myPath, length)) { - /* - * the invariant converter is sufficient for package and tree names - * and is more efficient - */ - u_UCharsToChars(myPath, path, length+1); /* length+1 to include the NUL */ - } else { -#if !UCONFIG_NO_CONVERSION - /* use the default converter to support variant-character paths */ - UConverter *cnv=u_getDefaultConverter(status); - length=ucnv_fromUChars(cnv, path, (int32_t)sizeof(pathBuffer), myPath, length, status); - u_releaseDefaultConverter(cnv); - if(U_FAILURE(*status)) { - return NULL; - } - if(length>=sizeof(pathBuffer)) { - /* not NUL-terminated - path too long */ - *status=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } -#else - /* the default converter is not available */ - *status=U_UNSUPPORTED_ERROR; - return NULL; -#endif - } - } - - return ures_open(path, localeID, status); -} diff --git a/source/common/uresbund.cpp b/source/common/uresbund.cpp index a32bfd1..5a1dd0a 100644 --- a/source/common/uresbund.cpp +++ b/source/common/uresbund.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uresdata.cpp b/source/common/uresdata.cpp index 44654dc..8bcb9ab 100644 --- a/source/common/uresdata.cpp +++ b/source/common/uresdata.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * and others. All Rights Reserved. ******************************************************************************* * file name: uresdata.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -758,7 +758,9 @@ res_getTableItemByIndex(const ResourceData *pResData, Resource table, int32_t indexR, const char **key) { uint32_t offset=RES_GET_OFFSET(table); int32_t length; - U_ASSERT(indexR>=0); /* to ensure the index is not negative */ + if (indexR < 0) { + return RES_BOGUS; + } switch(RES_GET_TYPE(table)) { case URES_TABLE: { if (offset != 0) { /* empty if offset==0 */ @@ -836,7 +838,9 @@ UBool icu::ResourceTable::getKeyAndValue(int32_t i, U_CAPI Resource U_EXPORT2 res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexR) { uint32_t offset=RES_GET_OFFSET(array); - U_ASSERT(indexR>=0); /* to ensure the index is not negative */ + if (indexR < 0) { + return RES_BOGUS; + } switch(RES_GET_TYPE(array)) { case URES_ARRAY: { if (offset!=0) { /* empty if offset==0 */ @@ -923,14 +927,14 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch if(t2 == RES_BOGUS) { /* if we fail to get the resource by key, maybe we got an index */ indexR = uprv_strtol(pathP, &closeIndex, 10); - if(*closeIndex == 0) { + if(indexR >= 0 && *closeIndex == 0) { /* if we indeed have an index, try to get the item by index */ t2 = res_getTableItemByIndex(pResData, t1, indexR, key); - } + } // else t2 is already RES_BOGUS } } else if(URES_IS_ARRAY(type)) { indexR = uprv_strtol(pathP, &closeIndex, 10); - if(*closeIndex == 0) { + if(indexR >= 0 && *closeIndex == 0) { t2 = res_getArrayItem(pResData, t1, indexR); } else { t2 = RES_BOGUS; /* have an array, but don't have a valid index */ diff --git a/source/common/uresdata.h b/source/common/uresdata.h index ae7d9a8..8d845e3 100644 --- a/source/common/uresdata.h +++ b/source/common/uresdata.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: uresdata.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uresimp.h b/source/common/uresimp.h index 5645ee9..e7fa3e1 100644 --- a/source/common/uresimp.h +++ b/source/common/uresimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ureslocs.h b/source/common/ureslocs.h index 85dd8fb..f7c3344 100644 --- a/source/common/ureslocs.h +++ b/source/common/ureslocs.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/usc_impl.c b/source/common/usc_impl.c deleted file mode 100644 index 1fff0c4..0000000 --- a/source/common/usc_impl.c +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File USC_IMPL.C -* -* Modification History: -* -* Date Name Description -* 07/08/2002 Eric Mader Creation. -****************************************************************************** -*/ - -#include "unicode/uscript.h" -#include "usc_impl.h" -#include "cmemory.h" - -#define PAREN_STACK_DEPTH 32 - -#define MOD(sp) ((sp) % PAREN_STACK_DEPTH) -#define LIMIT_INC(sp) (((sp) < PAREN_STACK_DEPTH)? (sp) + 1 : PAREN_STACK_DEPTH) -#define INC(sp,count) (MOD((sp) + (count))) -#define INC1(sp) (INC(sp, 1)) -#define DEC(sp,count) (MOD((sp) + PAREN_STACK_DEPTH - (count))) -#define DEC1(sp) (DEC(sp, 1)) -#define STACK_IS_EMPTY(scriptRun) ((scriptRun)->pushCount <= 0) -#define STACK_IS_NOT_EMPTY(scriptRun) (! STACK_IS_EMPTY(scriptRun)) -#define TOP(scriptRun) ((scriptRun)->parenStack[(scriptRun)->parenSP]) -#define SYNC_FIXUP(scriptRun) ((scriptRun)->fixupCount = 0) - -struct ParenStackEntry -{ - int32_t pairIndex; - UScriptCode scriptCode; -}; - -struct UScriptRun -{ - int32_t textLength; - const UChar *textArray; - - int32_t scriptStart; - int32_t scriptLimit; - UScriptCode scriptCode; - - struct ParenStackEntry parenStack[PAREN_STACK_DEPTH]; - int32_t parenSP; - int32_t pushCount; - int32_t fixupCount; -}; - -static int8_t highBit(int32_t value); - -static const UChar32 pairedChars[] = { - 0x0028, 0x0029, /* ascii paired punctuation */ - 0x003c, 0x003e, - 0x005b, 0x005d, - 0x007b, 0x007d, - 0x00ab, 0x00bb, /* guillemets */ - 0x2018, 0x2019, /* general punctuation */ - 0x201c, 0x201d, - 0x2039, 0x203a, - 0x3008, 0x3009, /* chinese paired punctuation */ - 0x300a, 0x300b, - 0x300c, 0x300d, - 0x300e, 0x300f, - 0x3010, 0x3011, - 0x3014, 0x3015, - 0x3016, 0x3017, - 0x3018, 0x3019, - 0x301a, 0x301b -}; - -static void push(UScriptRun *scriptRun, int32_t pairIndex, UScriptCode scriptCode) -{ - scriptRun->pushCount = LIMIT_INC(scriptRun->pushCount); - scriptRun->fixupCount = LIMIT_INC(scriptRun->fixupCount); - - scriptRun->parenSP = INC1(scriptRun->parenSP); - scriptRun->parenStack[scriptRun->parenSP].pairIndex = pairIndex; - scriptRun->parenStack[scriptRun->parenSP].scriptCode = scriptCode; -} - -static void pop(UScriptRun *scriptRun) -{ - if (STACK_IS_EMPTY(scriptRun)) { - return; - } - - if (scriptRun->fixupCount > 0) { - scriptRun->fixupCount -= 1; - } - - scriptRun->pushCount -= 1; - scriptRun->parenSP = DEC1(scriptRun->parenSP); - - /* If the stack is now empty, reset the stack - pointers to their initial values. - */ - if (STACK_IS_EMPTY(scriptRun)) { - scriptRun->parenSP = -1; - } -} - -static void fixup(UScriptRun *scriptRun, UScriptCode scriptCode) -{ - int32_t fixupSP = DEC(scriptRun->parenSP, scriptRun->fixupCount); - - while (scriptRun->fixupCount-- > 0) { - fixupSP = INC1(fixupSP); - scriptRun->parenStack[fixupSP].scriptCode = scriptCode; - } -} - -static int8_t -highBit(int32_t value) -{ - int8_t bit = 0; - - if (value <= 0) { - return -32; - } - - if (value >= 1 << 16) { - value >>= 16; - bit += 16; - } - - if (value >= 1 << 8) { - value >>= 8; - bit += 8; - } - - if (value >= 1 << 4) { - value >>= 4; - bit += 4; - } - - if (value >= 1 << 2) { - value >>= 2; - bit += 2; - } - - if (value >= 1 << 1) { - //value >>= 1; - bit += 1; - } - - return bit; -} - -static int32_t -getPairIndex(UChar32 ch) -{ - int32_t pairedCharCount = UPRV_LENGTHOF(pairedChars); - int32_t pairedCharPower = 1 << highBit(pairedCharCount); - int32_t pairedCharExtra = pairedCharCount - pairedCharPower; - - int32_t probe = pairedCharPower; - int32_t pairIndex = 0; - - if (ch >= pairedChars[pairedCharExtra]) { - pairIndex = pairedCharExtra; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (ch >= pairedChars[pairIndex + probe]) { - pairIndex += probe; - } - } - - if (pairedChars[pairIndex] != ch) { - pairIndex = -1; - } - - return pairIndex; -} - -static UBool -sameScript(UScriptCode scriptOne, UScriptCode scriptTwo) -{ - return scriptOne <= USCRIPT_INHERITED || scriptTwo <= USCRIPT_INHERITED || scriptOne == scriptTwo; -} - -U_CAPI UScriptRun * U_EXPORT2 -uscript_openRun(const UChar *src, int32_t length, UErrorCode *pErrorCode) -{ - UScriptRun *result = NULL; - - if (pErrorCode == NULL || U_FAILURE(*pErrorCode)) { - return NULL; - } - - result = uprv_malloc(sizeof (UScriptRun)); - - if (result == NULL) { - *pErrorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - - uscript_setRunText(result, src, length, pErrorCode); - - /* Release the UScriptRun if uscript_setRunText() returns an error */ - if (U_FAILURE(*pErrorCode)) { - uprv_free(result); - result = NULL; - } - - return result; -} - -U_CAPI void U_EXPORT2 -uscript_closeRun(UScriptRun *scriptRun) -{ - if (scriptRun != NULL) { - uprv_free(scriptRun); - } -} - -U_CAPI void U_EXPORT2 -uscript_resetRun(UScriptRun *scriptRun) -{ - if (scriptRun != NULL) { - scriptRun->scriptStart = 0; - scriptRun->scriptLimit = 0; - scriptRun->scriptCode = USCRIPT_INVALID_CODE; - scriptRun->parenSP = -1; - scriptRun->pushCount = 0; - scriptRun->fixupCount = 0; - } -} - -U_CAPI void U_EXPORT2 -uscript_setRunText(UScriptRun *scriptRun, const UChar *src, int32_t length, UErrorCode *pErrorCode) -{ - if (pErrorCode == NULL || U_FAILURE(*pErrorCode)) { - return; - } - - if (scriptRun == NULL || length < 0 || ((src == NULL) != (length == 0))) { - *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - scriptRun->textArray = src; - scriptRun->textLength = length; - - uscript_resetRun(scriptRun); -} - -U_CAPI UBool U_EXPORT2 -uscript_nextRun(UScriptRun *scriptRun, int32_t *pRunStart, int32_t *pRunLimit, UScriptCode *pRunScript) -{ - UErrorCode error = U_ZERO_ERROR; - - /* if we've fallen off the end of the text, we're done */ - if (scriptRun == NULL || scriptRun->scriptLimit >= scriptRun->textLength) { - return FALSE; - } - - SYNC_FIXUP(scriptRun); - scriptRun->scriptCode = USCRIPT_COMMON; - - for (scriptRun->scriptStart = scriptRun->scriptLimit; scriptRun->scriptLimit < scriptRun->textLength; scriptRun->scriptLimit += 1) { - UChar high = scriptRun->textArray[scriptRun->scriptLimit]; - UChar32 ch = high; - UScriptCode sc; - int32_t pairIndex; - - /* - * if the character is a high surrogate and it's not the last one - * in the text, see if it's followed by a low surrogate - */ - if (high >= 0xD800 && high <= 0xDBFF && scriptRun->scriptLimit < scriptRun->textLength - 1) { - UChar low = scriptRun->textArray[scriptRun->scriptLimit + 1]; - - /* - * if it is followed by a low surrogate, - * consume it and form the full character - */ - if (low >= 0xDC00 && low <= 0xDFFF) { - ch = (high - 0xD800) * 0x0400 + low - 0xDC00 + 0x10000; - scriptRun->scriptLimit += 1; - } - } - - sc = uscript_getScript(ch, &error); - pairIndex = getPairIndex(ch); - - /* - * Paired character handling: - * - * if it's an open character, push it onto the stack. - * if it's a close character, find the matching open on the - * stack, and use that script code. Any non-matching open - * characters above it on the stack will be poped. - */ - if (pairIndex >= 0) { - if ((pairIndex & 1) == 0) { - push(scriptRun, pairIndex, scriptRun->scriptCode); - } else { - int32_t pi = pairIndex & ~1; - - while (STACK_IS_NOT_EMPTY(scriptRun) && TOP(scriptRun).pairIndex != pi) { - pop(scriptRun); - } - - if (STACK_IS_NOT_EMPTY(scriptRun)) { - sc = TOP(scriptRun).scriptCode; - } - } - } - - if (sameScript(scriptRun->scriptCode, sc)) { - if (scriptRun->scriptCode <= USCRIPT_INHERITED && sc > USCRIPT_INHERITED) { - scriptRun->scriptCode = sc; - - fixup(scriptRun, scriptRun->scriptCode); - } - - /* - * if this character is a close paired character, - * pop the matching open character from the stack - */ - if (pairIndex >= 0 && (pairIndex & 1) != 0) { - pop(scriptRun); - } - } else { - /* - * if the run broke on a surrogate pair, - * end it before the high surrogate - */ - if (ch >= 0x10000) { - scriptRun->scriptLimit -= 1; - } - - break; - } - } - - - if (pRunStart != NULL) { - *pRunStart = scriptRun->scriptStart; - } - - if (pRunLimit != NULL) { - *pRunLimit = scriptRun->scriptLimit; - } - - if (pRunScript != NULL) { - *pRunScript = scriptRun->scriptCode; - } - - return TRUE; -} diff --git a/source/common/usc_impl.h b/source/common/usc_impl.h index 7c9c5e0..4489964 100644 --- a/source/common/usc_impl.h +++ b/source/common/usc_impl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uscript.c b/source/common/uscript.c deleted file mode 100644 index 336e185..0000000 --- a/source/common/uscript.c +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1997-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File USCRIPT.C -* -* Modification History: -* -* Date Name Description -* 07/06/2001 Ram Creation. -****************************************************************************** -*/ - -#include "unicode/uchar.h" -#include "unicode/uscript.h" -#include "unicode/uloc.h" -#include "cmemory.h" -#include "cstring.h" - -static const UScriptCode JAPANESE[3] = { USCRIPT_KATAKANA, USCRIPT_HIRAGANA, USCRIPT_HAN }; -static const UScriptCode KOREAN[2] = { USCRIPT_HANGUL, USCRIPT_HAN }; -static const UScriptCode HAN_BOPO[2] = { USCRIPT_HAN, USCRIPT_BOPOMOFO }; - -static int32_t -setCodes(const UScriptCode *src, int32_t length, - UScriptCode *dest, int32_t capacity, UErrorCode *err) { - int32_t i; - if(U_FAILURE(*err)) { return 0; } - if(length > capacity) { - *err = U_BUFFER_OVERFLOW_ERROR; - return length; - } - for(i = 0; i < length; ++i) { - dest[i] = src[i]; - } - return length; -} - -static int32_t -setOneCode(UScriptCode script, UScriptCode *scripts, int32_t capacity, UErrorCode *err) { - if(U_FAILURE(*err)) { return 0; } - if(1 > capacity) { - *err = U_BUFFER_OVERFLOW_ERROR; - return 1; - } - scripts[0] = script; - return 1; -} - -static int32_t -getCodesFromLocale(const char *locale, - UScriptCode *scripts, int32_t capacity, UErrorCode *err) { - UErrorCode internalErrorCode = U_ZERO_ERROR; - char lang[8]; - char script[8]; - int32_t scriptLength; - if(U_FAILURE(*err)) { return 0; } - // Multi-script languages, equivalent to the LocaleScript data - // that we used to load from locale resource bundles. - /*length = */ uloc_getLanguage(locale, lang, UPRV_LENGTHOF(lang), &internalErrorCode); - if(U_FAILURE(internalErrorCode) || internalErrorCode == U_STRING_NOT_TERMINATED_WARNING) { - return 0; - } - if(0 == uprv_strcmp(lang, "ja")) { - return setCodes(JAPANESE, UPRV_LENGTHOF(JAPANESE), scripts, capacity, err); - } - if(0 == uprv_strcmp(lang, "ko")) { - return setCodes(KOREAN, UPRV_LENGTHOF(KOREAN), scripts, capacity, err); - } - scriptLength = uloc_getScript(locale, script, UPRV_LENGTHOF(script), &internalErrorCode); - if(U_FAILURE(internalErrorCode) || internalErrorCode == U_STRING_NOT_TERMINATED_WARNING) { - return 0; - } - if(0 == uprv_strcmp(lang, "zh") && 0 == uprv_strcmp(script, "Hant")) { - return setCodes(HAN_BOPO, UPRV_LENGTHOF(HAN_BOPO), scripts, capacity, err); - } - // Explicit script code. - if(scriptLength != 0) { - UScriptCode scriptCode = (UScriptCode)u_getPropertyValueEnum(UCHAR_SCRIPT, script); - if(scriptCode != USCRIPT_INVALID_CODE) { - if(scriptCode == USCRIPT_SIMPLIFIED_HAN || scriptCode == USCRIPT_TRADITIONAL_HAN) { - scriptCode = USCRIPT_HAN; - } - return setOneCode(scriptCode, scripts, capacity, err); - } - } - return 0; -} - -/* TODO: this is a bad API and should be deprecated, ticket #11141 */ -U_CAPI int32_t U_EXPORT2 -uscript_getCode(const char* nameOrAbbrOrLocale, - UScriptCode* fillIn, - int32_t capacity, - UErrorCode* err){ - UBool triedCode; - char likely[ULOC_FULLNAME_CAPACITY]; - UErrorCode internalErrorCode; - int32_t length; - - if(U_FAILURE(*err)) { - return 0; - } - if(nameOrAbbrOrLocale==NULL || - (fillIn == NULL ? capacity != 0 : capacity < 0)) { - *err = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - triedCode = FALSE; - if(uprv_strchr(nameOrAbbrOrLocale, '-')==NULL && uprv_strchr(nameOrAbbrOrLocale, '_')==NULL ){ - /* try long and abbreviated script names first */ - UScriptCode code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); - if(code!=USCRIPT_INVALID_CODE) { - return setOneCode(code, fillIn, capacity, err); - } - triedCode = TRUE; - } - internalErrorCode = U_ZERO_ERROR; - length = getCodesFromLocale(nameOrAbbrOrLocale, fillIn, capacity, err); - if(U_FAILURE(*err) || length != 0) { - return length; - } - (void)uloc_addLikelySubtags(nameOrAbbrOrLocale, - likely, UPRV_LENGTHOF(likely), &internalErrorCode); - if(U_SUCCESS(internalErrorCode) && internalErrorCode != U_STRING_NOT_TERMINATED_WARNING) { - length = getCodesFromLocale(likely, fillIn, capacity, err); - if(U_FAILURE(*err) || length != 0) { - return length; - } - } - if(!triedCode) { - /* still not found .. try long and abbreviated script names again */ - UScriptCode code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); - if(code!=USCRIPT_INVALID_CODE) { - return setOneCode(code, fillIn, capacity, err); - } - } - return 0; -} diff --git a/source/common/uscript_props.cpp b/source/common/uscript_props.cpp index 20c7cdc..f8ec5e3 100644 --- a/source/common/uscript_props.cpp +++ b/source/common/uscript_props.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: uscript_props.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uset.cpp b/source/common/uset.cpp index dbbf694..39ad0a3 100644 --- a/source/common/uset.cpp +++ b/source/common/uset.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uset.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uset_imp.h b/source/common/uset_imp.h index 703c881..7233b93 100644 --- a/source/common/uset_imp.h +++ b/source/common/uset_imp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uset_imp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uset_props.cpp b/source/common/uset_props.cpp index fd48f45..f08e760 100644 --- a/source/common/uset_props.cpp +++ b/source/common/uset_props.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: uset_props.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/usetiter.cpp b/source/common/usetiter.cpp index 514dc03..93048ba 100644 --- a/source/common/usetiter.cpp +++ b/source/common/usetiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ushape.cpp b/source/common/ushape.cpp index 8420cc9..90f339b 100644 --- a/source/common/ushape.cpp +++ b/source/common/ushape.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: ushape.cpp - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/usprep.cpp b/source/common/usprep.cpp index 565d9e5..d96e825 100644 --- a/source/common/usprep.cpp +++ b/source/common/usprep.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: usprep.cpp - * encoding: US-ASCII + * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ustack.cpp b/source/common/ustack.cpp index 1de79ec..fb314b0 100644 --- a/source/common/ustack.cpp +++ b/source/common/ustack.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ustr_cnv.cpp b/source/common/ustr_cnv.cpp index e27639f..38f4d82 100644 --- a/source/common/ustr_cnv.cpp +++ b/source/common/ustr_cnv.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ustr_cnv.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ustr_cnv.h b/source/common/ustr_cnv.h index 74f8885..861e3eb 100644 --- a/source/common/ustr_cnv.h +++ b/source/common/ustr_cnv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ustr_cnv.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/ustr_imp.h b/source/common/ustr_imp.h index 34a6936..9815915 100644 --- a/source/common/ustr_imp.h +++ b/source/common/ustr_imp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ustr_imp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -18,23 +18,6 @@ #define __USTR_IMP_H__ #include "unicode/utypes.h" -#include "unicode/uiter.h" -#include "ucase.h" - -/** Simple declaration to avoid including unicode/ubrk.h. */ -#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR -# define UBRK_TYPEDEF_UBREAK_ITERATOR - typedef struct UBreakIterator UBreakIterator; -#endif - -#ifndef U_COMPARE_IGNORE_CASE -/* see also unorm.h */ -/** - * Option bit for unorm_compare: - * Perform case-insensitive comparison. - */ -#define U_COMPARE_IGNORE_CASE 0x10000 -#endif /** * Internal option for unorm_cmpEquivFold() for strncmp style. @@ -53,211 +36,6 @@ uprv_strCompare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, UBool strncmpStyle, UBool codePointOrder); -/** - * Internal API, used by u_strcasecmp() etc. - * Compare strings case-insensitively, - * in code point order or code unit order. - */ -U_CFUNC int32_t -u_strcmpFold(const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - uint32_t options, - UErrorCode *pErrorCode); - -/** - * Interanl API, used for detecting length of - * shared prefix case-insensitively. - * @param s1 input string 1 - * @param length1 length of string 1, or -1 (NULL terminated) - * @param s2 input string 2 - * @param length2 length of string 2, or -1 (NULL terminated) - * @param options compare options - * @param matchLen1 (output) length of partial prefix match in s1 - * @param matchLen2 (output) length of partial prefix match in s2 - * @param pErrorCode receives error status - */ -U_CAPI void -u_caseInsensitivePrefixMatch(const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - uint32_t options, - int32_t *matchLen1, int32_t *matchLen2, - UErrorCode *pErrorCode); - -/** - * Are the Unicode properties loaded? - * This must be used before internal functions are called that do - * not perform this check. - * Generate a debug assertion failure if data is not loaded. - */ -U_CFUNC UBool -uprv_haveProperties(UErrorCode *pErrorCode); - -/** - * Load the Unicode property data. - * Intended primarily for use from u_init(). - * Has no effect if property data is already loaded. - * NOT thread safe. - */ -/*U_CFUNC int8_t -uprv_loadPropsData(UErrorCode *errorCode);*/ - -/* - * Internal string casing functions implementing - * ustring.h/ustrcase.c and UnicodeString case mapping functions. - */ - -struct UCaseMap { - const UCaseProps *csp; -#if !UCONFIG_NO_BREAK_ITERATION - UBreakIterator *iter; /* We adopt the iterator, so we own it. */ -#endif - char locale[32]; - int32_t locCache; - uint32_t options; -}; - -#ifndef __UCASEMAP_H__ -typedef struct UCaseMap UCaseMap; -#endif - -#if UCONFIG_NO_BREAK_ITERATION -# define UCASEMAP_INITIALIZER { NULL, { 0 }, 0, 0 } -#else -# define UCASEMAP_INITIALIZER { NULL, NULL, { 0 }, 0, 0 } -#endif - -U_CFUNC void -ustrcase_setTempCaseMapLocale(UCaseMap *csm, const char *locale); - -#ifndef U_STRING_CASE_MAPPER_DEFINED -#define U_STRING_CASE_MAPPER_DEFINED - -/** - * String case mapping function type, used by ustrcase_map(). - * All error checking must be done. - * The UCaseMap must be fully initialized, with locale and/or iter set as needed. - * src and dest must not overlap. - */ -typedef int32_t U_CALLCONV -UStringCaseMapper(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#endif - -/** Implements UStringCaseMapper. */ -U_CFUNC int32_t U_CALLCONV -ustrcase_internalToLower(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** Implements UStringCaseMapper. */ -U_CFUNC int32_t U_CALLCONV -ustrcase_internalToUpper(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - -/** Implements UStringCaseMapper. */ -U_CFUNC int32_t U_CALLCONV -ustrcase_internalToTitle(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#endif - -/** Implements UStringCaseMapper. */ -U_CFUNC int32_t U_CALLCONV -ustrcase_internalFold(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Implements argument checking and buffer handling - * for string case mapping as a common function. - */ -U_CFUNC int32_t -ustrcase_map(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UStringCaseMapper *stringCaseMapper, - UErrorCode *pErrorCode); - -/** - * UTF-8 string case mapping function type, used by ucasemap_mapUTF8(). - * UTF-8 version of UStringCaseMapper. - * All error checking must be done. - * The UCaseMap must be fully initialized, with locale and/or iter set as needed. - * src and dest must not overlap. - */ -typedef int32_t U_CALLCONV -UTF8CaseMapper(const UCaseMap *csm, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** Implements UTF8CaseMapper. */ -U_CFUNC int32_t U_CALLCONV -ucasemap_internalUTF8ToTitle(const UCaseMap *csm, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Implements argument checking and buffer handling - * for UTF-8 string case mapping as a common function. - */ -U_CFUNC int32_t -ucasemap_mapUTF8(const UCaseMap *csm, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, - UTF8CaseMapper *stringCaseMapper, - UErrorCode *pErrorCode); - -#ifdef __cplusplus - -U_NAMESPACE_BEGIN -namespace GreekUpper { - -// Data bits. -static const uint32_t UPPER_MASK = 0x3ff; -static const uint32_t HAS_VOWEL = 0x1000; -static const uint32_t HAS_YPOGEGRAMMENI = 0x2000; -static const uint32_t HAS_ACCENT = 0x4000; -static const uint32_t HAS_DIALYTIKA = 0x8000; -// Further bits during data building and processing, not stored in the data map. -static const uint32_t HAS_COMBINING_DIALYTIKA = 0x10000; -static const uint32_t HAS_OTHER_GREEK_DIACRITIC = 0x20000; - -static const uint32_t HAS_VOWEL_AND_ACCENT = HAS_VOWEL | HAS_ACCENT; -static const uint32_t HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA = - HAS_VOWEL_AND_ACCENT | HAS_DIALYTIKA; -static const uint32_t HAS_EITHER_DIALYTIKA = HAS_DIALYTIKA | HAS_COMBINING_DIALYTIKA; - -// State bits. -static const uint32_t AFTER_CASED = 1; -static const uint32_t AFTER_VOWEL_WITH_ACCENT = 2; - -uint32_t getLetterData(UChar32 c); - -/** - * Returns a non-zero value for each of the Greek combining diacritics - * listed in The Unicode Standard, version 8, chapter 7.2 Greek, - * plus some perispomeni look-alikes. - */ -uint32_t getDiacriticData(UChar32 c); - -} // namespace GreekUpper -U_NAMESPACE_END - -#endif // __cplusplus - U_CAPI int32_t U_EXPORT2 ustr_hashUCharsN(const UChar *str, int32_t length); diff --git a/source/common/ustr_titlecase_brkiter.cpp b/source/common/ustr_titlecase_brkiter.cpp index 6380877..0b2ba02 100644 --- a/source/common/ustr_titlecase_brkiter.cpp +++ b/source/common/ustr_titlecase_brkiter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ustr_titlecase_brkiter.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -22,30 +22,17 @@ #if !UCONFIG_NO_BREAK_ITERATION #include "unicode/brkiter.h" +#include "unicode/casemap.h" +#include "unicode/localpointer.h" #include "unicode/ubrk.h" #include "unicode/ucasemap.h" #include "cmemory.h" #include "ucase.h" -#include "ustr_imp.h" +#include "ucasemap_imp.h" -/* functions available in the common library (for unistr_case.cpp) */ +U_NAMESPACE_USE -/* - * Set parameters on an empty UCaseMap, for UCaseMap-less API functions. - * Do this fast because it is called with every function call. - * Duplicate of the same function in ustrcase.cpp, to keep it inline. - */ -static inline void -setTempCaseMap(UCaseMap *csm, const char *locale) { - if(csm->csp==NULL) { - csm->csp=ucase_getSingleton(); - } - if(locale!=NULL && locale[0]==0) { - csm->locale[0]=0; - } else { - ustrcase_setTempCaseMapLocale(csm, locale); - } -} +/* functions available in the common library (for unistr_case.cpp) */ /* public API functions */ @@ -55,39 +42,73 @@ u_strToTitle(UChar *dest, int32_t destCapacity, UBreakIterator *titleIter, const char *locale, UErrorCode *pErrorCode) { - UCaseMap csm=UCASEMAP_INITIALIZER; - setTempCaseMap(&csm, locale); + LocalPointer ownedIter; + BreakIterator *iter; if(titleIter!=NULL) { - ubrk_setText(csm.iter=titleIter, src, srcLength, pErrorCode); + iter=reinterpret_cast(titleIter); } else { - csm.iter=ubrk_open(UBRK_WORD, csm.locale, src, srcLength, pErrorCode); + iter=BreakIterator::createWordInstance(Locale(locale), *pErrorCode); + ownedIter.adoptInstead(iter); + } + if(U_FAILURE(*pErrorCode)) { + return 0; } - int32_t length=ustrcase_map( - &csm, + UnicodeString s(srcLength<0, src, srcLength); + iter->setText(s); + return ustrcase_mapWithOverlap( + ustrcase_getCaseLocale(locale), 0, iter, dest, destCapacity, src, srcLength, - ustrcase_internalToTitle, pErrorCode); - if(titleIter==NULL && csm.iter!=NULL) { - ubrk_close(csm.iter); + ustrcase_internalToTitle, *pErrorCode); +} + +U_NAMESPACE_BEGIN + +int32_t CaseMap::toTitle( + const char *locale, uint32_t options, BreakIterator *iter, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + LocalPointer ownedIter; + if(iter==NULL) { + iter=BreakIterator::createWordInstance(Locale(locale), errorCode); + ownedIter.adoptInstead(iter); + } + if(U_FAILURE(errorCode)) { + return 0; } - return length; + UnicodeString s(srcLength<0, src, srcLength); + iter->setText(s); + return ustrcase_map( + ustrcase_getCaseLocale(locale), options, iter, + dest, destCapacity, + src, srcLength, + ustrcase_internalToTitle, edits, errorCode); } +U_NAMESPACE_END + U_CAPI int32_t U_EXPORT2 ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode) { - if(csm->iter!=NULL) { - ubrk_setText(csm->iter, src, srcLength, pErrorCode); - } else { - csm->iter=ubrk_open(UBRK_WORD, csm->locale, src, srcLength, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + return 0; + } + if (csm->iter == NULL) { + csm->iter = BreakIterator::createWordInstance(Locale(csm->locale), *pErrorCode); + } + if (U_FAILURE(*pErrorCode)) { + return 0; } + UnicodeString s(srcLength<0, src, srcLength); + csm->iter->setText(s); return ustrcase_map( - csm, + csm->caseLocale, csm->options, csm->iter, dest, destCapacity, src, srcLength, - ustrcase_internalToTitle, pErrorCode); + ustrcase_internalToTitle, NULL, *pErrorCode); } #endif // !UCONFIG_NO_BREAK_ITERATION diff --git a/source/common/ustr_wcs.cpp b/source/common/ustr_wcs.cpp index 59a5869..e720549 100644 --- a/source/common/ustr_wcs.cpp +++ b/source/common/ustr_wcs.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ustr_wcs.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -254,7 +254,7 @@ u_strToWCS(wchar_t *dest, srcLength = u_strlen(src); } if(0 < srcLength && srcLength <= destCapacity){ - u_memcpy(dest, src, srcLength); + u_memcpy((UChar *)dest, src, srcLength); } if(pDestLength){ *pDestLength = srcLength; @@ -509,7 +509,7 @@ u_strFromWCS(UChar *dest, srcLength = u_strlen((const UChar *)src); } if(0 < srcLength && srcLength <= destCapacity){ - u_memcpy(dest, src, srcLength); + u_memcpy(dest, (const UChar *)src, srcLength); } if(pDestLength){ *pDestLength = srcLength; diff --git a/source/common/ustrcase.cpp b/source/common/ustrcase.cpp index 8f594ec..b12e7a7 100644 --- a/source/common/ustrcase.cpp +++ b/source/common/ustrcase.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: ustrcase.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -22,6 +22,8 @@ #include "unicode/utypes.h" #include "unicode/brkiter.h" +#include "unicode/casemap.h" +#include "unicode/edits.h" #include "unicode/ustring.h" #include "unicode/ucasemap.h" #include "unicode/ubrk.h" @@ -29,9 +31,30 @@ #include "unicode/utf16.h" #include "cmemory.h" #include "ucase.h" +#include "ucasemap_imp.h" #include "ustr_imp.h" #include "uassert.h" +U_NAMESPACE_BEGIN + +namespace { + +int32_t checkOverflowAndEditsError(int32_t destIndex, int32_t destCapacity, + Edits *edits, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode)) { + if (destIndex > destCapacity) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + } else if (edits != NULL) { + edits->copyErrorTo(errorCode); + } + } + return destIndex; +} + +} // namespace + +U_NAMESPACE_END + U_NAMESPACE_USE /* string casing ------------------------------------------------------------ */ @@ -39,21 +62,43 @@ U_NAMESPACE_USE /* Appends a full case mapping result, see UCASE_MAX_STRING_LENGTH. */ static inline int32_t appendResult(UChar *dest, int32_t destIndex, int32_t destCapacity, - int32_t result, const UChar *s) { + int32_t result, const UChar *s, + int32_t cpLength, uint32_t options, icu::Edits *edits) { UChar32 c; int32_t length; /* decode the result */ if(result<0) { /* (not) original code point */ + if(edits!=NULL) { + edits->addUnchanged(cpLength); + if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { + return destIndex; + } + } c=~result; - length=U16_LENGTH(c); - } else if(result<=UCASE_MAX_STRING_LENGTH) { - c=U_SENTINEL; - length=result; + if(destIndexaddReplace(cpLength, 1); + } + return destIndex; + } else { + c=result; + length=U16_LENGTH(c); + } + if(edits!=NULL) { + edits->addReplace(cpLength, length); + } } if(length>(INT32_MAX-destIndex)) { return -1; // integer overflow @@ -99,9 +144,15 @@ appendUChar(UChar *dest, int32_t destIndex, int32_t destCapacity, UChar c) { } static inline int32_t -appendString(UChar *dest, int32_t destIndex, int32_t destCapacity, - const UChar *s, int32_t length) { +appendUnchanged(UChar *dest, int32_t destIndex, int32_t destCapacity, + const UChar *s, int32_t length, uint32_t options, icu::Edits *edits) { if(length>0) { + if(edits!=NULL) { + edits->addUnchanged(length); + if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { + return destIndex; + } + } if(length>(INT32_MAX-destIndex)) { return -1; // integer overflow } @@ -150,84 +201,66 @@ utf16_caseContextIterator(void *context, int8_t dir) { * context [0..srcLength[ into account. */ static int32_t -_caseMap(const UCaseMap *csm, UCaseMapFull *map, +_caseMap(int32_t caseLocale, uint32_t options, UCaseMapFull *map, UChar *dest, int32_t destCapacity, const UChar *src, UCaseContext *csc, int32_t srcStart, int32_t srcLimit, - UErrorCode *pErrorCode) { - const UChar *s; - UChar32 c, c2 = 0; - int32_t srcIndex, destIndex; - int32_t locCache; - - locCache=csm->locCache; - + icu::Edits *edits, + UErrorCode &errorCode) { /* case mapping loop */ - srcIndex=srcStart; - destIndex=0; + int32_t srcIndex=srcStart; + int32_t destIndex=0; while(srcIndexcpStart=srcIndex; + int32_t cpStart; + csc->cpStart=cpStart=srcIndex; + UChar32 c; U16_NEXT(src, srcIndex, srcLimit, c); csc->cpLimit=srcIndex; - c=map(csm->csp, c, utf16_caseContextIterator, csc, &s, csm->locale, &locCache); - if((destIndexdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } return destIndex; } #if !UCONFIG_NO_BREAK_ITERATION U_CFUNC int32_t U_CALLCONV -ustrcase_internalToTitle(const UCaseMap *csm, +ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *iter, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - const UChar *s; - UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex; - UBool isFirstIndex; - - if(U_FAILURE(*pErrorCode)) { + icu::Edits *edits, + UErrorCode &errorCode) { + if(U_FAILURE(errorCode)) { return 0; } - // Use the C++ abstract base class to minimize dependencies. - // TODO: Change UCaseMap.iter to store a BreakIterator directly. - BreakIterator *bi=reinterpret_cast(csm->iter); - /* set up local variables */ - int32_t locCache=csm->locCache; UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - destIndex=0; - prev=0; - isFirstIndex=TRUE; + int32_t destIndex=0; + int32_t prev=0; + UBool isFirstIndex=TRUE; /* titlecasing loop */ while(prevfirst(); + index=iter->first(); } else { - idx=bi->next(); + index=iter->next(); } - if(idx==UBRK_DONE || idx>srcLength) { - idx=srcLength; + if(index==UBRK_DONE || index>srcLength) { + index=srcLength; } /* @@ -243,29 +276,32 @@ ustrcase_internalToTitle(const UCaseMap *csm, * b) first case letter (titlecase) [titleStart..titleLimit[ * c) subsequent characters (lowercase) [titleLimit..index[ */ - if(prevoptions&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(csm->csp, c)) { + int32_t titleStart=prev; + int32_t titleLimit=prev; + UChar32 c; + U16_NEXT(src, titleLimit, index, c); + if((options&U_TITLECASE_NO_BREAK_ADJUSTMENT)==0 && UCASE_NONE==ucase_getType(c)) { /* Adjust the titlecasing index (titleStart) to the next cased character. */ for(;;) { titleStart=titleLimit; - if(titleLimit==idx) { + if(titleLimit==index) { /* * only uncased characters in [prev..index[ * stop with titleStart==titleLimit==index */ break; } - U16_NEXT(src, titleLimit, idx, c); - if(UCASE_NONE!=ucase_getType(csm->csp, c)) { + U16_NEXT(src, titleLimit, index, c); + if(UCASE_NONE!=ucase_getType(c)) { break; /* cased letter at [titleStart..titleLimit[ */ } } - destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+prev, titleStart-prev, options, edits); if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } } @@ -274,48 +310,64 @@ ustrcase_internalToTitle(const UCaseMap *csm, /* titlecase c which is from [titleStart..titleLimit[ */ csc.cpStart=titleStart; csc.cpLimit=titleLimit; - c=ucase_toFullTitle(csm->csp, c, utf16_caseContextIterator, &csc, &s, csm->locale, &locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + const UChar *s; + c=ucase_toFullTitle(c, utf16_caseContextIterator, &csc, &s, caseLocale); + destIndex=appendResult(dest, destIndex, destCapacity, c, s, + titleLimit-titleStart, options, edits); if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } /* Special case Dutch IJ titlecasing */ - if (titleStart+1 < idx && - ucase_getCaseLocale(csm->locale,&locCache) == UCASE_LOC_DUTCH && - (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && - (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); - if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (titleStart+1 < index && + caseLocale == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069)) { + if (src[titleStart+1] == 0x006A) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); + if(destIndex<0) { + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + if(edits!=NULL) { + edits->addReplace(1, 1); + } + titleLimit++; + } else if (src[titleStart+1] == 0x004A) { + // Keep the capital J from getting lowercased. + destIndex=appendUnchanged(dest, destIndex, destCapacity, + src+titleStart+1, 1, options, edits); + if(destIndex<0) { + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + titleLimit++; } - titleLimit++; } /* lowercase [titleLimit..index[ */ - if(titleLimitoptions&U_TITLECASE_NO_LOWERCASE)==0) { + if(titleLimitdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - return destIndex; + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } #endif // !UCONFIG_NO_BREAK_ITERATION @@ -791,11 +840,11 @@ uint32_t getDiacriticData(UChar32 c) { } } -UBool isFollowedByCasedLetter(const UCaseProps *csp, const UChar *s, int32_t i, int32_t length) { +UBool isFollowedByCasedLetter(const UChar *s, int32_t i, int32_t length) { while (i < length) { UChar32 c; U16_NEXT(s, i, length, c); - int32_t type = ucase_getTypeOrIgnorable(csp, c); + int32_t type = ucase_getTypeOrIgnorable(c); if ((type & UCASE_IGNORABLE) != 0) { // Case-ignorable, continue with the loop. } else if (type != UCASE_NONE) { @@ -813,11 +862,11 @@ UBool isFollowedByCasedLetter(const UCaseProps *csp, const UChar *s, int32_t i, * for each character. * TODO: Try to re-consolidate one way or another with the non-Greek function. */ -int32_t toUpper(const UCaseMap *csm, +int32_t toUpper(uint32_t options, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - int32_t locCache = UCASE_LOC_GREEK; + Edits *edits, + UErrorCode &errorCode) { int32_t destIndex=0; uint32_t state = 0; for (int32_t i = 0; i < srcLength;) { @@ -825,7 +874,7 @@ int32_t toUpper(const UCaseMap *csm, UChar32 c; U16_NEXT(src, nextIndex, srcLength, c); uint32_t nextState = 0; - int32_t type = ucase_getTypeOrIgnorable(csm->csp, c); + int32_t type = ucase_getTypeOrIgnorable(c); if ((type & UCASE_IGNORABLE) != 0) { // c is case-ignorable nextState |= (state & AFTER_CASED); @@ -872,7 +921,7 @@ int32_t toUpper(const UCaseMap *csm, (data & HAS_ACCENT) != 0 && numYpogegrammeni == 0 && (state & AFTER_CASED) == 0 && - !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + !isFollowedByCasedLetter(src, nextIndex, srcLength)) { // Keep disjunctive "or" with (only) a tonos. // We use the same "word boundary" conditions as for the Final_Sigma test. if (i == nextIndex) { @@ -890,43 +939,67 @@ int32_t toUpper(const UCaseMap *csm, data &= ~HAS_EITHER_DIALYTIKA; } } - destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); - if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika - } - if (destIndex >= 0 && addTonos) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); - } - while (destIndex >= 0 && numYpogegrammeni > 0) { - destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); - --numYpogegrammeni; - } - if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + + UBool change = TRUE; + if (edits != NULL) { + // Find out first whether we are changing the text. + change = src[i] != upper || numYpogegrammeni > 0; + int32_t i2 = i + 1; + if ((data & HAS_EITHER_DIALYTIKA) != 0) { + change |= i2 >= nextIndex || src[i2] != 0x308; + ++i2; + } + if (addTonos) { + change |= i2 >= nextIndex || src[i2] != 0x301; + ++i2; + } + int32_t oldLength = nextIndex - i; + int32_t newLength = (i2 - i) + numYpogegrammeni; + change |= oldLength != newLength; + if (change) { + if (edits != NULL) { + edits->addReplace(oldLength, newLength); + } + } else { + if (edits != NULL) { + edits->addUnchanged(oldLength); + } + // Write unchanged text? + change = (options & UCASEMAP_OMIT_UNCHANGED_TEXT) == 0; + } } - } else { - const UChar *s; - UChar32 c2 = 0; - c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); - if((destIndex= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); + --numYpogegrammeni; + } if(destIndex<0) { - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + errorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; } } + } else { + const UChar *s; + c=ucase_toFullUpper(c, NULL, NULL, &s, UCASE_LOC_GREEK); + destIndex = appendResult(dest, destIndex, destCapacity, c, s, + nextIndex - i, options, edits); + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } i = nextIndex; state = nextState; } - if(destIndex>destCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } return destIndex; } @@ -936,94 +1009,128 @@ U_NAMESPACE_END /* functions available in the common library (for unistr_case.cpp) */ U_CFUNC int32_t U_CALLCONV -ustrcase_internalToLower(const UCaseMap *csm, +ustrcase_internalToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { + icu::Edits *edits, + UErrorCode &errorCode) { UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - return _caseMap( - csm, ucase_toFullLower, + int32_t destIndex = _caseMap( + caseLocale, options, ucase_toFullLower, dest, destCapacity, src, &csc, 0, srcLength, - pErrorCode); + edits, errorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } U_CFUNC int32_t U_CALLCONV -ustrcase_internalToUpper(const UCaseMap *csm, +ustrcase_internalToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - int32_t locCache = csm->locCache; - if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { - return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + icu::Edits *edits, + UErrorCode &errorCode) { + int32_t destIndex; + if (caseLocale == UCASE_LOC_GREEK) { + destIndex = GreekUpper::toUpper(options, dest, destCapacity, + src, srcLength, edits, errorCode); + } else { + UCaseContext csc=UCASECONTEXT_INITIALIZER; + csc.p=(void *)src; + csc.limit=srcLength; + destIndex = _caseMap( + caseLocale, options, ucase_toFullUpper, + dest, destCapacity, + src, &csc, 0, srcLength, + edits, errorCode); } - UCaseContext csc=UCASECONTEXT_INITIALIZER; - csc.p=(void *)src; - csc.limit=srcLength; - return _caseMap( - csm, ucase_toFullUpper, - dest, destCapacity, - src, &csc, 0, srcLength, - pErrorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } -static int32_t -ustr_foldCase(const UCaseProps *csp, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - uint32_t options, - UErrorCode *pErrorCode) { - int32_t srcIndex, destIndex; - - const UChar *s; - UChar32 c, c2 = 0; - +U_CFUNC int32_t U_CALLCONV +ustrcase_internalFold(int32_t /* caseLocale */, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED + UChar *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + icu::Edits *edits, + UErrorCode &errorCode) { /* case mapping loop */ - srcIndex=destIndex=0; - while(srcIndexdestCapacity) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; - } - return destIndex; -} - -U_CFUNC int32_t U_CALLCONV -ustrcase_internalFold(const UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode) { - return ustr_foldCase(csm->csp, dest, destCapacity, src, srcLength, csm->options, pErrorCode); + return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } U_CFUNC int32_t -ustrcase_map(const UCaseMap *csm, +ustrcase_map(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UStringCaseMapper *stringCaseMapper, - UErrorCode *pErrorCode) { + icu::Edits *edits, + UErrorCode &errorCode) { + int32_t destLength; + + /* check argument values */ + if(U_FAILURE(errorCode)) { + return 0; + } + if( destCapacity<0 || + (dest==NULL && destCapacity>0) || + src==NULL || + srcLength<-1 + ) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + /* get the string length */ + if(srcLength==-1) { + srcLength=u_strlen(src); + } + + /* check for overlapping source and destination */ + if( dest!=NULL && + ((src>=dest && src<(dest+destCapacity)) || + (dest>=src && dest<(src+srcLength))) + ) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + if(edits!=NULL) { + edits->reset(); + } + destLength=stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + dest, destCapacity, src, srcLength, edits, errorCode); + return u_terminateUChars(dest, destCapacity, destLength, &errorCode); +} + +U_CFUNC int32_t +ustrcase_mapWithOverlap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM + UChar *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + UStringCaseMapper *stringCaseMapper, + UErrorCode &errorCode) { UChar buffer[300]; UChar *temp; int32_t destLength; /* check argument values */ - if(U_FAILURE(*pErrorCode)) { + if(U_FAILURE(errorCode)) { return 0; } if( destCapacity<0 || @@ -1031,7 +1138,7 @@ ustrcase_map(const UCaseMap *csm, src==NULL || srcLength<-1 ) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + errorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } @@ -1053,7 +1160,7 @@ ustrcase_map(const UCaseMap *csm, /* allocate a buffer */ temp=(UChar *)uprv_malloc(destCapacity*U_SIZEOF_UCHAR); if(temp==NULL) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + errorCode=U_MEMORY_ALLOCATION_ERROR; return 0; } } @@ -1061,21 +1168,19 @@ ustrcase_map(const UCaseMap *csm, temp=dest; } - destLength=stringCaseMapper(csm, temp, destCapacity, src, srcLength, pErrorCode); + destLength=stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + temp, destCapacity, src, srcLength, NULL, errorCode); if(temp!=dest) { /* copy the result string to the destination buffer */ - if(destLength>0) { - int32_t copyLength= destLength<=destCapacity ? destLength : destCapacity; - if(copyLength>0) { - u_memmove(dest, temp, copyLength); - } + if (U_SUCCESS(errorCode) && 0 < destLength && destLength <= destCapacity) { + u_memmove(dest, temp, destLength); } if(temp!=buffer) { uprv_free(temp); } } - return u_terminateUChars(dest, destCapacity, destLength, pErrorCode); + return u_terminateUChars(dest, destCapacity, destLength, &errorCode); } /* public API functions */ @@ -1085,16 +1190,29 @@ u_strFoldCase(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, uint32_t options, UErrorCode *pErrorCode) { - UCaseMap csm=UCASEMAP_INITIALIZER; - csm.csp=ucase_getSingleton(); - csm.options=options; + return ustrcase_mapWithOverlap( + UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL + dest, destCapacity, + src, srcLength, + ustrcase_internalFold, *pErrorCode); +} + +U_NAMESPACE_BEGIN + +int32_t CaseMap::fold( + uint32_t options, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { return ustrcase_map( - &csm, + UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL dest, destCapacity, src, srcLength, - ustrcase_internalFold, pErrorCode); + ustrcase_internalFold, edits, errorCode); } +U_NAMESPACE_END + /* case-insensitive string comparisons -------------------------------------- */ /* @@ -1134,8 +1252,6 @@ static int32_t _cmpFold( UErrorCode *pErrorCode) { int32_t cmpRes = 0; - const UCaseProps *csp; - /* current-level start/limit - s1/s2 as current */ const UChar *start1, *start2, *limit1, *limit2; @@ -1167,7 +1283,6 @@ static int32_t _cmpFold( * assume that at least the option U_COMPARE_IGNORE_CASE is set * otherwise this function would have to behave exactly as uprv_strCompare() */ - csp=ucase_getSingleton(); if(U_FAILURE(*pErrorCode)) { return 0; } @@ -1349,7 +1464,7 @@ static int32_t _cmpFold( */ if( level1==0 && - (length=ucase_toFullFolding(csp, (UChar32)cp1, &p, options))>=0 + (length=ucase_toFullFolding((UChar32)cp1, &p, options))>=0 ) { /* cp1 case-folds to the code point "length" or to p[length] */ if(U_IS_SURROGATE(c1)) { @@ -1395,7 +1510,7 @@ static int32_t _cmpFold( } if( level2==0 && - (length=ucase_toFullFolding(csp, (UChar32)cp2, &p, options))>=0 + (length=ucase_toFullFolding((UChar32)cp2, &p, options))>=0 ) { /* cp2 case-folds to the code point "length" or to p[length] */ if(U_IS_SURROGATE(c2)) { diff --git a/source/common/ustrcase_locale.cpp b/source/common/ustrcase_locale.cpp index 78f4bbd..2ecd24f 100644 --- a/source/common/ustrcase_locale.cpp +++ b/source/common/ustrcase_locale.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ustrcase_locale.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -18,66 +18,24 @@ */ #include "unicode/utypes.h" +#include "uassert.h" +#include "unicode/brkiter.h" +#include "unicode/casemap.h" #include "unicode/ucasemap.h" #include "unicode/uloc.h" #include "unicode/ustring.h" #include "ucase.h" -#include "ustr_imp.h" +#include "ucasemap_imp.h" -U_CFUNC void -ustrcase_setTempCaseMapLocale(UCaseMap *csm, const char *locale) { - /* - * We could call ucasemap_setLocale(), but here we really only care about - * the initial language subtag, we need not return the real string via - * ucasemap_getLocale(), and we don't care about only getting "x" from - * "x-some-thing" etc. - * - * We ignore locales with a longer-than-3 initial subtag. - * - * We also do not fill in the locCache because it is rarely used, - * and not worth setting unless we reuse it for many case mapping operations. - * (That's why UCaseMap was created.) - */ - int i; - char c; - - /* the internal functions require locale!=NULL */ - if(locale==NULL) { - // Do not call uprv_getDefaultLocaleID() because that does not see - // changes to the default locale via uloc_setDefault(). - // It would also be inefficient if used frequently because uprv_getDefaultLocaleID() - // does not cache the locale ID. - // - // Unfortunately, uloc_getDefault() has many dependencies. - // We only care about a small set of language subtags, - // and we do not need the locale ID to be canonicalized. - // - // Best is to not call case mapping functions with a NULL locale ID. - locale=uloc_getDefault(); - } - for(i=0; i<4 && (c=locale[i])!=0 && c!='-' && c!='_'; ++i) { - csm->locale[i]=c; - } - if(i<=3) { - csm->locale[i]=0; /* Up to 3 non-separator characters. */ - } else { - csm->locale[0]=0; /* Longer-than-3 initial subtag: Ignore. */ - } -} - -/* - * Set parameters on an empty UCaseMap, for UCaseMap-less API functions. - * Do this fast because it is called with every function call. - */ -static inline void -setTempCaseMap(UCaseMap *csm, const char *locale) { - if(csm->csp==NULL) { - csm->csp=ucase_getSingleton(); +U_CFUNC int32_t +ustrcase_getCaseLocale(const char *locale) { + if (locale == NULL) { + locale = uloc_getDefault(); } - if(locale!=NULL && locale[0]==0) { - csm->locale[0]=0; + if (*locale == 0) { + return UCASE_LOC_ROOT; } else { - ustrcase_setTempCaseMapLocale(csm, locale); + return ucase_getCaseLocale(locale); } } @@ -88,13 +46,11 @@ u_strToLower(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode) { - UCaseMap csm=UCASEMAP_INITIALIZER; - setTempCaseMap(&csm, locale); - return ustrcase_map( - &csm, + return ustrcase_mapWithOverlap( + ustrcase_getCaseLocale(locale), 0, UCASEMAP_BREAK_ITERATOR_NULL dest, destCapacity, src, srcLength, - ustrcase_internalToLower, pErrorCode); + ustrcase_internalToLower, *pErrorCode); } U_CAPI int32_t U_EXPORT2 @@ -102,11 +58,37 @@ u_strToUpper(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode) { - UCaseMap csm=UCASEMAP_INITIALIZER; - setTempCaseMap(&csm, locale); + return ustrcase_mapWithOverlap( + ustrcase_getCaseLocale(locale), 0, UCASEMAP_BREAK_ITERATOR_NULL + dest, destCapacity, + src, srcLength, + ustrcase_internalToUpper, *pErrorCode); +} + +U_NAMESPACE_BEGIN + +int32_t CaseMap::toLower( + const char *locale, uint32_t options, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { + return ustrcase_map( + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL + dest, destCapacity, + src, srcLength, + ustrcase_internalToLower, edits, errorCode); +} + +int32_t CaseMap::toUpper( + const char *locale, uint32_t options, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destCapacity, Edits *edits, + UErrorCode &errorCode) { return ustrcase_map( - &csm, + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL dest, destCapacity, src, srcLength, - ustrcase_internalToUpper, pErrorCode); + ustrcase_internalToUpper, edits, errorCode); } + +U_NAMESPACE_END diff --git a/source/common/ustrenum.cpp b/source/common/ustrenum.cpp index df73264..ed23eaa 100644 --- a/source/common/ustrenum.cpp +++ b/source/common/ustrenum.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ustrenum.h b/source/common/ustrenum.h index c893cd1..a82162e 100644 --- a/source/common/ustrenum.h +++ b/source/common/ustrenum.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/ustrfmt.c b/source/common/ustrfmt.c deleted file mode 100644 index c7805d8..0000000 --- a/source/common/ustrfmt.c +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2001-2006, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ - -#include "cstring.h" -#include "ustrfmt.h" - - -/*** - * Fills in a UChar* string with the radix-based representation of a - * uint32_t number padded with zeroes to minwidth. The result - * will be null terminated if there is room. - * - * @param buffer UChar buffer to receive result - * @param capacity capacity of buffer - * @param i the unsigned number to be formatted - * @param radix the radix from 2..36 - * @param minwidth the minimum width. If the result is narrower than - * this, '0's will be added on the left. Must be <= - * capacity. - * @return the length of the result, not including any terminating - * null - */ -U_CAPI int32_t U_EXPORT2 -uprv_itou (UChar * buffer, int32_t capacity, - uint32_t i, uint32_t radix, int32_t minwidth) -{ - int32_t length = 0; - int digit; - int32_t j; - UChar temp; - - do{ - digit = (int)(i % radix); - buffer[length++]=(UChar)(digit<=9?(0x0030+digit):(0x0030+digit+7)); - i=i/radix; - } while(i && lengthp; // the current buffer mapIndex = ix - u8b->toUCharsMapStart; + U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; return TRUE; @@ -1298,6 +1305,10 @@ fillReverse: // Can only do this if the incoming index is somewhere in the interior of the string. // If index is at the end, there is no character there to look at. if (ix != ut->b) { + // Note: this function will only move the index back if it is on a trail byte + // and there is a preceding lead byte and the sequence from the lead + // through this trail could be part of a valid UTF-8 sequence + // Otherwise the index remains unchanged. U8_SET_CP_START(s8, 0, ix); } @@ -1311,7 +1322,10 @@ fillReverse: UChar *buf = u8b->buf; uint8_t *mapToNative = u8b->mapToNative; uint8_t *mapToUChars = u8b->mapToUChars; - int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1); + int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1; + // Note that toUCharsMapStart can be negative. Happens when the remaining + // text from current position to the beginning is less than the buffer size. + // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry. int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region // at end of buffer to leave room // for a surrogate pair at the @@ -1338,6 +1352,7 @@ fillReverse: if (c<0x80) { // Special case ASCII range for speed. buf[destIx] = (UChar)c; + U_ASSERT(toUCharsMapStart <= srcIx); mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx; mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart); } else { @@ -1367,6 +1382,7 @@ fillReverse: do { mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx; } while (sIx >= srcIx); + U_ASSERT(toUCharsMapStart <= (srcIx+1)); // Set native indexing limit to be the current position. // We are processing a non-ascii, non-native-indexing char now; @@ -1541,6 +1557,7 @@ utf8TextMapIndexToUTF16(const UText *ut, int64_t index64) { U_ASSERT(index>=ut->chunkNativeStart+ut->nativeIndexingLimit); U_ASSERT(index<=ut->chunkNativeLimit); int32_t mapIndex = index - u8b->toUCharsMapStart; + U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; U_ASSERT(offset>=0 && offset<=ut->chunkLength); return offset; @@ -2225,13 +2242,13 @@ unistrTextCopy(UText *ut, } if(move) { - // move: copy to destIndex, then replace original with nothing + // move: copy to destIndex, then remove original int32_t segLength=limit32-start32; us->copy(start32, limit32, destIndex32); if(destIndex32replace(start32, segLength, NULL, 0); + us->remove(start32, segLength); } else { // copy us->copy(start32, limit32, destIndex32); diff --git a/source/common/utf_impl.c b/source/common/utf_impl.c deleted file mode 100644 index c4c8812..0000000 --- a/source/common/utf_impl.c +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: utf_impl.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999sep13 -* created by: Markus W. Scherer -* -* This file provides implementation functions for macros in the utfXX.h -* that would otherwise be too long as macros. -*/ - -/* set import/export definitions */ -#ifndef U_UTF8_IMPL -# define U_UTF8_IMPL -#endif - -#include "unicode/utypes.h" -#include "unicode/utf.h" -#include "unicode/utf8.h" -#include "unicode/utf_old.h" -#include "uassert.h" - -/* - * This table could be replaced on many machines by - * a few lines of assembler code using an - * "index of first 0-bit from msb" instruction and - * one or two more integer instructions. - * - * For example, on an i386, do something like - * - MOV AL, leadByte - * - NOT AL (8-bit, leave b15..b8==0..0, reverse only b7..b0) - * - MOV AH, 0 - * - BSR BX, AX (16-bit) - * - MOV AX, 6 (result) - * - JZ finish (ZF==1 if leadByte==0xff) - * - SUB AX, BX (result) - * -finish: - * (BSR: Bit Scan Reverse, scans for a 1-bit, starting from the MSB) - * - * In Unicode, all UTF-8 byte sequences with more than 4 bytes are illegal; - * lead bytes above 0xf4 are illegal. - * We keep them in this table for skipping long ISO 10646-UTF-8 sequences. - */ -U_EXPORT const uint8_t -utf8_countTrailBytes[256]={ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, - 3, 3, 3, /* illegal in Unicode */ - 4, 4, 4, 4, /* illegal in Unicode */ - 5, 5, /* illegal in Unicode */ - 0, 0 /* illegal bytes 0xfe and 0xff */ -}; - -static const UChar32 -utf8_minLegal[4]={ 0, 0x80, 0x800, 0x10000 }; - -static const UChar32 -utf8_errorValue[6]={ - UTF8_ERROR_VALUE_1, UTF8_ERROR_VALUE_2, UTF_ERROR_VALUE, 0x10ffff, - 0x3ffffff, 0x7fffffff -}; - -static UChar32 -errorValue(int32_t count, int8_t strict) { - if(strict>=0) { - return utf8_errorValue[count]; - } else if(strict==-3) { - return 0xfffd; - } else { - return U_SENTINEL; - } -} - -/* - * Handle the non-inline part of the U8_NEXT() and U8_NEXT_FFFD() macros - * and their obsolete sibling UTF8_NEXT_CHAR_SAFE(). - * - * U8_NEXT() supports NUL-terminated strings indicated via length<0. - * - * The "strict" parameter controls the error behavior: - * <0 "Safe" behavior of U8_NEXT(): - * -1: All illegal byte sequences yield U_SENTINEL=-1. - * -2: Same as -1, except for lenient treatment of surrogate code points as legal. - * Some implementations use this for roundtripping of - * Unicode 16-bit strings that are not well-formed UTF-16, that is, they - * contain unpaired surrogates. - * -3: All illegal byte sequences yield U+FFFD. - * 0 Obsolete "safe" behavior of UTF8_NEXT_CHAR_SAFE(..., FALSE): - * All illegal byte sequences yield a positive code point such that this - * result code point would be encoded with the same number of bytes as - * the illegal sequence. - * >0 Obsolete "strict" behavior of UTF8_NEXT_CHAR_SAFE(..., TRUE): - * Same as the obsolete "safe" behavior, but non-characters are also treated - * like illegal sequences. - * - * Note that a UBool is the same as an int8_t. - */ -U_CAPI UChar32 U_EXPORT2 -utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict) { - int32_t i=*pi; - uint8_t count=U8_COUNT_TRAIL_BYTES(c); - U_ASSERT(count <= 5); /* U8_COUNT_TRAIL_BYTES returns value 0...5 */ - if(i+count<=length || length<0) { - uint8_t trail; - - U8_MASK_LEAD_BYTE(c, count); - /* support NUL-terminated strings: do not read beyond the first non-trail byte */ - switch(count) { - /* each branch falls through to the next one */ - case 0: - /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ - case 5: - case 4: - /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ - break; - case 3: - trail=s[i++]-0x80; - c=(c<<6)|trail; - /* c>=0x110 would result in code point>0x10ffff, outside Unicode */ - if(c>=0x110 || trail>0x3f) { break; } - case 2: - trail=s[i++]-0x80; - c=(c<<6)|trail; - /* - * test for a surrogate d800..dfff unless we are lenient: - * before the last (c<<6), a surrogate is c=360..37f - */ - if(((c&0xffe0)==0x360 && strict!=-2) || trail>0x3f) { break; } - case 1: - trail=s[i++]-0x80; - c=(c<<6)|trail; - if(trail>0x3f) { break; } - /* correct sequence - all trail bytes have (b7..b6)==(10) */ - if(c>=utf8_minLegal[count] && - /* strict: forbid non-characters like U+fffe */ - (strict<=0 || !U_IS_UNICODE_NONCHAR(c))) { - *pi=i; - return c; - } - /* no default branch to optimize switch() - all values are covered */ - } - } else { - /* too few bytes left */ - count=length-i; - } - - /* error handling */ - i=*pi; - while(count>0 && U8_IS_TRAIL(s[i])) { - ++i; - --count; - } - c=errorValue(i-*pi, strict); - *pi=i; - return c; -} - -U_CAPI int32_t U_EXPORT2 -utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError) { - if((uint32_t)(c)<=0x7ff) { - if((i)+1<(length)) { - (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); - return i; - } - } else if((uint32_t)(c)<=0xffff) { - /* Starting with Unicode 3.2, surrogate code points must not be encoded in UTF-8. */ - if((i)+2<(length) && !U_IS_SURROGATE(c)) { - (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); - (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); - return i; - } - } else if((uint32_t)(c)<=0x10ffff) { - if((i)+3<(length)) { - (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); - (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); - (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); - return i; - } - } - /* c>0x10ffff or not enough space, write an error value */ - if(pIsError!=NULL) { - *pIsError=TRUE; - } else { - length-=i; - if(length>0) { - int32_t offset; - if(length>3) { - length=3; - } - s+=i; - offset=0; - c=utf8_errorValue[length-1]; - UTF8_APPEND_CHAR_UNSAFE(s, offset, c); - i=i+offset; - } - } - return i; -} - -U_CAPI UChar32 U_EXPORT2 -utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict) { - int32_t i=*pi; - uint8_t b, count=1, shift=6; - - if(!U8_IS_TRAIL(c)) { return errorValue(0, strict); } - - /* extract value bits from the last trail byte */ - c&=0x3f; - - for(;;) { - if(i<=start) { - /* no lead byte at all */ - return errorValue(0, strict); - } - - /* read another previous byte */ - b=s[--i]; - if((uint8_t)(b-0x80)<0x7e) { /* 0x80<=b<0xfe */ - if(b&0x40) { - /* lead byte, this will always end the loop */ - uint8_t shouldCount=U8_COUNT_TRAIL_BYTES(b); - - if(count==shouldCount) { - /* set the new position */ - *pi=i; - U8_MASK_LEAD_BYTE(b, count); - c|=(UChar32)b<=4 || c>0x10ffff || c0 && U_IS_UNICODE_NONCHAR(c))) { - /* illegal sequence or (strict and non-character) */ - if(count>=4) { - count=3; - } - c=errorValue(count, strict); - } else { - /* exit with correct c */ - } - } else { - /* the lead byte does not match the number of trail bytes */ - /* only set the position to the lead byte if it would - include the trail byte that we started with */ - if(countstart) { - Z=I-5; - } else { - Z=start; - } - - /* return I if the sequence starting there is long enough to include i */ - do { - b=s[I]; - if((uint8_t)(b-0x80)>=0x7e) { /* not 0x80<=b<0xfe */ - break; - } else if(b>=0xc0) { - if(U8_COUNT_TRAIL_BYTES(b)>=(i-I)) { - return I; - } else { - break; - } - } - } while(Z<=--I); - - /* return i itself to be consistent with the FWD_1 macro */ - return i; -} diff --git a/source/common/util.cpp b/source/common/util.cpp index 1b77110..a762cc4 100644 --- a/source/common/util.cpp +++ b/source/common/util.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/util.h b/source/common/util.h index 57f1bb0..e782249 100644 --- a/source/common/util.h +++ b/source/common/util.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/util_props.cpp b/source/common/util_props.cpp index a88d581..95a112b 100644 --- a/source/common/util_props.cpp +++ b/source/common/util_props.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/utrace.c b/source/common/utrace.c deleted file mode 100644 index ca4dddf..0000000 --- a/source/common/utrace.c +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2003-2014, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: utrace.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -*/ - -#define UTRACE_IMPL -#include "unicode/utrace.h" -#include "utracimp.h" -#include "cstring.h" -#include "uassert.h" -#include "ucln_cmn.h" - - -static UTraceEntry *pTraceEntryFunc = NULL; -static UTraceExit *pTraceExitFunc = NULL; -static UTraceData *pTraceDataFunc = NULL; -static const void *gTraceContext = NULL; - -U_EXPORT int32_t -utrace_level = UTRACE_ERROR; - -U_CAPI void U_EXPORT2 -utrace_entry(int32_t fnNumber) { - if (pTraceEntryFunc != NULL) { - (*pTraceEntryFunc)(gTraceContext, fnNumber); - } -} - - -static const char gExitFmt[] = "Returns."; -static const char gExitFmtValue[] = "Returns %d."; -static const char gExitFmtStatus[] = "Returns. Status = %d."; -static const char gExitFmtValueStatus[] = "Returns %d. Status = %d."; -static const char gExitFmtPtrStatus[] = "Returns %d. Status = %p."; - -U_CAPI void U_EXPORT2 -utrace_exit(int32_t fnNumber, int32_t returnType, ...) { - if (pTraceExitFunc != NULL) { - va_list args; - const char *fmt; - - switch (returnType) { - case 0: - fmt = gExitFmt; - break; - case UTRACE_EXITV_I32: - fmt = gExitFmtValue; - break; - case UTRACE_EXITV_STATUS: - fmt = gExitFmtStatus; - break; - case UTRACE_EXITV_I32 | UTRACE_EXITV_STATUS: - fmt = gExitFmtValueStatus; - break; - case UTRACE_EXITV_PTR | UTRACE_EXITV_STATUS: - fmt = gExitFmtPtrStatus; - break; - default: - U_ASSERT(FALSE); - fmt = gExitFmt; - } - - va_start(args, returnType); - (*pTraceExitFunc)(gTraceContext, fnNumber, fmt, args); - va_end(args); - } -} - - - -U_CAPI void U_EXPORT2 -utrace_data(int32_t fnNumber, int32_t level, const char *fmt, ...) { - if (pTraceDataFunc != NULL) { - va_list args; - va_start(args, fmt ); - (*pTraceDataFunc)(gTraceContext, fnNumber, level, fmt, args); - va_end(args); - } -} - - -static void outputChar(char c, char *outBuf, int32_t *outIx, int32_t capacity, int32_t indent) { - int32_t i; - /* Check whether a start of line indenting is needed. Three cases: - * 1. At the start of the first line (output index == 0). - * 2. At the start of subsequent lines (preceeding char in buffer == '\n') - * 3. When preflighting buffer len (buffer capacity is exceeded), when - * a \n is output. Ideally we wouldn't do the indent until the following char - * is received, but that won't work because there's no place to remember that - * the preceding char was \n. Meaning that we may overstimate the - * buffer size needed. No harm done. - */ - if (*outIx==0 || /* case 1. */ - (c!='\n' && c!=0 && *outIx < capacity && outBuf[(*outIx)-1]=='\n') || /* case 2. */ - (c=='\n' && *outIx>=capacity)) /* case 3 */ - { - /* At the start of a line. Indent. */ - for(i=0; i= 0; shiftCount-=4) { - char c = gHexChars[(val >> shiftCount) & 0xf]; - outputChar(c, outBuf, outIx, capacity, 0); - } -} - -/* Output a pointer value in hex. Work with any size of pointer */ -static void outputPtrBytes(void *val, char *outBuf, int32_t *outIx, int32_t capacity) { - int32_t i; - int32_t incVal = 1; /* +1 for big endian, -1 for little endian */ - char *p = (char *)&val; /* point to current byte to output in the ptr val */ - -#if !U_IS_BIG_ENDIAN - /* Little Endian. Move p to most significant end of the value */ - incVal = -1; - p += sizeof(void *) - 1; -#endif - - /* Loop through the bytes of the ptr as it sits in memory, from - * most significant to least significant end */ - for (i=0; i 0) { - outputHexBytes(longArg, charsToOutput, outBuf, &outIx, capacity); - outputChar(' ', outBuf, &outIx, capacity, indent); - } - if (vectorLen == -1 && longArg == 0) { - break; - } - } - } - outputChar('[', outBuf, &outIx, capacity, indent); - outputHexBytes(vectorLen, 8, outBuf, &outIx, capacity); - outputChar(']', outBuf, &outIx, capacity, indent); - } - break; - - - default: - /* %. in format string, where . is some character not in the set - * of recognized format chars. Just output it as if % wasn't there. - * (Covers "%%" outputing a single '%') - */ - outputChar(fmtC, outBuf, &outIx, capacity, indent); - } - } - outputChar(0, outBuf, &outIx, capacity, indent); /* Make sure that output is null terminated */ - return outIx + 1; /* outIx + 1 because outIx does not increment when outputing final null. */ -} - - - - -U_CAPI int32_t U_EXPORT2 -utrace_format(char *outBuf, int32_t capacity, - int32_t indent, const char *fmt, ...) { - int32_t retVal; - va_list args; - va_start(args, fmt ); - retVal = utrace_vformat(outBuf, capacity, indent, fmt, args); - va_end(args); - return retVal; -} - - -U_CAPI void U_EXPORT2 -utrace_setFunctions(const void *context, - UTraceEntry *e, UTraceExit *x, UTraceData *d) { - pTraceEntryFunc = e; - pTraceExitFunc = x; - pTraceDataFunc = d; - gTraceContext = context; -} - - -U_CAPI void U_EXPORT2 -utrace_getFunctions(const void **context, - UTraceEntry **e, UTraceExit **x, UTraceData **d) { - *e = pTraceEntryFunc; - *x = pTraceExitFunc; - *d = pTraceDataFunc; - *context = gTraceContext; -} - -U_CAPI void U_EXPORT2 -utrace_setLevel(int32_t level) { - if (level < UTRACE_OFF) { - level = UTRACE_OFF; - } - if (level > UTRACE_VERBOSE) { - level = UTRACE_VERBOSE; - } - utrace_level = level; -} - -U_CAPI int32_t U_EXPORT2 -utrace_getLevel() { - return utrace_level; -} - - -U_CFUNC UBool -utrace_cleanup() { - pTraceEntryFunc = NULL; - pTraceExitFunc = NULL; - pTraceDataFunc = NULL; - utrace_level = UTRACE_OFF; - gTraceContext = NULL; - return TRUE; -} - - -static const char * const -trFnName[] = { - "u_init", - "u_cleanup", - NULL -}; - - -static const char * const -trConvNames[] = { - "ucnv_open", - "ucnv_openPackage", - "ucnv_openAlgorithmic", - "ucnv_clone", - "ucnv_close", - "ucnv_flushCache", - "ucnv_load", - "ucnv_unload", - NULL -}; - - -static const char * const -trCollNames[] = { - "ucol_open", - "ucol_close", - "ucol_strcoll", - "ucol_getSortKey", - "ucol_getLocale", - "ucol_nextSortKeyPart", - "ucol_strcollIter", - "ucol_openFromShortString", - "ucol_strcollUTF8", - NULL -}; - - -U_CAPI const char * U_EXPORT2 -utrace_functionName(int32_t fnNumber) { - if(UTRACE_FUNCTION_START <= fnNumber && fnNumber < UTRACE_FUNCTION_LIMIT) { - return trFnName[fnNumber]; - } else if(UTRACE_CONVERSION_START <= fnNumber && fnNumber < UTRACE_CONVERSION_LIMIT) { - return trConvNames[fnNumber - UTRACE_CONVERSION_START]; - } else if(UTRACE_COLLATION_START <= fnNumber && fnNumber < UTRACE_COLLATION_LIMIT){ - return trCollNames[fnNumber - UTRACE_COLLATION_START]; - } else { - return "[BOGUS Trace Function Number]"; - } -} - diff --git a/source/common/utracimp.h b/source/common/utracimp.h index c1786f5..e8ee53f 100644 --- a/source/common/utracimp.h +++ b/source/common/utracimp.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -8,7 +8,7 @@ * ******************************************************************************* * file name: utracimp.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -47,20 +47,6 @@ U_CDECL_BEGIN -/** - * \var utrace_level - * Trace level variable. Negative for "off". - * Use only via UTRACE_ macros. - * @internal - */ -#ifdef UTRACE_IMPL -U_EXPORT int32_t -#else -U_CFUNC U_COMMON_API int32_t -#endif -utrace_level; - - /** * Traced Function Exit return types. * Flags indicating the number and types of varargs included in a call diff --git a/source/common/utrie.cpp b/source/common/utrie.cpp index 478560d..ecf9b1c 100644 --- a/source/common/utrie.cpp +++ b/source/common/utrie.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utrie.h b/source/common/utrie.h index 17e660b..9c5382c 100644 --- a/source/common/utrie.h +++ b/source/common/utrie.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utrie2.cpp b/source/common/utrie2.cpp index 4bd35a9..cec7224 100644 --- a/source/common/utrie2.cpp +++ b/source/common/utrie2.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie2.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utrie2.h b/source/common/utrie2.h index 810bcfc..8e87bf8 100644 --- a/source/common/utrie2.h +++ b/source/common/utrie2.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie2.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utrie2_builder.cpp b/source/common/utrie2_builder.cpp index 664051c..d8a3a06 100644 --- a/source/common/utrie2_builder.cpp +++ b/source/common/utrie2_builder.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie2_builder.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utrie2_impl.h b/source/common/utrie2_impl.h index 4888363..b7dc9d3 100644 --- a/source/common/utrie2_impl.h +++ b/source/common/utrie2_impl.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -8,7 +8,7 @@ * ****************************************************************************** * file name: utrie2_impl.h -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/uts46.cpp b/source/common/uts46.cpp index 7bc4f92..f2cff2d 100644 --- a/source/common/uts46.cpp +++ b/source/common/uts46.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* @@ -6,7 +6,7 @@ * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: uts46.cpp -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * diff --git a/source/common/utypeinfo.h b/source/common/utypeinfo.h index b39aa0d..c666373 100644 --- a/source/common/utypeinfo.h +++ b/source/common/utypeinfo.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** @@ -24,7 +24,7 @@ #include using std::exception; #endif -#if !defined(_MSC_VER) +#if defined(__GLIBCXX__) namespace std { class type_info; } // WORKAROUND: http://llvm.org/bugs/show_bug.cgi?id=13364 #endif #include // for 'typeid' to work diff --git a/source/common/utypes.c b/source/common/utypes.c deleted file mode 100644 index c506dd4..0000000 --- a/source/common/utypes.c +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* FILE NAME : utypes.c (previously putil.c) -* -* Date Name Description -* 10/07/2004 grhoten split from putil.c -****************************************************************************** -*/ - -#include "unicode/utypes.h" - -/* u_errorName() ------------------------------------------------------------ */ - -static const char * const -_uErrorInfoName[U_ERROR_WARNING_LIMIT-U_ERROR_WARNING_START]={ - "U_USING_FALLBACK_WARNING", - "U_USING_DEFAULT_WARNING", - "U_SAFECLONE_ALLOCATED_WARNING", - "U_STATE_OLD_WARNING", - "U_STRING_NOT_TERMINATED_WARNING", - "U_SORT_KEY_TOO_SHORT_WARNING", - "U_AMBIGUOUS_ALIAS_WARNING", - "U_DIFFERENT_UCA_VERSION", - "U_PLUGIN_CHANGED_LEVEL_WARNING", -}; - -static const char * const -_uTransErrorName[U_PARSE_ERROR_LIMIT - U_PARSE_ERROR_START]={ - "U_BAD_VARIABLE_DEFINITION", - "U_MALFORMED_RULE", - "U_MALFORMED_SET", - "U_MALFORMED_SYMBOL_REFERENCE", - "U_MALFORMED_UNICODE_ESCAPE", - "U_MALFORMED_VARIABLE_DEFINITION", - "U_MALFORMED_VARIABLE_REFERENCE", - "U_MISMATCHED_SEGMENT_DELIMITERS", - "U_MISPLACED_ANCHOR_START", - "U_MISPLACED_CURSOR_OFFSET", - "U_MISPLACED_QUANTIFIER", - "U_MISSING_OPERATOR", - "U_MISSING_SEGMENT_CLOSE", - "U_MULTIPLE_ANTE_CONTEXTS", - "U_MULTIPLE_CURSORS", - "U_MULTIPLE_POST_CONTEXTS", - "U_TRAILING_BACKSLASH", - "U_UNDEFINED_SEGMENT_REFERENCE", - "U_UNDEFINED_VARIABLE", - "U_UNQUOTED_SPECIAL", - "U_UNTERMINATED_QUOTE", - "U_RULE_MASK_ERROR", - "U_MISPLACED_COMPOUND_FILTER", - "U_MULTIPLE_COMPOUND_FILTERS", - "U_INVALID_RBT_SYNTAX", - "U_INVALID_PROPERTY_PATTERN", - "U_MALFORMED_PRAGMA", - "U_UNCLOSED_SEGMENT", - "U_ILLEGAL_CHAR_IN_SEGMENT", - "U_VARIABLE_RANGE_EXHAUSTED", - "U_VARIABLE_RANGE_OVERLAP", - "U_ILLEGAL_CHARACTER", - "U_INTERNAL_TRANSLITERATOR_ERROR", - "U_INVALID_ID", - "U_INVALID_FUNCTION" -}; - -static const char * const -_uErrorName[U_STANDARD_ERROR_LIMIT]={ - "U_ZERO_ERROR", - - "U_ILLEGAL_ARGUMENT_ERROR", - "U_MISSING_RESOURCE_ERROR", - "U_INVALID_FORMAT_ERROR", - "U_FILE_ACCESS_ERROR", - "U_INTERNAL_PROGRAM_ERROR", - "U_MESSAGE_PARSE_ERROR", - "U_MEMORY_ALLOCATION_ERROR", - "U_INDEX_OUTOFBOUNDS_ERROR", - "U_PARSE_ERROR", - "U_INVALID_CHAR_FOUND", - "U_TRUNCATED_CHAR_FOUND", - "U_ILLEGAL_CHAR_FOUND", - "U_INVALID_TABLE_FORMAT", - "U_INVALID_TABLE_FILE", - "U_BUFFER_OVERFLOW_ERROR", - "U_UNSUPPORTED_ERROR", - "U_RESOURCE_TYPE_MISMATCH", - "U_ILLEGAL_ESCAPE_SEQUENCE", - "U_UNSUPPORTED_ESCAPE_SEQUENCE", - "U_NO_SPACE_AVAILABLE", - "U_CE_NOT_FOUND_ERROR", - "U_PRIMARY_TOO_LONG_ERROR", - "U_STATE_TOO_OLD_ERROR", - "U_TOO_MANY_ALIASES_ERROR", - "U_ENUM_OUT_OF_SYNC_ERROR", - "U_INVARIANT_CONVERSION_ERROR", - "U_INVALID_STATE_ERROR", - "U_COLLATOR_VERSION_MISMATCH", - "U_USELESS_COLLATOR_ERROR", - "U_NO_WRITE_PERMISSION" -}; -static const char * const -_uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = { - "U_UNEXPECTED_TOKEN", - "U_MULTIPLE_DECIMAL_SEPARATORS", - "U_MULTIPLE_EXPONENTIAL_SYMBOLS", - "U_MALFORMED_EXPONENTIAL_PATTERN", - "U_MULTIPLE_PERCENT_SYMBOLS", - "U_MULTIPLE_PERMILL_SYMBOLS", - "U_MULTIPLE_PAD_SPECIFIERS", - "U_PATTERN_SYNTAX_ERROR", - "U_ILLEGAL_PAD_POSITION", - "U_UNMATCHED_BRACES", - "U_UNSUPPORTED_PROPERTY", - "U_UNSUPPORTED_ATTRIBUTE", - "U_ARGUMENT_TYPE_MISMATCH", - "U_DUPLICATE_KEYWORD", - "U_UNDEFINED_KEYWORD", - "U_DEFAULT_KEYWORD_MISSING", - "U_DECIMAL_NUMBER_SYNTAX_ERROR", - "U_FORMAT_INEXACT_ERROR" -}; - -static const char * const -_uBrkErrorName[U_BRK_ERROR_LIMIT - U_BRK_ERROR_START] = { - "U_BRK_INTERNAL_ERROR", - "U_BRK_HEX_DIGITS_EXPECTED", - "U_BRK_SEMICOLON_EXPECTED", - "U_BRK_RULE_SYNTAX", - "U_BRK_UNCLOSED_SET", - "U_BRK_ASSIGN_ERROR", - "U_BRK_VARIABLE_REDFINITION", - "U_BRK_MISMATCHED_PAREN", - "U_BRK_NEW_LINE_IN_QUOTED_STRING", - "U_BRK_UNDEFINED_VARIABLE", - "U_BRK_INIT_ERROR", - "U_BRK_RULE_EMPTY_SET", - "U_BRK_UNRECOGNIZED_OPTION", - "U_BRK_MALFORMED_RULE_TAG" -}; - -static const char * const -_uRegexErrorName[U_REGEX_ERROR_LIMIT - U_REGEX_ERROR_START] = { - "U_REGEX_INTERNAL_ERROR", - "U_REGEX_RULE_SYNTAX", - "U_REGEX_INVALID_STATE", - "U_REGEX_BAD_ESCAPE_SEQUENCE", - "U_REGEX_PROPERTY_SYNTAX", - "U_REGEX_UNIMPLEMENTED", - "U_REGEX_MISMATCHED_PAREN", - "U_REGEX_NUMBER_TOO_BIG", - "U_REGEX_BAD_INTERVAL", - "U_REGEX_MAX_LT_MIN", - "U_REGEX_INVALID_BACK_REF", - "U_REGEX_INVALID_FLAG", - "U_REGEX_LOOK_BEHIND_LIMIT", - "U_REGEX_SET_CONTAINS_STRING", - "U_REGEX_OCTAL_TOO_BIG", - "U_REGEX_MISSING_CLOSE_BRACKET", - "U_REGEX_INVALID_RANGE", - "U_REGEX_STACK_OVERFLOW", - "U_REGEX_TIME_OUT", - "U_REGEX_STOPPED_BY_CALLER", - "U_REGEX_PATTERN_TOO_BIG", - "U_REGEX_INVALID_CAPTURE_GROUP_NAME" -}; - -static const char * const -_uIDNAErrorName[U_IDNA_ERROR_LIMIT - U_IDNA_ERROR_START] = { - "U_STRINGPREP_PROHIBITED_ERROR", - "U_STRINGPREP_UNASSIGNED_ERROR", - "U_STRINGPREP_CHECK_BIDI_ERROR", - "U_IDNA_STD3_ASCII_RULES_ERROR", - "U_IDNA_ACE_PREFIX_ERROR", - "U_IDNA_VERIFICATION_ERROR", - "U_IDNA_LABEL_TOO_LONG_ERROR", - "U_IDNA_ZERO_LENGTH_LABEL_ERROR", - "U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR" -}; - -static const char * const -_uPluginErrorName[U_PLUGIN_ERROR_LIMIT - U_PLUGIN_ERROR_START] = { - "U_PLUGIN_TOO_HIGH", - "U_PLUGIN_DIDNT_SET_LEVEL", -}; - -U_CAPI const char * U_EXPORT2 -u_errorName(UErrorCode code) { - if(U_ZERO_ERROR <= code && code < U_STANDARD_ERROR_LIMIT) { - return _uErrorName[code]; - } else if(U_ERROR_WARNING_START <= code && code < U_ERROR_WARNING_LIMIT) { - return _uErrorInfoName[code - U_ERROR_WARNING_START]; - } else if(U_PARSE_ERROR_START <= code && code < U_PARSE_ERROR_LIMIT){ - return _uTransErrorName[code - U_PARSE_ERROR_START]; - } else if(U_FMT_PARSE_ERROR_START <= code && code < U_FMT_PARSE_ERROR_LIMIT){ - return _uFmtErrorName[code - U_FMT_PARSE_ERROR_START]; - } else if (U_BRK_ERROR_START <= code && code < U_BRK_ERROR_LIMIT){ - return _uBrkErrorName[code - U_BRK_ERROR_START]; - } else if (U_REGEX_ERROR_START <= code && code < U_REGEX_ERROR_LIMIT) { - return _uRegexErrorName[code - U_REGEX_ERROR_START]; - } else if(U_IDNA_ERROR_START <= code && code < U_IDNA_ERROR_LIMIT) { - return _uIDNAErrorName[code - U_IDNA_ERROR_START]; - } else if(U_PLUGIN_ERROR_START <= code && code < U_PLUGIN_ERROR_LIMIT) { - return _uPluginErrorName[code - U_PLUGIN_ERROR_START]; - } else { - return "[BOGUS UErrorCode]"; - } -} - -/* - * Hey, Emacs, please set the following: - * - * Local Variables: - * indent-tabs-mode: nil - * End: - * - */ diff --git a/source/common/uvector.cpp b/source/common/uvector.cpp index 863ef78..cf19edf 100644 --- a/source/common/uvector.cpp +++ b/source/common/uvector.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uvector.h b/source/common/uvector.h index 6439b4e..5ec6e11 100644 --- a/source/common/uvector.h +++ b/source/common/uvector.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uvectr32.cpp b/source/common/uvectr32.cpp index 41f5fb7..d1ae659 100644 --- a/source/common/uvectr32.cpp +++ b/source/common/uvectr32.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uvectr32.h b/source/common/uvectr32.h index e3a0577..9112d9f 100644 --- a/source/common/uvectr32.h +++ b/source/common/uvectr32.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/uvectr64.cpp b/source/common/uvectr64.cpp index b69e193..0815659 100644 --- a/source/common/uvectr64.cpp +++ b/source/common/uvectr64.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** diff --git a/source/common/uvectr64.h b/source/common/uvectr64.h index b78ed87..5571685 100644 --- a/source/common/uvectr64.h +++ b/source/common/uvectr64.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** diff --git a/source/common/wintz.c b/source/common/wintz.c deleted file mode 100644 index a8696af..0000000 --- a/source/common/wintz.c +++ /dev/null @@ -1,441 +0,0 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 2005-2015, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File WINTZ.CPP -* -******************************************************************************** -*/ - -#include "unicode/utypes.h" - -#if U_PLATFORM_HAS_WIN32_API - -#include "wintz.h" -#include "cmemory.h" -#include "cstring.h" - -#include "unicode/ures.h" -#include "unicode/ustring.h" - -# define WIN32_LEAN_AND_MEAN -# define VC_EXTRALEAN -# define NOUSER -# define NOSERVICE -# define NOIME -# define NOMCX -#include - -#define MAX_LENGTH_ID 40 - -/* The layout of the Tzi value in the registry */ -typedef struct -{ - int32_t bias; - int32_t standardBias; - int32_t daylightBias; - SYSTEMTIME standardDate; - SYSTEMTIME daylightDate; -} TZI; - -/** - * Various registry keys and key fragments. - */ -static const char CURRENT_ZONE_REGKEY[] = "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"; -/* static const char STANDARD_NAME_REGKEY[] = "StandardName"; Currently unused constant */ -static const char STANDARD_TIME_REGKEY[] = " Standard Time"; -static const char TZI_REGKEY[] = "TZI"; -static const char STD_REGKEY[] = "Std"; - -/** - * HKLM subkeys used to probe for the flavor of Windows. Note that we - * specifically check for the "GMT" zone subkey; this is present on - * NT, but on XP has become "GMT Standard Time". We need to - * discriminate between these cases. - */ -static const char* const WIN_TYPE_PROBE_REGKEY[] = { - /* WIN_9X_ME_TYPE */ - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones", - - /* WIN_NT_TYPE */ - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\GMT" - - /* otherwise: WIN_2K_XP_TYPE */ -}; - -/** - * The time zone root subkeys (under HKLM) for different flavors of - * Windows. - */ -static const char* const TZ_REGKEY[] = { - /* WIN_9X_ME_TYPE */ - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones\\", - - /* WIN_NT_TYPE | WIN_2K_XP_TYPE */ - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\" -}; - -/** - * Flavor of Windows, from our perspective. Not a real OS version, - * but rather the flavor of the layout of the time zone information in - * the registry. - */ -enum { - WIN_9X_ME_TYPE = 1, - WIN_NT_TYPE = 2, - WIN_2K_XP_TYPE = 3 -}; - -static int32_t gWinType = 0; - -static int32_t detectWindowsType() -{ - int32_t winType; - LONG result; - HKEY hkey; - - /* Detect the version of windows by trying to open a sequence of - probe keys. We don't use the OS version API because what we - really want to know is how the registry is laid out. - Specifically, is it 9x/Me or not, and is it "GMT" or "GMT - Standard Time". */ - for (winType = 0; winType < 2; winType++) { - result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, - WIN_TYPE_PROBE_REGKEY[winType], - 0, - KEY_QUERY_VALUE, - &hkey); - RegCloseKey(hkey); - - if (result == ERROR_SUCCESS) { - break; - } - } - - return winType+1; /* +1 to bring it inline with the enum */ -} - -static LONG openTZRegKey(HKEY *hkey, const char *winid) -{ - char subKeyName[110]; /* TODO: why 96?? */ - char *name; - LONG result; - - /* This isn't thread safe, but it's good enough because the result should be constant per system. */ - if (gWinType <= 0) { - gWinType = detectWindowsType(); - } - - uprv_strcpy(subKeyName, TZ_REGKEY[(gWinType != WIN_9X_ME_TYPE)]); - name = &subKeyName[strlen(subKeyName)]; - uprv_strcat(subKeyName, winid); - - if (gWinType == WIN_9X_ME_TYPE) { - /* Remove " Standard Time" */ - char *pStd = uprv_strstr(subKeyName, STANDARD_TIME_REGKEY); - if (pStd) { - *pStd = 0; - } - } - - result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, - subKeyName, - 0, - KEY_QUERY_VALUE, - hkey); - return result; -} - -static LONG getTZI(const char *winid, TZI *tzi) -{ - DWORD cbData = sizeof(TZI); - LONG result; - HKEY hkey; - - result = openTZRegKey(&hkey, winid); - - if (result == ERROR_SUCCESS) { - result = RegQueryValueExA(hkey, - TZI_REGKEY, - NULL, - NULL, - (LPBYTE)tzi, - &cbData); - - } - - RegCloseKey(hkey); - - return result; -} - -static LONG getSTDName(const char *winid, char *regStdName, int32_t length) { - DWORD cbData = length; - LONG result; - HKEY hkey; - - result = openTZRegKey(&hkey, winid); - - if (result == ERROR_SUCCESS) { - result = RegQueryValueExA(hkey, - STD_REGKEY, - NULL, - NULL, - (LPBYTE)regStdName, - &cbData); - - } - - RegCloseKey(hkey); - - return result; -} - -static LONG getTZKeyName(char* tzKeyName, int32_t length) { - HKEY hkey; - LONG result = FALSE; - DWORD cbData = length; - - if(ERROR_SUCCESS == RegOpenKeyExA( - HKEY_LOCAL_MACHINE, - CURRENT_ZONE_REGKEY, - 0, - KEY_QUERY_VALUE, - &hkey)) - { - result = RegQueryValueExA( - hkey, - "TimeZoneKeyName", - NULL, - NULL, - (LPBYTE)tzKeyName, - &cbData); - } - - return result; -} - -/* - This code attempts to detect the Windows time zone, as set in the - Windows Date and Time control panel. It attempts to work on - multiple flavors of Windows (9x, Me, NT, 2000, XP) and on localized - installs. It works by directly interrogating the registry and - comparing the data there with the data returned by the - GetTimeZoneInformation API, along with some other strategies. The - registry contains time zone data under one of two keys (depending on - the flavor of Windows): - - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\ - HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ - - Under this key are several subkeys, one for each time zone. These - subkeys are named "Pacific" on Win9x/Me and "Pacific Standard Time" - on WinNT/2k/XP. There are some other wrinkles; see the code for - details. The subkey name is NOT LOCALIZED, allowing us to support - localized installs. - - Under the subkey are data values. We care about: - - Std Standard time display name, localized - TZI Binary block of data - - The TZI data is of particular interest. It contains the offset, two - more offsets for standard and daylight time, and the start and end - rules. This is the same data returned by the GetTimeZoneInformation - API. The API may modify the data on the way out, so we have to be - careful, but essentially we do a binary comparison against the TZI - blocks of various registry keys. When we find a match, we know what - time zone Windows is set to. Since the registry key is not - localized, we can then translate the key through a simple table - lookup into the corresponding ICU time zone. - - This strategy doesn't always work because there are zones which - share an offset and rules, so more than one TZI block will match. - For example, both Tokyo and Seoul are at GMT+9 with no DST rules; - their TZI blocks are identical. For these cases, we fall back to a - name lookup. We attempt to match the display name as stored in the - registry for the current zone to the display name stored in the - registry for various Windows zones. By comparing the registry data - directly we avoid conversion complications. - - Author: Alan Liu - Since: ICU 2.6 - Based on original code by Carl Brown -*/ - -/** - * Main Windows time zone detection function. Returns the Windows - * time zone, translated to an ICU time zone, or NULL upon failure. - */ -U_CFUNC const char* U_EXPORT2 -uprv_detectWindowsTimeZone() { - UErrorCode status = U_ZERO_ERROR; - UResourceBundle* bundle = NULL; - char* icuid = NULL; - char apiStdName[MAX_LENGTH_ID]; - char regStdName[MAX_LENGTH_ID]; - char tmpid[MAX_LENGTH_ID]; - int32_t len; - int id; - int errorCode; - UChar ISOcodeW[3]; /* 2 letter iso code in UTF-16*/ - char ISOcodeA[3]; /* 2 letter iso code in ansi */ - - LONG result; - TZI tziKey; - TZI tziReg; - TIME_ZONE_INFORMATION apiTZI; - - BOOL isVistaOrHigher; - BOOL tryPreVistaFallback; - OSVERSIONINFO osVerInfo; - - /* Obtain TIME_ZONE_INFORMATION from the API, and then convert it - to TZI. We could also interrogate the registry directly; we do - this below if needed. */ - uprv_memset(&apiTZI, 0, sizeof(apiTZI)); - uprv_memset(&tziKey, 0, sizeof(tziKey)); - uprv_memset(&tziReg, 0, sizeof(tziReg)); - GetTimeZoneInformation(&apiTZI); - tziKey.bias = apiTZI.Bias; - uprv_memcpy((char *)&tziKey.standardDate, (char*)&apiTZI.StandardDate, - sizeof(apiTZI.StandardDate)); - uprv_memcpy((char *)&tziKey.daylightDate, (char*)&apiTZI.DaylightDate, - sizeof(apiTZI.DaylightDate)); - - /* Convert the wchar_t* standard name to char* */ - uprv_memset(apiStdName, 0, sizeof(apiStdName)); - wcstombs(apiStdName, apiTZI.StandardName, MAX_LENGTH_ID); - - tmpid[0] = 0; - - id = GetUserGeoID(GEOCLASS_NATION); - errorCode = GetGeoInfoW(id,GEO_ISO2,ISOcodeW,3,0); - u_strToUTF8(ISOcodeA, 3, NULL, ISOcodeW, 3, &status); - - bundle = ures_openDirect(NULL, "windowsZones", &status); - ures_getByKey(bundle, "mapTimezones", bundle, &status); - - /* - Windows Vista+ provides us with a "TimeZoneKeyName" that is not localized - and can be used to directly map a name in our bundle. Try to use that first - if we're on Vista or higher - */ - uprv_memset(&osVerInfo, 0, sizeof(osVerInfo)); - osVerInfo.dwOSVersionInfoSize = sizeof(osVerInfo); - GetVersionEx(&osVerInfo); - isVistaOrHigher = osVerInfo.dwMajorVersion >= 6; /* actually includes Windows Server 2008 as well, but don't worry about it */ - tryPreVistaFallback = TRUE; - if(isVistaOrHigher) { - result = getTZKeyName(regStdName, sizeof(regStdName)); - if(ERROR_SUCCESS == result) { - UResourceBundle* winTZ = ures_getByKey(bundle, regStdName, NULL, &status); - if(U_SUCCESS(status)) { - const UChar* icuTZ = NULL; - if (errorCode != 0) { - icuTZ = ures_getStringByKey(winTZ, ISOcodeA, &len, &status); - } - if (errorCode==0 || icuTZ==NULL) { - /* fallback to default "001" and reset status */ - status = U_ZERO_ERROR; - icuTZ = ures_getStringByKey(winTZ, "001", &len, &status); - } - - if(U_SUCCESS(status)) { - int index=0; - while (! (*icuTZ == '\0' || *icuTZ ==' ')) { - tmpid[index++]=(char)(*icuTZ++); /* safe to assume 'char' is ASCII compatible on windows */ - } - tmpid[index]='\0'; - tryPreVistaFallback = FALSE; - } - } - ures_close(winTZ); - } - } - - if(tryPreVistaFallback) { - - /* Note: We get the winid not from static tables but from resource bundle. */ - while (U_SUCCESS(status) && ures_hasNext(bundle)) { - UBool idFound = FALSE; - const char* winid; - UResourceBundle* winTZ = ures_getNextResource(bundle, NULL, &status); - if (U_FAILURE(status)) { - break; - } - winid = ures_getKey(winTZ); - result = getTZI(winid, &tziReg); - - if (result == ERROR_SUCCESS) { - /* Windows alters the DaylightBias in some situations. - Using the bias and the rules suffices, so overwrite - these unreliable fields. */ - tziKey.standardBias = tziReg.standardBias; - tziKey.daylightBias = tziReg.daylightBias; - - if (uprv_memcmp((char *)&tziKey, (char*)&tziReg, sizeof(tziKey)) == 0) { - const UChar* icuTZ = NULL; - if (errorCode != 0) { - icuTZ = ures_getStringByKey(winTZ, ISOcodeA, &len, &status); - } - if (errorCode==0 || icuTZ==NULL) { - /* fallback to default "001" and reset status */ - status = U_ZERO_ERROR; - icuTZ = ures_getStringByKey(winTZ, "001", &len, &status); - } - - if (U_SUCCESS(status)) { - /* Get the standard name from the registry key to compare with - the one from Windows API call. */ - uprv_memset(regStdName, 0, sizeof(regStdName)); - result = getSTDName(winid, regStdName, sizeof(regStdName)); - if (result == ERROR_SUCCESS) { - if (uprv_strcmp(apiStdName, regStdName) == 0) { - idFound = TRUE; - } - } - - /* tmpid buffer holds the ICU timezone ID corresponding to the timezone ID from Windows. - * If none is found, tmpid buffer will contain a fallback ID (i.e. the time zone ID matching - * the current time zone information) - */ - if (idFound || tmpid[0] == 0) { - /* if icuTZ has more than one city, take only the first (i.e. terminate icuTZ at first space) */ - int index=0; - while (! (*icuTZ == '\0' || *icuTZ ==' ')) { - tmpid[index++]=(char)(*icuTZ++); /* safe to assume 'char' is ASCII compatible on windows */ - } - tmpid[index]='\0'; - } - } - } - } - ures_close(winTZ); - if (idFound) { - break; - } - } - } - - /* - * Copy the timezone ID to icuid to be returned. - */ - if (tmpid[0] != 0) { - len = uprv_strlen(tmpid); - icuid = (char*)uprv_calloc(len + 1, sizeof(char)); - if (icuid != NULL) { - uprv_strcpy(icuid, tmpid); - } - } - - ures_close(bundle); - - return icuid; -} - -#endif /* U_PLATFORM_HAS_WIN32_API */ diff --git a/source/common/wintz.h b/source/common/wintz.h index 1d4db87..7be30eb 100644 --- a/source/common/wintz.h +++ b/source/common/wintz.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 and later: Unicode, Inc. and others. +// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** @@ -16,7 +16,9 @@ #include "unicode/utypes.h" -#if U_PLATFORM_HAS_WIN32_API +// This file contains only desktop windows behavior +// Windows UWP calls Windows::Globalization directly, so this isn't needed there. +#if U_PLATFORM_USES_ONLY_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0) /** * \file @@ -31,6 +33,6 @@ U_CDECL_END U_CFUNC const char* U_EXPORT2 uprv_detectWindowsTimeZone(); -#endif /* U_PLATFORM_HAS_WIN32_API */ +#endif /* U_PLATFORM_USES_ONLY_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0) */ #endif /* __WINTZ */ diff --git a/source/config/dist.mk b/source/config/dist.mk index 442782b..f7430f6 100644 --- a/source/config/dist.mk +++ b/source/config/dist.mk @@ -8,6 +8,8 @@ # This is to be called from ../Makefile.in # # This will only work if subversion is installed. +# You must checkout ICU4C at the `/icu` or `/icu/icu4c` level - not just `…/source` +# also note that `make dist` does NOT reflect any local modifications - it only does a fresh SVN export. top_builddir = . @@ -17,13 +19,12 @@ include $(top_builddir)/icudefs.mk DISTY_TMP=dist/tmp DISTY_ICU=$(DISTY_TMP)/icu DISTY_DATA=$(DISTY_ICU)/source/data -DISTY_RMV=brkitr coll curr lang locales mappings rbnf region translit xml zone +DISTY_RMV=brkitr coll curr lang locales mappings rbnf region translit xml zone misc unit DISTY_RMDIR=$(DISTY_RMV:%=$(DISTY_DATA)/%) DISTY_IN=$(DISTY_DATA)/in DOCZIP=icu-docs.zip SVNTOP=$(top_srcdir)/.. -SVNDOT=$(SVNTOP)/.svn SVNVER=$(shell svnversion $(SVNTOP) | cut -d: -f1 | tr -cd 'a-zA-Z0-9') SVNURL=$(shell svn info $(SVNTOP) | grep '^URL:' | cut -d: -f2-) DISTY_VER=$(shell echo $(VERSION) | tr '.' '_' ) @@ -38,17 +39,13 @@ DISTY_DAT=$(firstword $(wildcard data/out/tmp/icudt$(SO_TARGET_VERSION_MAJOR)*.d DISTY_FILES_SRC=$(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) DISTY_FILES=$(DISTY_FILES_SRC) $(DISTY_DOC_ZIP) -$(SVNDOT): - @echo "ERROR: 'dist' will not work unless the parent of the top_srcdir ( $(SVNTOP) ) is checked out from svn, and svn is installed." - false - $(DISTY_FILE_DIR): $(MKINSTALLDIRS) $(DISTY_FILE_DIR) $(DISTY_TMP): $(MKINSTALLDIRS) $(DISTY_TMP) -$(DISTY_DOC_ZIP): $(SVNDOT) $(DOCZIP) $(DISTY_FILE_DIR) +$(DISTY_DOC_ZIP): $(DOCZIP) $(DISTY_FILE_DIR) cp $(DOCZIP) $(DISTY_DOC_ZIP) $(DISTY_DAT): @@ -58,19 +55,22 @@ $(DISTY_DAT): $(DOCZIP): $(MAKE) -C . srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" builddir=. $@ -$(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP): $(SVNDOT) $(DISTY_DAT) $(DISTY_TMP) +$(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP): $(DISTY_DAT) $(DISTY_TMP) @echo "svnversion of $(SVNTOP) is as follows (if this fails, make sure svn is installed..)" svnversion $(SVNTOP) -$(RMV) $(DISTY_FILE) $(DISTY_TMP) $(MKINSTALLDIRS) $(DISTY_TMP) + echo exporting $(SVNVER) svn export -r $(shell echo $(SVNVER) | tr -d 'a-zA-Z' ) $(SVNURL) "$(DISTY_TMP)/icu" ( cd $(DISTY_TMP)/icu/source ; zip -rlq $(DISTY_DATA_ZIP) data ) - $(RMV) $(DISTY_RMDIR) $(MKINSTALLDIRS) $(DISTY_IN) + echo DISTY_DAT=$(DISTY_DAT) cp $(DISTY_DAT) $(DISTY_IN) ( cd $(DISTY_TMP)/icu ; python as_is/bomlist.py > as_is/bomlist.txt || rm -f as_is/bomlist.txt ) - ( cd $(DISTY_TMP) ; tar cfpz $(DISTY_FILE_TGZ) icu ) ( cd $(DISTY_TMP) ; zip -rlq $(DISTY_FILE_ZIP) icu ) + $(RMV) $(DISTY_RMDIR) + ( cd $(DISTY_TMP)/icu ; python as_is/bomlist.py > as_is/bomlist.txt || rm -f as_is/bomlist.txt ) + ( cd $(DISTY_TMP) ; tar cfpz $(DISTY_FILE_TGZ) icu ) ls -l $(DISTY_FILE) dist-local: $(DISTY_FILES) diff --git a/source/config/make2sh.sed b/source/config/make2sh.sed index df53e4e..0f488ba 100644 --- a/source/config/make2sh.sed +++ b/source/config/make2sh.sed @@ -4,6 +4,7 @@ s%^\([a-zA-Z0-9\._-]*\)[ ]*+=%\1=$(\1) % s%^[A-Z]*_SO_TARG*%## &% s%^SHARED_OBJECT.*%## &% +s@^_%.*@## &@ s%^LD_SONAME.*%## &% s%$(\([^\)]*\))%${\1}%g s%^ %#M# % diff --git a/source/config/mh-aix-va b/source/config/mh-aix-va index e1b4236..1572466 100644 --- a/source/config/mh-aix-va +++ b/source/config/mh-aix-va @@ -13,8 +13,8 @@ GEN_DEPS.cc= $(CXX) -E -M $(DEFS) $(CPPFLAGS) # This helps in the data library, # -qproto assumes all functions are prototyped (for optimization) # -qrtti turns on compiler RTTI, required beginning with ICU 4.6 -CFLAGS += -qproto -qroconst -CXXFLAGS += -qproto -qroconst -qrtti +CFLAGS += -qproto -qroconst -qlanglvl=extended +CXXFLAGS += -qproto -qroconst -qrtti -qlanglvl=extended0x # If you readd this line, you must change the SO value #LDFLAGS += -brtl @@ -111,11 +111,31 @@ $(LIBDIR)/%.a : %.so %.o: $(srcdir)/%.c $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< -%.$(STATIC_O): $(srcdir)/%.cpp - $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< + +## C++ compilation rules. + +# This causes escapesrc to be built before other ICU targets. +NEED_ESCAPING=YES + +ifneq ($(SKIP_ESCAPING),) +# no escaping - bootstrap %.o: $(srcdir)/%.cpp $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +else +# convert *.cpp files to _*.cpp with \u / \U escaping +CLEANFILES += _*.cpp +# the actual escaping +_%.cpp: $(srcdir)/%.cpp + @$(BINDIR)/escapesrc$(EXEEXT) $< $@ + +# compilation for static obj +%.$(STATIC_O): _%.cpp + $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< +# compilation for dynamic obj +%.o: _%.cpp + $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +endif ## Dependency rules %.d : %.u diff --git a/source/config/mh-cygwin b/source/config/mh-cygwin index 1cc2d74..c5a3717 100644 --- a/source/config/mh-cygwin +++ b/source/config/mh-cygwin @@ -7,7 +7,7 @@ ## Commands to generate dependency files GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS) -GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS) +GEN_DEPS.cc= $(CXX) -E -MM -std=c++11 $(DEFS) $(CPPFLAGS) ## Flags to create/use a static library ifneq ($(ENABLE_SHARED),YES) diff --git a/source/config/mh-cygwin-msvc b/source/config/mh-cygwin-msvc index 01003ac..4744bb9 100644 --- a/source/config/mh-cygwin-msvc +++ b/source/config/mh-cygwin-msvc @@ -47,8 +47,9 @@ endif # /EHsc enables exception handling # /Zc:wchar_t makes wchar_t a native type. Required for C++ ABI compatibility. # -D_CRT_SECURE_NO_DEPRECATE is needed to quiet warnings about using standard C functions. -CFLAGS+=-GF -nologo -CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t +# -utf-8 set source file encoding to utf-8. +CFLAGS+=-GF -nologo -utf-8 +CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t -utf-8 CPPFLAGS+=-D_CRT_SECURE_NO_DEPRECATE DEFS+=-DWIN32 -DCYGWINMSVC LDFLAGS+=-nologo diff --git a/source/config/mh-cygwin64 b/source/config/mh-cygwin64 index 0af0c88..dc9d1a1 100644 --- a/source/config/mh-cygwin64 +++ b/source/config/mh-cygwin64 @@ -7,7 +7,7 @@ ## Commands to generate dependency files GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS) -GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS) +GEN_DEPS.cc= $(CXX) -E -MM -std=c++11 $(DEFS) $(CPPFLAGS) ## Flags to create/use a static library ifneq ($(ENABLE_SHARED),YES) diff --git a/source/config/mh-msys-msvc b/source/config/mh-msys-msvc index 6b57c26..05fe514 100644 --- a/source/config/mh-msys-msvc +++ b/source/config/mh-msys-msvc @@ -52,8 +52,9 @@ endif # -EHsc enables exception handling # -Zc:wchar_t makes wchar_t a native type. Required for C++ ABI compatibility. # -D_CRT_SECURE_NO_DEPRECATE is needed to quiet warnings about using standard C functions. -CFLAGS+=-GF -nologo -CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t +# -utf-8 set source file encoding to utf-8. +CFLAGS+=-GF -nologo -utf-8 +CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t -utf-8 CPPFLAGS+=-D_CRT_SECURE_NO_DEPRECATE DEFS+=-DWIN32 -DCYGWINMSVC LDFLAGS+=-nologo diff --git a/source/config/mh-os390 b/source/config/mh-os390 index dbc3a3a..9bd3f9b 100644 --- a/source/config/mh-os390 +++ b/source/config/mh-os390 @@ -69,7 +69,7 @@ SHAREDLIBCXXFLAGS = -Wc,expo # NOCSECT might be used as an optimization option. # -+ means accept any file extension as a C++ file. By default only .C is accepted. CFLAGS += -Wc,DLL,ROS,RENT,'ARCH(7)','LOC(POSIX)',NOANSIALIAS,'LANGLVL(EXTENDED)' $(ICU_IEEE) -CXXFLAGS += -Wc,DLL,ROS,RTTI,'ARCH(7)','LOC(POSIX)',NOANSIALIAS,'LANGLVL(EXTENDED)' $(ICU_IEEE) -+ +CXXFLAGS += -Wc,DLL,ROS,RTTI,'ARCH(7)','LOC(POSIX)',NOANSIALIAS,'LANGLVL(EXTENDED0X)' $(ICU_IEEE) -+ ARFLAGS = -cr # _MSE_PROTOS usually interacts with _XOPEN_SOURCE. It affects some standard @@ -208,10 +208,27 @@ endif %.o: $(srcdir)/%.c $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< +# This causes escapesrc to be built before other ICU targets. +NEED_ESCAPING=YES + +ifneq ($(SKIP_ESCAPING),) %.$(STATIC_O): $(srcdir)/%.cpp $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< %.o: $(srcdir)/%.cpp $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +else +# convert *.cpp files to _*.cpp with \u / \U escaping +CLEANFILES += _*.cpp + +# the actual escaping +_%.cpp: $(srcdir)/%.cpp + @$(BINDIR)/escapesrc$(EXEEXT) $< $@ + +%.$(STATIC_O): _%.cpp + $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< +%.o: _%.cpp + $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +endif ## Dependency rules %.d : %.u diff --git a/source/config/mh-solaris b/source/config/mh-solaris index 469b210..e1d4ccf 100644 --- a/source/config/mh-solaris +++ b/source/config/mh-solaris @@ -5,6 +5,10 @@ ## Copyright (c) 1999-2010, International Business Machines Corporation and ## others. All Rights Reserved. +## Flags for ICU 59+ +CXXFLAGS += -std=c++11 +CFLAGS += -std=c99 + ## Flags for position independent code SHAREDLIBCFLAGS = -KPIC SHAREDLIBCXXFLAGS = -KPIC @@ -59,17 +63,34 @@ SO= so ## Non-shared intermediate object suffix STATIC_O = o +# This causes escapesrc to be built before other ICU targets. +NEED_ESCAPING=YES + ## Compilation rules %.$(STATIC_O): $(srcdir)/%.c $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $< %.o: $(srcdir)/%.c $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< -%.$(STATIC_O): $(srcdir)/%.cpp - $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< +ifneq ($(SKIP_ESCAPING),) %.o: $(srcdir)/%.cpp $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +%.$(STATIC_O): $(srcdir)/%.cpp + $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< +else +# convert *.cpp files to _*.cpp with \u / \U escaping +CLEANFILES += _*.cpp + +# the actual escaping +_%.cpp: $(srcdir)/%.cpp + @$(BINDIR)/escapesrc$(EXEEXT) $< $@ +# no escaping - bootstrap +%.$(STATIC_O): _%.cpp + $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< +%.o: _%.cpp + $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< +endif ## Dependency rules %.d : $(srcdir)/%.c diff --git a/source/configure b/source/configure index 29732a1..abcdeb9 100755 --- a/source/configure +++ b/source/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ICU 58.1. +# Generated by GNU Autoconf 2.69 for ICU 59.1. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ICU' PACKAGE_TARNAME='International Components for Unicode' -PACKAGE_VERSION='58.1' -PACKAGE_STRING='ICU 58.1' +PACKAGE_VERSION='59.1' +PACKAGE_STRING='ICU 59.1' PACKAGE_BUGREPORT='http://icu-project.org/bugs' PACKAGE_URL='http://icu-project.org' @@ -674,7 +674,6 @@ GENCCODE_ASSEMBLY HAVE_MMAP LIB_THREAD U_HAVE_ATOMIC -U_HAVE_STD_STRING ENABLE_RPATH U_ENABLE_DYLOAD U_HAVE_PLUGINS @@ -682,6 +681,7 @@ PLUGINS_TRUE U_ENABLE_TRACING U_DISABLE_RENAMING AR +SED RANLIB U_DEFAULT_SHOW_DRAFT UCLN_NO_AUTO_CLEANUP @@ -1357,7 +1357,7 @@ if test "$ac_init_help" = "long"; then # 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. cat <<_ACEOF -\`configure' configures ICU 58.1 to adapt to many kinds of systems. +\`configure' configures ICU 59.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1423,7 +1423,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ICU 58.1:";; + short | recursive ) echo "Configuration of ICU 59.1:";; esac cat <<\_ACEOF @@ -1559,7 +1559,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ICU configure 58.1 +ICU configure 59.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2251,7 +2251,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ICU $as_me 58.1, which was +It was created by ICU $as_me 59.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -5561,6 +5561,77 @@ else fi +# need sed +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + # look for 'ar' the proper way if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. @@ -5917,11 +5988,11 @@ $as_echo "no" >&6; } fi if [ "$GXX" = yes ]; then - # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++0x, + # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++11, # and check that the compiler still works. if ! echo "$CXXFLAGS" | grep '\-std=' >/dev/null 2>&1; then OLD_CXXFLAGS="${CXXFLAGS}" - CXXFLAGS="$CXXFLAGS --std=c++0x" + CXXFLAGS="$CXXFLAGS -std=c++11" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have a C++11 compiler" >&5 $as_echo_n "checking if we have a C++11 compiler... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5944,9 +6015,9 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cxx11_okay" >&5 $as_echo "$cxx11_okay" >&6; } if [ $cxx11_okay = yes ]; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Adding CXXFLAGS option --std=c++0x" >&5 -$as_echo "$as_me: Adding CXXFLAGS option --std=c++0x" >&6;} - UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} --std=c++0x" + { $as_echo "$as_me:${as_lineno-$LINENO}: Adding CXXFLAGS option -std=c++11" >&5 +$as_echo "$as_me: Adding CXXFLAGS option -std=c++11" >&6;} + UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -std=c++11" else CXXFLAGS="$OLD_CXXFLAGS" fi @@ -5958,37 +6029,6 @@ $as_echo "$as_me: Adding CXXFLAGS option --std=c++0x" >&6;} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if #include works" >&5 -$as_echo_n "checking if #include works... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdstring=yes -else - ac_cv_header_stdstring=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdstring" >&5 -$as_echo "$ac_cv_header_stdstring" >&6; } -if test $ac_cv_header_stdstring = yes -then - U_HAVE_STD_STRING=1 -else - U_HAVE_STD_STRING=0 - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STD_STRING=0" -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if #include works" >&5 $as_echo_n "checking if #include works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -7800,7 +7840,7 @@ echo "CXXFLAGS=$CXXFLAGS" # output the Makefiles -ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile" +ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile tools/escapesrc/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -8345,7 +8385,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ICU $as_me 58.1, which was +This file was extended by ICU $as_me 59.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8399,7 +8439,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ICU config.status 58.1 +ICU config.status 59.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -8545,6 +8585,7 @@ do "tools/pkgdata/Makefile") CONFIG_FILES="$CONFIG_FILES tools/pkgdata/Makefile" ;; "tools/tzcode/Makefile") CONFIG_FILES="$CONFIG_FILES tools/tzcode/Makefile" ;; "tools/gencfu/Makefile") CONFIG_FILES="$CONFIG_FILES tools/gencfu/Makefile" ;; + "tools/escapesrc/Makefile") CONFIG_FILES="$CONFIG_FILES tools/escapesrc/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/compat/Makefile") CONFIG_FILES="$CONFIG_FILES test/compat/Makefile" ;; "test/testdata/Makefile") CONFIG_FILES="$CONFIG_FILES test/testdata/Makefile" ;; diff --git a/source/configure.ac b/source/configure.ac index eb62936..bfbf772 100644 --- a/source/configure.ac +++ b/source/configure.ac @@ -371,6 +371,9 @@ AC_SUBST(U_DEFAULT_SHOW_DRAFT) AC_PROG_RANLIB +# need sed +AC_PROG_SED + # look for 'ar' the proper way AC_CHECK_TOOL(AR, ar, false) @@ -492,17 +495,17 @@ else fi if [[ "$GXX" = yes ]]; then - # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++0x, + # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++11, # and check that the compiler still works. if ! echo "$CXXFLAGS" | grep '\-std=' >/dev/null 2>&1; then OLD_CXXFLAGS="${CXXFLAGS}" - CXXFLAGS="$CXXFLAGS --std=c++0x" + CXXFLAGS="$CXXFLAGS -std=c++11" AC_MSG_CHECKING([[if we have a C++11 compiler]]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx11_okay=yes],[cxx11_okay=no]) AC_MSG_RESULT($cxx11_okay) if [[ $cxx11_okay = yes ]]; then - AC_MSG_NOTICE([Adding CXXFLAGS option --std=c++0x]) - UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} --std=c++0x" + AC_MSG_NOTICE([Adding CXXFLAGS option -std=c++11]) + UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -std=c++11" else CXXFLAGS="$OLD_CXXFLAGS" fi @@ -514,19 +517,6 @@ if [[ "$GXX" = yes ]]; then fi fi -AC_MSG_CHECKING([[if #include works]]) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [ac_cv_header_stdstring=yes], [ac_cv_header_stdstring=no]) -AC_MSG_RESULT($ac_cv_header_stdstring) -if test $ac_cv_header_stdstring = yes -then - U_HAVE_STD_STRING=1 -else - U_HAVE_STD_STRING=0 - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STD_STRING=0" -fi -AC_SUBST(U_HAVE_STD_STRING) - - AC_MSG_CHECKING([[if #include works]]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [ac_cv_header_atomic=yes], [ac_cv_header_atomic=no]) AC_MSG_RESULT($ac_cv_header_atomic) @@ -1362,6 +1352,7 @@ AC_CONFIG_FILES([icudefs.mk \ tools/pkgdata/Makefile \ tools/tzcode/Makefile \ tools/gencfu/Makefile \ + tools/escapesrc/Makefile \ test/Makefile \ test/compat/Makefile \ test/testdata/Makefile \ diff --git a/source/data/brkitr/brkfiles.mk b/source/data/brkitr/brkfiles.mk index b85cbe5..64f5a24 100644 --- a/source/data/brkitr/brkfiles.mk +++ b/source/data/brkitr/brkfiles.mk @@ -1,17 +1,17 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -BRK_RES_CLDR_VERSION = %version% +BRK_RES_CLDR_VERSION = 31.0.1 # A list of txt's to build # Note: # # If you are thinking of modifying this file, READ THIS. # # Instead of changing this file [unless you want to check it back in], -# you should consider creating a '%local%' file in this same directory. +# you should consider creating a 'brklocal.mk' file in this same directory. # Then, you can have your local changes remain even if you upgrade or # reconfigure ICU. # -# Example '%local%' files: +# Example 'brklocal.mk' files: # # * To add an additional locale to the list: # _____________________________________________________ diff --git a/source/data/brkitr/root.txt b/source/data/brkitr/root.txt index 92832ef..2167dee 100644 --- a/source/data/brkitr/root.txt +++ b/source/data/brkitr/root.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License root{ - Version{"2.1.30.50"} + Version{"2.1.32.92"} boundaries{ grapheme:process(dependency){"char.brk"} line:process(dependency){"line.brk"} diff --git a/source/data/brkitr/rules/char.txt b/source/data/brkitr/rules/char.txt index a8d9c8f..5362960 100644 --- a/source/data/brkitr/rules/char.txt +++ b/source/data/brkitr/rules/char.txt @@ -9,7 +9,8 @@ # ICU Character Break Rules, also known as Grapheme Cluster Boundaries # See Unicode Standard Annex #29. # These rules are based on UAX #29 Revision 29 for Unicode Version 9.0 -# plus proposed updates for Emoji 4.0 from https://goo.gl/cluFCn +# Plus revisions to rule GB 11 from http://unicode.org/cldr/trac/ticket/10088 +# Plus additional characters introduces with Emoji 5, http://www.unicode.org/reports/tr51/proposed.html # # Character Class Definitions. @@ -35,11 +36,11 @@ $LVT = [\p{Grapheme_Cluster_Break = LVT}]; # Emoji defintions -$E_Base = [[\p{Grapheme_Cluster_Break = EB}] \U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$E_Base = [\p{Grapheme_Cluster_Break = EB}]; $E_Modifier = [\p{Grapheme_Cluster_Break = EM}]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; $E_Base_GAZ = [\p{Grapheme_Cluster_Break = EBG}]; $EmojiNRK = [[\p{Emoji}] - [\p{Grapheme_Cluster_Break = Regional_Indicator}*\u00230-9©®™〰〽]]; @@ -67,7 +68,7 @@ $Prepend [^$Control $CR $LF]; ($E_Base | $E_Base_GAZ) $Extend* $E_Modifier; # GB 11 -($Extended_Pict | $EmojiNRK) $ZWJ ($Extended_Pict | $EmojiNRK); +($Extended_Pict | $EmojiNRK) $Extend* $ZWJ ($Extended_Pict | $EmojiNRK); # GB 12-13. Keep pairs of regional indicators together # Note that hard break '/' rule triggers only if there are three or more initial RIs, @@ -96,7 +97,7 @@ $SpacingMark [^$Control $CR $LF]; $E_Modifier $Extend* ($E_Base | $E_Base_GAZ); # GB 11 Don't break between ZWJ and Glue_After_ZWJ -($Extended_Pict | $EmojiNRK) $ZWJ ($Extended_Pict | $EmojiNRK); +($Extended_Pict | $EmojiNRK) $ZWJ $Extend* ($Extended_Pict | $EmojiNRK); # GB 12-13. Going backwards, we must scan through any number of regional indicators as pairs. # diff --git a/source/data/brkitr/rules/line.txt b/source/data/brkitr/rules/line.txt index 254a36b..6e6dbc3 100644 --- a/source/data/brkitr/rules/line.txt +++ b/source/data/brkitr/rules/line.txt @@ -38,7 +38,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -72,8 +72,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_fi.txt b/source/data/brkitr/rules/line_fi.txt index 01e6b0a..0a0a4c4 100644 --- a/source/data/brkitr/rules/line_fi.txt +++ b/source/data/brkitr/rules/line_fi.txt @@ -44,7 +44,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -78,8 +78,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_loose.txt b/source/data/brkitr/rules/line_loose.txt index 2b43ac8..32028e7 100644 --- a/source/data/brkitr/rules/line_loose.txt +++ b/source/data/brkitr/rules/line_loose.txt @@ -45,7 +45,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -80,8 +80,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_loose_cj.txt b/source/data/brkitr/rules/line_loose_cj.txt index 1cb6d36..8f3404d 100644 --- a/source/data/brkitr/rules/line_loose_cj.txt +++ b/source/data/brkitr/rules/line_loose_cj.txt @@ -53,7 +53,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EXX = [\uFF01 \uFF1F]; $EX = [[:LineBreak = Exclamation:] - $EXX]; @@ -91,8 +91,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_loose_fi.txt b/source/data/brkitr/rules/line_loose_fi.txt index d294584..3d75a9c 100644 --- a/source/data/brkitr/rules/line_loose_fi.txt +++ b/source/data/brkitr/rules/line_loose_fi.txt @@ -42,7 +42,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -77,8 +77,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_normal.txt b/source/data/brkitr/rules/line_normal.txt index b1d0d74..dd6ed1a 100644 --- a/source/data/brkitr/rules/line_normal.txt +++ b/source/data/brkitr/rules/line_normal.txt @@ -42,7 +42,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -76,8 +76,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_normal_cj.txt b/source/data/brkitr/rules/line_normal_cj.txt index d1cb65a..dd202ef 100644 --- a/source/data/brkitr/rules/line_normal_cj.txt +++ b/source/data/brkitr/rules/line_normal_cj.txt @@ -44,7 +44,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -79,8 +79,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/line_normal_fi.txt b/source/data/brkitr/rules/line_normal_fi.txt index 0695097..070f946 100644 --- a/source/data/brkitr/rules/line_normal_fi.txt +++ b/source/data/brkitr/rules/line_normal_fi.txt @@ -42,7 +42,7 @@ $CL = [:LineBreak = Close_Punctuation:]; # $CM = [:LineBreak = Combining_Mark:]; $CP = [:LineBreak = Close_Parenthesis:]; $CR = [:LineBreak = Carriage_Return:]; -$EB = [[:LineBreak = EB:]\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$EB = [:LineBreak = EB:]; $EM = [:LineBreak = EM:]; $EX = [:LineBreak = Exclamation:]; $GL = [:LineBreak = Glue:]; @@ -76,8 +76,8 @@ $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; # 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. diff --git a/source/data/brkitr/rules/word.txt b/source/data/brkitr/rules/word.txt index ea483c2..277dc92 100644 --- a/source/data/brkitr/rules/word.txt +++ b/source/data/brkitr/rules/word.txt @@ -10,6 +10,7 @@ # See Unicode Standard Annex #29. # These rules are based on UAX #29 Revision 29 for Unicode Version 9.0 # with additions for Emoji Sequences from https://goo.gl/cluFCn +# Plus additional characters introduces with Emoji 5, http://www.unicode.org/reports/tr51/proposed.html # # Note: Updates to word.txt will usually need to be merged into # word_POSIX.txt also. @@ -44,11 +45,11 @@ $MidLetter = [\p{Word_Break = MidLetter}]; $MidNum = [\p{Word_Break = MidNum}]; $Numeric = [\p{Word_Break = Numeric}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$E_Base = [\p{Word_Break = EB}\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$E_Base = [\p{Word_Break = EB}]; $E_Modifier = [\p{Word_Break = EM}]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; $EBG = [\p{Word_Break = EBG}]; $EmojiNRK = [[\p{Emoji}] - [\p{Word_Break = Regional_Indicator}\u002a\u00230-9©®™〰〽]]; diff --git a/source/data/brkitr/rules/word_POSIX.txt b/source/data/brkitr/rules/word_POSIX.txt index 4ca3a20..a44e7b0 100644 --- a/source/data/brkitr/rules/word_POSIX.txt +++ b/source/data/brkitr/rules/word_POSIX.txt @@ -10,6 +10,7 @@ # See Unicode Standard Annex #29. # These rules are based on UAX #29 Revision 29 for Unicode Version 9.0 # with additions for Emoji Sequences from https://goo.gl/cluFCn +# Plus additional characters introduces with Emoji 5, http://www.unicode.org/reports/tr51/proposed.html # # Note: Updates to word.txt will usually need to be merged into # word_POSIX.txt also. @@ -44,11 +45,11 @@ $MidLetter = [\p{Word_Break = MidLetter} - [\:]]; $MidNum = [\p{Word_Break = MidNum} [.]]; $Numeric = [\p{Word_Break = Numeric}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$E_Base = [\p{Word_Break = EB}\U0001F3C2\U0001F3C7\U0001F3CC\U0001F46A-\U0001F46D\U0001F46F\U0001F574\U0001F6CC]; +$E_Base = [\p{Word_Break = EB}]; $E_Modifier = [\p{Word_Break = EM}]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r12773 -$Extended_Pict = [\U0001F774-\U0001F77F\u2700-\u2701\u2703-\u2704\u270E\u2710-\u2711\u2765-\u2767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\u2605\u2607-\u260D\u260F-\u2610\u2612\u2616-\u2617\u2619-\u261C\u261E-\u261F\u2621\u2624-\u2625\u2627-\u2629\u262B-\u262D\u2630-\u2637\u263B-\u2647\u2654-\u265F\u2661-\u2662\u2664\u2667\u2669-\u267A\u267C-\u267E\u2680-\u2691\u2695\u2698\u269A\u269D-\u269F\u26A2-\u26A9\u26AC-\u26AF\u26B2-\u26BC\u26BF-\u26C3\u26C6-\u26C7\u26C9-\u26CD\u26D0\u26D2\u26D5-\u26E8\u26EB-\u26EF\u26F6\u26FB-\u26FC\u26FE-\u26FF\u2388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90F\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F93F\U0001F94C-\U0001F94F\U0001F95F-\U0001F97F\U0001F992-\U0001F9BF\U0001F9C1-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6D3-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F7-\U0001F6FF]; +# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 +$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; $EBG = [\p{Word_Break = EBG}]; $EmojiNRK = [[\p{Emoji}] - [\p{Word_Break = Regional_Indicator}\u002a\u00230-9©®™〰〽]]; diff --git a/source/data/cldr-icu-readme.txt b/source/data/cldr-icu-readme.txt index df5bb22..ac17ada 100644 --- a/source/data/cldr-icu-readme.txt +++ b/source/data/cldr-icu-readme.txt @@ -52,7 +52,7 @@ # # ANT_OPTS: You may want to set: # -# -Xmx1024m, to give Java more memory; otherwise it may run out +# -Xmx3072m, to give Java more memory; otherwise it may run out # of heap. # # b) CLDR-related variables @@ -124,7 +124,7 @@ # 1a. Java and ant variables, adjust for your system export JAVA_HOME=`/usr/libexec/java_home` -export ANT_OPTS="-Xmx1024m" +export ANT_OPTS="-Xmx3072m" # 1b. CLDR variables, adjust for your setup; with cygwin it might be e.g. # CLDR_DIR=`cygpath -wp /build/cldr` @@ -134,13 +134,12 @@ export CLDR_DIR=$HOME/cldr/trunk # 1c. ICU variables -export ICU4C_DIR=$HOME/icu/icu/trunk -export ICU4J_ROOT=$HOME/icu/icu4j/trunk +export ICU4C_DIR=$HOME/icu/trunk/icu4c +export ICU4J_ROOT=$HOME/icu/trunk/icu4j # 2. Build the CLDR Java tools cd $CLDR_DIR/tools/java -#cd $CLDR_DIR/cldr-tools ant jar # 3. Configure ICU4C, build and test without new data first, to verify that @@ -162,7 +161,7 @@ make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt cd $ICU4C_DIR/source/data ant clean -ant all 2>&1 | tee /tmp/cldrNN-buildLog.txt +ant all 2>&1 | tee /tmp/cldr-newData-buildLog.txt # 5. Check which data files have modifications, which have been added or removed # (if there are no changes, you may not need to proceed further). Make sure the @@ -220,10 +219,12 @@ cd $ICU4J_ROOT ant all 2>&1 | tee /tmp/icu4j-oldData-antAll.txt ant check 2>&1 | tee /tmp/icu4j-oldData-antCheck.txt -# 12. Now build the new data for ICU4J +# 12. Now build the new data and test data for ICU4J cd $ICU4C_DIR/source/data make icu4j-data-install +cd $ICU4C_DIR/source/test/testdata +make icu4j-data-install # 13. Now rebuild ICU4J with the new data and run tests: # Keep a log so you can investigate the errors. @@ -241,25 +242,24 @@ ant check 2>&1 | tee /tmp/icu4j-newData-antCheck.txt cd $ICU4C_DIR/source svn status -# add or remove as necessary, then commit +# add or remove as necessary cd $ICU4J_ROOT svn status -# add or remove as necessary, then commit +# add or remove as necessary + +cd $HOME/icu/trunk/ +# commit -# 16. For an official CLDR data integration into ICU, now tag the CLDR, ICU4J, -# and ICU4C sources with an appropriate CLDR milestone (you can check previous +# 16. For an official CLDR data integration into ICU, now tag the CLDR and +# ICU sources with an appropriate CLDR milestone (you can check previous # tags for format), e.g.: svn copy svn+ssh://unicode.org/repos/cldr/trunk \ svn+ssh://unicode.org/repos/cldr/tags/release-NNN \ --parents -m "cldrbug nnnn: tag cldr sources for NNN" -svn copy svn+ssh://source.icu-project.org/repos/icu/icu4j/trunk \ -svn+ssh://source.icu-project.org/repos/icu/icu4j/tags/cldr-NNN \ ---parents -m 'ticket:mmmm: tag the version used for integrating CLDR NNN' - -svn copy svn+ssh://source.icu-project.org/repos/icu/icu/trunk \ -svn+ssh://source.icu-project.org/repos/icu/icu/tags/cldr-NNN \ +svn copy svn+ssh://source.icu-project.org/repos/icu/trunk \ +svn+ssh://source.icu-project.org/repos/icu/tags/cldr-NNN \ --parents -m 'ticket:mmmm: tag the version used for integrating CLDR NNN' diff --git a/source/data/coll/af.txt b/source/data/coll/af.txt index 9e27b06..6b31bdf 100644 --- a/source/data/coll/af.txt +++ b/source/data/coll/af.txt @@ -5,7 +5,7 @@ af{ collations{ standard{ Sequence{"&N<<<ʼn"} - Version{"30.0.3"} + Version{"31.0.1"} } } } diff --git a/source/data/coll/am.txt b/source/data/coll/am.txt index 10a6c1a..53cf1a4 100644 --- a/source/data/coll/am.txt +++ b/source/data/coll/am.txt @@ -5,7 +5,7 @@ am{ collations{ standard{ Sequence{"[reorder Ethi]"} - Version{"30.0.3"} + Version{"31.0.1"} } } } diff --git a/source/data/coll/ar.txt b/source/data/coll/ar.txt index 9bded73..4a15774 100644 --- a/source/data/coll/ar.txt +++ b/source/data/coll/ar.txt @@ -9,7 +9,7 @@ ar{ "&ت<<ة<<<ﺔ<<<ﺓ" "&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ" } - Version{"30.0.3"} + Version{"31.0.1"} } standard{ Sequence{ @@ -397,7 +397,7 @@ ar{ "‎&ۓ‎=ﮰ‎=ﮱ" "‎&ۀ‎=ﮤ‎=ﮥ" } - Version{"30.0.3"} + Version{"31.0.1"} } } } diff --git a/source/data/coll/ars.txt b/source/data/coll/ars.txt new file mode 100644 index 0000000..8de1f41 --- /dev/null +++ b/source/data/coll/ars.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +ars{ + "%%ALIAS"{"ar"} +} diff --git a/source/data/coll/as.txt b/source/data/coll/as.txt index c35246a..1d16299 100644 --- a/source/data/coll/as.txt +++ b/source/data/coll/as.txt @@ -11,7 +11,7 @@ as{ "&[before 1]ত<ৎ=ত্\u200D" "&হ<ক্ষ" } - Version{"30.0.3"} + Version{"31.0.1"} } } } diff --git a/source/data/coll/az.txt b/source/data/coll/az.txt index 128fa89..d1e6210 100644 --- a/source/data/coll/az.txt +++ b/source/data/coll/az.txt @@ -9,7 +9,7 @@ az{ "[import az-u-co-standard]" "[reorder others]" } - Version{"30.0.3"} + Version{"31.0.1"} } standard{ Sequence{ @@ -26,7 +26,7 @@ az{ "&H + diff --git a/source/data/icu-config.xml b/source/data/icu-config.xml index a2c216c..4ffded9 100644 --- a/source/data/icu-config.xml +++ b/source/data/icu-config.xml @@ -49,6 +49,7 @@ + @@ -252,6 +253,7 @@ + @@ -396,6 +398,7 @@ + diff --git a/source/data/icu-locale-deprecates.xml b/source/data/icu-locale-deprecates.xml index cfd7b1b..a919330 100644 --- a/source/data/icu-locale-deprecates.xml +++ b/source/data/icu-locale-deprecates.xml @@ -9,6 +9,7 @@ */ --> + diff --git a/source/data/icu-rbnf-deprecates.xml b/source/data/icu-rbnf-deprecates.xml index 1b1907f..1a6cee2 100644 --- a/source/data/icu-rbnf-deprecates.xml +++ b/source/data/icu-rbnf-deprecates.xml @@ -9,6 +9,7 @@ */ --> + diff --git a/source/data/in/ubidi.icu b/source/data/in/ubidi.icu index 6e5774c..8cd7c55 100644 Binary files a/source/data/in/ubidi.icu and b/source/data/in/ubidi.icu differ diff --git a/source/data/in/uprops.icu b/source/data/in/uprops.icu index 9e3ce0e..3a986d9 100644 Binary files a/source/data/in/uprops.icu and b/source/data/in/uprops.icu differ diff --git a/source/data/lang/af.txt b/source/data/lang/af.txt index 4882b79..e35ccd9 100644 --- a/source/data/lang/af.txt +++ b/source/data/lang/af.txt @@ -618,7 +618,7 @@ af{ vaii{"Vai-syfers"} } } - Version{"2.1.29.44"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – Alle"} category-list{"{0}: {1}"} diff --git a/source/data/lang/agq.txt b/source/data/lang/agq.txt index 6a24066..aaabc5b 100644 --- a/source/data/lang/agq.txt +++ b/source/data/lang/agq.txt @@ -48,5 +48,5 @@ agq{ zh{"Chàenê"} zu{"Zulù"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ak.txt b/source/data/lang/ak.txt index d9088c6..85f721f 100644 --- a/source/data/lang/ak.txt +++ b/source/data/lang/ak.txt @@ -47,5 +47,5 @@ ak{ zh{"Kyaena kasa"} zu{"Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/am.txt b/source/data/lang/am.txt index ede4237..2182e89 100644 --- a/source/data/lang/am.txt +++ b/source/data/lang/am.txt @@ -688,7 +688,7 @@ am{ vaii{"የቫይ አሃዞች"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — ሁሉም"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ar.txt b/source/data/lang/ar.txt index 4a5d25c..0662d80 100644 --- a/source/data/lang/ar.txt +++ b/source/data/lang/ar.txt @@ -849,7 +849,7 @@ ar{ VALENCIA{"بلنسية"} WADEGILE{"المندرين باللاتينية - ويد–جيلز"} } - Version{"2.1.28.79"} + Version{"2.1.32.86"} characterLabelPattern{ all{"{0} - الكل"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ar_EG.txt b/source/data/lang/ar_EG.txt index 102a250..ccdddda 100644 --- a/source/data/lang/ar_EG.txt +++ b/source/data/lang/ar_EG.txt @@ -4,5 +4,5 @@ ar_EG{ Languages{ da{"الدنماركية"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ar_LY.txt b/source/data/lang/ar_LY.txt index b83cdb5..79356aa 100644 --- a/source/data/lang/ar_LY.txt +++ b/source/data/lang/ar_LY.txt @@ -12,5 +12,5 @@ ar_LY{ sw_CD{"السواحيلية الكونغولية"} ti{"التيغرينية"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ar_SA.txt b/source/data/lang/ar_SA.txt index cf85227..9fe79da 100644 --- a/source/data/lang/ar_SA.txt +++ b/source/data/lang/ar_SA.txt @@ -13,5 +13,5 @@ ar_SA{ sw_CD{"السواحيلية الكونغولية"} ti{"التيغرينية"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ars.txt b/source/data/lang/ars.txt new file mode 100644 index 0000000..9bb22b9 --- /dev/null +++ b/source/data/lang/ars.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +ars{ + "%%ALIAS"{"ar_SA"} +} diff --git a/source/data/lang/as.txt b/source/data/lang/as.txt index af2f9bf..931c55a 100644 --- a/source/data/lang/as.txt +++ b/source/data/lang/as.txt @@ -33,5 +33,5 @@ as{ traditional{"পৰম্পৰাগতভাবে শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/asa.txt b/source/data/lang/asa.txt index 78f6499..cedcb4b 100644 --- a/source/data/lang/asa.txt +++ b/source/data/lang/asa.txt @@ -48,5 +48,5 @@ asa{ zh{"Kichina"} zu{"Kidhulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ast.txt b/source/data/lang/ast.txt index 3b5ddb5..034d2fa 100644 --- a/source/data/lang/ast.txt +++ b/source/data/lang/ast.txt @@ -1077,7 +1077,7 @@ ast{ VALLADER{"VALLADER"} WADEGILE{"romanización de Wade-Giles"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — too"} compatibility{"{0} — compatibilidá"} diff --git a/source/data/lang/az.txt b/source/data/lang/az.txt index baa3a06..316adcf 100644 --- a/source/data/lang/az.txt +++ b/source/data/lang/az.txt @@ -743,7 +743,7 @@ az{ tibt{"Tibet Rəqəmləri"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Bütün"} category-list{"{0}: {1}"} diff --git a/source/data/lang/az_Cyrl.txt b/source/data/lang/az_Cyrl.txt index 913822c..48da152 100644 --- a/source/data/lang/az_Cyrl.txt +++ b/source/data/lang/az_Cyrl.txt @@ -399,7 +399,7 @@ az_Cyrl{ Scripts{ Cyrl{"Кирил"} } - Version{"2.1.27.40"} + Version{"2.1.31.74"} codePatterns{ language{"Дил: {0}"} script{"Скрипт: {0}"} diff --git a/source/data/lang/az_Latn.txt b/source/data/lang/az_Latn.txt index 4ce2adb..4c0b75a 100644 --- a/source/data/lang/az_Latn.txt +++ b/source/data/lang/az_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License az_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/bas.txt b/source/data/lang/bas.txt index 015cccc..12f5bc9 100644 --- a/source/data/lang/bas.txt +++ b/source/data/lang/bas.txt @@ -48,5 +48,5 @@ bas{ zh{"Hɔp u kinà"} zu{"Hɔp u zulù"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/be.txt b/source/data/lang/be.txt index 8d3648c..2c8ecda 100644 --- a/source/data/lang/be.txt +++ b/source/data/lang/be.txt @@ -565,7 +565,7 @@ be{ tibt{"тыбецкія лічбы"} } } - Version{"2.1.29.66"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Усё"} category-list{"{0}: {1}"} diff --git a/source/data/lang/bem.txt b/source/data/lang/bem.txt index 7b52bdb..9f11ce7 100644 --- a/source/data/lang/bem.txt +++ b/source/data/lang/bem.txt @@ -48,5 +48,5 @@ bem{ zh{"Ichi Chainisi"} zu{"Ichi Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/bez.txt b/source/data/lang/bez.txt index 135a6cc..2911e12 100644 --- a/source/data/lang/bez.txt +++ b/source/data/lang/bez.txt @@ -48,5 +48,5 @@ bez{ zh{"Hichina"} zu{"Hizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/bg.txt b/source/data/lang/bg.txt index acb1692..54dce57 100644 --- a/source/data/lang/bg.txt +++ b/source/data/lang/bg.txt @@ -828,7 +828,7 @@ bg{ VALENCIA{"Валенсиански"} WADEGILE{"Уейд-Джайлс романизация"} } - Version{"2.1.30.6"} + Version{"2.1.33.75"} characterLabelPattern{ all{"{0} – всички"} category-list{"{0}: {1}"} diff --git a/source/data/lang/bm.txt b/source/data/lang/bm.txt index 18560fb..49574b9 100644 --- a/source/data/lang/bm.txt +++ b/source/data/lang/bm.txt @@ -48,5 +48,5 @@ bm{ zh{"siniwakan"} zu{"zulukan"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/bn.txt b/source/data/lang/bn.txt index 4eab759..786e767 100644 --- a/source/data/lang/bn.txt +++ b/source/data/lang/bn.txt @@ -826,7 +826,7 @@ bn{ vaii{"ভাই সংখ্যা"} } } - Version{"2.1.29.44"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — সমস্ত"} category-list{"{0}: {1}"} diff --git a/source/data/lang/bn_IN.txt b/source/data/lang/bn_IN.txt index 2d87ff5..c9111aa 100644 --- a/source/data/lang/bn_IN.txt +++ b/source/data/lang/bn_IN.txt @@ -4,5 +4,5 @@ bn_IN{ Languages{ ksh{"কোলোনিয়ান"} } - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/bo.txt b/source/data/lang/bo.txt index a0c7bd0..946d4bf 100644 --- a/source/data/lang/bo.txt +++ b/source/data/lang/bo.txt @@ -21,5 +21,5 @@ bo{ Tibt{"བོད་ཡིག་"} Zxxx{"སྙན་བརྒྱུད། ཡིག་རིགས་སུ་མ་བཀོད་པའི་ཟིན་ཐོ།"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/br.txt b/source/data/lang/br.txt index ce2e4d8..7926a6f 100644 --- a/source/data/lang/br.txt +++ b/source/data/lang/br.txt @@ -732,7 +732,7 @@ br{ VALLADER{"rannyezh romañchek Vallader"} WADEGILE{"romanekadur Wade-Giles"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"{0}"} script{"{0}"} diff --git a/source/data/lang/brx.txt b/source/data/lang/brx.txt index 243dc91..0022238 100644 --- a/source/data/lang/brx.txt +++ b/source/data/lang/brx.txt @@ -609,7 +609,7 @@ brx{ SOLBA{"श्टोलविज़्ज़ा या सोलबीका डायलेक्ट"} TARASK{"तारास्कीएवीचा वर्तनी"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ script{"देवनागरी: {0}"} territory{"क्षेत्र:भारत {0}"} diff --git a/source/data/lang/bs.txt b/source/data/lang/bs.txt index e90cfea..0644438 100644 --- a/source/data/lang/bs.txt +++ b/source/data/lang/bs.txt @@ -788,7 +788,7 @@ bs{ TARASK{"Taraskijevica ortografija"} VALENCIA{"Valencijski"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — sve"} category-list{"{0}: {1}"} diff --git a/source/data/lang/bs_Cyrl.txt b/source/data/lang/bs_Cyrl.txt index cd1c718..ca08547 100644 --- a/source/data/lang/bs_Cyrl.txt +++ b/source/data/lang/bs_Cyrl.txt @@ -702,7 +702,7 @@ bs_Cyrl{ TARASK{"Тараскијевичка ортографија"} VALENCIA{"Валенцијска"} } - Version{"2.1.28.76"} + Version{"2.1.32.72"} codePatterns{ language{"{0}"} script{"{0}"} diff --git a/source/data/lang/bs_Latn.txt b/source/data/lang/bs_Latn.txt index 20b4126..972dc01 100644 --- a/source/data/lang/bs_Latn.txt +++ b/source/data/lang/bs_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bs_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ca.txt b/source/data/lang/ca.txt index f326170..9778547 100644 --- a/source/data/lang/ca.txt +++ b/source/data/lang/ca.txt @@ -994,7 +994,7 @@ ca{ VALLADER{"baix engiadinès"} WADEGILE{"romanització Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — tot"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ce.txt b/source/data/lang/ce.txt index cbca919..33c3cce 100644 --- a/source/data/lang/ce.txt +++ b/source/data/lang/ce.txt @@ -295,7 +295,7 @@ ce{ persian{"гӀажарийн"} } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Мотт: {0}"} script{"Скрипт: {0}"} diff --git a/source/data/lang/cgg.txt b/source/data/lang/cgg.txt index 2bea37c..fea3e5c 100644 --- a/source/data/lang/cgg.txt +++ b/source/data/lang/cgg.txt @@ -48,5 +48,5 @@ cgg{ zh{"Oruchaina"} zu{"Oruzuru"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/chr.txt b/source/data/lang/chr.txt index 689089d..1fdda6c 100644 --- a/source/data/lang/chr.txt +++ b/source/data/lang/chr.txt @@ -537,7 +537,7 @@ chr{ tibt{"ᏘᏇᏔᏂ ᏗᏎᏍᏗ"} } } - Version{"2.1.28.76"} + Version{"2.1.31.74"} characterLabelPattern{ all{"{0} — ᏂᎦᏓ"} compatibility{"{0} — ᎤᏠᏯᏉᏗᏙᎵᎩ"} diff --git a/source/data/lang/ckb.txt b/source/data/lang/ckb.txt index 3d4e1f1..35b18d4 100644 --- a/source/data/lang/ckb.txt +++ b/source/data/lang/ckb.txt @@ -137,5 +137,5 @@ ckb{ Thaa{"تانە"} Thai{"تایلەندی"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/cs.txt b/source/data/lang/cs.txt index 9e8acc7..929ff9c 100644 --- a/source/data/lang/cs.txt +++ b/source/data/lang/cs.txt @@ -957,7 +957,7 @@ cs{ SCOTLAND{"angličtina (Skotsko)"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – vše"} category-list{"{0}: {1}"} diff --git a/source/data/lang/cy.txt b/source/data/lang/cy.txt index 74438d1..ef331d6 100644 --- a/source/data/lang/cy.txt +++ b/source/data/lang/cy.txt @@ -732,7 +732,7 @@ cy{ VAIDIKA{"VAIDIKA"} VALLADER{"VALLADER"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Popeth"} category-list{"{0}: {1}"} diff --git a/source/data/lang/da.txt b/source/data/lang/da.txt index b0341bb..3d2812b 100644 --- a/source/data/lang/da.txt +++ b/source/data/lang/da.txt @@ -953,7 +953,7 @@ da{ VALLADER{"vallader"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — alle"} category-list{"{0}: {1}"} diff --git a/source/data/lang/dav.txt b/source/data/lang/dav.txt index 170f3f9..d85c264 100644 --- a/source/data/lang/dav.txt +++ b/source/data/lang/dav.txt @@ -48,5 +48,5 @@ dav{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/de.txt b/source/data/lang/de.txt index dbe073a..6acd606 100644 --- a/source/data/lang/de.txt +++ b/source/data/lang/de.txt @@ -1016,7 +1016,7 @@ de{ VALENCIA{"Valencianisch"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Alle"} category-list{"{0}: {1}"} diff --git a/source/data/lang/de_AT.txt b/source/data/lang/de_AT.txt index 00da72d..fedf4f5 100644 --- a/source/data/lang/de_AT.txt +++ b/source/data/lang/de_AT.txt @@ -16,5 +16,5 @@ de_AT{ sh{"Serbokroatisch"} szl{"Schlesisch"} } - Version{"2.1.28.73"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/de_CH.txt b/source/data/lang/de_CH.txt index f92ff03..94f3f8f 100644 --- a/source/data/lang/de_CH.txt +++ b/source/data/lang/de_CH.txt @@ -34,5 +34,5 @@ de_CH{ ussystem{"US Mass-System"} } } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/de_LU.txt b/source/data/lang/de_LU.txt index 40b0880..1b16c8b 100644 --- a/source/data/lang/de_LU.txt +++ b/source/data/lang/de_LU.txt @@ -4,5 +4,5 @@ de_LU{ Languages{ be{"Belarussisch"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/dje.txt b/source/data/lang/dje.txt index 186bfb3..86096ce 100644 --- a/source/data/lang/dje.txt +++ b/source/data/lang/dje.txt @@ -48,5 +48,5 @@ dje{ zh{"Sinuwa senni"} zu{"Zulu senni"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/dsb.txt b/source/data/lang/dsb.txt index 8a24ada..5741651 100644 --- a/source/data/lang/dsb.txt +++ b/source/data/lang/dsb.txt @@ -378,7 +378,7 @@ dsb{ tibt{"tibetske cyfry"} } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Rěc: {0}"} script{"Pismo: {0}"} diff --git a/source/data/lang/dua.txt b/source/data/lang/dua.txt index e6ba227..dc04c73 100644 --- a/source/data/lang/dua.txt +++ b/source/data/lang/dua.txt @@ -4,5 +4,5 @@ dua{ Languages{ dua{"duálá"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/dyo.txt b/source/data/lang/dyo.txt index ae9ee38..2e1ac86 100644 --- a/source/data/lang/dyo.txt +++ b/source/data/lang/dyo.txt @@ -48,5 +48,5 @@ dyo{ zh{"sinua"} zu{"sulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/dz.txt b/source/data/lang/dz.txt index 9210f84..c8a2dc8 100644 --- a/source/data/lang/dz.txt +++ b/source/data/lang/dz.txt @@ -234,7 +234,7 @@ dz{ tibt{"ང་བཅས་ཀྱི་ཨང་ཡིག"} } } - Version{"2.1.29.61"} + Version{"2.1.31.34"} codePatterns{ language{"ཁ་སྐད་: {0}"} script{"ཡིག་གཟུགས་: {0}"} diff --git a/source/data/lang/ebu.txt b/source/data/lang/ebu.txt index 7b96351..1a78def 100644 --- a/source/data/lang/ebu.txt +++ b/source/data/lang/ebu.txt @@ -48,5 +48,5 @@ ebu{ zh{"Kĩchina"} zu{"Kĩzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ee.txt b/source/data/lang/ee.txt index f0b002b..4e0cc7a 100644 --- a/source/data/lang/ee.txt +++ b/source/data/lang/ee.txt @@ -299,7 +299,7 @@ ee{ tibt{"tibet digitwo"} } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"gbegbɔgblɔ {0}"} script{"gbeŋɔŋlɔ {0}"} diff --git a/source/data/lang/el.txt b/source/data/lang/el.txt index 9efa836..61bdf6a 100644 --- a/source/data/lang/el.txt +++ b/source/data/lang/el.txt @@ -876,7 +876,7 @@ el{ VALENCIA{"Βαλενθιανά"} WADEGILE{"Εκλατινισμένα Γουάντ-Γκιλς"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Όλα"} category-list{"{0}: {1}"} diff --git a/source/data/lang/en.txt b/source/data/lang/en.txt index 99fbe2d..dc364ea 100644 --- a/source/data/lang/en.txt +++ b/source/data/lang/en.txt @@ -17,6 +17,7 @@ en{ d0{"Transform Destination"} em{"Emoji Presentation Style"} fw{"First day of week"} + h0{"Mixed-in Language"} hc{"Hour Cycle (12 vs 24)"} i0{"Input Method"} k0{"Keyboard"} @@ -934,8 +935,12 @@ en{ zhuyin{"Zhuyin Sort Order"} } d0{ + accents{"To Accented Characters From ASCII Sequence"} ascii{"To ASCII"} + casefold{"To Casefolded"} charname{"To Unicode Character Names"} + fcc{"To Unicode FCC"} + fcd{"To Unicode FCD"} fwidth{"To Fullwidth"} hex{"To Hexadecimal Codes"} hwidth{"To Halfwidth"} @@ -945,6 +950,9 @@ en{ nfkc{"To Unicode NFKC"} nfkd{"To Unicode NFKD"} npinyin{"To Pinyin With Numeric Tones"} + null{"No Change"} + publish{"To Publishing Characters From ASCII"} + remove{"To Empty String"} title{"To Titlecase"} upper{"To Uppercase"} } @@ -962,12 +970,52 @@ en{ tue{"First Day of Week Is Tuesday"} wed{"First Day of Week Is Wednesday"} } + h0{ + hybrid{"Hybrid Language"} + } hc{ h11{"12 Hour System (0–11)"} h12{"12 Hour System (1–12)"} h23{"24 Hour System (0–23)"} h24{"24 Hour System (1–24)"} } + i0{ + handwrit{"Handwriting Input Method"} + pinyin{"Pinyin Input Method"} + und{"Unspecified Input Method"} + wubi{"Wubi Input Method"} + } + k0{ + 101key{"101-Key Keyboard"} + 102key{"102-Key Keyboard"} + 600dpi{"600 dpi Keyboard"} + 768dpi{"768 dpi Keyboard"} + android{"Android Keyboard"} + azerty{"AZERTY-Based Keyboard"} + chromeos{"ChromeOS Keyboard"} + colemak{"Colemak Keyboard"} + dvorak{"Dvorak Keyboard"} + dvorakl{"Dvorak Left-Handed Keyboard"} + dvorakr{"Dvorak Right-Handed Keyboard"} + el220{"Greek 220 Keyboard"} + el319{"Greek 319 Keyboard"} + extended{"Keyboard With Many Extra Characters"} + googlevk{"Google Virtual Keyboard"} + isiri{"Persian ISIRI Keyboard"} + legacy{"Legacy Keyboard"} + lt1205{"Lithuanian LST 1205 Keyboard"} + lt1582{"Lithuanian LST 1582 Keyboard"} + nutaaq{"Inuktitut Nutaaq Keyboard"} + osx{"macOS Keyboard"} + patta{"Thai Pattachote Keyboard"} + qwerty{"QWERTY-Based Keyboard"} + qwertz{"QWERTZ-Based Keyboard"} + ta99{"Tamil 99 Keyboard"} + und{"Unspecified Keyboard"} + var{"Keyboard Variant"} + viqr{"Vietnamese VIQR Keyboard"} + windows{"Windows Keyboard"} + } kr{ currency{"Currency"} digit{"Digits"} @@ -992,8 +1040,17 @@ en{ normal{"Normal Line Breaks For Words"} } m0{ - bgn{"BGN"} - ungegn{"UNGEGN"} + alaloc{"US ALA-LOC Transliteration"} + bgn{"US BGN Transliteration"} + buckwalt{"Buckwalter Arabic Transliteration"} + din{"German DIN Transliteration"} + gost{"CIS GOST Transliteration"} + iso{"ISO Transliteration"} + mcst{"Korean MCST Transliteration"} + mns{"Mongolian National Standard Transliteration"} + prprname{"Personal Name Transliteration Variant"} + satts{"Standard Arabic Technical Transliteration"} + ungegn{"UN GEGN Transliteration"} } ms{ metric{"Metric System"} @@ -1082,10 +1139,21 @@ en{ vaii{"Vai Digits"} wara{"Warang Citi Digits"} } + s0{ + accents{"From Accented Characters To ASCII Sequence"} + ascii{"From ASCII"} + hex{"From Hexadecimal Codes"} + npinyin{"From Pinyin With Numeric Tones"} + publish{"From Publishing Punctuation To ASCII"} + zawgyi{"From Zawgyi Myanmar Encoding"} + } ss{ none{"Sentence Breaks Without Abbreviation Handling"} standard{"Suppress Sentence Breaks After Standard Abbreviations"} } + t0{ + und{"Unspecified Machine Translation"} + } va{ posix{"POSIX Compliant Locale"} } @@ -1152,7 +1220,7 @@ en{ VALENCIA{"Valencian"} WADEGILE{"Wade-Giles Romanization"} } - Version{"2.1.30.50"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — all"} category-list{"{0}: {1}"} diff --git a/source/data/lang/en_001.txt b/source/data/lang/en_001.txt index 3fba1a0..864c6e5 100644 --- a/source/data/lang/en_001.txt +++ b/source/data/lang/en_001.txt @@ -10,5 +10,5 @@ en_001{ yes{"Sort Unicode Normalised"} } } - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_150.txt b/source/data/lang/en_150.txt index 249596a..78561e0 100644 --- a/source/data/lang/en_150.txt +++ b/source/data/lang/en_150.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_150{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_AG.txt b/source/data/lang/en_AG.txt index 93d0c87..8a0d454 100644 --- a/source/data/lang/en_AG.txt +++ b/source/data/lang/en_AG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_AI.txt b/source/data/lang/en_AI.txt index d55549d..07cb4ef 100644 --- a/source/data/lang/en_AI.txt +++ b/source/data/lang/en_AI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_AT.txt b/source/data/lang/en_AT.txt index b4edb3f..09171c4 100644 --- a/source/data/lang/en_AT.txt +++ b/source/data/lang/en_AT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AT{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_AU.txt b/source/data/lang/en_AU.txt index 0e8a773..33fb77f 100644 --- a/source/data/lang/en_AU.txt +++ b/source/data/lang/en_AU.txt @@ -12,5 +12,5 @@ en_AU{ ethiopic{"Ethiopian Calendar"} } } - Version{"2.1.30.50"} + Version{"2.1.32.62"} } diff --git a/source/data/lang/en_BB.txt b/source/data/lang/en_BB.txt index 7083244..84a0efd 100644 --- a/source/data/lang/en_BB.txt +++ b/source/data/lang/en_BB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_BE.txt b/source/data/lang/en_BE.txt index c967ad1..7065545 100644 --- a/source/data/lang/en_BE.txt +++ b/source/data/lang/en_BE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_BM.txt b/source/data/lang/en_BM.txt index 17ad945..a3b9186 100644 --- a/source/data/lang/en_BM.txt +++ b/source/data/lang/en_BM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_BS.txt b/source/data/lang/en_BS.txt index 03e7849..95e82b5 100644 --- a/source/data/lang/en_BS.txt +++ b/source/data/lang/en_BS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_BW.txt b/source/data/lang/en_BW.txt index d4c98cf..a73b7bc 100644 --- a/source/data/lang/en_BW.txt +++ b/source/data/lang/en_BW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_BZ.txt b/source/data/lang/en_BZ.txt index 13545f6..5891076 100644 --- a/source/data/lang/en_BZ.txt +++ b/source/data/lang/en_BZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CA.txt b/source/data/lang/en_CA.txt index 095353c..2fe08f5 100644 --- a/source/data/lang/en_CA.txt +++ b/source/data/lang/en_CA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CA{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CC.txt b/source/data/lang/en_CC.txt index a2871e2..a54c911 100644 --- a/source/data/lang/en_CC.txt +++ b/source/data/lang/en_CC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CH.txt b/source/data/lang/en_CH.txt index d055587..4f2d948 100644 --- a/source/data/lang/en_CH.txt +++ b/source/data/lang/en_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CH{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CK.txt b/source/data/lang/en_CK.txt index 8bd2eba..f59d92a 100644 --- a/source/data/lang/en_CK.txt +++ b/source/data/lang/en_CK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CM.txt b/source/data/lang/en_CM.txt index e0ae421..5aacc7b 100644 --- a/source/data/lang/en_CM.txt +++ b/source/data/lang/en_CM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CX.txt b/source/data/lang/en_CX.txt index a5c8744..8c9c483 100644 --- a/source/data/lang/en_CX.txt +++ b/source/data/lang/en_CX.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_CY.txt b/source/data/lang/en_CY.txt index 81d8657..46da087 100644 --- a/source/data/lang/en_CY.txt +++ b/source/data/lang/en_CY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_DE.txt b/source/data/lang/en_DE.txt index a91a9c4..5d2d71a 100644 --- a/source/data/lang/en_DE.txt +++ b/source/data/lang/en_DE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DE{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_DG.txt b/source/data/lang/en_DG.txt index af3ee11..3d758dd 100644 --- a/source/data/lang/en_DG.txt +++ b/source/data/lang/en_DG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_DK.txt b/source/data/lang/en_DK.txt index 55574ee..5a92d6b 100644 --- a/source/data/lang/en_DK.txt +++ b/source/data/lang/en_DK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DK{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_DM.txt b/source/data/lang/en_DM.txt index 4eaa7dc..b548583 100644 --- a/source/data/lang/en_DM.txt +++ b/source/data/lang/en_DM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_ER.txt b/source/data/lang/en_ER.txt index 228a8a8..7fd2c9a 100644 --- a/source/data/lang/en_ER.txt +++ b/source/data/lang/en_ER.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ER{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_FI.txt b/source/data/lang/en_FI.txt index 12aebe3..f699cc1 100644 --- a/source/data/lang/en_FI.txt +++ b/source/data/lang/en_FI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FI{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_FJ.txt b/source/data/lang/en_FJ.txt index c439098..86f8e9d 100644 --- a/source/data/lang/en_FJ.txt +++ b/source/data/lang/en_FJ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FJ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_FK.txt b/source/data/lang/en_FK.txt index 21a12bc..5df30b2 100644 --- a/source/data/lang/en_FK.txt +++ b/source/data/lang/en_FK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_FM.txt b/source/data/lang/en_FM.txt index 78ffc47..eab91ca 100644 --- a/source/data/lang/en_FM.txt +++ b/source/data/lang/en_FM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GB.txt b/source/data/lang/en_GB.txt index d57d893..6a57c80 100644 --- a/source/data/lang/en_GB.txt +++ b/source/data/lang/en_GB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GB{ %%Parent{"en_001"} - Version{"2.1.29.24"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GD.txt b/source/data/lang/en_GD.txt index ab0594c..7921b24 100644 --- a/source/data/lang/en_GD.txt +++ b/source/data/lang/en_GD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GG.txt b/source/data/lang/en_GG.txt index 8474cce..c0d3839 100644 --- a/source/data/lang/en_GG.txt +++ b/source/data/lang/en_GG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GH.txt b/source/data/lang/en_GH.txt index 33fc5d4..b66f585 100644 --- a/source/data/lang/en_GH.txt +++ b/source/data/lang/en_GH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GI.txt b/source/data/lang/en_GI.txt index 46d28cd..5fe0d68 100644 --- a/source/data/lang/en_GI.txt +++ b/source/data/lang/en_GI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GM.txt b/source/data/lang/en_GM.txt index e0d4e60..1a05f40 100644 --- a/source/data/lang/en_GM.txt +++ b/source/data/lang/en_GM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_GY.txt b/source/data/lang/en_GY.txt index dec9373..f7397d6 100644 --- a/source/data/lang/en_GY.txt +++ b/source/data/lang/en_GY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_HK.txt b/source/data/lang/en_HK.txt index 7c42f22..4a04a10 100644 --- a/source/data/lang/en_HK.txt +++ b/source/data/lang/en_HK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_HK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_IE.txt b/source/data/lang/en_IE.txt index acfab3f..18bb2f3 100644 --- a/source/data/lang/en_IE.txt +++ b/source/data/lang/en_IE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IE{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_IL.txt b/source/data/lang/en_IL.txt index 1500279..76bee45 100644 --- a/source/data/lang/en_IL.txt +++ b/source/data/lang/en_IL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_IM.txt b/source/data/lang/en_IM.txt index b5e5329..e66ecc0 100644 --- a/source/data/lang/en_IM.txt +++ b/source/data/lang/en_IM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_IN.txt b/source/data/lang/en_IN.txt index bc2a255..0b82dc0 100644 --- a/source/data/lang/en_IN.txt +++ b/source/data/lang/en_IN.txt @@ -16,5 +16,5 @@ en_IN{ orya{"Oriya Digits"} } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_IO.txt b/source/data/lang/en_IO.txt index 73736a0..2b8ba3f 100644 --- a/source/data/lang/en_IO.txt +++ b/source/data/lang/en_IO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_JE.txt b/source/data/lang/en_JE.txt index f31e9bf..c47ce4e 100644 --- a/source/data/lang/en_JE.txt +++ b/source/data/lang/en_JE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_JM.txt b/source/data/lang/en_JM.txt index 67edbc7..d812c18 100644 --- a/source/data/lang/en_JM.txt +++ b/source/data/lang/en_JM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_KE.txt b/source/data/lang/en_KE.txt index 26213f7..b11b581 100644 --- a/source/data/lang/en_KE.txt +++ b/source/data/lang/en_KE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_KI.txt b/source/data/lang/en_KI.txt index 3f8c7e1..899b1ea 100644 --- a/source/data/lang/en_KI.txt +++ b/source/data/lang/en_KI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_KN.txt b/source/data/lang/en_KN.txt index f755a2f..35fb03c 100644 --- a/source/data/lang/en_KN.txt +++ b/source/data/lang/en_KN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_KY.txt b/source/data/lang/en_KY.txt index e26f444..bd356e9 100644 --- a/source/data/lang/en_KY.txt +++ b/source/data/lang/en_KY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_LC.txt b/source/data/lang/en_LC.txt index 7abb21b..bfd0689 100644 --- a/source/data/lang/en_LC.txt +++ b/source/data/lang/en_LC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_LR.txt b/source/data/lang/en_LR.txt index 07b6a83..3fc63c0 100644 --- a/source/data/lang/en_LR.txt +++ b/source/data/lang/en_LR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_LS.txt b/source/data/lang/en_LS.txt index b5123bd..b723857 100644 --- a/source/data/lang/en_LS.txt +++ b/source/data/lang/en_LS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MG.txt b/source/data/lang/en_MG.txt index 9eafad7..f967e69 100644 --- a/source/data/lang/en_MG.txt +++ b/source/data/lang/en_MG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MO.txt b/source/data/lang/en_MO.txt index 0b1b6a5..f6dfb6a 100644 --- a/source/data/lang/en_MO.txt +++ b/source/data/lang/en_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MS.txt b/source/data/lang/en_MS.txt index df8f657..a027fc6 100644 --- a/source/data/lang/en_MS.txt +++ b/source/data/lang/en_MS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MT.txt b/source/data/lang/en_MT.txt index 23b6896..8464a2e 100644 --- a/source/data/lang/en_MT.txt +++ b/source/data/lang/en_MT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MU.txt b/source/data/lang/en_MU.txt index bb0cc54..890b025 100644 --- a/source/data/lang/en_MU.txt +++ b/source/data/lang/en_MU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MW.txt b/source/data/lang/en_MW.txt index 58ee57a..873b8e1 100644 --- a/source/data/lang/en_MW.txt +++ b/source/data/lang/en_MW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_MY.txt b/source/data/lang/en_MY.txt index 064aa6e..b36d9ba 100644 --- a/source/data/lang/en_MY.txt +++ b/source/data/lang/en_MY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NA.txt b/source/data/lang/en_NA.txt index 26854fe..5f0af42 100644 --- a/source/data/lang/en_NA.txt +++ b/source/data/lang/en_NA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NA{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NF.txt b/source/data/lang/en_NF.txt index 0a360ca..358d626 100644 --- a/source/data/lang/en_NF.txt +++ b/source/data/lang/en_NF.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NF{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NG.txt b/source/data/lang/en_NG.txt index 5038494..745a114 100644 --- a/source/data/lang/en_NG.txt +++ b/source/data/lang/en_NG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NL.txt b/source/data/lang/en_NL.txt index 21bbdc9..9d0d0cd 100644 --- a/source/data/lang/en_NL.txt +++ b/source/data/lang/en_NL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NL{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NR.txt b/source/data/lang/en_NR.txt index 039e457..165856c 100644 --- a/source/data/lang/en_NR.txt +++ b/source/data/lang/en_NR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NU.txt b/source/data/lang/en_NU.txt index eb82604..266914a 100644 --- a/source/data/lang/en_NU.txt +++ b/source/data/lang/en_NU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_NZ.txt b/source/data/lang/en_NZ.txt index 2c73397..99e896c 100644 --- a/source/data/lang/en_NZ.txt +++ b/source/data/lang/en_NZ.txt @@ -5,5 +5,5 @@ en_NZ{ Languages{ mi{"Māori"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_PG.txt b/source/data/lang/en_PG.txt index c1792a4..6aa4d92 100644 --- a/source/data/lang/en_PG.txt +++ b/source/data/lang/en_PG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_PH.txt b/source/data/lang/en_PH.txt index 0ca66f9..080d0e6 100644 --- a/source/data/lang/en_PH.txt +++ b/source/data/lang/en_PH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_PK.txt b/source/data/lang/en_PK.txt index ccbdf7f..fef2013 100644 --- a/source/data/lang/en_PK.txt +++ b/source/data/lang/en_PK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_PN.txt b/source/data/lang/en_PN.txt index 5bf94f0..4094568 100644 --- a/source/data/lang/en_PN.txt +++ b/source/data/lang/en_PN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_PW.txt b/source/data/lang/en_PW.txt index 0af3d13..30541dc 100644 --- a/source/data/lang/en_PW.txt +++ b/source/data/lang/en_PW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_RW.txt b/source/data/lang/en_RW.txt index 7bb21c0..76b4d89 100644 --- a/source/data/lang/en_RW.txt +++ b/source/data/lang/en_RW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_RW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SB.txt b/source/data/lang/en_SB.txt index cb507b5..e2de69a 100644 --- a/source/data/lang/en_SB.txt +++ b/source/data/lang/en_SB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SC.txt b/source/data/lang/en_SC.txt index 699d679..77c65fa 100644 --- a/source/data/lang/en_SC.txt +++ b/source/data/lang/en_SC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SD.txt b/source/data/lang/en_SD.txt index 6206b27..87a33e2 100644 --- a/source/data/lang/en_SD.txt +++ b/source/data/lang/en_SD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SE.txt b/source/data/lang/en_SE.txt index d7fa572..31f586b 100644 --- a/source/data/lang/en_SE.txt +++ b/source/data/lang/en_SE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SE{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SG.txt b/source/data/lang/en_SG.txt index 66e6ec7..5250ec4 100644 --- a/source/data/lang/en_SG.txt +++ b/source/data/lang/en_SG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SG{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SH.txt b/source/data/lang/en_SH.txt index 968da99..cf6ab49 100644 --- a/source/data/lang/en_SH.txt +++ b/source/data/lang/en_SH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SI.txt b/source/data/lang/en_SI.txt index fedf1c0..a259492 100644 --- a/source/data/lang/en_SI.txt +++ b/source/data/lang/en_SI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SI{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SL.txt b/source/data/lang/en_SL.txt index 4005802..3e61485 100644 --- a/source/data/lang/en_SL.txt +++ b/source/data/lang/en_SL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SS.txt b/source/data/lang/en_SS.txt index 002988b..2b3a430 100644 --- a/source/data/lang/en_SS.txt +++ b/source/data/lang/en_SS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SX.txt b/source/data/lang/en_SX.txt index 9862443..ec1778f 100644 --- a/source/data/lang/en_SX.txt +++ b/source/data/lang/en_SX.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_SZ.txt b/source/data/lang/en_SZ.txt index 47c792d..cc8b6f1 100644 --- a/source/data/lang/en_SZ.txt +++ b/source/data/lang/en_SZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TC.txt b/source/data/lang/en_TC.txt index eaabbe1..852eb0f 100644 --- a/source/data/lang/en_TC.txt +++ b/source/data/lang/en_TC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TK.txt b/source/data/lang/en_TK.txt index 797d773..020c31b 100644 --- a/source/data/lang/en_TK.txt +++ b/source/data/lang/en_TK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TO.txt b/source/data/lang/en_TO.txt index f1697f5..d27b6ec 100644 --- a/source/data/lang/en_TO.txt +++ b/source/data/lang/en_TO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TT.txt b/source/data/lang/en_TT.txt index 599a8fe..21b8b30 100644 --- a/source/data/lang/en_TT.txt +++ b/source/data/lang/en_TT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TV.txt b/source/data/lang/en_TV.txt index a2c5021..4ebd07d 100644 --- a/source/data/lang/en_TV.txt +++ b/source/data/lang/en_TV.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TV{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_TZ.txt b/source/data/lang/en_TZ.txt index c0c2960..5e30f2b 100644 --- a/source/data/lang/en_TZ.txt +++ b/source/data/lang/en_TZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_UG.txt b/source/data/lang/en_UG.txt index 3b6c1e4..eaac010 100644 --- a/source/data/lang/en_UG.txt +++ b/source/data/lang/en_UG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_UG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_VC.txt b/source/data/lang/en_VC.txt index de17869..12317cf 100644 --- a/source/data/lang/en_VC.txt +++ b/source/data/lang/en_VC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_VG.txt b/source/data/lang/en_VG.txt index e6a295b..ba6619b 100644 --- a/source/data/lang/en_VG.txt +++ b/source/data/lang/en_VG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_VU.txt b/source/data/lang/en_VU.txt index 2cecbf4..12b8824 100644 --- a/source/data/lang/en_VU.txt +++ b/source/data/lang/en_VU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_WS.txt b/source/data/lang/en_WS.txt index a3f70e3..8c90fd7 100644 --- a/source/data/lang/en_WS.txt +++ b/source/data/lang/en_WS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_WS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_ZA.txt b/source/data/lang/en_ZA.txt index d528625..0461373 100644 --- a/source/data/lang/en_ZA.txt +++ b/source/data/lang/en_ZA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZA{ %%Parent{"en_001"} - Version{"2.1.27.64"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_ZM.txt b/source/data/lang/en_ZM.txt index 05bb346..19ed0d0 100644 --- a/source/data/lang/en_ZM.txt +++ b/source/data/lang/en_ZM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/en_ZW.txt b/source/data/lang/en_ZW.txt index e725848..bb5dbed 100644 --- a/source/data/lang/en_ZW.txt +++ b/source/data/lang/en_ZW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/eo.txt b/source/data/lang/eo.txt index 7a8faf8..82693f7 100644 --- a/source/data/lang/eo.txt +++ b/source/data/lang/eo.txt @@ -156,5 +156,5 @@ eo{ zu{"zulua"} zxx{"nelingvaĵo"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es.txt b/source/data/lang/es.txt index cafd3ff..5609b2e 100644 --- a/source/data/lang/es.txt +++ b/source/data/lang/es.txt @@ -845,7 +845,7 @@ es{ VALENCIA{"Valenciano"} WADEGILE{"Romanización Wade-Giles"} } - Version{"2.1.28.80"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Todo"} category-list{"{0}: {1}"} diff --git a/source/data/lang/es_419.txt b/source/data/lang/es_419.txt index 324950d..87b9468 100644 --- a/source/data/lang/es_419.txt +++ b/source/data/lang/es_419.txt @@ -50,7 +50,7 @@ es_419{ uksystem{"sistema inglés"} } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} characterLabelPattern{ enclosed{"{0} — Adjunto"} extended{"{0} — Extendido"} diff --git a/source/data/lang/es_AR.txt b/source/data/lang/es_AR.txt index 0847712..f8b0bb3 100644 --- a/source/data/lang/es_AR.txt +++ b/source/data/lang/es_AR.txt @@ -18,5 +18,5 @@ es_AR{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_BO.txt b/source/data/lang/es_BO.txt index c3cfa2f..94a9aa0 100644 --- a/source/data/lang/es_BO.txt +++ b/source/data/lang/es_BO.txt @@ -18,5 +18,5 @@ es_BO{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_BR.txt b/source/data/lang/es_BR.txt index 2f5e37a..e68498b 100644 --- a/source/data/lang/es_BR.txt +++ b/source/data/lang/es_BR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_BR{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_BZ.txt b/source/data/lang/es_BZ.txt new file mode 100644 index 0000000..aa10911 --- /dev/null +++ b/source/data/lang/es_BZ.txt @@ -0,0 +1,6 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +es_BZ{ + %%Parent{"es_419"} + Version{"2.1.32.37"} +} diff --git a/source/data/lang/es_CL.txt b/source/data/lang/es_CL.txt index 194fd96..ed469a2 100644 --- a/source/data/lang/es_CL.txt +++ b/source/data/lang/es_CL.txt @@ -23,5 +23,5 @@ es_CL{ phonebook{"orden de directorio telefónico"} } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_CO.txt b/source/data/lang/es_CO.txt index 2fe1ed1..84181c1 100644 --- a/source/data/lang/es_CO.txt +++ b/source/data/lang/es_CO.txt @@ -18,5 +18,5 @@ es_CO{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_CR.txt b/source/data/lang/es_CR.txt index ee6f9c0..3e108b8 100644 --- a/source/data/lang/es_CR.txt +++ b/source/data/lang/es_CR.txt @@ -18,5 +18,5 @@ es_CR{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_CU.txt b/source/data/lang/es_CU.txt index 791d7f5..66f010e 100644 --- a/source/data/lang/es_CU.txt +++ b/source/data/lang/es_CU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_CU{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_DO.txt b/source/data/lang/es_DO.txt index 825fa94..2f0c761 100644 --- a/source/data/lang/es_DO.txt +++ b/source/data/lang/es_DO.txt @@ -18,5 +18,5 @@ es_DO{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_EC.txt b/source/data/lang/es_EC.txt index f634c98..440f31c 100644 --- a/source/data/lang/es_EC.txt +++ b/source/data/lang/es_EC.txt @@ -18,5 +18,5 @@ es_EC{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_GT.txt b/source/data/lang/es_GT.txt index cb79018..8807e3a 100644 --- a/source/data/lang/es_GT.txt +++ b/source/data/lang/es_GT.txt @@ -18,5 +18,5 @@ es_GT{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_HN.txt b/source/data/lang/es_HN.txt index 040acdd..e5774b0 100644 --- a/source/data/lang/es_HN.txt +++ b/source/data/lang/es_HN.txt @@ -18,5 +18,5 @@ es_HN{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_MX.txt b/source/data/lang/es_MX.txt index aa9ae7e..0a1c9b1 100644 --- a/source/data/lang/es_MX.txt +++ b/source/data/lang/es_MX.txt @@ -87,5 +87,5 @@ es_MX{ tibt{"Dígitos en tibetano"} } } - Version{"2.1.28.76"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_NI.txt b/source/data/lang/es_NI.txt index 65de27d..9c8fada 100644 --- a/source/data/lang/es_NI.txt +++ b/source/data/lang/es_NI.txt @@ -18,5 +18,5 @@ es_NI{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_PA.txt b/source/data/lang/es_PA.txt index ea7c239..1856f3d 100644 --- a/source/data/lang/es_PA.txt +++ b/source/data/lang/es_PA.txt @@ -18,5 +18,5 @@ es_PA{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_PE.txt b/source/data/lang/es_PE.txt index 60f56bb..1e64516 100644 --- a/source/data/lang/es_PE.txt +++ b/source/data/lang/es_PE.txt @@ -18,5 +18,5 @@ es_PE{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_PR.txt b/source/data/lang/es_PR.txt index 9ca3fa9..ea43a9f 100644 --- a/source/data/lang/es_PR.txt +++ b/source/data/lang/es_PR.txt @@ -11,5 +11,5 @@ es_PR{ ss{"siswati"} wo{"wolof"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_PY.txt b/source/data/lang/es_PY.txt index 1b3f446..d9cccdc 100644 --- a/source/data/lang/es_PY.txt +++ b/source/data/lang/es_PY.txt @@ -18,5 +18,5 @@ es_PY{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_SV.txt b/source/data/lang/es_SV.txt index aa6bc4b..61df978 100644 --- a/source/data/lang/es_SV.txt +++ b/source/data/lang/es_SV.txt @@ -11,5 +11,5 @@ es_SV{ ss{"siswati"} wo{"wolof"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_US.txt b/source/data/lang/es_US.txt index c5de946..65c2f2a 100644 --- a/source/data/lang/es_US.txt +++ b/source/data/lang/es_US.txt @@ -46,5 +46,5 @@ es_US{ laoo{"números en lao"} } } - Version{"2.1.27.99"} + Version{"2.1.31.74"} } diff --git a/source/data/lang/es_UY.txt b/source/data/lang/es_UY.txt index 2344e94..38b881e 100644 --- a/source/data/lang/es_UY.txt +++ b/source/data/lang/es_UY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_UY{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/es_VE.txt b/source/data/lang/es_VE.txt index 18b8145..9fee6ec 100644 --- a/source/data/lang/es_VE.txt +++ b/source/data/lang/es_VE.txt @@ -18,5 +18,5 @@ es_VE{ wo{"wolof"} zgh{"tamazight marroquí estándar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/et.txt b/source/data/lang/et.txt index 5ea108c..f813615 100644 --- a/source/data/lang/et.txt +++ b/source/data/lang/et.txt @@ -1011,7 +1011,7 @@ et{ VALENCIA{"valentsia"} WADEGILE{"Wade’i-Gilesi latinisatsioon"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Kõik"} category-list{"{0}: {1}"} diff --git a/source/data/lang/eu.txt b/source/data/lang/eu.txt index 98069cc..69a2e0a 100644 --- a/source/data/lang/eu.txt +++ b/source/data/lang/eu.txt @@ -628,7 +628,7 @@ eu{ SCOTLAND{"ESKOZIAR INGELESA"} VALENCIA{"VALENTZIERA"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Guztiak"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ewo.txt b/source/data/lang/ewo.txt index 2749c96..8b8678f 100644 --- a/source/data/lang/ewo.txt +++ b/source/data/lang/ewo.txt @@ -48,5 +48,5 @@ ewo{ zh{"Ǹkɔ́bɔ tsainís"} zu{"ǹkɔ́bɔ zulú"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/fa.txt b/source/data/lang/fa.txt index 85c2b73..b292072 100644 --- a/source/data/lang/fa.txt +++ b/source/data/lang/fa.txt @@ -851,7 +851,7 @@ fa{ SAAHO{"ساهویی"} SCOTLAND{"انگلیسی معیار اسکاتلند"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — همه"} category-list{"{0}: {1}"} diff --git a/source/data/lang/fa_AF.txt b/source/data/lang/fa_AF.txt index 8a5199e..5d2411e 100644 --- a/source/data/lang/fa_AF.txt +++ b/source/data/lang/fa_AF.txt @@ -32,5 +32,5 @@ fa_AF{ Scripts{ Mong{"مغلی"} } - Version{"2.1.29.44"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ff.txt b/source/data/lang/ff.txt index 7b472dd..d93f363 100644 --- a/source/data/lang/ff.txt +++ b/source/data/lang/ff.txt @@ -48,5 +48,5 @@ ff{ zh{"Sinuwaare"} zu{"Suluŋkoore"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/fi.txt b/source/data/lang/fi.txt index 9dec409..680e7be 100644 --- a/source/data/lang/fi.txt +++ b/source/data/lang/fi.txt @@ -1106,7 +1106,7 @@ fi{ Variants%secondary{ FONUPA{"suomalais-ugrilainen tarkekirjoitus"} } - Version{"2.1.29.88"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – Kaikki"} category-list{"{0}: {1}"} diff --git a/source/data/lang/fil.txt b/source/data/lang/fil.txt index a3b9df8..089bd4f 100644 --- a/source/data/lang/fil.txt +++ b/source/data/lang/fil.txt @@ -630,7 +630,7 @@ fil{ PINYIN{"Pinyin Romanization"} WADEGILE{"Wade-Giles Romanization"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Lahat"} category-list{"{0}: {1}"} diff --git a/source/data/lang/fo.txt b/source/data/lang/fo.txt index 2529c58..18d9ed8 100644 --- a/source/data/lang/fo.txt +++ b/source/data/lang/fo.txt @@ -550,7 +550,7 @@ fo{ POLYTON{"polytonísk"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Alt"} compatibility{"{0} — Sambæri"} diff --git a/source/data/lang/fr.txt b/source/data/lang/fr.txt index 9d3cf9f..036b86f 100644 --- a/source/data/lang/fr.txt +++ b/source/data/lang/fr.txt @@ -962,7 +962,7 @@ fr{ VALENCIA{"valencien"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — tout"} category-list{"{0}: {1}"} diff --git a/source/data/lang/fr_BE.txt b/source/data/lang/fr_BE.txt index 90ceb2f..68f47b6 100644 --- a/source/data/lang/fr_BE.txt +++ b/source/data/lang/fr_BE.txt @@ -13,5 +13,5 @@ fr_BE{ smn{"same d’Inari"} sms{"same skolt"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/fr_CA.txt b/source/data/lang/fr_CA.txt index df38990..dd578b3 100644 --- a/source/data/lang/fr_CA.txt +++ b/source/data/lang/fr_CA.txt @@ -88,5 +88,5 @@ fr_CA{ taml{"chiffres tamouls traditionnels"} } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/fr_CH.txt b/source/data/lang/fr_CH.txt index f82100e..29fa168 100644 --- a/source/data/lang/fr_CH.txt +++ b/source/data/lang/fr_CH.txt @@ -6,5 +6,5 @@ fr_CH{ pdc{"allemand de Pennsylvanie"} sdh{"kurde méridional"} } - Version{"2.1.27.96"} + Version{"2.1.32.48"} } diff --git a/source/data/lang/fur.txt b/source/data/lang/fur.txt index 21f09a0..244d062 100644 --- a/source/data/lang/fur.txt +++ b/source/data/lang/fur.txt @@ -299,7 +299,7 @@ fur{ SOLBA{"dialet di Stolvize"} VALENCIA{"valenzian"} } - Version{"2.1.28.76"} + Version{"2.1.31.33"} codePatterns{ language{"Lenghe: {0}"} script{"Scriture: {0}"} diff --git a/source/data/lang/fy.txt b/source/data/lang/fy.txt index 0b02b1d..4ff9554 100644 --- a/source/data/lang/fy.txt +++ b/source/data/lang/fy.txt @@ -886,7 +886,7 @@ fy{ VALLADER{"Vallader"} WADEGILE{"Wade-Giles-romanisering"} } - Version{"2.1.29.44"} + Version{"2.1.31.86"} codePatterns{ language{"Taal: {0}"} script{"Skrift: {0}"} diff --git a/source/data/lang/ga.txt b/source/data/lang/ga.txt index 07b3c5d..b119bb4 100644 --- a/source/data/lang/ga.txt +++ b/source/data/lang/ga.txt @@ -529,7 +529,7 @@ ga{ VALENCIA{"Vaileinsis"} WADEGILE{"Rómhánú Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Uile"} category-list{"{0}: {1}:"} diff --git a/source/data/lang/gd.txt b/source/data/lang/gd.txt index 8774695..65e3c3c 100644 --- a/source/data/lang/gd.txt +++ b/source/data/lang/gd.txt @@ -879,7 +879,7 @@ gd{ Variants{ SCOTLAND{"Beurla Bhun-Tomhasach na h-Alba"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Cànan: {0}"} script{"Litreadh: {0}"} diff --git a/source/data/lang/gl.txt b/source/data/lang/gl.txt index c2c360d..51e9030 100644 --- a/source/data/lang/gl.txt +++ b/source/data/lang/gl.txt @@ -626,7 +626,7 @@ gl{ vaii{"Díxitos Vai"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} (todo)"} category-list{"{0}: {1}"} diff --git a/source/data/lang/gsw.txt b/source/data/lang/gsw.txt index dfd17fc..ed97483 100644 --- a/source/data/lang/gsw.txt +++ b/source/data/lang/gsw.txt @@ -619,7 +619,7 @@ gsw{ SOLBA{"Solbica-Mundart"} TARASK{"Taraskievica-Rächtschriibig"} } - Version{"2.1.28.76"} + Version{"2.1.32.59"} codePatterns{ language{"Schpraach: {0}"} script{"Schrift: {0}"} diff --git a/source/data/lang/gu.txt b/source/data/lang/gu.txt index 0d2a972..8f85f54 100644 --- a/source/data/lang/gu.txt +++ b/source/data/lang/gu.txt @@ -843,7 +843,7 @@ gu{ PINYIN{"પિનયિન રોમનાઇઝેશન"} WADEGILE{"વેડ-ગિલ્સ રોમનાઇઝેશન"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — તમામ"} category-list{"{0}: {1}"} diff --git a/source/data/lang/guz.txt b/source/data/lang/guz.txt index 34d677f..b047423 100644 --- a/source/data/lang/guz.txt +++ b/source/data/lang/guz.txt @@ -48,5 +48,5 @@ guz{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/gv.txt b/source/data/lang/gv.txt index 0ae1a35..172a72d 100644 --- a/source/data/lang/gv.txt +++ b/source/data/lang/gv.txt @@ -4,5 +4,5 @@ gv{ Languages{ gv{"Gaelg"} } - Version{"2.1.27.40"} + Version{"2.1.31.34"} } diff --git a/source/data/lang/ha.txt b/source/data/lang/ha.txt index 509c4fd..e3f7ca6 100644 --- a/source/data/lang/ha.txt +++ b/source/data/lang/ha.txt @@ -47,5 +47,5 @@ ha{ zh{"Harshen Sin"} zu{"Harshen Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/haw.txt b/source/data/lang/haw.txt index 4a48d6d..6fce2ae 100644 --- a/source/data/lang/haw.txt +++ b/source/data/lang/haw.txt @@ -40,5 +40,5 @@ haw{ zh_Hans{"Pākē Hoʻomaʻalahi ʻia"} zh_Hant{"Pākē Kuʻuna"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/he.txt b/source/data/lang/he.txt index 651a811..33766b8 100644 --- a/source/data/lang/he.txt +++ b/source/data/lang/he.txt @@ -772,7 +772,7 @@ he{ POSIX{"מחשב"} SCOTLAND{"אנגלית סקוטית סטנדרטית"} } - Version{"2.1.29.27"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} - הכל"} category-list{"{0}: {1}"} diff --git a/source/data/lang/hi.txt b/source/data/lang/hi.txt index 3df7052..15a025d 100644 --- a/source/data/lang/hi.txt +++ b/source/data/lang/hi.txt @@ -828,7 +828,7 @@ hi{ POSIX{"कम्प्यूटर"} REVISED{"संशोधित वर्तनी"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} - सभी"} category-list{"{0}: {1}"} diff --git a/source/data/lang/hr.txt b/source/data/lang/hr.txt index 9817e18..ce47399 100644 --- a/source/data/lang/hr.txt +++ b/source/data/lang/hr.txt @@ -910,7 +910,7 @@ hr{ VALENCIA{"valencijski"} WADEGILE{"Wade-Giles romanizacija"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Sve"} category-list{"{0}: {1}"} diff --git a/source/data/lang/hsb.txt b/source/data/lang/hsb.txt index 32e9ae8..8312b9f 100644 --- a/source/data/lang/hsb.txt +++ b/source/data/lang/hsb.txt @@ -378,7 +378,7 @@ hsb{ tibt{"tibetske cyfry"} } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"rěč: {0}"} script{"pismo: {0}"} diff --git a/source/data/lang/hu.txt b/source/data/lang/hu.txt index a9dfbcb..55bd55f 100644 --- a/source/data/lang/hu.txt +++ b/source/data/lang/hu.txt @@ -350,7 +350,7 @@ hu{ nan{"min nan kínai"} nap{"nápolyi"} naq{"nama"} - nb{"norvég (bokmál)"} + nb{"norvég (bokmål)"} nd{"északi ndebele"} nds{"alsónémet"} nds_NL{"alsószász"} @@ -362,7 +362,7 @@ hu{ nl{"holland"} nl_BE{"flamand"} nmg{"ngumba"} - nn{"norvég (nynrosk)"} + nn{"norvég (nynorsk)"} nnh{"ngiemboon"} no{"norvég"} nog{"nogaj"} @@ -894,7 +894,7 @@ hu{ VALLADER{"Vallader"} WADEGILE{"Wade-Giles átírás"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Összes"} category-list{"{0}: {1}"} diff --git a/source/data/lang/hy.txt b/source/data/lang/hy.txt index baf1da9..6707624 100644 --- a/source/data/lang/hy.txt +++ b/source/data/lang/hy.txt @@ -613,7 +613,7 @@ hy{ AREVELA{"արևելահայերեն"} AREVMDA{"արեւմտահայերէն"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — բոլորը"} category-list{"{0}՝ {1}"} diff --git a/source/data/lang/id.txt b/source/data/lang/id.txt index 99ed20d..d33c491 100644 --- a/source/data/lang/id.txt +++ b/source/data/lang/id.txt @@ -959,7 +959,7 @@ id{ VALLADER{"VALLADER"} WADEGILE{"Wade-Giles Latin"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Semua"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ig.txt b/source/data/lang/ig.txt index 84ee62c..103383f 100644 --- a/source/data/lang/ig.txt +++ b/source/data/lang/ig.txt @@ -47,5 +47,5 @@ ig{ zh{"Mandarịịnị"} zu{"Zulu"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ii.txt b/source/data/lang/ii.txt index b34c22c..4545132 100644 --- a/source/data/lang/ii.txt +++ b/source/data/lang/ii.txt @@ -33,7 +33,7 @@ ii{ islamic{"ꑳꌦꇂꑍꉖ"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"ꅇꉙ: {0}"} script{"ꇇꁱ: {0}"} diff --git a/source/data/lang/is.txt b/source/data/lang/is.txt index bd87520..f164c31 100644 --- a/source/data/lang/is.txt +++ b/source/data/lang/is.txt @@ -732,7 +732,7 @@ is{ vaii{"Vai-tölustafir"} } } - Version{"2.1.29.65"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — allt"} category-list{"{0}: {1}"} diff --git a/source/data/lang/it.txt b/source/data/lang/it.txt index 257694b..8e373d1 100644 --- a/source/data/lang/it.txt +++ b/source/data/lang/it.txt @@ -1017,7 +1017,7 @@ it{ VALENCIA{"valenziano"} WADEGILE{"romanizzazione Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} characterLabelPattern{ all{"{0} — Tutto"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ja.txt b/source/data/lang/ja.txt index 6a7970d..9a6ed6a 100644 --- a/source/data/lang/ja.txt +++ b/source/data/lang/ja.txt @@ -1044,7 +1044,7 @@ ja{ VALLADER{"ヴァラダー"} WADEGILE{"ウェード式ローマ字表記法"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — すべて"} category-list{"{0}: {1}"} diff --git a/source/data/lang/jgo.txt b/source/data/lang/jgo.txt index 7f9fd85..0625f60 100644 --- a/source/data/lang/jgo.txt +++ b/source/data/lang/jgo.txt @@ -28,5 +28,5 @@ jgo{ latn{"pɛnɔ́mba"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/jmc.txt b/source/data/lang/jmc.txt index 34517c7..42bdfae 100644 --- a/source/data/lang/jmc.txt +++ b/source/data/lang/jmc.txt @@ -48,5 +48,5 @@ jmc{ zh{"Kyichina"} zu{"Kyizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ka.txt b/source/data/lang/ka.txt index f882471..5557e17 100644 --- a/source/data/lang/ka.txt +++ b/source/data/lang/ka.txt @@ -734,7 +734,7 @@ ka{ tibt{"ტიბეტური ციფრები"} } } - Version{"2.1.29.20"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — ყველა"} category-list{"{0}: {1}"} diff --git a/source/data/lang/kab.txt b/source/data/lang/kab.txt index 2ea46e7..590ec1b 100644 --- a/source/data/lang/kab.txt +++ b/source/data/lang/kab.txt @@ -48,5 +48,5 @@ kab{ zh{"Tacinwat, Tamundarint"} zu{"Tazulut"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/kam.txt b/source/data/lang/kam.txt index 61b0674..1d1833e 100644 --- a/source/data/lang/kam.txt +++ b/source/data/lang/kam.txt @@ -48,5 +48,5 @@ kam{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/kde.txt b/source/data/lang/kde.txt index 74a9350..7792f5f 100644 --- a/source/data/lang/kde.txt +++ b/source/data/lang/kde.txt @@ -48,5 +48,5 @@ kde{ zh{"Chichina"} zu{"Chizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/kea.txt b/source/data/lang/kea.txt index cb2bbcd..e0186dc 100644 --- a/source/data/lang/kea.txt +++ b/source/data/lang/kea.txt @@ -249,7 +249,7 @@ kea{ latn{"Númerus Arábikus"} } } - Version{"2.1.27.46"} + Version{"2.1.31.74"} codePatterns{ language{"Lingua: {0}"} script{"Skrita: {0}"} diff --git a/source/data/lang/khq.txt b/source/data/lang/khq.txt index 3d0d45b..1468248 100644 --- a/source/data/lang/khq.txt +++ b/source/data/lang/khq.txt @@ -48,5 +48,5 @@ khq{ zh{"Sinuwa senni, Mandareŋ"} zu{"Julu senni"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ki.txt b/source/data/lang/ki.txt index bee774f..c19c4b6 100644 --- a/source/data/lang/ki.txt +++ b/source/data/lang/ki.txt @@ -48,5 +48,5 @@ ki{ zh{"Kĩcaina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/kk.txt b/source/data/lang/kk.txt index b7b86f2..dec7b90 100644 --- a/source/data/lang/kk.txt +++ b/source/data/lang/kk.txt @@ -532,7 +532,7 @@ kk{ tibt{"Тибет сандары"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — барлығы"} category-list{"{0}: {1}"} diff --git a/source/data/lang/kkj.txt b/source/data/lang/kkj.txt index 32975b1..62e0927 100644 --- a/source/data/lang/kkj.txt +++ b/source/data/lang/kkj.txt @@ -6,5 +6,5 @@ kkj{ fr{"numbu buy"} kkj{"kakɔ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/kl.txt b/source/data/lang/kl.txt index e7ce2a0..079eef8 100644 --- a/source/data/lang/kl.txt +++ b/source/data/lang/kl.txt @@ -4,7 +4,7 @@ kl{ Languages{ kl{"kalaallisut"} } - Version{"2.1.27.40"} + Version{"2.1.31.34"} localeDisplayPattern{ keyTypePattern{"{0}: {1}"} pattern{"{0} ({1})"} diff --git a/source/data/lang/kln.txt b/source/data/lang/kln.txt index f017055..0d0bdff 100644 --- a/source/data/lang/kln.txt +++ b/source/data/lang/kln.txt @@ -48,5 +48,5 @@ kln{ zh{"kutitab China"} zu{"kutitab Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/km.txt b/source/data/lang/km.txt index ce07b50..586ff46 100644 --- a/source/data/lang/km.txt +++ b/source/data/lang/km.txt @@ -534,7 +534,7 @@ km{ tibt{"លេខទីបេ"} } } - Version{"2.1.28.79"} + Version{"2.1.31.74"} characterLabelPattern{ all{"{0} — ទាំងអស់"} category-list{"{0}: {1}"} diff --git a/source/data/lang/kn.txt b/source/data/lang/kn.txt index 0219501..19c9f50 100644 --- a/source/data/lang/kn.txt +++ b/source/data/lang/kn.txt @@ -827,7 +827,7 @@ kn{ vaii{"ವಾಯ್ ಅಂಕೆಗಳು"} } } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — ಎಲ್ಲ"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ko.txt b/source/data/lang/ko.txt index 65476af..c1328cf 100644 --- a/source/data/lang/ko.txt +++ b/source/data/lang/ko.txt @@ -913,7 +913,7 @@ ko{ VAIDIKA{"바이디카"} VALLADER{"발라더"} } - Version{"2.1.29.22"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — 모두"} category-list{"{0}: {1}"} diff --git a/source/data/lang/kok.txt b/source/data/lang/kok.txt index e4cf3d0..945f2ba 100644 --- a/source/data/lang/kok.txt +++ b/source/data/lang/kok.txt @@ -142,5 +142,5 @@ kok{ zh{"चीनीस्"} zu{"जुलू"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ks.txt b/source/data/lang/ks.txt index 021b17c..ead282b 100644 --- a/source/data/lang/ks.txt +++ b/source/data/lang/ks.txt @@ -609,7 +609,7 @@ ks{ SOLBA{"ثٹولوِزا/سولبِکا بوٗلۍ"} TARASK{"تاراسکیٖوِکا علمہ ہِجاِ"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} codePatterns{ language{"زَبان: {0}"} script{"رَسم الخط: {0}"} diff --git a/source/data/lang/ksb.txt b/source/data/lang/ksb.txt index 96ca831..295eaae 100644 --- a/source/data/lang/ksb.txt +++ b/source/data/lang/ksb.txt @@ -48,5 +48,5 @@ ksb{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ksf.txt b/source/data/lang/ksf.txt index 7efd77d..738d38a 100644 --- a/source/data/lang/ksf.txt +++ b/source/data/lang/ksf.txt @@ -48,5 +48,5 @@ ksf{ zh{"ricinɔá"} zu{"rizúlu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ksh.txt b/source/data/lang/ksh.txt index 9c67ad3..eb49c1d 100644 --- a/source/data/lang/ksh.txt +++ b/source/data/lang/ksh.txt @@ -512,7 +512,7 @@ ksh{ VALENCIA{"valenzijaanesche Dijaläk"} WADEGILE{"lateijnesche Ömschreff noh Wade-Giles"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"de Schprohch afjekööz met „{0}“"} script{"de Schreff afjekööz met „{0}“"} diff --git a/source/data/lang/kw.txt b/source/data/lang/kw.txt index c2710bb..591b24a 100644 --- a/source/data/lang/kw.txt +++ b/source/data/lang/kw.txt @@ -4,5 +4,5 @@ kw{ Languages{ kw{"kernewek"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ky.txt b/source/data/lang/ky.txt index 8a74bc6..42fb0ce 100644 --- a/source/data/lang/ky.txt +++ b/source/data/lang/ky.txt @@ -539,7 +539,7 @@ ky{ tibt{"Тибет сандары"} } } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — Баары"} category-list{"{0}: {1}"} diff --git a/source/data/lang/lag.txt b/source/data/lang/lag.txt index 2cfd3ab..46785ea 100644 --- a/source/data/lang/lag.txt +++ b/source/data/lang/lag.txt @@ -48,5 +48,5 @@ lag{ zh{"Kɨchíina"} zu{"Kɨzúulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/lb.txt b/source/data/lang/lb.txt index 6a49580..6e5ce74 100644 --- a/source/data/lang/lb.txt +++ b/source/data/lang/lb.txt @@ -875,7 +875,7 @@ lb{ VALENCIA{"Valencianesch"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Sprooch: {0}"} script{"Schrëft: {0}"} diff --git a/source/data/lang/lg.txt b/source/data/lang/lg.txt index 67ffffc..8fcb47e 100644 --- a/source/data/lang/lg.txt +++ b/source/data/lang/lg.txt @@ -48,5 +48,5 @@ lg{ zh{"Lucayina"} zu{"Luzzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/lkt.txt b/source/data/lang/lkt.txt index f6a9db2..4e8ca5c 100644 --- a/source/data/lang/lkt.txt +++ b/source/data/lang/lkt.txt @@ -152,5 +152,5 @@ lkt{ zu{"Zulu Iyápi"} zza{"Zaza Iyápi"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ln.txt b/source/data/lang/ln.txt index 287829d..7540954 100644 --- a/source/data/lang/ln.txt +++ b/source/data/lang/ln.txt @@ -48,5 +48,5 @@ ln{ zh{"lisinwa"} zu{"zulu"} } - Version{"2.1.28.76"} + Version{"2.1.31.74"} } diff --git a/source/data/lang/lo.txt b/source/data/lang/lo.txt index 30b23f8..3bc0a5c 100644 --- a/source/data/lang/lo.txt +++ b/source/data/lang/lo.txt @@ -874,7 +874,7 @@ lo{ VALLADER{"ວັລລາເດີ"} WADEGILE{"ການຖອດອັກສອນແບບເວດ-ໄຈລ໌"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — ທັງໝົດ"} category-list{"{0}: {1}"} diff --git a/source/data/lang/lrc.txt b/source/data/lang/lrc.txt index 969a1eb..30d8527 100644 --- a/source/data/lang/lrc.txt +++ b/source/data/lang/lrc.txt @@ -296,7 +296,7 @@ lrc{ latn{"عأدأدیا لاتین"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"{0}"} script{"{0}"} diff --git a/source/data/lang/lt.txt b/source/data/lang/lt.txt index a2970e7..269be67 100644 --- a/source/data/lang/lt.txt +++ b/source/data/lang/lt.txt @@ -1020,7 +1020,7 @@ lt{ VALENCIA{"Valenciečiai"} WADEGILE{"Wade-Giles Romanization"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – visi"} category-list{"{0}: {1}"} diff --git a/source/data/lang/lu.txt b/source/data/lang/lu.txt index f538395..107a143 100644 --- a/source/data/lang/lu.txt +++ b/source/data/lang/lu.txt @@ -46,5 +46,5 @@ lu{ zh{"shinɛ"} zu{"Nzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/luo.txt b/source/data/lang/luo.txt index 925eb57..3119467 100644 --- a/source/data/lang/luo.txt +++ b/source/data/lang/luo.txt @@ -48,5 +48,5 @@ luo{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/luy.txt b/source/data/lang/luy.txt index d06f793..137740f 100644 --- a/source/data/lang/luy.txt +++ b/source/data/lang/luy.txt @@ -48,5 +48,5 @@ luy{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/lv.txt b/source/data/lang/lv.txt index 6cb2347..b3c343e 100644 --- a/source/data/lang/lv.txt +++ b/source/data/lang/lv.txt @@ -225,7 +225,7 @@ lv{ ilo{"iloku"} inh{"ingušu"} io{"ido"} - is{"īslandiešu"} + is{"islandiešu"} it{"itāļu"} iu{"inuītu"} ja{"japāņu"} @@ -803,7 +803,7 @@ lv{ VALENCIA{"valensiešu"} WADEGILE{"Veida-Džailza romanizācija"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — visas"} category-list{"{0}: {1}"} diff --git a/source/data/lang/mas.txt b/source/data/lang/mas.txt index fb5774c..8273bb5 100644 --- a/source/data/lang/mas.txt +++ b/source/data/lang/mas.txt @@ -48,5 +48,5 @@ mas{ zh{"nkʉtʉ́k ɔ́ɔ̄ lchina"} zu{"nkʉtʉ́k ɔ́ɔ̄ lzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/mer.txt b/source/data/lang/mer.txt index dea26ee..b766409 100644 --- a/source/data/lang/mer.txt +++ b/source/data/lang/mer.txt @@ -48,5 +48,5 @@ mer{ zh{"Kĩchina"} zu{"Kĩzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/mfe.txt b/source/data/lang/mfe.txt index f76c1b9..c8d1628 100644 --- a/source/data/lang/mfe.txt +++ b/source/data/lang/mfe.txt @@ -48,5 +48,5 @@ mfe{ zh{"sinwa, mandarin"} zu{"zoulou"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/mg.txt b/source/data/lang/mg.txt index f8c2ac3..4eed500 100644 --- a/source/data/lang/mg.txt +++ b/source/data/lang/mg.txt @@ -48,5 +48,5 @@ mg{ zh{"Sinoa, Mandarin"} zu{"Zolò"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/mgh.txt b/source/data/lang/mgh.txt index 72f26c0..6a9fef2 100644 --- a/source/data/lang/mgh.txt +++ b/source/data/lang/mgh.txt @@ -47,5 +47,5 @@ mgh{ zh{"Ichina"} zu{"Izulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/mgo.txt b/source/data/lang/mgo.txt index 480de37..4ca3c45 100644 --- a/source/data/lang/mgo.txt +++ b/source/data/lang/mgo.txt @@ -18,7 +18,7 @@ mgo{ latn{"inu"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"{0}"} script{"{0}"} diff --git a/source/data/lang/mk.txt b/source/data/lang/mk.txt index b4eaaab..cbe5779 100644 --- a/source/data/lang/mk.txt +++ b/source/data/lang/mk.txt @@ -889,7 +889,7 @@ mk{ PINYIN{"Пинјин романизација"} WADEGILE{"Вејд-Џајлс романизација"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} - Сите"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ml.txt b/source/data/lang/ml.txt index 4bde30f..b8bf0ad 100644 --- a/source/data/lang/ml.txt +++ b/source/data/lang/ml.txt @@ -853,7 +853,7 @@ ml{ POSIX{"കമ്പ്യൂട്ടർ"} REVISED{"പരിഷ്ക്കരിച്ച ലിപി"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — എല്ലാം"} category-list{"{0}: {1}"} diff --git a/source/data/lang/mn.txt b/source/data/lang/mn.txt index d3cb4fc..c45b053 100644 --- a/source/data/lang/mn.txt +++ b/source/data/lang/mn.txt @@ -542,7 +542,7 @@ mn{ tibt{"төвд тоо"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} - Бүгд"} category-list{"{0}: {1}"} diff --git a/source/data/lang/mr.txt b/source/data/lang/mr.txt index 553ecba..281b22b 100644 --- a/source/data/lang/mr.txt +++ b/source/data/lang/mr.txt @@ -830,7 +830,7 @@ mr{ PINYIN{"पिनयिन रोमनायझेशन"} WADEGILE{"वादे-गिलेस रोमनायझेशन"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — सर्व"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ms.txt b/source/data/lang/ms.txt index 8550dec..e1508c0 100644 --- a/source/data/lang/ms.txt +++ b/source/data/lang/ms.txt @@ -667,7 +667,7 @@ ms{ vaii{"Digit Vai"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Semua"} category-list{"{0}: {1}"} diff --git a/source/data/lang/mt.txt b/source/data/lang/mt.txt index 56f42fa..3af346c 100644 --- a/source/data/lang/mt.txt +++ b/source/data/lang/mt.txt @@ -473,7 +473,7 @@ mt{ uk{"Ukren"} umb{"Umbundu"} und{"Lingwa Mhix Magħrufa"} - ur{"ur"} + ur{"Urdu"} uz{"Uzbek"} vai{"Vai"} ve{"Venda"} @@ -559,7 +559,7 @@ mt{ Variants{ REVISED{"Ortografija Irriveda"} } - Version{"2.1.28.76"} + Version{"2.1.32.59"} codePatterns{ language{"Lingwa: {0}"} script{"Skript: {0}"} diff --git a/source/data/lang/mua.txt b/source/data/lang/mua.txt index 8dbcd0f..7e422b9 100644 --- a/source/data/lang/mua.txt +++ b/source/data/lang/mua.txt @@ -48,5 +48,5 @@ mua{ zh{"zah Syiŋ"} zu{"Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/my.txt b/source/data/lang/my.txt index 3aa6329..53073f6 100644 --- a/source/data/lang/my.txt +++ b/source/data/lang/my.txt @@ -580,7 +580,7 @@ my{ REVISED{"ပြန်လည်စီစစ်ထားသော ရေးထုံး"} SCOTLAND{"စကော့ စံ အင်္ဂလိပ်"} } - Version{"2.1.30.50"} + Version{"2.1.33.28"} characterLabelPattern{ all{"{0} — အားလုံး"} category-list{"{0} − {1}"} diff --git a/source/data/lang/mzn.txt b/source/data/lang/mzn.txt index 6f316ce..9f96b2d 100644 --- a/source/data/lang/mzn.txt +++ b/source/data/lang/mzn.txt @@ -265,7 +265,7 @@ mzn{ Hans{"ساده‌بَیی هان"} Hant{"استاندارد ِسنتی هانت"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"زوون: {0}"} script{"اسکریپت: {0}"} diff --git a/source/data/lang/naq.txt b/source/data/lang/naq.txt index 9b5ee6e..cefef59 100644 --- a/source/data/lang/naq.txt +++ b/source/data/lang/naq.txt @@ -48,5 +48,5 @@ naq{ zh{"Chineesǁî gowab, Mandarinni"} zu{"Zulub"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/nb.txt b/source/data/lang/nb.txt index d3ad534..b124d99 100644 --- a/source/data/lang/nb.txt +++ b/source/data/lang/nb.txt @@ -1095,7 +1095,7 @@ nb{ VALLADER{"vallader"} WADEGILE{"Wade-Giles-romanisering"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – alt"} category-list{"{0}: {1}"} diff --git a/source/data/lang/nd.txt b/source/data/lang/nd.txt index cbca4e5..f98a8e0 100644 --- a/source/data/lang/nd.txt +++ b/source/data/lang/nd.txt @@ -48,5 +48,5 @@ nd{ zh{"isi-China"} zu{"isi-Zulu"} } - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/nds.txt b/source/data/lang/nds.txt index e395563..7874b05 100644 --- a/source/data/lang/nds.txt +++ b/source/data/lang/nds.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nds{ - Version{"2.1.28.71"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ne.txt b/source/data/lang/ne.txt index b58c9ac..2cd85e5 100644 --- a/source/data/lang/ne.txt +++ b/source/data/lang/ne.txt @@ -795,7 +795,7 @@ ne{ AREVELA{"पूर्वी आर्मेनियाली"} POSIX{"कम्प्युटर"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0}-सबै"} category-list{"{0}: {1}"} diff --git a/source/data/lang/nl.txt b/source/data/lang/nl.txt index c15ba79..872aa8a 100644 --- a/source/data/lang/nl.txt +++ b/source/data/lang/nl.txt @@ -1099,7 +1099,7 @@ nl{ VALLADER{"Vallader"} WADEGILE{"Wade-Giles-romanisering"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — alle"} category-list{"{0}: {1}"} diff --git a/source/data/lang/nmg.txt b/source/data/lang/nmg.txt index 6f89598..aa3ca89 100644 --- a/source/data/lang/nmg.txt +++ b/source/data/lang/nmg.txt @@ -47,5 +47,5 @@ nmg{ zh{"Kiɛl bó chinois"} zu{"Zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/nn.txt b/source/data/lang/nn.txt index 45fe4d6..1e5cde0 100644 --- a/source/data/lang/nn.txt +++ b/source/data/lang/nn.txt @@ -690,7 +690,7 @@ nn{ TARASK{"taraskievica-ortografi"} VALENCIA{"valensisk dialekt"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Språk: {0}"} script{"Skrift: {0}"} diff --git a/source/data/lang/nnh.txt b/source/data/lang/nnh.txt index 89368aa..801d262 100644 --- a/source/data/lang/nnh.txt +++ b/source/data/lang/nnh.txt @@ -24,5 +24,5 @@ nnh{ yav{"Shwóŋò pʉa shÿó Mbafìa"} ybb{"Shwóŋò Tsaŋ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/nus.txt b/source/data/lang/nus.txt index 850b8df..3a38aba 100644 --- a/source/data/lang/nus.txt +++ b/source/data/lang/nus.txt @@ -48,5 +48,5 @@ nus{ zh{"Thok cayna"} zu{"Thok dhuluni"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/nyn.txt b/source/data/lang/nyn.txt index 29f3d82..ba7e0d0 100644 --- a/source/data/lang/nyn.txt +++ b/source/data/lang/nyn.txt @@ -48,5 +48,5 @@ nyn{ zh{"Oruchaina"} zu{"Oruzuru"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/om.txt b/source/data/lang/om.txt index 5ae0565..151e920 100644 --- a/source/data/lang/om.txt +++ b/source/data/lang/om.txt @@ -92,5 +92,5 @@ om{ Scripts{ Latn{"Latin"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/or.txt b/source/data/lang/or.txt index 14991e8..c9ec27b 100644 --- a/source/data/lang/or.txt +++ b/source/data/lang/or.txt @@ -574,5 +574,5 @@ or{ Zyyy{"ସାଧାରଣ"} Zzzz{"ଅଞ୍ଜାତ କିମ୍ବା ଅବୈଧ ସ୍କ୍ରୀପ୍ଟ"} } - Version{"2.1.27.78"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/os.txt b/source/data/lang/os.txt index 8bcef82..1aba015 100644 --- a/source/data/lang/os.txt +++ b/source/data/lang/os.txt @@ -96,7 +96,7 @@ os{ latn{"Нырыккон цифрӕтӕ"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"Ӕвзаг: {0}"} script{"Скрипт: {0}"} diff --git a/source/data/lang/pa.txt b/source/data/lang/pa.txt index 5e1ea06..12184f1 100644 --- a/source/data/lang/pa.txt +++ b/source/data/lang/pa.txt @@ -552,7 +552,7 @@ pa{ tibt{"ਤਿੱਬਤੀ ਅੰਕ"} } } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — ਸਭ"} category-list{"{0}: {1}"} diff --git a/source/data/lang/pa_Arab.txt b/source/data/lang/pa_Arab.txt index 8815c28..cd32e77 100644 --- a/source/data/lang/pa_Arab.txt +++ b/source/data/lang/pa_Arab.txt @@ -9,5 +9,5 @@ pa_Arab{ Arab{"عربی"} Guru{"گُرمُکھی"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pa_Guru.txt b/source/data/lang/pa_Guru.txt index dca680f..dc1602d 100644 --- a/source/data/lang/pa_Guru.txt +++ b/source/data/lang/pa_Guru.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pa_Guru{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pl.txt b/source/data/lang/pl.txt index bac53c8..8a1af58 100644 --- a/source/data/lang/pl.txt +++ b/source/data/lang/pl.txt @@ -963,7 +963,7 @@ pl{ VALENCIA{"walencki"} WADEGILE{"latynizacja Wade’a i Gilesa"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — wszystko"} category-list{"{0}: {1}"} diff --git a/source/data/lang/pool.res b/source/data/lang/pool.res index bf8a5da..61fc525 100644 Binary files a/source/data/lang/pool.res and b/source/data/lang/pool.res differ diff --git a/source/data/lang/ps.txt b/source/data/lang/ps.txt index d19a2df..8d664fa 100644 --- a/source/data/lang/ps.txt +++ b/source/data/lang/ps.txt @@ -46,5 +46,5 @@ ps{ Scripts{ Arab{"عربي"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt.txt b/source/data/lang/pt.txt index d13955f..ce9feba 100644 --- a/source/data/lang/pt.txt +++ b/source/data/lang/pt.txt @@ -874,7 +874,7 @@ pt{ VALENCIA{"valenciano"} WADEGILE{"romanização Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Tudo"} category-list{"{0}: {1}"} diff --git a/source/data/lang/pt_AO.txt b/source/data/lang/pt_AO.txt index 2e783ef..a385088 100644 --- a/source/data/lang/pt_AO.txt +++ b/source/data/lang/pt_AO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_AO{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_CH.txt b/source/data/lang/pt_CH.txt index a4226b1..4ee7339 100644 --- a/source/data/lang/pt_CH.txt +++ b/source/data/lang/pt_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CH{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_CV.txt b/source/data/lang/pt_CV.txt index 829f400..ed8f313 100644 --- a/source/data/lang/pt_CV.txt +++ b/source/data/lang/pt_CV.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CV{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_GQ.txt b/source/data/lang/pt_GQ.txt index fd432f9..0f6e235 100644 --- a/source/data/lang/pt_GQ.txt +++ b/source/data/lang/pt_GQ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GQ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_GW.txt b/source/data/lang/pt_GW.txt index 75c5d9d..f4cd124 100644 --- a/source/data/lang/pt_GW.txt +++ b/source/data/lang/pt_GW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GW{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_LU.txt b/source/data/lang/pt_LU.txt index b5eca2f..b5a1669 100644 --- a/source/data/lang/pt_LU.txt +++ b/source/data/lang/pt_LU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_LU{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_MO.txt b/source/data/lang/pt_MO.txt index c47efaa..d30b2ff 100644 --- a/source/data/lang/pt_MO.txt +++ b/source/data/lang/pt_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MO{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_MZ.txt b/source/data/lang/pt_MZ.txt index 9878c5a..060a5fc 100644 --- a/source/data/lang/pt_MZ.txt +++ b/source/data/lang/pt_MZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MZ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_PT.txt b/source/data/lang/pt_PT.txt index 360cd5d..5ac80c7 100644 --- a/source/data/lang/pt_PT.txt +++ b/source/data/lang/pt_PT.txt @@ -217,7 +217,7 @@ pt_PT{ MONOTON{"monotónico"} POLYTON{"politónico"} } - Version{"2.1.29.54"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} – tudo"} compatibility{"{0} – compatibilidade"} diff --git a/source/data/lang/pt_ST.txt b/source/data/lang/pt_ST.txt index fcc981b..e3f0965 100644 --- a/source/data/lang/pt_ST.txt +++ b/source/data/lang/pt_ST.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_ST{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/pt_TL.txt b/source/data/lang/pt_TL.txt index 8bbbc3d..b8cb201 100644 --- a/source/data/lang/pt_TL.txt +++ b/source/data/lang/pt_TL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_TL{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/qu.txt b/source/data/lang/qu.txt index 7bbfcf7..d2e5f44 100644 --- a/source/data/lang/qu.txt +++ b/source/data/lang/qu.txt @@ -134,5 +134,5 @@ qu{ Variants{ VALENCIA{"Valenciano Simi"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/resfiles.mk b/source/data/lang/resfiles.mk index b725f4c..dcb1e07 100644 --- a/source/data/lang/resfiles.mk +++ b/source/data/lang/resfiles.mk @@ -1,17 +1,17 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -LANG_CLDR_VERSION = %version% +LANG_CLDR_VERSION = 31.0.1 # A list of txt's to build # Note: # # If you are thinking of modifying this file, READ THIS. # # Instead of changing this file [unless you want to check it back in], -# you should consider creating a '%local%' file in this same directory. +# you should consider creating a 'reslocal.mk' file in this same directory. # Then, you can have your local changes remain even if you upgrade or # reconfigure ICU. # -# Example '%local%' files: +# Example 'reslocal.mk' files: # # * To add an additional locale to the list: # _____________________________________________________ @@ -26,19 +26,19 @@ LANG_CLDR_VERSION = %version% # Generated by LDML2ICUConverter, from LDML source files. # Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml) -LANG_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\ - en_NH.txt en_RH.txt fil_PH.txt he_IL.txt id_ID.txt\ - in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\ - ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt no.txt\ - no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\ - pa_PK.txt sh.txt sh_BA.txt sh_CS.txt sh_YU.txt\ - shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt\ - sr_Cyrl_RS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_RS.txt sr_Latn_YU.txt\ - sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\ - th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt uz_Arab_AF.txt\ - uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt\ - zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt zh_MO.txt\ - zh_SG.txt zh_TW.txt +LANG_SYNTHETIC_ALIAS = ars.txt az_AZ.txt az_Latn_AZ.txt bs_BA.txt\ + bs_Latn_BA.txt en_NH.txt en_RH.txt fil_PH.txt he_IL.txt\ + id_ID.txt in.txt in_ID.txt iw.txt iw_IL.txt\ + ja_JP.txt ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt\ + no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt\ + pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\ + sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\ + sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_RS.txt\ + sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt\ + th_TH.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt\ + uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt\ + zh_CN.txt zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt\ + zh_MO.txt zh_SG.txt zh_TW.txt # All aliases (to not be included under 'installed'), but not including root. @@ -76,47 +76,47 @@ LANG_SOURCE = af.txt agq.txt ak.txt am.txt\ en_TT.txt en_TV.txt en_TZ.txt en_UG.txt en_VC.txt\ en_VG.txt en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt\ en_ZW.txt eo.txt es.txt es_419.txt es_AR.txt\ - es_BO.txt es_BR.txt es_CL.txt es_CO.txt es_CR.txt\ - es_CU.txt es_DO.txt es_EC.txt es_GT.txt es_HN.txt\ - es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt\ - es_PY.txt es_SV.txt es_US.txt es_UY.txt es_VE.txt\ - et.txt eu.txt ewo.txt fa.txt fa_AF.txt\ - ff.txt fi.txt fil.txt fo.txt fr.txt\ - fr_BE.txt fr_CA.txt fr_CH.txt fur.txt fy.txt\ - ga.txt gd.txt gl.txt gsw.txt gu.txt\ - guz.txt gv.txt ha.txt haw.txt he.txt\ - hi.txt hr.txt hsb.txt hu.txt hy.txt\ - id.txt ig.txt ii.txt is.txt it.txt\ - ja.txt jgo.txt jmc.txt ka.txt kab.txt\ - kam.txt kde.txt kea.txt khq.txt ki.txt\ - kk.txt kkj.txt kl.txt kln.txt km.txt\ - kn.txt ko.txt kok.txt ks.txt ksb.txt\ - ksf.txt ksh.txt kw.txt ky.txt lag.txt\ - lb.txt lg.txt lkt.txt ln.txt lo.txt\ - lrc.txt lt.txt lu.txt luo.txt luy.txt\ - lv.txt mas.txt mer.txt mfe.txt mg.txt\ - mgh.txt mgo.txt mk.txt ml.txt mn.txt\ - mr.txt ms.txt mt.txt mua.txt my.txt\ - mzn.txt naq.txt nb.txt nd.txt nds.txt\ - ne.txt nl.txt nmg.txt nn.txt nnh.txt\ - nus.txt nyn.txt om.txt or.txt os.txt\ - pa.txt pa_Arab.txt pa_Guru.txt pl.txt ps.txt\ - pt.txt pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt\ - pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt\ - pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\ - ro.txt ro_MD.txt rof.txt ru.txt rw.txt\ - rwk.txt sah.txt saq.txt sbp.txt se.txt\ - se_FI.txt seh.txt ses.txt sg.txt shi.txt\ - shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\ - smn.txt sn.txt so.txt sq.txt sr.txt\ - sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt sr_Latn.txt\ - sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt sv_FI.txt\ - sw.txt sw_CD.txt sw_KE.txt ta.txt te.txt\ - teo.txt th.txt ti.txt to.txt tr.txt\ - twq.txt tzm.txt ug.txt uk.txt ur.txt\ - ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\ - vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\ - wae.txt xog.txt yav.txt yi.txt yo.txt\ - yo_BJ.txt yue.txt zgh.txt zh.txt zh_Hans.txt\ - zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt + es_BO.txt es_BR.txt es_BZ.txt es_CL.txt es_CO.txt\ + es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GT.txt\ + es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\ + es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\ + es_VE.txt et.txt eu.txt ewo.txt fa.txt\ + fa_AF.txt ff.txt fi.txt fil.txt fo.txt\ + fr.txt fr_BE.txt fr_CA.txt fr_CH.txt fur.txt\ + fy.txt ga.txt gd.txt gl.txt gsw.txt\ + gu.txt guz.txt gv.txt ha.txt haw.txt\ + he.txt hi.txt hr.txt hsb.txt hu.txt\ + hy.txt id.txt ig.txt ii.txt is.txt\ + it.txt ja.txt jgo.txt jmc.txt ka.txt\ + kab.txt kam.txt kde.txt kea.txt khq.txt\ + ki.txt kk.txt kkj.txt kl.txt kln.txt\ + km.txt kn.txt ko.txt kok.txt ks.txt\ + ksb.txt ksf.txt ksh.txt kw.txt ky.txt\ + lag.txt lb.txt lg.txt lkt.txt ln.txt\ + lo.txt lrc.txt lt.txt lu.txt luo.txt\ + luy.txt lv.txt mas.txt mer.txt mfe.txt\ + mg.txt mgh.txt mgo.txt mk.txt ml.txt\ + mn.txt mr.txt ms.txt mt.txt mua.txt\ + my.txt mzn.txt naq.txt nb.txt nd.txt\ + nds.txt ne.txt nl.txt nmg.txt nn.txt\ + nnh.txt nus.txt nyn.txt om.txt or.txt\ + os.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\ + ps.txt pt.txt pt_AO.txt pt_CH.txt pt_CV.txt\ + pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt\ + pt_PT.txt pt_ST.txt pt_TL.txt qu.txt rm.txt\ + rn.txt ro.txt ro_MD.txt rof.txt ru.txt\ + rw.txt rwk.txt sah.txt saq.txt sbp.txt\ + se.txt se_FI.txt seh.txt ses.txt sg.txt\ + shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\ + sl.txt smn.txt sn.txt so.txt sq.txt\ + sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt\ + sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt\ + sv_FI.txt sw.txt sw_CD.txt sw_KE.txt ta.txt\ + te.txt teo.txt th.txt ti.txt to.txt\ + tr.txt twq.txt tzm.txt ug.txt uk.txt\ + ur.txt ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt\ + uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt vi.txt\ + vun.txt wae.txt xog.txt yav.txt yi.txt\ + yo.txt yo_BJ.txt yue.txt zgh.txt zh.txt\ + zh_Hans.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt diff --git a/source/data/lang/rm.txt b/source/data/lang/rm.txt index a018349..d3a3428 100644 --- a/source/data/lang/rm.txt +++ b/source/data/lang/rm.txt @@ -627,7 +627,7 @@ rm{ TARASK{"ortografia taraskievica"} VALENCIA{"valencian"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"Lingua: {0}"} script{"Scrittira: {0}"} diff --git a/source/data/lang/rn.txt b/source/data/lang/rn.txt index 5ce6113..413d73b 100644 --- a/source/data/lang/rn.txt +++ b/source/data/lang/rn.txt @@ -48,5 +48,5 @@ rn{ zh{"Igishinwa"} zu{"Ikizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ro.txt b/source/data/lang/ro.txt index f3cd645..e9a8340 100644 --- a/source/data/lang/ro.txt +++ b/source/data/lang/ro.txt @@ -774,7 +774,7 @@ ro{ SCOTLAND{"engleză standard scoțiană"} WADEGILE{"Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} characterLabelPattern{ all{"{0} – toate"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ro_MD.txt b/source/data/lang/ro_MD.txt index 1aef1a6..795eace 100644 --- a/source/data/lang/ro_MD.txt +++ b/source/data/lang/ro_MD.txt @@ -5,5 +5,5 @@ ro_MD{ sw_CD{"swahili (R. D. Congo)"} wal{"wolaytta"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/rof.txt b/source/data/lang/rof.txt index 0255b88..29ec3a7 100644 --- a/source/data/lang/rof.txt +++ b/source/data/lang/rof.txt @@ -48,5 +48,5 @@ rof{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/root.txt b/source/data/lang/root.txt index 76a6ee2..a9de906 100644 --- a/source/data/lang/root.txt +++ b/source/data/lang/root.txt @@ -4,7 +4,7 @@ * ICU source: /common/main/root.xml */ root{ - Version{"2.1.30.58"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — all"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ru.txt b/source/data/lang/ru.txt index 0ecb523..c355b71 100644 --- a/source/data/lang/ru.txt +++ b/source/data/lang/ru.txt @@ -912,7 +912,7 @@ ru{ VALENCIA{"Валенсийский"} WADEGILE{"Система Уэйда – Джайлза"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – все"} category-list{"{0}: {1}"} diff --git a/source/data/lang/rw.txt b/source/data/lang/rw.txt index 797cbff..6e27571 100644 --- a/source/data/lang/rw.txt +++ b/source/data/lang/rw.txt @@ -108,5 +108,5 @@ rw{ yi{"Inyeyidishi"} zu{"Inyezulu"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/rwk.txt b/source/data/lang/rwk.txt index 252c6d7..0505ddf 100644 --- a/source/data/lang/rwk.txt +++ b/source/data/lang/rwk.txt @@ -48,5 +48,5 @@ rwk{ zh{"Kyichina"} zu{"Kyizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sah.txt b/source/data/lang/sah.txt index 67b7179..20b2231 100644 --- a/source/data/lang/sah.txt +++ b/source/data/lang/sah.txt @@ -91,7 +91,7 @@ sah{ h24{"24 чаастаах тиһик (0–24)"} } } - Version{"2.1.27.87"} + Version{"2.1.31.33"} characterLabelPattern{ strokes{ other{"{0} Strokes"} diff --git a/source/data/lang/saq.txt b/source/data/lang/saq.txt index 3e00cb9..d150a22 100644 --- a/source/data/lang/saq.txt +++ b/source/data/lang/saq.txt @@ -48,5 +48,5 @@ saq{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sbp.txt b/source/data/lang/sbp.txt index af95dc2..4eb33a0 100644 --- a/source/data/lang/sbp.txt +++ b/source/data/lang/sbp.txt @@ -48,5 +48,5 @@ sbp{ zh{"Ishishina"} zu{"Ishisulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/se.txt b/source/data/lang/se.txt index d533cde..6e0b641 100644 --- a/source/data/lang/se.txt +++ b/source/data/lang/se.txt @@ -154,7 +154,7 @@ se{ PINYIN{"pinyin"} WADEGILE{"Wade-Giles"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} codePatterns{ language{"giella: {0}"} script{"chállin: {0}"} diff --git a/source/data/lang/se_FI.txt b/source/data/lang/se_FI.txt index a71f28d..b661c06 100644 --- a/source/data/lang/se_FI.txt +++ b/source/data/lang/se_FI.txt @@ -62,7 +62,7 @@ se_FI{ fullwide{"fullwide"} } } - Version{"2.1.27.78"} + Version{"2.1.31.33"} codePatterns{ script{"čállin: {0}"} } diff --git a/source/data/lang/seh.txt b/source/data/lang/seh.txt index c782064..d097de1 100644 --- a/source/data/lang/seh.txt +++ b/source/data/lang/seh.txt @@ -48,5 +48,5 @@ seh{ zh{"chinês"} zu{"zulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ses.txt b/source/data/lang/ses.txt index bc6f8f9..7345578 100644 --- a/source/data/lang/ses.txt +++ b/source/data/lang/ses.txt @@ -48,5 +48,5 @@ ses{ zh{"Sinuwa senni, Mandareŋ"} zu{"Zulu senni"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sg.txt b/source/data/lang/sg.txt index f889bb2..ec1f1df 100644 --- a/source/data/lang/sg.txt +++ b/source/data/lang/sg.txt @@ -48,5 +48,5 @@ sg{ zh{"Shinuäa"} zu{"Zûlu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/shi.txt b/source/data/lang/shi.txt index 9f9bc6c..8a1833a 100644 --- a/source/data/lang/shi.txt +++ b/source/data/lang/shi.txt @@ -48,5 +48,5 @@ shi{ zh{"ⵜⴰⵛⵉⵏⵡⵉⵜ"} zu{"ⵜⴰⵣⵓⵍⵓⵜ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/shi_Latn.txt b/source/data/lang/shi_Latn.txt index 8b19fa1..c09b6c4 100644 --- a/source/data/lang/shi_Latn.txt +++ b/source/data/lang/shi_Latn.txt @@ -49,5 +49,5 @@ shi_Latn{ zh{"Tacinwit"} zu{"Tazulut"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/shi_Tfng.txt b/source/data/lang/shi_Tfng.txt index 22785f4..2db194b 100644 --- a/source/data/lang/shi_Tfng.txt +++ b/source/data/lang/shi_Tfng.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Tfng{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/si.txt b/source/data/lang/si.txt index bdaa8b5..69b93b7 100644 --- a/source/data/lang/si.txt +++ b/source/data/lang/si.txt @@ -547,7 +547,7 @@ si{ tibt{"ටිබෙට ඉලක්කම්"} } } - Version{"2.1.28.79"} + Version{"2.1.33.28"} characterLabelPattern{ all{"{0} — සියල්ල"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sk.txt b/source/data/lang/sk.txt index 852a751..4514d25 100644 --- a/source/data/lang/sk.txt +++ b/source/data/lang/sk.txt @@ -755,7 +755,7 @@ sk{ Variants{ SCOTLAND{"škótska štandardná angličtina"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – všetko"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sl.txt b/source/data/lang/sl.txt index 0ca8f3d..07aa44e 100644 --- a/source/data/lang/sl.txt +++ b/source/data/lang/sl.txt @@ -831,7 +831,7 @@ sl{ VALENCIA{"valencijski pravopis"} WADEGILE{"romanizacija Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} – vse"} category-list{"{0}: {1}"} diff --git a/source/data/lang/smn.txt b/source/data/lang/smn.txt index 0c866c5..1941d46 100644 --- a/source/data/lang/smn.txt +++ b/source/data/lang/smn.txt @@ -401,7 +401,7 @@ smn{ en_GB{"eŋgâlâskielâ (OK)"} en_US{"eŋgâlâskielâ (USA)"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"kielâ: {0}"} script{"čäällimvuáhádâh: {0}"} diff --git a/source/data/lang/sn.txt b/source/data/lang/sn.txt index 980dd96..a54d7a2 100644 --- a/source/data/lang/sn.txt +++ b/source/data/lang/sn.txt @@ -48,5 +48,5 @@ sn{ zh{"chiChinese"} zu{"chiZulu"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/so.txt b/source/data/lang/so.txt index 3d6a275..843754f 100644 --- a/source/data/lang/so.txt +++ b/source/data/lang/so.txt @@ -52,5 +52,5 @@ so{ Zxxx{"Aan la qorin"} Zzzz{"Far aan la aqoon amase aan saxnayn"} } - Version{"2.1.27.78"} + Version{"2.1.33.76"} } diff --git a/source/data/lang/sq.txt b/source/data/lang/sq.txt index 030c703..867a2b6 100644 --- a/source/data/lang/sq.txt +++ b/source/data/lang/sq.txt @@ -555,7 +555,7 @@ sq{ tibt{"shifra tibetiane"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Të gjitha"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sr.txt b/source/data/lang/sr.txt index 372e39c..2f9945d 100644 --- a/source/data/lang/sr.txt +++ b/source/data/lang/sr.txt @@ -842,7 +842,7 @@ sr{ TARASK{"Тараскијевичка ортографија"} VALENCIA{"Валенцијска"} } - Version{"2.1.28.79"} + Version{"2.1.32.73"} characterLabelPattern{ all{"{0} — све"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sr_Cyrl.txt b/source/data/lang/sr_Cyrl.txt index 0b50a55..2e18268 100644 --- a/source/data/lang/sr_Cyrl.txt +++ b/source/data/lang/sr_Cyrl.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Cyrl_BA.txt b/source/data/lang/sr_Cyrl_BA.txt index f481998..8435440 100644 --- a/source/data/lang/sr_Cyrl_BA.txt +++ b/source/data/lang/sr_Cyrl_BA.txt @@ -18,5 +18,5 @@ sr_Cyrl_BA{ zgh{"стандардни марокански тамашек"} zu{"исизулу"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Cyrl_ME.txt b/source/data/lang/sr_Cyrl_ME.txt index b8a3dd4..6506986 100644 --- a/source/data/lang/sr_Cyrl_ME.txt +++ b/source/data/lang/sr_Cyrl_ME.txt @@ -17,5 +17,5 @@ sr_Cyrl_ME{ zgh{"стандардни марокански тамашек"} zu{"исизулу"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Cyrl_XK.txt b/source/data/lang/sr_Cyrl_XK.txt index 76f27e4..31c7433 100644 --- a/source/data/lang/sr_Cyrl_XK.txt +++ b/source/data/lang/sr_Cyrl_XK.txt @@ -17,5 +17,5 @@ sr_Cyrl_XK{ zgh{"стандардни марокански тамашек"} zu{"исизулу"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Latn.txt b/source/data/lang/sr_Latn.txt index 806b5bf..948dfb0 100644 --- a/source/data/lang/sr_Latn.txt +++ b/source/data/lang/sr_Latn.txt @@ -843,7 +843,7 @@ sr_Latn{ TARASK{"Taraskijevička ortografija"} VALENCIA{"Valencijska"} } - Version{"2.1.29.33"} + Version{"2.1.32.73"} characterLabelPattern{ all{"{0} — sve"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sr_Latn_BA.txt b/source/data/lang/sr_Latn_BA.txt index ea6b7e6..899695d 100644 --- a/source/data/lang/sr_Latn_BA.txt +++ b/source/data/lang/sr_Latn_BA.txt @@ -18,5 +18,5 @@ sr_Latn_BA{ zgh{"standardni marokanski tamašek"} zu{"isizulu"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Latn_ME.txt b/source/data/lang/sr_Latn_ME.txt index 0a3470f..02ecd98 100644 --- a/source/data/lang/sr_Latn_ME.txt +++ b/source/data/lang/sr_Latn_ME.txt @@ -17,5 +17,5 @@ sr_Latn_ME{ zgh{"standardni marokanski tamašek"} zu{"isizulu"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sr_Latn_XK.txt b/source/data/lang/sr_Latn_XK.txt index 4c376bb..303bf09 100644 --- a/source/data/lang/sr_Latn_XK.txt +++ b/source/data/lang/sr_Latn_XK.txt @@ -17,5 +17,5 @@ sr_Latn_XK{ zgh{"standardni marokanski tamašek"} zu{"isizulu"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sv.txt b/source/data/lang/sv.txt index caa8f1f..3c1f516 100644 --- a/source/data/lang/sv.txt +++ b/source/data/lang/sv.txt @@ -1081,7 +1081,7 @@ sv{ VALLADER{"vallader-dialekt"} WADEGILE{"Wade-Giles"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — alla"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sv_FI.txt b/source/data/lang/sv_FI.txt index 7679c9c..3017eb3 100644 --- a/source/data/lang/sv_FI.txt +++ b/source/data/lang/sv_FI.txt @@ -10,5 +10,5 @@ sv_FI{ Scripts%variant{ Arab{"persisk-arabiska"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sw.txt b/source/data/lang/sw.txt index 9a62cd5..8355cec 100644 --- a/source/data/lang/sw.txt +++ b/source/data/lang/sw.txt @@ -637,7 +637,7 @@ sw{ vaii{"Dijiti za Vai"} } } - Version{"2.1.28.79"} + Version{"2.1.33.73"} characterLabelPattern{ all{"{0} — Zote"} category-list{"{0}: {1}"} diff --git a/source/data/lang/sw_CD.txt b/source/data/lang/sw_CD.txt index c0afa6e..64a14e7 100644 --- a/source/data/lang/sw_CD.txt +++ b/source/data/lang/sw_CD.txt @@ -40,5 +40,5 @@ sw_CD{ wae{"Kiwalser"} yi{"Kiyidi"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/sw_KE.txt b/source/data/lang/sw_KE.txt index 593dcc7..4ff3f2a 100644 --- a/source/data/lang/sw_KE.txt +++ b/source/data/lang/sw_KE.txt @@ -42,5 +42,5 @@ sw_KE{ wae{"Kiwalser"} zgh{"Tamazight Sanifu ya Moroko"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ta.txt b/source/data/lang/ta.txt index 85dadca..2e4a476 100644 --- a/source/data/lang/ta.txt +++ b/source/data/lang/ta.txt @@ -836,7 +836,7 @@ ta{ PINYIN{"பின்யின் ரோமானைசெஷன்"} WADEGILE{"வேட்-கைல்ஸ் ரோமனைஷேசன்"} } - Version{"2.1.28.79"} + Version{"2.1.32.4"} characterLabelPattern{ all{"{0} — அனைத்தும்"} category-list{"{0}: {1}"} diff --git a/source/data/lang/te.txt b/source/data/lang/te.txt index 060e7eb..34b2b9e 100644 --- a/source/data/lang/te.txt +++ b/source/data/lang/te.txt @@ -837,7 +837,7 @@ te{ REVISED{"సవరించబడిన వర్ణక్రమం"} WADEGILE{"వేడ్-గైల్స్ రోమనైజేషన్"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — అన్ని"} category-list{"{0}: {1}"} diff --git a/source/data/lang/teo.txt b/source/data/lang/teo.txt index e4ee535..90f053d 100644 --- a/source/data/lang/teo.txt +++ b/source/data/lang/teo.txt @@ -48,5 +48,5 @@ teo{ zh{"Kichina"} zu{"Kizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/th.txt b/source/data/lang/th.txt index a52ce90..8b36b0c 100644 --- a/source/data/lang/th.txt +++ b/source/data/lang/th.txt @@ -1054,7 +1054,7 @@ th{ VALLADER{"วัลลาเดอร์"} WADEGILE{"การถอดอักษรแบบเวด-ไจลส์"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — ทั้งหมด"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ti.txt b/source/data/lang/ti.txt index db392c1..7dcf11d 100644 --- a/source/data/lang/ti.txt +++ b/source/data/lang/ti.txt @@ -100,5 +100,5 @@ ti{ Ethi{"ፊደል"} Latn{"ላቲን"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/to.txt b/source/data/lang/to.txt index 36a1643..f0b45ff 100644 --- a/source/data/lang/to.txt +++ b/source/data/lang/to.txt @@ -882,7 +882,7 @@ to{ tibt{"fika fakatipeti"} } } - Version{"2.1.27.98"} + Version{"2.1.31.74"} codePatterns{ language{"Lea: {0}"} script{"Tohinima: {0}"} diff --git a/source/data/lang/tr.txt b/source/data/lang/tr.txt index bdd22ff..74cfe8b 100644 --- a/source/data/lang/tr.txt +++ b/source/data/lang/tr.txt @@ -1011,7 +1011,7 @@ tr{ VALENCIA{"Valensiyaca"} WADEGILE{"Wade-Giles (Latin Alfabesinde Yazımı)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Tümü"} category-list{"{0}: {1}"} diff --git a/source/data/lang/twq.txt b/source/data/lang/twq.txt index 47955e0..a254b30 100644 --- a/source/data/lang/twq.txt +++ b/source/data/lang/twq.txt @@ -48,5 +48,5 @@ twq{ zh{"Sinuwa senni, Mandareŋ"} zu{"Zulu senni"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/tzm.txt b/source/data/lang/tzm.txt index c641e64..7a364a3 100644 --- a/source/data/lang/tzm.txt +++ b/source/data/lang/tzm.txt @@ -48,5 +48,5 @@ tzm{ zh{"Tacinwit,Mandarin"} zu{"tazulut"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/ug.txt b/source/data/lang/ug.txt index f49c30c..df8ecb2 100644 --- a/source/data/lang/ug.txt +++ b/source/data/lang/ug.txt @@ -830,7 +830,7 @@ ug{ VALENCIA{"ۋالېنسىيە"} WADEGILE{"ۋېي ئائىلىسى پىنيىن لاتىنلاشتۇرۇش"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} codePatterns{ language{"تىل: {0}"} script{"يېزىق: {0}"} diff --git a/source/data/lang/uk.txt b/source/data/lang/uk.txt index ab2a9dd..1b31a0a 100644 --- a/source/data/lang/uk.txt +++ b/source/data/lang/uk.txt @@ -878,7 +878,7 @@ uk{ VALENCIA{"Валенсійська"} WADEGILE{"Романізація Вейда-Джайлза"} } - Version{"2.1.29.38"} + Version{"2.1.32.60"} characterLabelPattern{ all{"{0} — усі"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ur.txt b/source/data/lang/ur.txt index 5ae5de2..ac8543d 100644 --- a/source/data/lang/ur.txt +++ b/source/data/lang/ur.txt @@ -626,7 +626,7 @@ ur{ vaii{"وائی ہندسے"} } } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — تمام"} category-list{"{0}: {1}"} diff --git a/source/data/lang/ur_IN.txt b/source/data/lang/ur_IN.txt index ea2d1e3..4e267f1 100644 --- a/source/data/lang/ur_IN.txt +++ b/source/data/lang/ur_IN.txt @@ -25,5 +25,5 @@ ur_IN{ tibt{"تبتی ہندسے"} } } - Version{"2.1.27.79"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/uz.txt b/source/data/lang/uz.txt index e003ca3..5342bb3 100644 --- a/source/data/lang/uz.txt +++ b/source/data/lang/uz.txt @@ -521,7 +521,7 @@ uz{ tibt{"tibet raqamlari"} } } - Version{"2.1.29.44"} + Version{"2.1.32.60"} characterLabelPattern{ all{"{0} — hammasi"} category-list{"{0}: {1}"} diff --git a/source/data/lang/uz_Arab.txt b/source/data/lang/uz_Arab.txt index ba25329..ffb4605 100644 --- a/source/data/lang/uz_Arab.txt +++ b/source/data/lang/uz_Arab.txt @@ -10,5 +10,5 @@ uz_Arab{ Scripts{ Arab{"عربی"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/uz_Cyrl.txt b/source/data/lang/uz_Cyrl.txt index 6624f57..839f327 100644 --- a/source/data/lang/uz_Cyrl.txt +++ b/source/data/lang/uz_Cyrl.txt @@ -407,7 +407,7 @@ uz_Cyrl{ tibt{"Тибет рақамлари"} } } - Version{"2.1.27.98"} + Version{"2.1.31.86"} codePatterns{ language{"Тил: {0}"} script{"{0}"} diff --git a/source/data/lang/uz_Latn.txt b/source/data/lang/uz_Latn.txt index bdf99c4..fdd810c 100644 --- a/source/data/lang/uz_Latn.txt +++ b/source/data/lang/uz_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/vai.txt b/source/data/lang/vai.txt index 7aa9ea4..3b1a87d 100644 --- a/source/data/lang/vai.txt +++ b/source/data/lang/vai.txt @@ -48,5 +48,5 @@ vai{ zh{"ꕦꕇꔧ"} zu{"ꖮꖨ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/vai_Latn.txt b/source/data/lang/vai_Latn.txt index 59a405d..d30b029 100644 --- a/source/data/lang/vai_Latn.txt +++ b/source/data/lang/vai_Latn.txt @@ -49,5 +49,5 @@ vai_Latn{ zh{"Chaniĩ"} zu{"Zúlu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/vai_Vaii.txt b/source/data/lang/vai_Vaii.txt index 38872b5..e66f0f3 100644 --- a/source/data/lang/vai_Vaii.txt +++ b/source/data/lang/vai_Vaii.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Vaii{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/vi.txt b/source/data/lang/vi.txt index 0bc610c..f75d1bb 100644 --- a/source/data/lang/vi.txt +++ b/source/data/lang/vi.txt @@ -979,7 +979,7 @@ vi{ VALLADER{"VALLADER"} WADEGILE{"La Mã hóa Wade-Giles"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} characterLabelPattern{ all{"{0} — Tất cả"} category-list{"{0}: {1}"} diff --git a/source/data/lang/vun.txt b/source/data/lang/vun.txt index 45ded0c..c635e38 100644 --- a/source/data/lang/vun.txt +++ b/source/data/lang/vun.txt @@ -48,5 +48,5 @@ vun{ zh{"Kyichina"} zu{"Kyizulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/wae.txt b/source/data/lang/wae.txt index e0d523b..ae0adae 100644 --- a/source/data/lang/wae.txt +++ b/source/data/lang/wae.txt @@ -193,7 +193,7 @@ wae{ latn{"Arabiši Zálä"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} codePatterns{ language{"Sprač: {0}"} script{"Alfabét: {0}"} diff --git a/source/data/lang/xog.txt b/source/data/lang/xog.txt index bc11dda..5d8ac18 100644 --- a/source/data/lang/xog.txt +++ b/source/data/lang/xog.txt @@ -48,5 +48,5 @@ xog{ zh{"Olucayina"} zu{"Oluzzulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/yav.txt b/source/data/lang/yav.txt index f54be8f..5fbe417 100644 --- a/source/data/lang/yav.txt +++ b/source/data/lang/yav.txt @@ -48,5 +48,5 @@ yav{ zh{"sinúɛ"} zu{"nusulú"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/yi.txt b/source/data/lang/yi.txt index b72a12f..b651045 100644 --- a/source/data/lang/yi.txt +++ b/source/data/lang/yi.txt @@ -171,7 +171,7 @@ yi{ gregorian{"גרעגארישער קאַלענדאַר"} } } - Version{"2.1.27.97"} + Version{"2.1.31.33"} codePatterns{ language{"שפראַך: {0}"} script{"שריפֿט: {0}"} diff --git a/source/data/lang/yo.txt b/source/data/lang/yo.txt index baaa8fd..2d72020 100644 --- a/source/data/lang/yo.txt +++ b/source/data/lang/yo.txt @@ -101,5 +101,5 @@ yo{ zh{"Èdè Mandari"} zu{"Èdè Ṣulu"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/yo_BJ.txt b/source/data/lang/yo_BJ.txt index cb4f20e..3d02b2e 100644 --- a/source/data/lang/yo_BJ.txt +++ b/source/data/lang/yo_BJ.txt @@ -11,5 +11,5 @@ yo_BJ{ tr{"Èdè Tɔɔkisi"} zu{"Èdè Shulu"} } - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/yue.txt b/source/data/lang/yue.txt index 0caa6cd..698b96f 100644 --- a/source/data/lang/yue.txt +++ b/source/data/lang/yue.txt @@ -1024,7 +1024,7 @@ yue{ VALLADER{"瑞士瓦勒德方言"} WADEGILE{"威妥瑪式拼音"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} characterLabelPattern{ all{"{0} — 全部"} compatibility{"{0} — 相容性"} diff --git a/source/data/lang/zgh.txt b/source/data/lang/zgh.txt index cb5badf..0f0d840 100644 --- a/source/data/lang/zgh.txt +++ b/source/data/lang/zgh.txt @@ -61,5 +61,5 @@ zgh{ islamic{"ⴰⵙⵎⵍⵓⵙⵙⴰⵏ ⵏ ⵍⵉⵙⵍⴰⵎ"} } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/zh.txt b/source/data/lang/zh.txt index 59b7fcd..6c33a95 100644 --- a/source/data/lang/zh.txt +++ b/source/data/lang/zh.txt @@ -954,7 +954,7 @@ zh{ VALLADER{"瑞士瓦勒德方言"} WADEGILE{"WG 威氏拼音法"} } - Version{"2.1.29.84"} + Version{"2.1.33.94"} characterLabelPattern{ all{"{0} — 全部"} category-list{"{0}: {1}"} diff --git a/source/data/lang/zh_Hans.txt b/source/data/lang/zh_Hans.txt index c64cac5..1e311fc 100644 --- a/source/data/lang/zh_Hans.txt +++ b/source/data/lang/zh_Hans.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/zh_Hant.txt b/source/data/lang/zh_Hant.txt index 086c618..1c30602 100644 --- a/source/data/lang/zh_Hant.txt +++ b/source/data/lang/zh_Hant.txt @@ -1025,7 +1025,7 @@ zh_Hant{ VALLADER{"瑞士瓦勒德方言"} WADEGILE{"威妥瑪式拼音"} } - Version{"2.1.28.79"} + Version{"2.1.33.94"} characterLabelPattern{ all{"{0} — 全部"} category-list{"{0}: {1}"} diff --git a/source/data/lang/zh_Hant_HK.txt b/source/data/lang/zh_Hant_HK.txt index 6d747f9..c219252 100644 --- a/source/data/lang/zh_Hant_HK.txt +++ b/source/data/lang/zh_Hant_HK.txt @@ -127,7 +127,7 @@ zh_Hant_HK{ REVISED{"已修訂拼字法"} SCOTLAND{"蘇格蘭標準英語"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} characterLabelPattern{ enclosed{"{0} — 包含"} historic{"{0} — 舊式"} diff --git a/source/data/lang/zh_Hant_MO.txt b/source/data/lang/zh_Hant_MO.txt index 9d2c5aa..9589854 100644 --- a/source/data/lang/zh_Hant_MO.txt +++ b/source/data/lang/zh_Hant_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hant_MO{ %%Parent{"zh_Hant_HK"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/lang/zu.txt b/source/data/lang/zu.txt index 750dbf2..f120f57 100644 --- a/source/data/lang/zu.txt +++ b/source/data/lang/zu.txt @@ -629,7 +629,7 @@ zu{ vaii{"Izinhlazu Zezinombolo ze-Vai"} } } - Version{"2.1.29.22"} + Version{"2.1.31.74"} characterLabelPattern{ all{"{0} — All"} category-list{"{0}: {1}"} diff --git a/source/data/locales/af.txt b/source/data/locales/af.txt index 79bee19..3b8064c 100644 --- a/source/data/locales/af.txt +++ b/source/data/locales/af.txt @@ -200,10 +200,19 @@ af{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Neem die {0}e afdraai na regs."} + } + plural{ + one{"{0} dag"} + other{"{0} dae"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/af_NA.txt b/source/data/locales/af_NA.txt index c903a09..59ce215 100644 --- a/source/data/locales/af_NA.txt +++ b/source/data/locales/af_NA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License af_NA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/af_ZA.txt b/source/data/locales/af_ZA.txt index 806e3ec..e15bf85 100644 --- a/source/data/locales/af_ZA.txt +++ b/source/data/locales/af_ZA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License af_ZA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/agq.txt b/source/data/locales/agq.txt index 79078f3..4d87aac 100644 --- a/source/data/locales/agq.txt +++ b/source/data/locales/agq.txt @@ -22,7 +22,7 @@ agq{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/agq_CM.txt b/source/data/locales/agq_CM.txt index f8e2b25..b72facf 100644 --- a/source/data/locales/agq_CM.txt +++ b/source/data/locales/agq_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License agq_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ak.txt b/source/data/locales/ak.txt index d699fff..9e58da3 100644 --- a/source/data/locales/ak.txt +++ b/source/data/locales/ak.txt @@ -15,7 +15,7 @@ ak{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ak_GH.txt b/source/data/locales/ak_GH.txt index d6145f5..4506ad6 100644 --- a/source/data/locales/ak_GH.txt +++ b/source/data/locales/ak_GH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ak_GH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/am.txt b/source/data/locales/am.txt index dc2490f..f4144e9 100644 --- a/source/data/locales/am.txt +++ b/source/data/locales/am.txt @@ -205,11 +205,20 @@ am{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"በቀኝ በኩል ባለው በ{0}ኛው መታጠፊያ ግባ።"} + } + plural{ + one{"{0} ቀን"} + other{"{0} ቀናት"} + } + } minimumGroupingDigits{"1"} native{"latn"} traditional{"ethi"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/am_ET.txt b/source/data/locales/am_ET.txt index 9617206..e12ac7c 100644 --- a/source/data/locales/am_ET.txt +++ b/source/data/locales/am_ET.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License am_ET{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar.txt b/source/data/locales/ar.txt index f96a5c0..4a2027b 100644 --- a/source/data/locales/ar.txt +++ b/source/data/locales/ar.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar{ - AuxExemplarCharacters{"[\u200C\u200D\u200E\u200F پ چ ژ ڜ ڢ ڤ ڥ ٯ ڧ ڨ ک گ ی]"} + AuxExemplarCharacters{"[\u0640 \u200C\u200D\u200E\u200F پ چ ژ ڜ ڢ ڤ ڥ ٯ ڧ ڨ ک گ ی]"} Ellipsis{ final{"{0}…"} initial{"…{0}"} @@ -15,7 +15,7 @@ ar{ "آ ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ى ي]" } ExemplarCharactersIndex{"[ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي]"} - ExemplarCharactersPunctuation{"[\\- ‐ – — ، ؛ \\: ! ؟ . ' \u0022 ( ) \\[ \\]]"} + ExemplarCharactersPunctuation{"[\\- ‐ – — ، ؛ \\: ! ؟ . ' \u0022 ( ) \\[ \\] « » \u2026]"} MoreInformation{"؟"} NumberElements{ arab{ @@ -366,10 +366,23 @@ ar{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"اتجه إلى المنعطف الـ {0} يمينًا."} + } + plural{ + few{"{0} أولاد حضروا"} + many{"{0} ولدًا حضروا"} + one{"ولد واحد حضر"} + other{"{0} ولد حضروا"} + two{"ولدان حضرا"} + zero{"{0} كتاب"} + } + } minimumGroupingDigits{"1"} native{"arab"} } - Version{"2.1.28.79"} + Version{"2.1.32.86"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ar_001.txt b/source/data/locales/ar_001.txt index 5409c75..cdb4dd3 100644 --- a/source/data/locales/ar_001.txt +++ b/source/data/locales/ar_001.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_001{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_AE.txt b/source/data/locales/ar_AE.txt index 58e3e9a..770ccd4 100644 --- a/source/data/locales/ar_AE.txt +++ b/source/data/locales/ar_AE.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_AE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ eras{ diff --git a/source/data/locales/ar_BH.txt b/source/data/locales/ar_BH.txt index f668f6c..a44e4b5 100644 --- a/source/data/locales/ar_BH.txt +++ b/source/data/locales/ar_BH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_BH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_DJ.txt b/source/data/locales/ar_DJ.txt index 4718546..8df511d 100644 --- a/source/data/locales/ar_DJ.txt +++ b/source/data/locales/ar_DJ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_DJ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_DZ.txt b/source/data/locales/ar_DZ.txt index acbf7fe..f1a67d7 100644 --- a/source/data/locales/ar_DZ.txt +++ b/source/data/locales/ar_DZ.txt @@ -10,7 +10,7 @@ ar_DZ{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_EG.txt b/source/data/locales/ar_EG.txt index ca3350e..e1bef50 100644 --- a/source/data/locales/ar_EG.txt +++ b/source/data/locales/ar_EG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_EG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_EH.txt b/source/data/locales/ar_EH.txt index 102ffca..6a4708e 100644 --- a/source/data/locales/ar_EH.txt +++ b/source/data/locales/ar_EH.txt @@ -4,5 +4,5 @@ ar_EH{ NumberElements{ default{"latn"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_ER.txt b/source/data/locales/ar_ER.txt index 8b43fbb..a4136a6 100644 --- a/source/data/locales/ar_ER.txt +++ b/source/data/locales/ar_ER.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_ER{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_IL.txt b/source/data/locales/ar_IL.txt index b9ff797..bad6566 100644 --- a/source/data/locales/ar_IL.txt +++ b/source/data/locales/ar_IL.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_IL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ar_IQ.txt b/source/data/locales/ar_IQ.txt index 50f3775..af0f2df 100644 --- a/source/data/locales/ar_IQ.txt +++ b/source/data/locales/ar_IQ.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_IQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_JO.txt b/source/data/locales/ar_JO.txt index 794404c..ce77f75 100644 --- a/source/data/locales/ar_JO.txt +++ b/source/data/locales/ar_JO.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_JO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_KM.txt b/source/data/locales/ar_KM.txt index defeac0..692edbd 100644 --- a/source/data/locales/ar_KM.txt +++ b/source/data/locales/ar_KM.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_KM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ar_KW.txt b/source/data/locales/ar_KW.txt index c71fa52..0f9ac56 100644 --- a/source/data/locales/ar_KW.txt +++ b/source/data/locales/ar_KW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_KW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_LB.txt b/source/data/locales/ar_LB.txt index e360cf8..1ed929f 100644 --- a/source/data/locales/ar_LB.txt +++ b/source/data/locales/ar_LB.txt @@ -9,7 +9,7 @@ ar_LB{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_LY.txt b/source/data/locales/ar_LY.txt index 3a692f4..9274e89 100644 --- a/source/data/locales/ar_LY.txt +++ b/source/data/locales/ar_LY.txt @@ -10,7 +10,7 @@ ar_LY{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/ar_MA.txt b/source/data/locales/ar_MA.txt index 218c0f5..60ac0d2 100644 --- a/source/data/locales/ar_MA.txt +++ b/source/data/locales/ar_MA.txt @@ -11,7 +11,7 @@ ar_MA{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ar_MR.txt b/source/data/locales/ar_MR.txt index ad48ef3..2c9a7b1 100644 --- a/source/data/locales/ar_MR.txt +++ b/source/data/locales/ar_MR.txt @@ -9,7 +9,7 @@ ar_MR{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_OM.txt b/source/data/locales/ar_OM.txt index 75d7007..505f05d 100644 --- a/source/data/locales/ar_OM.txt +++ b/source/data/locales/ar_OM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_OM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_PS.txt b/source/data/locales/ar_PS.txt index b0e75c0..6b28eab 100644 --- a/source/data/locales/ar_PS.txt +++ b/source/data/locales/ar_PS.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_PS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_QA.txt b/source/data/locales/ar_QA.txt index 926610d..279803a 100644 --- a/source/data/locales/ar_QA.txt +++ b/source/data/locales/ar_QA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_QA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_SA.txt b/source/data/locales/ar_SA.txt index 2b26b11..ed97a66 100644 --- a/source/data/locales/ar_SA.txt +++ b/source/data/locales/ar_SA.txt @@ -8,7 +8,7 @@ ar_SA{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ default{"islamic-umalqura"} gregorian{ diff --git a/source/data/locales/ar_SD.txt b/source/data/locales/ar_SD.txt index 3286d50..9dc2875 100644 --- a/source/data/locales/ar_SD.txt +++ b/source/data/locales/ar_SD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_SD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_SO.txt b/source/data/locales/ar_SO.txt index 0d35163..a5c179c 100644 --- a/source/data/locales/ar_SO.txt +++ b/source/data/locales/ar_SO.txt @@ -8,5 +8,5 @@ ar_SO{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_SS.txt b/source/data/locales/ar_SS.txt index eb02064..20ad16a 100644 --- a/source/data/locales/ar_SS.txt +++ b/source/data/locales/ar_SS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_SS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_SY.txt b/source/data/locales/ar_SY.txt index edc70d5..7231a4a 100644 --- a/source/data/locales/ar_SY.txt +++ b/source/data/locales/ar_SY.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_SY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_TD.txt b/source/data/locales/ar_TD.txt index eba3b6c..8f291a8 100644 --- a/source/data/locales/ar_TD.txt +++ b/source/data/locales/ar_TD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_TD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ar_TN.txt b/source/data/locales/ar_TN.txt index 37a7cf6..29a3dbc 100644 --- a/source/data/locales/ar_TN.txt +++ b/source/data/locales/ar_TN.txt @@ -10,7 +10,7 @@ ar_TN{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/ar_YE.txt b/source/data/locales/ar_YE.txt index 5bcf27d..a8db505 100644 --- a/source/data/locales/ar_YE.txt +++ b/source/data/locales/ar_YE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar_YE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ars.txt b/source/data/locales/ars.txt new file mode 100644 index 0000000..9bb22b9 --- /dev/null +++ b/source/data/locales/ars.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +ars{ + "%%ALIAS"{"ar_SA"} +} diff --git a/source/data/locales/as.txt b/source/data/locales/as.txt index c1bb16d..73ee237 100644 --- a/source/data/locales/as.txt +++ b/source/data/locales/as.txt @@ -18,7 +18,7 @@ as{ } native{"beng"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/as_IN.txt b/source/data/locales/as_IN.txt index a679ffb..0bebae7 100644 --- a/source/data/locales/as_IN.txt +++ b/source/data/locales/as_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License as_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/asa.txt b/source/data/locales/asa.txt index e02a4a2..2a9f108 100644 --- a/source/data/locales/asa.txt +++ b/source/data/locales/asa.txt @@ -11,7 +11,7 @@ asa{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/asa_TZ.txt b/source/data/locales/asa_TZ.txt index a156c76..3c9c8ab 100644 --- a/source/data/locales/asa_TZ.txt +++ b/source/data/locales/asa_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License asa_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ast.txt b/source/data/locales/ast.txt index 16d61db..98ec553 100644 --- a/source/data/locales/ast.txt +++ b/source/data/locales/ast.txt @@ -221,10 +221,16 @@ ast{ timeSeparator{":"} } } + minimalPairs{ + plural{ + one{"{0} día"} + other{"{0} díes"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/ast_ES.txt b/source/data/locales/ast_ES.txt index f175017..7357025 100644 --- a/source/data/locales/ast_ES.txt +++ b/source/data/locales/ast_ES.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ast_ES{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/az.txt b/source/data/locales/az.txt index 88230ad..d3cda05 100644 --- a/source/data/locales/az.txt +++ b/source/data/locales/az.txt @@ -200,10 +200,22 @@ az{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}-cü sağ döngəni seçin."} + many{"{0}-cı sağ döngəni seçin."} + one{"{0}-ci sağ döngəni seçin."} + other{"{0}-cu sağ döngəni seçin."} + } + plural{ + one{"Alış-veriş katınızda {0} X var. Almaq istəyirsiniz?"} + other{"Alış-veriş kartınızda {0} X var. Almaq istəyirsiniz?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ @@ -242,7 +254,7 @@ az{ yyyyMEd{"GGGGG dd.MM.y, E"} yyyyMMM{"G MMM y"} yyyyMMMEd{"G d MMM y, E"} - yyyyMMMM{"G y MMMM"} + yyyyMMMM{"G MMMM y"} yyyyMMMd{"G d MMM y"} yyyyMd{"GGGGG dd.MM.y"} yyyyQQQ{"G y QQQ"} @@ -382,7 +394,7 @@ az{ yMEd{"dd.MM.y, E"} yMMM{"MMM y"} yMMMEd{"d MMM y, E"} - yMMMM{"y MMMM"} + yMMMM{"MMMM y"} yMMMd{"d MMM y"} yMd{"dd.MM.y"} yQQQ{"y QQQ"} diff --git a/source/data/locales/az_Cyrl.txt b/source/data/locales/az_Cyrl.txt index 129cae9..a49dbd1 100644 --- a/source/data/locales/az_Cyrl.txt +++ b/source/data/locales/az_Cyrl.txt @@ -26,7 +26,7 @@ az_Cyrl{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/az_Cyrl_AZ.txt b/source/data/locales/az_Cyrl_AZ.txt index bc3b755..ffc7620 100644 --- a/source/data/locales/az_Cyrl_AZ.txt +++ b/source/data/locales/az_Cyrl_AZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License az_Cyrl_AZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/az_Latn.txt b/source/data/locales/az_Latn.txt index 4ce2adb..4c0b75a 100644 --- a/source/data/locales/az_Latn.txt +++ b/source/data/locales/az_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License az_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/az_Latn_AZ.txt b/source/data/locales/az_Latn_AZ.txt index 0bbd205..51285e0 100644 --- a/source/data/locales/az_Latn_AZ.txt +++ b/source/data/locales/az_Latn_AZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License az_Latn_AZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bas.txt b/source/data/locales/bas.txt index 8fe93e2..9407958 100644 --- a/source/data/locales/bas.txt +++ b/source/data/locales/bas.txt @@ -23,7 +23,7 @@ bas{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bas_CM.txt b/source/data/locales/bas_CM.txt index 531f218..7996233 100644 --- a/source/data/locales/bas_CM.txt +++ b/source/data/locales/bas_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bas_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/be.txt b/source/data/locales/be.txt index 49a1216..3d4691a 100644 --- a/source/data/locales/be.txt +++ b/source/data/locales/be.txt @@ -271,10 +271,22 @@ be{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}-і дом злева"} + other{"{0}-ы дом злева"} + } + plural{ + few{"з {0} кніг за {0} дні"} + many{"з {0} кніг за {0} дзён"} + one{"з {0} кнігі за {0} дзень"} + other{"з {0} кніги за {0} дні"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.29.66"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/be_BY.txt b/source/data/locales/be_BY.txt index 5cdfd7a..232d7f5 100644 --- a/source/data/locales/be_BY.txt +++ b/source/data/locales/be_BY.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License be_BY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bem.txt b/source/data/locales/bem.txt index 82f8049..80e66b0 100644 --- a/source/data/locales/bem.txt +++ b/source/data/locales/bem.txt @@ -12,7 +12,7 @@ bem{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bem_ZM.txt b/source/data/locales/bem_ZM.txt index 31330b7..9418213 100644 --- a/source/data/locales/bem_ZM.txt +++ b/source/data/locales/bem_ZM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bem_ZM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bez.txt b/source/data/locales/bez.txt index 1a8dc4f..7779102 100644 --- a/source/data/locales/bez.txt +++ b/source/data/locales/bez.txt @@ -11,7 +11,7 @@ bez{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bez_TZ.txt b/source/data/locales/bez_TZ.txt index fc8993d..6a24740 100644 --- a/source/data/locales/bez_TZ.txt +++ b/source/data/locales/bez_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bez_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bg.txt b/source/data/locales/bg.txt index 02da35c..a8c65e7 100644 --- a/source/data/locales/bg.txt +++ b/source/data/locales/bg.txt @@ -22,8 +22,8 @@ bg{ range{"{0} – {1}"} } patterns{ - accountingFormat{"#0.00 ¤;(#0.00 ¤)"} - currencyFormat{"#0.00 ¤"} + accountingFormat{"0.00 ¤;(0.00 ¤)"} + currencyFormat{"0.00 ¤"} decimalFormat{"#,##0.###"} percentFormat{"#,##0%"} scientificFormat{"#E0"} @@ -197,10 +197,19 @@ bg{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Завийте надясно по {0}-ата пресечка."} + } + plural{ + one{"{0} ден"} + other{"{0} дена"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.30.6"} + Version{"2.1.33.75"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bg_BG.txt b/source/data/locales/bg_BG.txt index 1363c5c..08a3624 100644 --- a/source/data/locales/bg_BG.txt +++ b/source/data/locales/bg_BG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bg_BG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bm.txt b/source/data/locales/bm.txt index 481cb7e..660d64e 100644 --- a/source/data/locales/bm.txt +++ b/source/data/locales/bm.txt @@ -12,7 +12,7 @@ bm{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bm_ML.txt b/source/data/locales/bm_ML.txt index 2e3638e..f0e75ca 100644 --- a/source/data/locales/bm_ML.txt +++ b/source/data/locales/bm_ML.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bm_ML{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bn.txt b/source/data/locales/bn.txt index 03651d0..86f9bd4 100644 --- a/source/data/locales/bn.txt +++ b/source/data/locales/bn.txt @@ -219,10 +219,23 @@ bn{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"ডান দিকে {0}র্থ বাঁকটি নিন।"} + many{"ডান দিকে {0}ষ্ঠ বাঁকটি নিন।"} + one{"ডান দিকে {0}ম বাঁকটি নিন।"} + other{"ডান দিকে {0}তম বাঁকটি নিন।"} + two{"ডান দিকে {0}য় বাঁকটি নিন।"} + } + plural{ + one{"সসে {0}টি আপেল খেল, সেটা ভাল"} + other{"সসে {0}টি আপেল খেল, সেগুলি ভাল"} + } + } minimumGroupingDigits{"1"} native{"beng"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bn_BD.txt b/source/data/locales/bn_BD.txt index 01d1331..5c3efb3 100644 --- a/source/data/locales/bn_BD.txt +++ b/source/data/locales/bn_BD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bn_BD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bn_IN.txt b/source/data/locales/bn_IN.txt index 2625d6a..ac62d73 100644 --- a/source/data/locales/bn_IN.txt +++ b/source/data/locales/bn_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bn_IN{ - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bo.txt b/source/data/locales/bo.txt index 858b006..ecb9a41 100644 --- a/source/data/locales/bo.txt +++ b/source/data/locales/bo.txt @@ -32,7 +32,7 @@ bo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bo_CN.txt b/source/data/locales/bo_CN.txt index d14460a..d078c62 100644 --- a/source/data/locales/bo_CN.txt +++ b/source/data/locales/bo_CN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bo_CN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bo_IN.txt b/source/data/locales/bo_IN.txt index 446d430..c910621 100644 --- a/source/data/locales/bo_IN.txt +++ b/source/data/locales/bo_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bo_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/br.txt b/source/data/locales/br.txt index 3eda0a7..33f32d0 100644 --- a/source/data/locales/br.txt +++ b/source/data/locales/br.txt @@ -47,10 +47,19 @@ br{ timeSeparator{":"} } } + minimalPairs{ + plural{ + few{"{0} deiz"} + many{"{0} a zeizioù"} + one{"{0} deiz"} + other{"{0} deiz"} + two{"{0} zeiz"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/br_FR.txt b/source/data/locales/br_FR.txt index b579857..f70dc3a 100644 --- a/source/data/locales/br_FR.txt +++ b/source/data/locales/br_FR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License br_FR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/brx.txt b/source/data/locales/brx.txt index 5ca9c34..5474437 100644 --- a/source/data/locales/brx.txt +++ b/source/data/locales/brx.txt @@ -35,7 +35,7 @@ brx{ } native{"deva"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/brx_IN.txt b/source/data/locales/brx_IN.txt index fa00f98..d25903d 100644 --- a/source/data/locales/brx_IN.txt +++ b/source/data/locales/brx_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License brx_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bs.txt b/source/data/locales/bs.txt index 374db59..c8c44a2 100644 --- a/source/data/locales/bs.txt +++ b/source/data/locales/bs.txt @@ -230,10 +230,21 @@ bs{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Skrenite na {0}. križanju desno."} + } + plural{ + few{"za {0} mjeseca"} + many{"za {0} mjeseci"} + one{"za {0} mjesec"} + other{"za {0} mjeseci"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/bs_Cyrl.txt b/source/data/locales/bs_Cyrl.txt index 8105216..d7220de 100644 --- a/source/data/locales/bs_Cyrl.txt +++ b/source/data/locales/bs_Cyrl.txt @@ -159,7 +159,7 @@ bs_Cyrl{ } } } - Version{"2.1.28.76"} + Version{"2.1.32.72"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/bs_Cyrl_BA.txt b/source/data/locales/bs_Cyrl_BA.txt index 5db9081..4335d9f 100644 --- a/source/data/locales/bs_Cyrl_BA.txt +++ b/source/data/locales/bs_Cyrl_BA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bs_Cyrl_BA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bs_Latn.txt b/source/data/locales/bs_Latn.txt index 20b4126..972dc01 100644 --- a/source/data/locales/bs_Latn.txt +++ b/source/data/locales/bs_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bs_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/bs_Latn_BA.txt b/source/data/locales/bs_Latn_BA.txt index d77e537..b892c9e 100644 --- a/source/data/locales/bs_Latn_BA.txt +++ b/source/data/locales/bs_Latn_BA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bs_Latn_BA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ca.txt b/source/data/locales/ca.txt index 472a8ae..3bbd232 100644 --- a/source/data/locales/ca.txt +++ b/source/data/locales/ca.txt @@ -200,10 +200,22 @@ ca{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"Agafa el {0}t a la dreta."} + one{"Agafa el {0}r a la dreta."} + other{"Agafa el {0}è a la dreta."} + two{"Agafa el {0}n a la dreta."} + } + plural{ + one{"{0} dia"} + other{"{0} dies"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/ca_AD.txt b/source/data/locales/ca_AD.txt index eb8c0da..8084f9d 100644 --- a/source/data/locales/ca_AD.txt +++ b/source/data/locales/ca_AD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ca_AD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ca_ES.txt b/source/data/locales/ca_ES.txt index a05a155..17b5d30 100644 --- a/source/data/locales/ca_ES.txt +++ b/source/data/locales/ca_ES.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ca_ES{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ca_FR.txt b/source/data/locales/ca_FR.txt index 2ca4ae8..d037446 100644 --- a/source/data/locales/ca_FR.txt +++ b/source/data/locales/ca_FR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ca_FR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ca_IT.txt b/source/data/locales/ca_IT.txt index 5906109..2ad3e6c 100644 --- a/source/data/locales/ca_IT.txt +++ b/source/data/locales/ca_IT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ca_IT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ce.txt b/source/data/locales/ce.txt index c7f18c6..8030b5d 100644 --- a/source/data/locales/ce.txt +++ b/source/data/locales/ce.txt @@ -192,7 +192,7 @@ ce{ } minimumGroupingDigits{"1"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ce_RU.txt b/source/data/locales/ce_RU.txt index 170e4b9..290d689 100644 --- a/source/data/locales/ce_RU.txt +++ b/source/data/locales/ce_RU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ce_RU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/cgg.txt b/source/data/locales/cgg.txt index 7bf18b8..8185aed 100644 --- a/source/data/locales/cgg.txt +++ b/source/data/locales/cgg.txt @@ -10,7 +10,7 @@ cgg{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/cgg_UG.txt b/source/data/locales/cgg_UG.txt index b14933f..37782c1 100644 --- a/source/data/locales/cgg_UG.txt +++ b/source/data/locales/cgg_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License cgg_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/chr.txt b/source/data/locales/chr.txt index 8018b09..3bb5ecb 100644 --- a/source/data/locales/chr.txt +++ b/source/data/locales/chr.txt @@ -203,7 +203,7 @@ chr{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/chr_US.txt b/source/data/locales/chr_US.txt index c244f04..82fc619 100644 --- a/source/data/locales/chr_US.txt +++ b/source/data/locales/chr_US.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License chr_US{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ckb.txt b/source/data/locales/ckb.txt index 02905d2..2563157 100644 --- a/source/data/locales/ckb.txt +++ b/source/data/locales/ckb.txt @@ -54,7 +54,7 @@ ckb{ minimumGroupingDigits{"1"} native{"arab"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ckb_IQ.txt b/source/data/locales/ckb_IQ.txt index ddb1eda..c395e28 100644 --- a/source/data/locales/ckb_IQ.txt +++ b/source/data/locales/ckb_IQ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ckb_IQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ckb_IR.txt b/source/data/locales/ckb_IR.txt index 089b81e..2a21718 100644 --- a/source/data/locales/ckb_IR.txt +++ b/source/data/locales/ckb_IR.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ckb_IR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ default{"persian"} gregorian{ diff --git a/source/data/locales/cs.txt b/source/data/locales/cs.txt index e6bccf8..09b1d4a 100644 --- a/source/data/locales/cs.txt +++ b/source/data/locales/cs.txt @@ -282,10 +282,21 @@ cs{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Na {0}. křižovatce odbočte vpravo."} + } + plural{ + few{"{0} dny"} + many{"{0} dne"} + one{"{0} den"} + other{"{0} dní"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ availableFormats{ diff --git a/source/data/locales/cs_CZ.txt b/source/data/locales/cs_CZ.txt index d101286..62dfe6d 100644 --- a/source/data/locales/cs_CZ.txt +++ b/source/data/locales/cs_CZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License cs_CZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/cy.txt b/source/data/locales/cy.txt index 25d5402..a4954fc 100644 --- a/source/data/locales/cy.txt +++ b/source/data/locales/cy.txt @@ -355,10 +355,28 @@ cy{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}ydd ci"} + many{"{0}ed ci"} + one{"ci {0}af"} + other{"ci rhif {0}"} + two{"{0}il gi"} + zero{"{0}fed ci"} + } + plural{ + few{"{0} chi, {0} cath"} + many{"{0} chi, {0} chath"} + one{"{0} ci, {0} gath"} + other{"{0} ci, {0} cath"} + two{"{0} gi, {0} gath"} + zero{"{0} cŵn, {0} cathod"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/cy_GB.txt b/source/data/locales/cy_GB.txt index db01da7..547e137 100644 --- a/source/data/locales/cy_GB.txt +++ b/source/data/locales/cy_GB.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License cy_GB{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/da.txt b/source/data/locales/da.txt index 59bcabb..df0211f 100644 --- a/source/data/locales/da.txt +++ b/source/data/locales/da.txt @@ -197,10 +197,19 @@ da{ timeSeparator{"."} } } + minimalPairs{ + ordinal{ + other{"Tag den {0}. vej til højre."} + } + plural{ + one{"{0} dag"} + other{"{0} dage"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/da_DK.txt b/source/data/locales/da_DK.txt index 90468bd..6383109 100644 --- a/source/data/locales/da_DK.txt +++ b/source/data/locales/da_DK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License da_DK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/da_GL.txt b/source/data/locales/da_GL.txt index 0df430a..77a2fa8 100644 --- a/source/data/locales/da_GL.txt +++ b/source/data/locales/da_GL.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License da_GL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/dav.txt b/source/data/locales/dav.txt index a7be4b3..2b67547 100644 --- a/source/data/locales/dav.txt +++ b/source/data/locales/dav.txt @@ -12,7 +12,7 @@ dav{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dav_KE.txt b/source/data/locales/dav_KE.txt index ad3c1e8..332362d 100644 --- a/source/data/locales/dav_KE.txt +++ b/source/data/locales/dav_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dav_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/de.txt b/source/data/locales/de.txt index bb08c6c..97c6d1a 100644 --- a/source/data/locales/de.txt +++ b/source/data/locales/de.txt @@ -139,16 +139,16 @@ de{ } decimalFormat{ 1000{ - one{"0 Tsd'.'"} - other{"0 Tsd'.'"} + one{"0"} + other{"0"} } 10000{ - one{"00 Tsd'.'"} - other{"00 Tsd'.'"} + one{"0"} + other{"0"} } 100000{ - one{"000 Tsd'.'"} - other{"000 Tsd'.'"} + one{"0"} + other{"0"} } 1000000{ one{"0 Mio'.'"} @@ -203,10 +203,19 @@ de{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}. Abzweigung nach rechts nehmen"} + } + plural{ + one{"{0} Tag"} + other{"{0} Tage"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/de_AT.txt b/source/data/locales/de_AT.txt index 546f0c6..65c6b8c 100644 --- a/source/data/locales/de_AT.txt +++ b/source/data/locales/de_AT.txt @@ -13,7 +13,7 @@ de_AT{ } } } - Version{"2.1.28.73"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/de_BE.txt b/source/data/locales/de_BE.txt index 276c25f..4696925 100644 --- a/source/data/locales/de_BE.txt +++ b/source/data/locales/de_BE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License de_BE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/de_CH.txt b/source/data/locales/de_CH.txt index 3590d19..314fdc3 100644 --- a/source/data/locales/de_CH.txt +++ b/source/data/locales/de_CH.txt @@ -14,9 +14,9 @@ de_CH{ } symbols{ decimal{"."} - group{"'"} + group{"’"} } } } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/de_DE.txt b/source/data/locales/de_DE.txt index 2ffb568..0457b99 100644 --- a/source/data/locales/de_DE.txt +++ b/source/data/locales/de_DE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License de_DE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/de_IT.txt b/source/data/locales/de_IT.txt index e6e8600..f736601 100644 --- a/source/data/locales/de_IT.txt +++ b/source/data/locales/de_IT.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License de_IT{ - Version{"2.1.28.58"} + Version{"2.1.31.33"} calendar{ gregorian{ monthNames{ diff --git a/source/data/locales/de_LI.txt b/source/data/locales/de_LI.txt index ffc05c2..ad1e6e3 100644 --- a/source/data/locales/de_LI.txt +++ b/source/data/locales/de_LI.txt @@ -9,11 +9,11 @@ de_LI{ } symbols{ decimal{"."} - group{"'"} + group{"’"} } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/de_LU.txt b/source/data/locales/de_LU.txt index f26a275..dbdfbfc 100644 --- a/source/data/locales/de_LU.txt +++ b/source/data/locales/de_LU.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License de_LU{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkersNarrow{ diff --git a/source/data/locales/dje.txt b/source/data/locales/dje.txt index 574e06a..8aa7265 100644 --- a/source/data/locales/dje.txt +++ b/source/data/locales/dje.txt @@ -17,7 +17,7 @@ dje{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dje_NE.txt b/source/data/locales/dje_NE.txt index bc66792..7fa4142 100644 --- a/source/data/locales/dje_NE.txt +++ b/source/data/locales/dje_NE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dje_NE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/dsb.txt b/source/data/locales/dsb.txt index 66a4742..682505c 100644 --- a/source/data/locales/dsb.txt +++ b/source/data/locales/dsb.txt @@ -195,7 +195,7 @@ dsb{ } minimumGroupingDigits{"1"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dsb_DE.txt b/source/data/locales/dsb_DE.txt index c5af5c2..dfd2e47 100644 --- a/source/data/locales/dsb_DE.txt +++ b/source/data/locales/dsb_DE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dsb_DE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/dua.txt b/source/data/locales/dua.txt index c5b4d59..d890233 100644 --- a/source/data/locales/dua.txt +++ b/source/data/locales/dua.txt @@ -20,7 +20,7 @@ dua{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dua_CM.txt b/source/data/locales/dua_CM.txt index b25ec16..35ac1cb 100644 --- a/source/data/locales/dua_CM.txt +++ b/source/data/locales/dua_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dua_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/dyo.txt b/source/data/locales/dyo.txt index b0e566b..0a3b87f 100644 --- a/source/data/locales/dyo.txt +++ b/source/data/locales/dyo.txt @@ -17,7 +17,7 @@ dyo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dyo_SN.txt b/source/data/locales/dyo_SN.txt index 4f2f229..d820173 100644 --- a/source/data/locales/dyo_SN.txt +++ b/source/data/locales/dyo_SN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dyo_SN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/dz.txt b/source/data/locales/dz.txt index e2603fb..9475e9d 100644 --- a/source/data/locales/dz.txt +++ b/source/data/locales/dz.txt @@ -84,6 +84,11 @@ dz{ plusSign{"+"} } } + minimalPairs{ + plural{ + other{"ཉིནམ་ {0} "} + } + } native{"tibt"} tibt{ symbols{ @@ -100,7 +105,7 @@ dz{ } } } - Version{"2.1.29.61"} + Version{"2.1.31.34"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/dz_BT.txt b/source/data/locales/dz_BT.txt index c5b0de3..5ab1f9d 100644 --- a/source/data/locales/dz_BT.txt +++ b/source/data/locales/dz_BT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License dz_BT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ebu.txt b/source/data/locales/ebu.txt index c756392..b5778b2 100644 --- a/source/data/locales/ebu.txt +++ b/source/data/locales/ebu.txt @@ -11,7 +11,7 @@ ebu{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ebu_KE.txt b/source/data/locales/ebu_KE.txt index 8c3989b..7a1736f 100644 --- a/source/data/locales/ebu_KE.txt +++ b/source/data/locales/ebu_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ebu_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ee.txt b/source/data/locales/ee.txt index c146c2a..effd219 100644 --- a/source/data/locales/ee.txt +++ b/source/data/locales/ee.txt @@ -75,7 +75,7 @@ ee{ } } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ee_GH.txt b/source/data/locales/ee_GH.txt index e2dcd81..e1b3995 100644 --- a/source/data/locales/ee_GH.txt +++ b/source/data/locales/ee_GH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ee_GH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ee_TG.txt b/source/data/locales/ee_TG.txt index b575799..b198936 100644 --- a/source/data/locales/ee_TG.txt +++ b/source/data/locales/ee_TG.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ee_TG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/el.txt b/source/data/locales/el.txt index 6d0d2dc..407c6b6 100644 --- a/source/data/locales/el.txt +++ b/source/data/locales/el.txt @@ -200,11 +200,20 @@ el{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Στρίψτε στην {0}η γωνία δεξιά."} + } + plural{ + one{"{0} ημέρα"} + other{"{0} ημέρες"} + } + } minimumGroupingDigits{"1"} native{"latn"} traditional{"grek"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/el_CY.txt b/source/data/locales/el_CY.txt index f2aafa0..86a27e9 100644 --- a/source/data/locales/el_CY.txt +++ b/source/data/locales/el_CY.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License el_CY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/el_GR.txt b/source/data/locales/el_GR.txt index 473e1ad..97a35ea 100644 --- a/source/data/locales/el_GR.txt +++ b/source/data/locales/el_GR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License el_GR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en.txt b/source/data/locales/en.txt index e97c5a5..8b83df3 100644 --- a/source/data/locales/en.txt +++ b/source/data/locales/en.txt @@ -191,8 +191,20 @@ en{ superscriptingExponent{"×"} } } + minimalPairs{ + ordinal{ + few{"Take the {0}rd right."} + one{"Take the {0}st right."} + other{"Take the {0}th right."} + two{"Take the {0}nd right."} + } + plural{ + one{"{0} day"} + other{"{0} days"} + } + } } - Version{"2.1.30.50"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ @@ -1232,13 +1244,26 @@ en{ } } } + dayOfYear{ + dn{"day of year"} + } + dayOfYear-short{ + dn{"day of yr."} + } dayperiod{ dn{"AM/PM"} dn%variant{"am/pm"} } + dayperiod-short{ + dn{"AM/PM"} + dn%variant{"am/pm"} + } era{ dn{"era"} } + era-short{ + dn{"era"} + } fri{ relative{ "-1"{"last Friday"} @@ -1795,9 +1820,24 @@ en{ } } } + weekOfMonth{ + dn{"week of month"} + } + weekOfMonth-short{ + dn{"wk. of mo."} + } weekday{ dn{"day of the week"} } + weekday-short{ + dn{"day of wk."} + } + weekdayOfMonth{ + dn{"weekday of the month"} + } + weekdayOfMonth-short{ + dn{"wkday. of mo."} + } year{ dn{"year"} relative{ @@ -1837,6 +1877,9 @@ en{ zone{ dn{"time zone"} } + zone-short{ + dn{"zone"} + } } listPattern{ standard{ diff --git a/source/data/locales/en_001.txt b/source/data/locales/en_001.txt index 9d4dc78..6102677 100644 --- a/source/data/locales/en_001.txt +++ b/source/data/locales/en_001.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_001{ - Version{"2.1.29.54"} + Version{"2.1.31.33"} calendar{ chinese{ DateTimePatterns{ diff --git a/source/data/locales/en_150.txt b/source/data/locales/en_150.txt index 29a67c0..41e4600 100644 --- a/source/data/locales/en_150.txt +++ b/source/data/locales/en_150.txt @@ -14,7 +14,7 @@ en_150{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_AG.txt b/source/data/locales/en_AG.txt index 93d0c87..8a0d454 100644 --- a/source/data/locales/en_AG.txt +++ b/source/data/locales/en_AG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_AI.txt b/source/data/locales/en_AI.txt index f5a6411..6eaf0f6 100644 --- a/source/data/locales/en_AI.txt +++ b/source/data/locales/en_AI.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_AS.txt b/source/data/locales/en_AS.txt index e38d778..7555155 100644 --- a/source/data/locales/en_AS.txt +++ b/source/data/locales/en_AS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_AS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_AT.txt b/source/data/locales/en_AT.txt index f032cd7..a0c42ef 100644 --- a/source/data/locales/en_AT.txt +++ b/source/data/locales/en_AT.txt @@ -14,5 +14,5 @@ en_AT{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_AU.txt b/source/data/locales/en_AU.txt index c614d9a..4f00017 100644 --- a/source/data/locales/en_AU.txt +++ b/source/data/locales/en_AU.txt @@ -9,7 +9,7 @@ en_AU{ } } } - Version{"2.1.30.50"} + Version{"2.1.32.62"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/en_BB.txt b/source/data/locales/en_BB.txt index 7083244..84a0efd 100644 --- a/source/data/locales/en_BB.txt +++ b/source/data/locales/en_BB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_BE.txt b/source/data/locales/en_BE.txt index 3a54d74..ae54a4e 100644 --- a/source/data/locales/en_BE.txt +++ b/source/data/locales/en_BE.txt @@ -13,7 +13,7 @@ en_BE{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_BI.txt b/source/data/locales/en_BI.txt index 2ac4c19..33e77f4 100644 --- a/source/data/locales/en_BI.txt +++ b/source/data/locales/en_BI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_BI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_BM.txt b/source/data/locales/en_BM.txt index 17ad945..a3b9186 100644 --- a/source/data/locales/en_BM.txt +++ b/source/data/locales/en_BM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_BS.txt b/source/data/locales/en_BS.txt index 03e7849..95e82b5 100644 --- a/source/data/locales/en_BS.txt +++ b/source/data/locales/en_BS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_BW.txt b/source/data/locales/en_BW.txt index 3747a3a..677df7e 100644 --- a/source/data/locales/en_BW.txt +++ b/source/data/locales/en_BW.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_BZ.txt b/source/data/locales/en_BZ.txt index 464f60e..8289b54 100644 --- a/source/data/locales/en_BZ.txt +++ b/source/data/locales/en_BZ.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_CA.txt b/source/data/locales/en_CA.txt index 22485c2..0ee0c15 100644 --- a/source/data/locales/en_CA.txt +++ b/source/data/locales/en_CA.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CA{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} calendar{ chinese{ DateTimePatterns{ diff --git a/source/data/locales/en_CC.txt b/source/data/locales/en_CC.txt index ca6ff9f..d85cc61 100644 --- a/source/data/locales/en_CC.txt +++ b/source/data/locales/en_CC.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_CH.txt b/source/data/locales/en_CH.txt index 026eac8..3919c84 100644 --- a/source/data/locales/en_CH.txt +++ b/source/data/locales/en_CH.txt @@ -13,5 +13,5 @@ en_CH{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_CK.txt b/source/data/locales/en_CK.txt index e9b97e1..2501fc4 100644 --- a/source/data/locales/en_CK.txt +++ b/source/data/locales/en_CK.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_CM.txt b/source/data/locales/en_CM.txt index d2e6cd2..9fb27c4 100644 --- a/source/data/locales/en_CM.txt +++ b/source/data/locales/en_CM.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_CX.txt b/source/data/locales/en_CX.txt index 633829f..4b9b79e 100644 --- a/source/data/locales/en_CX.txt +++ b/source/data/locales/en_CX.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_CY.txt b/source/data/locales/en_CY.txt index 81d8657..46da087 100644 --- a/source/data/locales/en_CY.txt +++ b/source/data/locales/en_CY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_DE.txt b/source/data/locales/en_DE.txt index a90a2ee..6a21192 100644 --- a/source/data/locales/en_DE.txt +++ b/source/data/locales/en_DE.txt @@ -12,5 +12,5 @@ en_DE{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_DG.txt b/source/data/locales/en_DG.txt index afd1f99..ddfd8fd 100644 --- a/source/data/locales/en_DG.txt +++ b/source/data/locales/en_DG.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_DK.txt b/source/data/locales/en_DK.txt index 783c665..80fabca 100644 --- a/source/data/locales/en_DK.txt +++ b/source/data/locales/en_DK.txt @@ -12,7 +12,7 @@ en_DK{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/en_DM.txt b/source/data/locales/en_DM.txt index 4eaa7dc..b548583 100644 --- a/source/data/locales/en_DM.txt +++ b/source/data/locales/en_DM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_ER.txt b/source/data/locales/en_ER.txt index 228a8a8..7fd2c9a 100644 --- a/source/data/locales/en_ER.txt +++ b/source/data/locales/en_ER.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ER{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_FI.txt b/source/data/locales/en_FI.txt index 56c27a6..634a76e 100644 --- a/source/data/locales/en_FI.txt +++ b/source/data/locales/en_FI.txt @@ -13,7 +13,7 @@ en_FI{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/en_FJ.txt b/source/data/locales/en_FJ.txt index c439098..86f8e9d 100644 --- a/source/data/locales/en_FJ.txt +++ b/source/data/locales/en_FJ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FJ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_FK.txt b/source/data/locales/en_FK.txt index 54410e8..ba255c5 100644 --- a/source/data/locales/en_FK.txt +++ b/source/data/locales/en_FK.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_FM.txt b/source/data/locales/en_FM.txt index 78ffc47..eab91ca 100644 --- a/source/data/locales/en_FM.txt +++ b/source/data/locales/en_FM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_GB.txt b/source/data/locales/en_GB.txt index bc93380..244d540 100644 --- a/source/data/locales/en_GB.txt +++ b/source/data/locales/en_GB.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GB{ %%Parent{"en_001"} - Version{"2.1.29.24"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/en_GD.txt b/source/data/locales/en_GD.txt index ab0594c..7921b24 100644 --- a/source/data/locales/en_GD.txt +++ b/source/data/locales/en_GD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_GG.txt b/source/data/locales/en_GG.txt index 6a6ab99..69c8058 100644 --- a/source/data/locales/en_GG.txt +++ b/source/data/locales/en_GG.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_GH.txt b/source/data/locales/en_GH.txt index 33fc5d4..b66f585 100644 --- a/source/data/locales/en_GH.txt +++ b/source/data/locales/en_GH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_GI.txt b/source/data/locales/en_GI.txt index bb8f5f4..667e366 100644 --- a/source/data/locales/en_GI.txt +++ b/source/data/locales/en_GI.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_GM.txt b/source/data/locales/en_GM.txt index e0d4e60..1a05f40 100644 --- a/source/data/locales/en_GM.txt +++ b/source/data/locales/en_GM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_GU.txt b/source/data/locales/en_GU.txt index 4a3e72b..256d083 100644 --- a/source/data/locales/en_GU.txt +++ b/source/data/locales/en_GU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_GU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_GY.txt b/source/data/locales/en_GY.txt index dec9373..f7397d6 100644 --- a/source/data/locales/en_GY.txt +++ b/source/data/locales/en_GY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_HK.txt b/source/data/locales/en_HK.txt index 297e5ac..dab5987 100644 --- a/source/data/locales/en_HK.txt +++ b/source/data/locales/en_HK.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_HK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_IE.txt b/source/data/locales/en_IE.txt index 6dd04df..df8a004 100644 --- a/source/data/locales/en_IE.txt +++ b/source/data/locales/en_IE.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IE{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_IL.txt b/source/data/locales/en_IL.txt index 995b671..71034d7 100644 --- a/source/data/locales/en_IL.txt +++ b/source/data/locales/en_IL.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/en_IM.txt b/source/data/locales/en_IM.txt index 2af01f6..3d7409a 100644 --- a/source/data/locales/en_IM.txt +++ b/source/data/locales/en_IM.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_IN.txt b/source/data/locales/en_IN.txt index e191759..3011950 100644 --- a/source/data/locales/en_IN.txt +++ b/source/data/locales/en_IN.txt @@ -11,7 +11,7 @@ en_IN{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_IO.txt b/source/data/locales/en_IO.txt index 04e3b38..b07f34d 100644 --- a/source/data/locales/en_IO.txt +++ b/source/data/locales/en_IO.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_JE.txt b/source/data/locales/en_JE.txt index 3c0ea36..f5a11ab 100644 --- a/source/data/locales/en_JE.txt +++ b/source/data/locales/en_JE.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_JM.txt b/source/data/locales/en_JM.txt index 67edbc7..d812c18 100644 --- a/source/data/locales/en_JM.txt +++ b/source/data/locales/en_JM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_KE.txt b/source/data/locales/en_KE.txt index e192b33..2bf986d 100644 --- a/source/data/locales/en_KE.txt +++ b/source/data/locales/en_KE.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_KI.txt b/source/data/locales/en_KI.txt index 3f8c7e1..899b1ea 100644 --- a/source/data/locales/en_KI.txt +++ b/source/data/locales/en_KI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_KN.txt b/source/data/locales/en_KN.txt index f755a2f..35fb03c 100644 --- a/source/data/locales/en_KN.txt +++ b/source/data/locales/en_KN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_KY.txt b/source/data/locales/en_KY.txt index e26f444..bd356e9 100644 --- a/source/data/locales/en_KY.txt +++ b/source/data/locales/en_KY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_LC.txt b/source/data/locales/en_LC.txt index 7abb21b..bfd0689 100644 --- a/source/data/locales/en_LC.txt +++ b/source/data/locales/en_LC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_LR.txt b/source/data/locales/en_LR.txt index 07b6a83..3fc63c0 100644 --- a/source/data/locales/en_LR.txt +++ b/source/data/locales/en_LR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_LS.txt b/source/data/locales/en_LS.txt index b5123bd..b723857 100644 --- a/source/data/locales/en_LS.txt +++ b/source/data/locales/en_LS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_MG.txt b/source/data/locales/en_MG.txt index 16ff510..1726249 100644 --- a/source/data/locales/en_MG.txt +++ b/source/data/locales/en_MG.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_MH.txt b/source/data/locales/en_MH.txt index 2fedbad..896123a 100644 --- a/source/data/locales/en_MH.txt +++ b/source/data/locales/en_MH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_MH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_MO.txt b/source/data/locales/en_MO.txt index 0b1b6a5..f6dfb6a 100644 --- a/source/data/locales/en_MO.txt +++ b/source/data/locales/en_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_MP.txt b/source/data/locales/en_MP.txt index 1acf871..680d6fc 100644 --- a/source/data/locales/en_MP.txt +++ b/source/data/locales/en_MP.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_MP{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_MS.txt b/source/data/locales/en_MS.txt index 2550fd9..0e04e95 100644 --- a/source/data/locales/en_MS.txt +++ b/source/data/locales/en_MS.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_MT.txt b/source/data/locales/en_MT.txt index 54a384b..87588fd 100644 --- a/source/data/locales/en_MT.txt +++ b/source/data/locales/en_MT.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_MU.txt b/source/data/locales/en_MU.txt index 449706a..3400c0e 100644 --- a/source/data/locales/en_MU.txt +++ b/source/data/locales/en_MU.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_MW.txt b/source/data/locales/en_MW.txt index 58ee57a..873b8e1 100644 --- a/source/data/locales/en_MW.txt +++ b/source/data/locales/en_MW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_MY.txt b/source/data/locales/en_MY.txt index 064aa6e..b36d9ba 100644 --- a/source/data/locales/en_MY.txt +++ b/source/data/locales/en_MY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_NA.txt b/source/data/locales/en_NA.txt index 26854fe..5f0af42 100644 --- a/source/data/locales/en_NA.txt +++ b/source/data/locales/en_NA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NA{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_NF.txt b/source/data/locales/en_NF.txt index d709e94..e4dcad2 100644 --- a/source/data/locales/en_NF.txt +++ b/source/data/locales/en_NF.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NF{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_NG.txt b/source/data/locales/en_NG.txt index 5038494..745a114 100644 --- a/source/data/locales/en_NG.txt +++ b/source/data/locales/en_NG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_NL.txt b/source/data/locales/en_NL.txt index 534294a..38287ea 100644 --- a/source/data/locales/en_NL.txt +++ b/source/data/locales/en_NL.txt @@ -10,5 +10,5 @@ en_NL{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_NR.txt b/source/data/locales/en_NR.txt index d1b58a9..1d2feef 100644 --- a/source/data/locales/en_NR.txt +++ b/source/data/locales/en_NR.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_NU.txt b/source/data/locales/en_NU.txt index bbcd1b6..1ece2f6 100644 --- a/source/data/locales/en_NU.txt +++ b/source/data/locales/en_NU.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_NZ.txt b/source/data/locales/en_NZ.txt index 5c9a4c6..95d508d 100644 --- a/source/data/locales/en_NZ.txt +++ b/source/data/locales/en_NZ.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_PG.txt b/source/data/locales/en_PG.txt index c1792a4..6aa4d92 100644 --- a/source/data/locales/en_PG.txt +++ b/source/data/locales/en_PG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_PH.txt b/source/data/locales/en_PH.txt index 0ca66f9..080d0e6 100644 --- a/source/data/locales/en_PH.txt +++ b/source/data/locales/en_PH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_PK.txt b/source/data/locales/en_PK.txt index e2c4699..96e49db 100644 --- a/source/data/locales/en_PK.txt +++ b/source/data/locales/en_PK.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_PN.txt b/source/data/locales/en_PN.txt index 4e27c18..08b159c 100644 --- a/source/data/locales/en_PN.txt +++ b/source/data/locales/en_PN.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_PR.txt b/source/data/locales/en_PR.txt index ec32f33..8ae7e2c 100644 --- a/source/data/locales/en_PR.txt +++ b/source/data/locales/en_PR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_PR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_PW.txt b/source/data/locales/en_PW.txt index 0af3d13..30541dc 100644 --- a/source/data/locales/en_PW.txt +++ b/source/data/locales/en_PW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_RW.txt b/source/data/locales/en_RW.txt index 17a50b1..d0918a8 100644 --- a/source/data/locales/en_RW.txt +++ b/source/data/locales/en_RW.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_RW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_SB.txt b/source/data/locales/en_SB.txt index cb507b5..e2de69a 100644 --- a/source/data/locales/en_SB.txt +++ b/source/data/locales/en_SB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_SC.txt b/source/data/locales/en_SC.txt index bfa4714..d0761ab 100644 --- a/source/data/locales/en_SC.txt +++ b/source/data/locales/en_SC.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_SD.txt b/source/data/locales/en_SD.txt index 6206b27..87a33e2 100644 --- a/source/data/locales/en_SD.txt +++ b/source/data/locales/en_SD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_SE.txt b/source/data/locales/en_SE.txt index c43fb9c..5d54b9e 100644 --- a/source/data/locales/en_SE.txt +++ b/source/data/locales/en_SE.txt @@ -13,7 +13,7 @@ en_SE{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_SG.txt b/source/data/locales/en_SG.txt index 0db2056..64467d4 100644 --- a/source/data/locales/en_SG.txt +++ b/source/data/locales/en_SG.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SG{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_SH.txt b/source/data/locales/en_SH.txt index 064220d..29ee033 100644 --- a/source/data/locales/en_SH.txt +++ b/source/data/locales/en_SH.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_SI.txt b/source/data/locales/en_SI.txt index 14d2d24..2d5acc9 100644 --- a/source/data/locales/en_SI.txt +++ b/source/data/locales/en_SI.txt @@ -12,5 +12,5 @@ en_SI{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_SL.txt b/source/data/locales/en_SL.txt index 4005802..3e61485 100644 --- a/source/data/locales/en_SL.txt +++ b/source/data/locales/en_SL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_SS.txt b/source/data/locales/en_SS.txt index 002988b..2b3a430 100644 --- a/source/data/locales/en_SS.txt +++ b/source/data/locales/en_SS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_SX.txt b/source/data/locales/en_SX.txt index de1eebd..38d5dc1 100644 --- a/source/data/locales/en_SX.txt +++ b/source/data/locales/en_SX.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_SZ.txt b/source/data/locales/en_SZ.txt index 47c792d..cc8b6f1 100644 --- a/source/data/locales/en_SZ.txt +++ b/source/data/locales/en_SZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_TC.txt b/source/data/locales/en_TC.txt index eaabbe1..852eb0f 100644 --- a/source/data/locales/en_TC.txt +++ b/source/data/locales/en_TC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_TK.txt b/source/data/locales/en_TK.txt index 81cd9f7..d6622a5 100644 --- a/source/data/locales/en_TK.txt +++ b/source/data/locales/en_TK.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_TO.txt b/source/data/locales/en_TO.txt index f1697f5..d27b6ec 100644 --- a/source/data/locales/en_TO.txt +++ b/source/data/locales/en_TO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_TT.txt b/source/data/locales/en_TT.txt index 599a8fe..21b8b30 100644 --- a/source/data/locales/en_TT.txt +++ b/source/data/locales/en_TT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_TV.txt b/source/data/locales/en_TV.txt index f2d4d59..d7868af 100644 --- a/source/data/locales/en_TV.txt +++ b/source/data/locales/en_TV.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TV{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_TZ.txt b/source/data/locales/en_TZ.txt index b8b18af..51903ab 100644 --- a/source/data/locales/en_TZ.txt +++ b/source/data/locales/en_TZ.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_UG.txt b/source/data/locales/en_UG.txt index 0b86f84..df87949 100644 --- a/source/data/locales/en_UG.txt +++ b/source/data/locales/en_UG.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_UG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/en_UM.txt b/source/data/locales/en_UM.txt index 6d611a3..d466437 100644 --- a/source/data/locales/en_UM.txt +++ b/source/data/locales/en_UM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_UM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_US.txt b/source/data/locales/en_US.txt index a8c1419..aa8243b 100644 --- a/source/data/locales/en_US.txt +++ b/source/data/locales/en_US.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_US{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_US_POSIX.txt b/source/data/locales/en_US_POSIX.txt index ce508b1..278d6f8 100644 --- a/source/data/locales/en_US_POSIX.txt +++ b/source/data/locales/en_US_POSIX.txt @@ -15,5 +15,5 @@ en_US_POSIX{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_VC.txt b/source/data/locales/en_VC.txt index de17869..12317cf 100644 --- a/source/data/locales/en_VC.txt +++ b/source/data/locales/en_VC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_VG.txt b/source/data/locales/en_VG.txt index e6a295b..ba6619b 100644 --- a/source/data/locales/en_VG.txt +++ b/source/data/locales/en_VG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_VI.txt b/source/data/locales/en_VI.txt index ba9e53c..e2d5079 100644 --- a/source/data/locales/en_VI.txt +++ b/source/data/locales/en_VI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License en_VI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_VU.txt b/source/data/locales/en_VU.txt index 2cecbf4..12b8824 100644 --- a/source/data/locales/en_VU.txt +++ b/source/data/locales/en_VU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_WS.txt b/source/data/locales/en_WS.txt index a3f70e3..8c90fd7 100644 --- a/source/data/locales/en_WS.txt +++ b/source/data/locales/en_WS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_WS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_ZA.txt b/source/data/locales/en_ZA.txt index 586724a..0e6d5c4 100644 --- a/source/data/locales/en_ZA.txt +++ b/source/data/locales/en_ZA.txt @@ -14,7 +14,7 @@ en_ZA{ } } } - Version{"2.1.27.64"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/en_ZM.txt b/source/data/locales/en_ZM.txt index 05bb346..19ed0d0 100644 --- a/source/data/locales/en_ZM.txt +++ b/source/data/locales/en_ZM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/en_ZW.txt b/source/data/locales/en_ZW.txt index 68e4dc4..a8cbbc8 100644 --- a/source/data/locales/en_ZW.txt +++ b/source/data/locales/en_ZW.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/eo.txt b/source/data/locales/eo.txt index dc2d4de..3a59fdc 100644 --- a/source/data/locales/eo.txt +++ b/source/data/locales/eo.txt @@ -13,7 +13,7 @@ eo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es.txt b/source/data/locales/es.txt index d914e6e..c767e3f 100644 --- a/source/data/locales/es.txt +++ b/source/data/locales/es.txt @@ -200,10 +200,19 @@ es{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Toma la {0}.ª a la derecha."} + } + plural{ + one{"{0} día"} + other{"{0} días"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.28.80"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ @@ -980,7 +989,7 @@ es{ japanese_kana{"Kana japoneses"} kanbun{"Kanbun"} kanji{"Kanji"} - keycap{"tecla 10"} + keycap{"tecla"} leftwards_arrows{"Flechas hacia la izquierda"} leftwards_rightwards_arrows{"Flechas hacia la izquierda y la derecha"} letterlike_symbols{"Símbolos con letras"} diff --git a/source/data/locales/es_419.txt b/source/data/locales/es_419.txt index 2c8380a..95c8a83 100644 --- a/source/data/locales/es_419.txt +++ b/source/data/locales/es_419.txt @@ -42,7 +42,7 @@ es_419{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_AR.txt b/source/data/locales/es_AR.txt index 330aa4a..5eac1eb 100644 --- a/source/data/locales/es_AR.txt +++ b/source/data/locales/es_AR.txt @@ -15,7 +15,7 @@ es_AR{ } minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/es_BO.txt b/source/data/locales/es_BO.txt index a61fe1e..985b956 100644 --- a/source/data/locales/es_BO.txt +++ b/source/data/locales/es_BO.txt @@ -10,7 +10,7 @@ es_BO{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_BR.txt b/source/data/locales/es_BR.txt index 2f5e37a..e68498b 100644 --- a/source/data/locales/es_BR.txt +++ b/source/data/locales/es_BR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_BR{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_BZ.txt b/source/data/locales/es_BZ.txt new file mode 100644 index 0000000..aa10911 --- /dev/null +++ b/source/data/locales/es_BZ.txt @@ -0,0 +1,6 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +es_BZ{ + %%Parent{"es_419"} + Version{"2.1.32.37"} +} diff --git a/source/data/locales/es_CL.txt b/source/data/locales/es_CL.txt index 61d6ba4..06de2c9 100644 --- a/source/data/locales/es_CL.txt +++ b/source/data/locales/es_CL.txt @@ -14,7 +14,7 @@ es_CL{ } minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_CO.txt b/source/data/locales/es_CO.txt index c115a14..967cab6 100644 --- a/source/data/locales/es_CO.txt +++ b/source/data/locales/es_CO.txt @@ -15,7 +15,7 @@ es_CO{ } minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_CR.txt b/source/data/locales/es_CR.txt index 3d1dd58..75486c8 100644 --- a/source/data/locales/es_CR.txt +++ b/source/data/locales/es_CR.txt @@ -10,7 +10,7 @@ es_CR{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_CU.txt b/source/data/locales/es_CU.txt index 791d7f5..66f010e 100644 --- a/source/data/locales/es_CU.txt +++ b/source/data/locales/es_CU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_CU{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_DO.txt b/source/data/locales/es_DO.txt index aea3380..5b72ad0 100644 --- a/source/data/locales/es_DO.txt +++ b/source/data/locales/es_DO.txt @@ -11,7 +11,7 @@ es_DO{ } minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_EA.txt b/source/data/locales/es_EA.txt index 6a21e1b..09bdd5d 100644 --- a/source/data/locales/es_EA.txt +++ b/source/data/locales/es_EA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License es_EA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_EC.txt b/source/data/locales/es_EC.txt index dcfe892..427c233 100644 --- a/source/data/locales/es_EC.txt +++ b/source/data/locales/es_EC.txt @@ -13,7 +13,7 @@ es_EC{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_ES.txt b/source/data/locales/es_ES.txt index 740a9dc..79fe19a 100644 --- a/source/data/locales/es_ES.txt +++ b/source/data/locales/es_ES.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License es_ES{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_GQ.txt b/source/data/locales/es_GQ.txt index f0ec04f..a314885 100644 --- a/source/data/locales/es_GQ.txt +++ b/source/data/locales/es_GQ.txt @@ -8,5 +8,5 @@ es_GQ{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_GT.txt b/source/data/locales/es_GT.txt index 1361334..ff2f6be 100644 --- a/source/data/locales/es_GT.txt +++ b/source/data/locales/es_GT.txt @@ -59,7 +59,7 @@ es_GT{ } minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_HN.txt b/source/data/locales/es_HN.txt index 2c1980a..8181e0b 100644 --- a/source/data/locales/es_HN.txt +++ b/source/data/locales/es_HN.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_HN{ %%Parent{"es_419"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_IC.txt b/source/data/locales/es_IC.txt index 610d36d..416ff84 100644 --- a/source/data/locales/es_IC.txt +++ b/source/data/locales/es_IC.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License es_IC{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/es_MX.txt b/source/data/locales/es_MX.txt index 54aa624..a4eb04c 100644 --- a/source/data/locales/es_MX.txt +++ b/source/data/locales/es_MX.txt @@ -10,7 +10,7 @@ es_MX{ } } } - Version{"2.1.28.76"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_NI.txt b/source/data/locales/es_NI.txt index 4861fb1..bd73bfa 100644 --- a/source/data/locales/es_NI.txt +++ b/source/data/locales/es_NI.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_NI{ %%Parent{"es_419"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_PA.txt b/source/data/locales/es_PA.txt index b54598e..4f1159d 100644 --- a/source/data/locales/es_PA.txt +++ b/source/data/locales/es_PA.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_PA{ %%Parent{"es_419"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_PE.txt b/source/data/locales/es_PE.txt index 398fecf..45a4eef 100644 --- a/source/data/locales/es_PE.txt +++ b/source/data/locales/es_PE.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_PE{ %%Parent{"es_419"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_PH.txt b/source/data/locales/es_PH.txt index 74e67f0..65eec7d 100644 --- a/source/data/locales/es_PH.txt +++ b/source/data/locales/es_PH.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License es_PH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/es_PR.txt b/source/data/locales/es_PR.txt index 4597430..ee48570 100644 --- a/source/data/locales/es_PR.txt +++ b/source/data/locales/es_PR.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_PR{ %%Parent{"es_419"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/es_PY.txt b/source/data/locales/es_PY.txt index d08be5c..cd1c3a2 100644 --- a/source/data/locales/es_PY.txt +++ b/source/data/locales/es_PY.txt @@ -13,7 +13,7 @@ es_PY{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_SV.txt b/source/data/locales/es_SV.txt index b67218e..191c214 100644 --- a/source/data/locales/es_SV.txt +++ b/source/data/locales/es_SV.txt @@ -5,7 +5,7 @@ es_SV{ NumberElements{ minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_US.txt b/source/data/locales/es_US.txt index d061196..83ad851 100644 --- a/source/data/locales/es_US.txt +++ b/source/data/locales/es_US.txt @@ -22,7 +22,7 @@ es_US{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.74"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_UY.txt b/source/data/locales/es_UY.txt index f7732aa..83c2c42 100644 --- a/source/data/locales/es_UY.txt +++ b/source/data/locales/es_UY.txt @@ -14,7 +14,7 @@ es_UY{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/es_VE.txt b/source/data/locales/es_VE.txt index 1df68dd..c73d2ec 100644 --- a/source/data/locales/es_VE.txt +++ b/source/data/locales/es_VE.txt @@ -13,7 +13,7 @@ es_VE{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/et.txt b/source/data/locales/et.txt index 8e94250..84db98f 100644 --- a/source/data/locales/et.txt +++ b/source/data/locales/et.txt @@ -196,10 +196,19 @@ et{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Tehke {0}. parempööre."} + } + plural{ + one{"{0} ööpäev"} + other{"{0} ööpäeva"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ chinese{ cyclicNameSets{ diff --git a/source/data/locales/et_EE.txt b/source/data/locales/et_EE.txt index 5801a58..5774de7 100644 --- a/source/data/locales/et_EE.txt +++ b/source/data/locales/et_EE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License et_EE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/eu.txt b/source/data/locales/eu.txt index 10503de..1d82d9b 100644 --- a/source/data/locales/eu.txt +++ b/source/data/locales/eu.txt @@ -150,10 +150,19 @@ eu{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}. bira eskuinetara"} + } + plural{ + one{"Nire {0} lagunarekin nago"} + other{"Nire {0} lagunekin nago"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ @@ -326,10 +335,6 @@ eu{ "AM", "PM", } - AmPmMarkersNarrow{ - "g", - "a", - } DateTimePatterns{ "HH:mm:ss (zzzz)", "HH:mm:ss (z)", @@ -480,53 +485,34 @@ eu{ dayPeriod{ format{ abbreviated{ - afternoon1{"arratsaldeko"} - afternoon2{"arratsaldea"} - evening1{"arratsaldeko"} - midnight{"gauerdia"} - morning1{"goizeko"} - morning2{"goiza"} - night1{"gaueko"} - } - narrow{ - afternoon1{"arratsaldeko"} - afternoon2{"arratsaldea"} - evening1{"arratsaldeko"} + afternoon1{"eguerd."} + afternoon2{"arrats."} + evening1{"iluntz."} midnight{"gauerdia"} - morning1{"goizeko"} - morning2{"goiza"} - night1{"gauean"} + morning1{"goiz."} + morning2{"goizeko"} + night1{"gau."} } wide{ - afternoon1{"arratsaldeko"} - afternoon2{"arratsaldea"} - evening1{"arratsaldeko"} + afternoon1{"eguerdiko"} + afternoon2{"arratsaldeko"} + evening1{"iluntzeko"} midnight{"gauerdia"} - morning1{"goizeko"} - morning2{"goiza"} + morning1{"goizaldeko"} + morning2{"goizeko"} night1{"gaueko"} } } stand-alone{ abbreviated{ - afternoon1{"eguerdia"} - afternoon2{"arratsaldea"} + afternoon1{"eguerd."} + afternoon2{"arrats."} am{"AM"} evening1{"iluntz."} midnight{"gauerdia"} - morning1{"goizaldea"} + morning1{"goiz."} morning2{"goiza"} - night1{"gau."} - pm{"PM"} - } - narrow{ - afternoon1{"eguerdia"} - afternoon2{"arratsaldea"} - am{"AM"} - evening1{"iluntz."} - morning1{"goizaldea"} - morning2{"goiza"} - night1{"gau."} + night1{"gaua"} pm{"PM"} } wide{ diff --git a/source/data/locales/eu_ES.txt b/source/data/locales/eu_ES.txt index 8d47614..4435291 100644 --- a/source/data/locales/eu_ES.txt +++ b/source/data/locales/eu_ES.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License eu_ES{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ewo.txt b/source/data/locales/ewo.txt index c22965b..0af1b35 100644 --- a/source/data/locales/ewo.txt +++ b/source/data/locales/ewo.txt @@ -22,7 +22,7 @@ ewo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ewo_CM.txt b/source/data/locales/ewo_CM.txt index 9a491df..ee87b16 100644 --- a/source/data/locales/ewo_CM.txt +++ b/source/data/locales/ewo_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ewo_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fa.txt b/source/data/locales/fa.txt index a2a34b2..e26e7d5 100644 --- a/source/data/locales/fa.txt +++ b/source/data/locales/fa.txt @@ -15,7 +15,7 @@ fa{ "ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ة ی]" } ExemplarCharactersIndex{"[آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی]"} - ExemplarCharactersPunctuation{"[\\- ‐ ، ٫ ٬ ؛ \\: ! ؟ . … ‹ › « » ( ) \\[ \\] * / \\\\]"} + ExemplarCharactersPunctuation{"[\u0640 \\- ‐ ، ٫ ٬ ؛ \\: ! ؟ . … ‹ › « » ( ) \\[ \\] * / \\\\]"} MoreInformation{"؟"} NumberElements{ arab{ @@ -238,10 +238,19 @@ fa{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"در پیچ {0}ام سمت راست بپیچید."} + } + plural{ + one{"او {0} فیلم در هفته می‌بیند که کمدی است."} + other{"او {0} فیلم در هفته می‌بیند که کمدی هستند."} + } + } minimumGroupingDigits{"1"} native{"arabext"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} calendar{ chinese{ cyclicNameSets{ @@ -1158,6 +1167,34 @@ fa{ } } persian{ + DateTimePatterns{ + "H:mm:ss (zzzz)", + "H:mm:ss (z)", + "H:mm:ss", + "H:mm", + "y MMMM d, EEEE", + "d MMMM y", + "d MMM y", + "y/M/d", + "{1}،‏ {0}", + "{1}، ساعت {0}", + "{1}، ساعت {0}", + "{1}،‏ {0}", + "{1}،‏ {0}", + } + availableFormats{ + y{"y"} + yyyy{"y"} + yyyyM{"y/M"} + yyyyMEd{"E y/M/d"} + yyyyMMM{"MMM y"} + yyyyMMMEd{"E d MMM y"} + yyyyMMMM{"y MMMM"} + yyyyMMMd{"d MMM y"} + yyyyMd{"y/M/d"} + yyyyQQQ{"QQQQ y"} + yyyyQQQQ{"QQQQ y"} + } eras{ abbreviated{ "ه‍.ش.", @@ -1166,6 +1203,43 @@ fa{ "هجری شمسی", } } + intervalFormats{ + y{ + y{"y تا y"} + } + yM{ + M{"y/M تا y/M"} + y{"y/M تا y/M"} + } + yMEd{ + M{"E y/M/d تا E y/M/d"} + d{"E y/M/d تا E y/M/d"} + y{"E y/M/d تا E y/M/d"} + } + yMMM{ + M{"LLL تا MMM y"} + y{"MMM y تا MMM y"} + } + yMMMEd{ + M{"E d LLL تا E d MMM y"} + d{"E d LLL تا E d MMM y"} + y{"E d MMM y تا E d MMM y"} + } + yMMMM{ + M{"LLLL تا MMMM y"} + y{"MMMM y تا MMMM y"} + } + yMMMd{ + M{"d LLL تا d MMM y"} + d{"d تا d MMM y"} + y{"d MMM y تا d MMM y"} + } + yMd{ + M{"y/M/d تا y/M/d"} + d{"y/M/d تا y/M/d"} + y{"y/M/d تا y/M/d"} + } + } monthNames{ format{ abbreviated{ diff --git a/source/data/locales/fa_AF.txt b/source/data/locales/fa_AF.txt index c85cc67..faff2c7 100644 --- a/source/data/locales/fa_AF.txt +++ b/source/data/locales/fa_AF.txt @@ -18,7 +18,7 @@ fa_AF{ } } } - Version{"2.1.29.44"} + Version{"2.1.31.33"} calendar{ gregorian{ appendItems{ diff --git a/source/data/locales/fa_IR.txt b/source/data/locales/fa_IR.txt index d4976bd..5e88314 100644 --- a/source/data/locales/fa_IR.txt +++ b/source/data/locales/fa_IR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fa_IR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ff.txt b/source/data/locales/ff.txt index 653cb8b..e7b03e6 100644 --- a/source/data/locales/ff.txt +++ b/source/data/locales/ff.txt @@ -15,7 +15,7 @@ ff{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ff_CM.txt b/source/data/locales/ff_CM.txt index 520a40e..b0a5ac3 100644 --- a/source/data/locales/ff_CM.txt +++ b/source/data/locales/ff_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ff_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ff_GN.txt b/source/data/locales/ff_GN.txt index 90d9877..619454e 100644 --- a/source/data/locales/ff_GN.txt +++ b/source/data/locales/ff_GN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ff_GN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ff_MR.txt b/source/data/locales/ff_MR.txt index 0ef2770..7749d83 100644 --- a/source/data/locales/ff_MR.txt +++ b/source/data/locales/ff_MR.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ff_MR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ff_SN.txt b/source/data/locales/ff_SN.txt index c752e40..45198cf 100644 --- a/source/data/locales/ff_SN.txt +++ b/source/data/locales/ff_SN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ff_SN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fi.txt b/source/data/locales/fi.txt index 7c2d78c..a7198b3 100644 --- a/source/data/locales/fi.txt +++ b/source/data/locales/fi.txt @@ -16,7 +16,7 @@ fi{ } ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s š t u v w x y z ž å ä ö]"} ExemplarCharactersIndex{"[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö]"} - ExemplarCharactersPunctuation{"[‐ – , ; \\: ! ? . … ’ ” » ( ) \\[ \\] § @ * / \\\\ \\& #]"} + ExemplarCharactersPunctuation{"[\\- ‐ – , ; \\: ! ? . … ’ ” » ( ) \\[ \\] § @ * / \\\\ \\& #]"} MoreInformation{"?"} NumberElements{ default{"latn"} @@ -201,10 +201,19 @@ fi{ timeSeparator{"."} } } + minimalPairs{ + ordinal{ + other{"Käänny {0}. risteyksestä oikealle."} + } + plural{ + one{"{0} päivä"} + other{"{0} päivää"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.88"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/fi_FI.txt b/source/data/locales/fi_FI.txt index 883ef7e..d41272f 100644 --- a/source/data/locales/fi_FI.txt +++ b/source/data/locales/fi_FI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fi_FI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fil.txt b/source/data/locales/fil.txt index 01a0cdb..4b78beb 100644 --- a/source/data/locales/fil.txt +++ b/source/data/locales/fil.txt @@ -197,10 +197,20 @@ fil{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Lumiko sa unang kanan."} + other{"Lumiko sa ika-{0} kanan."} + } + plural{ + one{"{0} mansanas"} + other{"{0} na mansanas"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fil_PH.txt b/source/data/locales/fil_PH.txt index 194e3f5..464d643 100644 --- a/source/data/locales/fil_PH.txt +++ b/source/data/locales/fil_PH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fil_PH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fo.txt b/source/data/locales/fo.txt index 9bd55e9..cc08db2 100644 --- a/source/data/locales/fo.txt +++ b/source/data/locales/fo.txt @@ -200,7 +200,7 @@ fo{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fo_DK.txt b/source/data/locales/fo_DK.txt index 07b157f..e84f93a 100644 --- a/source/data/locales/fo_DK.txt +++ b/source/data/locales/fo_DK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fo_DK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fo_FO.txt b/source/data/locales/fo_FO.txt index e015ef1..a028b1e 100644 --- a/source/data/locales/fo_FO.txt +++ b/source/data/locales/fo_FO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fo_FO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr.txt b/source/data/locales/fr.txt index f6af06c..90e340b 100644 --- a/source/data/locales/fr.txt +++ b/source/data/locales/fr.txt @@ -200,10 +200,20 @@ fr{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Prenez la {0}re à droite."} + other{"Prenez la {0}e à droite."} + } + plural{ + one{"{0} jour"} + other{"{0} jours"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/fr_BE.txt b/source/data/locales/fr_BE.txt index cc1807d..3c05883 100644 --- a/source/data/locales/fr_BE.txt +++ b/source/data/locales/fr_BE.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_BE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fr_BF.txt b/source/data/locales/fr_BF.txt index 27ec52d..b3e4267 100644 --- a/source/data/locales/fr_BF.txt +++ b/source/data/locales/fr_BF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_BF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_BI.txt b/source/data/locales/fr_BI.txt index b3ec7b1..9c128eb 100644 --- a/source/data/locales/fr_BI.txt +++ b/source/data/locales/fr_BI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_BI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_BJ.txt b/source/data/locales/fr_BJ.txt index f41267e..2d26a4e 100644 --- a/source/data/locales/fr_BJ.txt +++ b/source/data/locales/fr_BJ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_BJ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_BL.txt b/source/data/locales/fr_BL.txt index 4d91c13..7fa8eac 100644 --- a/source/data/locales/fr_BL.txt +++ b/source/data/locales/fr_BL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_BL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_CA.txt b/source/data/locales/fr_CA.txt index a41a61b..96835d6 100644 --- a/source/data/locales/fr_CA.txt +++ b/source/data/locales/fr_CA.txt @@ -99,7 +99,7 @@ fr_CA{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fr_CD.txt b/source/data/locales/fr_CD.txt index cb9a7d4..3017847 100644 --- a/source/data/locales/fr_CD.txt +++ b/source/data/locales/fr_CD.txt @@ -8,7 +8,7 @@ fr_CD{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/fr_CF.txt b/source/data/locales/fr_CF.txt index 52ce28d..c975a94 100644 --- a/source/data/locales/fr_CF.txt +++ b/source/data/locales/fr_CF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_CF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_CG.txt b/source/data/locales/fr_CG.txt index a54c193..8b8b429 100644 --- a/source/data/locales/fr_CG.txt +++ b/source/data/locales/fr_CG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_CG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_CH.txt b/source/data/locales/fr_CH.txt index 31b48f9..67f74f6 100644 --- a/source/data/locales/fr_CH.txt +++ b/source/data/locales/fr_CH.txt @@ -4,15 +4,14 @@ fr_CH{ NumberElements{ latn{ patterns{ - currencyFormat{"¤ #,##0.00;¤-#,##0.00"} percentFormat{"#,##0%"} } symbols{ - decimal{"."} + currencyDecimal{"."} } } } - Version{"2.1.27.96"} + Version{"2.1.32.48"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fr_CI.txt b/source/data/locales/fr_CI.txt index 89c6e01..a7b2a89 100644 --- a/source/data/locales/fr_CI.txt +++ b/source/data/locales/fr_CI.txt @@ -8,5 +8,5 @@ fr_CI{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_CM.txt b/source/data/locales/fr_CM.txt index 209986d..4e0f60f 100644 --- a/source/data/locales/fr_CM.txt +++ b/source/data/locales/fr_CM.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/fr_DJ.txt b/source/data/locales/fr_DJ.txt index c32164d..d5da59e 100644 --- a/source/data/locales/fr_DJ.txt +++ b/source/data/locales/fr_DJ.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_DJ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_DZ.txt b/source/data/locales/fr_DZ.txt index 5c5bcf6..39d4f9b 100644 --- a/source/data/locales/fr_DZ.txt +++ b/source/data/locales/fr_DZ.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_DZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_FR.txt b/source/data/locales/fr_FR.txt index 1d9ac09..729f59e 100644 --- a/source/data/locales/fr_FR.txt +++ b/source/data/locales/fr_FR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_FR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_GA.txt b/source/data/locales/fr_GA.txt index ecd5ff1..3ea2c27 100644 --- a/source/data/locales/fr_GA.txt +++ b/source/data/locales/fr_GA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_GA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_GF.txt b/source/data/locales/fr_GF.txt index a4cf15d..87c23c5 100644 --- a/source/data/locales/fr_GF.txt +++ b/source/data/locales/fr_GF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_GF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_GN.txt b/source/data/locales/fr_GN.txt index 0cd9de1..21a9ae9 100644 --- a/source/data/locales/fr_GN.txt +++ b/source/data/locales/fr_GN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_GN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_GP.txt b/source/data/locales/fr_GP.txt index 9fb849a..f1b2f94 100644 --- a/source/data/locales/fr_GP.txt +++ b/source/data/locales/fr_GP.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_GP{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_GQ.txt b/source/data/locales/fr_GQ.txt index 5442983..21aa066 100644 --- a/source/data/locales/fr_GQ.txt +++ b/source/data/locales/fr_GQ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_GQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_HT.txt b/source/data/locales/fr_HT.txt index f7d8806..5c7da26 100644 --- a/source/data/locales/fr_HT.txt +++ b/source/data/locales/fr_HT.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_HT{ - Version{"2.1.27.63"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/fr_KM.txt b/source/data/locales/fr_KM.txt index 1d59da2..755f149 100644 --- a/source/data/locales/fr_KM.txt +++ b/source/data/locales/fr_KM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_KM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_LU.txt b/source/data/locales/fr_LU.txt index ae651f0..0f4f04d 100644 --- a/source/data/locales/fr_LU.txt +++ b/source/data/locales/fr_LU.txt @@ -8,5 +8,5 @@ fr_LU{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_MA.txt b/source/data/locales/fr_MA.txt index 4f1ab8f..8b2d675 100644 --- a/source/data/locales/fr_MA.txt +++ b/source/data/locales/fr_MA.txt @@ -8,7 +8,7 @@ fr_MA{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/fr_MC.txt b/source/data/locales/fr_MC.txt index ad6838e..59fa216 100644 --- a/source/data/locales/fr_MC.txt +++ b/source/data/locales/fr_MC.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MC{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_MF.txt b/source/data/locales/fr_MF.txt index 8c61e58..9f256b4 100644 --- a/source/data/locales/fr_MF.txt +++ b/source/data/locales/fr_MF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_MG.txt b/source/data/locales/fr_MG.txt index 2fc051f..e830691 100644 --- a/source/data/locales/fr_MG.txt +++ b/source/data/locales/fr_MG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_ML.txt b/source/data/locales/fr_ML.txt index b8284ad..1454742 100644 --- a/source/data/locales/fr_ML.txt +++ b/source/data/locales/fr_ML.txt @@ -8,7 +8,7 @@ fr_ML{ } } } - Version{"2.1.27.63"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_MQ.txt b/source/data/locales/fr_MQ.txt index 44ece16..e8488e0 100644 --- a/source/data/locales/fr_MQ.txt +++ b/source/data/locales/fr_MQ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_MR.txt b/source/data/locales/fr_MR.txt index 1884c3e..c015b4b 100644 --- a/source/data/locales/fr_MR.txt +++ b/source/data/locales/fr_MR.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_MU.txt b/source/data/locales/fr_MU.txt index 1e4ec19..12aa4a3 100644 --- a/source/data/locales/fr_MU.txt +++ b/source/data/locales/fr_MU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_MU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_NC.txt b/source/data/locales/fr_NC.txt index 92bc86e..aa1c620 100644 --- a/source/data/locales/fr_NC.txt +++ b/source/data/locales/fr_NC.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_NC{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_NE.txt b/source/data/locales/fr_NE.txt index 46dbcda..1283f0c 100644 --- a/source/data/locales/fr_NE.txt +++ b/source/data/locales/fr_NE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_NE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_PF.txt b/source/data/locales/fr_PF.txt index f05ba59..e2284ac 100644 --- a/source/data/locales/fr_PF.txt +++ b/source/data/locales/fr_PF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_PF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_PM.txt b/source/data/locales/fr_PM.txt index 0a5bccb..8f05344 100644 --- a/source/data/locales/fr_PM.txt +++ b/source/data/locales/fr_PM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_PM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_RE.txt b/source/data/locales/fr_RE.txt index 4cab3df..3459130 100644 --- a/source/data/locales/fr_RE.txt +++ b/source/data/locales/fr_RE.txt @@ -8,7 +8,7 @@ fr_RE{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/fr_RW.txt b/source/data/locales/fr_RW.txt index 7d2ea10..c520c4d 100644 --- a/source/data/locales/fr_RW.txt +++ b/source/data/locales/fr_RW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_RW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_SC.txt b/source/data/locales/fr_SC.txt index 2ffbdde..9e2524c 100644 --- a/source/data/locales/fr_SC.txt +++ b/source/data/locales/fr_SC.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_SC{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_SN.txt b/source/data/locales/fr_SN.txt index 556025a..a18a173 100644 --- a/source/data/locales/fr_SN.txt +++ b/source/data/locales/fr_SN.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_SN{ - Version{"2.1.27.63"} + Version{"2.1.31.33"} calendar{ gregorian{ dayPeriod{ diff --git a/source/data/locales/fr_SY.txt b/source/data/locales/fr_SY.txt index 629f9ca..56afc7e 100644 --- a/source/data/locales/fr_SY.txt +++ b/source/data/locales/fr_SY.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_SY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_TD.txt b/source/data/locales/fr_TD.txt index 2d6a519..27f147d 100644 --- a/source/data/locales/fr_TD.txt +++ b/source/data/locales/fr_TD.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_TD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_TG.txt b/source/data/locales/fr_TG.txt index b1361e8..d0cb211 100644 --- a/source/data/locales/fr_TG.txt +++ b/source/data/locales/fr_TG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_TG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_TN.txt b/source/data/locales/fr_TN.txt index ef7ecdf..703a322 100644 --- a/source/data/locales/fr_TN.txt +++ b/source/data/locales/fr_TN.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_TN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_VU.txt b/source/data/locales/fr_VU.txt index 8dc0816..217c71a 100644 --- a/source/data/locales/fr_VU.txt +++ b/source/data/locales/fr_VU.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_VU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/fr_WF.txt b/source/data/locales/fr_WF.txt index d9ee33c..cb51349 100644 --- a/source/data/locales/fr_WF.txt +++ b/source/data/locales/fr_WF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_WF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fr_YT.txt b/source/data/locales/fr_YT.txt index 28b9f3d..b6cf074 100644 --- a/source/data/locales/fr_YT.txt +++ b/source/data/locales/fr_YT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fr_YT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fur.txt b/source/data/locales/fur.txt index 159a677..c0b66cb 100644 --- a/source/data/locales/fur.txt +++ b/source/data/locales/fur.txt @@ -26,7 +26,7 @@ fur{ } } } - Version{"2.1.28.76"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/fur_IT.txt b/source/data/locales/fur_IT.txt index 89c0349..3f23aea 100644 --- a/source/data/locales/fur_IT.txt +++ b/source/data/locales/fur_IT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fur_IT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/fy.txt b/source/data/locales/fy.txt index 4af7527..b0b6b2e 100644 --- a/source/data/locales/fy.txt +++ b/source/data/locales/fy.txt @@ -154,7 +154,7 @@ fy{ } minimumGroupingDigits{"1"} } - Version{"2.1.29.44"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/fy_NL.txt b/source/data/locales/fy_NL.txt index 67b303b..4960d0f 100644 --- a/source/data/locales/fy_NL.txt +++ b/source/data/locales/fy_NL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License fy_NL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ga.txt b/source/data/locales/ga.txt index 017b7d3..7e575f3 100644 --- a/source/data/locales/ga.txt +++ b/source/data/locales/ga.txt @@ -302,10 +302,23 @@ ga{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Glac an {0}ú chasadh ar dheis."} + other{"Glac an {0}ú casadh ar dheis."} + } + plural{ + few{"{0} chi, {0} cath"} + many{"{0} chi, {0} chath"} + one{"{0} ci, {0} gath"} + other{"{0} ci, {0} cath"} + two{"{0} gi, {0} gath"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/ga_IE.txt b/source/data/locales/ga_IE.txt index 7db6398..df7d38b 100644 --- a/source/data/locales/ga_IE.txt +++ b/source/data/locales/ga_IE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ga_IE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gd.txt b/source/data/locales/gd.txt index 4a6f79b..a223df0 100644 --- a/source/data/locales/gd.txt +++ b/source/data/locales/gd.txt @@ -900,7 +900,7 @@ gd{ } } } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ intervalFormats{ diff --git a/source/data/locales/gd_GB.txt b/source/data/locales/gd_GB.txt index 6e622ed..6776e7a 100644 --- a/source/data/locales/gd_GB.txt +++ b/source/data/locales/gd_GB.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gd_GB{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gl.txt b/source/data/locales/gl.txt index b983484..8a2426c 100644 --- a/source/data/locales/gl.txt +++ b/source/data/locales/gl.txt @@ -200,10 +200,19 @@ gl{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Colle a {0}.ª curva á dereita."} + } + plural{ + one{"{0} día"} + other{"{0} días"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/gl_ES.txt b/source/data/locales/gl_ES.txt index 21cd552..a4c005c 100644 --- a/source/data/locales/gl_ES.txt +++ b/source/data/locales/gl_ES.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gl_ES{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gsw.txt b/source/data/locales/gsw.txt index 6b1a8e6..1640aa4 100644 --- a/source/data/locales/gsw.txt +++ b/source/data/locales/gsw.txt @@ -11,6 +11,160 @@ gsw{ percentFormat{"#,##0 %"} scientificFormat{"#E0"} } + patternsLong{ + decimalFormat{ + 1000{ + one{"0 Tuusig"} + other{"0 Tuusig"} + } + 10000{ + one{"00 Tuusig"} + other{"00 Tuusig"} + } + 100000{ + one{"000 Tuusig"} + other{"000 Tuusig"} + } + 1000000{ + one{"0 Millioon"} + other{"0 Millioone"} + } + 10000000{ + one{"00 Millioon"} + other{"00 Millioone"} + } + 100000000{ + one{"000 Millioon"} + other{"000 Millioone"} + } + 1000000000{ + one{"0 Milliarde"} + other{"0 Milliarde"} + } + 10000000000{ + one{"00 Milliarde"} + other{"00 Milliarde"} + } + 100000000000{ + one{"000 Milliarde"} + other{"000 Milliarde"} + } + 1000000000000{ + one{"0 Billioon"} + other{"0 Billioone"} + } + 10000000000000{ + one{"00 Billioon"} + other{"00 Billioone"} + } + 100000000000000{ + one{"000 Billioon"} + other{"000 Billioone"} + } + } + } + patternsShort{ + currencyFormat{ + 1000{ + one{"0 Tsg'.' ¤"} + other{"0 Tsg'.' ¤"} + } + 10000{ + one{"00 Tsg'.' ¤"} + other{"00 Tsg'.' ¤"} + } + 100000{ + one{"000 Tsg'.' ¤"} + other{"000 Tsg'.' ¤"} + } + 1000000{ + one{"0 Mio'.' ¤"} + other{"0 Mio'.' ¤"} + } + 10000000{ + one{"00 Mio'.' ¤"} + other{"00 Mio'.' ¤"} + } + 100000000{ + one{"000 Mio'.' ¤"} + other{"000 Mio'.' ¤"} + } + 1000000000{ + one{"0 Mrd'.' ¤"} + other{"0 Mrd'.' ¤"} + } + 10000000000{ + one{"00 Mrd'.' ¤"} + other{"00 Mrd'.' ¤"} + } + 100000000000{ + one{"000 Mrd'.' ¤"} + other{"000 Mrd'.' ¤"} + } + 1000000000000{ + one{"0 Bio'.' ¤"} + other{"0 Bio'.' ¤"} + } + 10000000000000{ + one{"00 Bio'.' ¤"} + other{"00 Bio'.' ¤"} + } + 100000000000000{ + one{"000 Bio'.' ¤"} + other{"000 Bio'.' ¤"} + } + } + decimalFormat{ + 1000{ + one{"0 Tsg'.'"} + other{"0 Tsg'.'"} + } + 10000{ + one{"00 Tsg'.'"} + other{"00 Tsg'.'"} + } + 100000{ + one{"000 Tsg'.'"} + other{"000 Tsg'.'"} + } + 1000000{ + one{"0 Mio'.'"} + other{"0 Mio'.'"} + } + 10000000{ + one{"00 Mio'.'"} + other{"00 Mio'.'"} + } + 100000000{ + one{"000 Mio'.'"} + other{"000 Mio'.'"} + } + 1000000000{ + one{"0 Mrd'.'"} + other{"0 Mrd'.'"} + } + 10000000000{ + one{"00 Mrd'.'"} + other{"00 Mrd'.'"} + } + 100000000000{ + one{"000 Mrd'.'"} + other{"000 Mrd'.'"} + } + 1000000000000{ + one{"0 Bio'.'"} + other{"0 Bio'.'"} + } + 10000000000000{ + one{"00 Bio'.'"} + other{"00 Bio'.'"} + } + 100000000000000{ + one{"000 Bio'.'"} + other{"000 Bio'.'"} + } + } + } symbols{ decimal{"."} exponential{"E"} @@ -25,7 +179,7 @@ gsw{ } } } - Version{"2.1.28.76"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ @@ -190,12 +344,12 @@ gsw{ } gregorian{ AmPmMarkers{ - "vorm.", - "nam.", + "am Vormittag", + "am Namittag", } AmPmMarkersAbbr{ - "v.m.", - "n.m.", + "vorm.", + "nam.", } DateTimePatterns{ "HH:mm:ss zzzz", @@ -274,6 +428,38 @@ gsw{ } } } + dayPeriod{ + format{ + abbreviated{ + afternoon1{"zmittag"} + afternoon2{"am Namittag"} + evening1{"zaabig"} + midnight{"Mitternacht"} + morning1{"am Morge"} + night1{"znacht"} + } + wide{ + afternoon1{"zmittag"} + afternoon2{"am Namittag"} + evening1{"zaabig"} + midnight{"Mitternacht"} + morning1{"am Morge"} + night1{"znacht"} + } + } + stand-alone{ + wide{ + afternoon1{"Mittag"} + afternoon2{"Namittag"} + am{"Vormittag"} + evening1{"Aabig"} + midnight{"Mitternacht"} + morning1{"Morge"} + night1{"Nacht"} + pm{"Namittag"} + } + } + } eras{ abbreviated{ "v. Chr.", diff --git a/source/data/locales/gsw_CH.txt b/source/data/locales/gsw_CH.txt index 0874f44..c6b65d5 100644 --- a/source/data/locales/gsw_CH.txt +++ b/source/data/locales/gsw_CH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gsw_CH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gsw_FR.txt b/source/data/locales/gsw_FR.txt index 40553f1..71a250a 100644 --- a/source/data/locales/gsw_FR.txt +++ b/source/data/locales/gsw_FR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gsw_FR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gsw_LI.txt b/source/data/locales/gsw_LI.txt index 43e6137..420e0a4 100644 --- a/source/data/locales/gsw_LI.txt +++ b/source/data/locales/gsw_LI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gsw_LI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gu.txt b/source/data/locales/gu.txt index 41fe21f..f27284f 100644 --- a/source/data/locales/gu.txt +++ b/source/data/locales/gu.txt @@ -232,10 +232,23 @@ gu{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"જમણી બાજુએ {0}થો વળાંક લો."} + many{"જમણી બાજુએ {0}ઠો વળાંક લો."} + one{"જમણી બાજુએ {0}લો વળાંક લો."} + other{"જમણી બાજુએ {0}મો વળાંક લો."} + two{"જમણી બાજુએ {0}જો વળાંક લો."} + } + plural{ + one{"{0} કિલોગ્રામ"} + other{"{0} કિલોગ્રામ્સ"} + } + } minimumGroupingDigits{"1"} native{"gujr"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/gu_IN.txt b/source/data/locales/gu_IN.txt index cd1de72..0b3a7b6 100644 --- a/source/data/locales/gu_IN.txt +++ b/source/data/locales/gu_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gu_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/guz.txt b/source/data/locales/guz.txt index 9c59c81..e06f68c 100644 --- a/source/data/locales/guz.txt +++ b/source/data/locales/guz.txt @@ -12,7 +12,7 @@ guz{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/guz_KE.txt b/source/data/locales/guz_KE.txt index 8335def..fd9d618 100644 --- a/source/data/locales/guz_KE.txt +++ b/source/data/locales/guz_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License guz_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/gv.txt b/source/data/locales/gv.txt index e42a051..e965afe 100644 --- a/source/data/locales/gv.txt +++ b/source/data/locales/gv.txt @@ -8,8 +8,17 @@ gv{ currencyFormat{"¤#,##0.00"} } } + minimalPairs{ + plural{ + few{"{0} thunnag/muc/ooyl"} + many{"{0} dy hunnagyn/dy vucyn/dy ooylyn"} + one{"{0} thunnag/vuc/ooyl"} + other{"{0} thunnagyn/mucyn/ooylyn"} + two{"{0} hunnag/vuc/ooyl"} + } + } } - Version{"2.1.27.40"} + Version{"2.1.31.34"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/gv_IM.txt b/source/data/locales/gv_IM.txt index 912b088..a84d272 100644 --- a/source/data/locales/gv_IM.txt +++ b/source/data/locales/gv_IM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License gv_IM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ha.txt b/source/data/locales/ha.txt index e65af2c..c64107e 100644 --- a/source/data/locales/ha.txt +++ b/source/data/locales/ha.txt @@ -172,7 +172,7 @@ ha{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ha_GH.txt b/source/data/locales/ha_GH.txt index 50185ab..9aa8cff 100644 --- a/source/data/locales/ha_GH.txt +++ b/source/data/locales/ha_GH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ha_GH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ha_NE.txt b/source/data/locales/ha_NE.txt index 0aeef36..d0c0fe0 100644 --- a/source/data/locales/ha_NE.txt +++ b/source/data/locales/ha_NE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ha_NE{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ha_NG.txt b/source/data/locales/ha_NG.txt index 5f4a716..df6cf24 100644 --- a/source/data/locales/ha_NG.txt +++ b/source/data/locales/ha_NG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ha_NG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/haw.txt b/source/data/locales/haw.txt index 46df8b4..41828ad 100644 --- a/source/data/locales/haw.txt +++ b/source/data/locales/haw.txt @@ -31,7 +31,7 @@ haw{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/haw_US.txt b/source/data/locales/haw_US.txt index e72f2a1..1880315 100644 --- a/source/data/locales/haw_US.txt +++ b/source/data/locales/haw_US.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License haw_US{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/he.txt b/source/data/locales/he.txt index 240da92..015988d 100644 --- a/source/data/locales/he.txt +++ b/source/data/locales/he.txt @@ -272,11 +272,22 @@ he{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"פנה ימינה בפנייה ה-{0}"} + } + plural{ + many{"{0} שנה"} + one{"שנה"} + other{"{0} שנים"} + two{"שנתיים"} + } + } minimumGroupingDigits{"1"} native{"latn"} traditional{"hebr"} } - Version{"2.1.29.27"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/he_IL.txt b/source/data/locales/he_IL.txt index 5b4b444..33cad82 100644 --- a/source/data/locales/he_IL.txt +++ b/source/data/locales/he_IL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License he_IL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/hi.txt b/source/data/locales/hi.txt index 92cca0b..7a6f1ed 100644 --- a/source/data/locales/hi.txt +++ b/source/data/locales/hi.txt @@ -219,10 +219,23 @@ hi{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}था दाहिना मोड़ लें."} + many{"{0}ठा दाहिना मोड़ लें."} + one{"{0}ला दाहिना मोड़ लें."} + other{"{0}वां दाहिना मोड़ लें."} + two{"{0}रा दाहिना मोड़ लें."} + } + plural{ + one{"{0} घंटा"} + other{"{0} घंटे"} + } + } minimumGroupingDigits{"1"} native{"deva"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ ethiopic{ monthNames{ diff --git a/source/data/locales/hi_IN.txt b/source/data/locales/hi_IN.txt index e466d92..3febf3a 100644 --- a/source/data/locales/hi_IN.txt +++ b/source/data/locales/hi_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hi_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/hr.txt b/source/data/locales/hr.txt index 9e2d575..240aba1 100644 --- a/source/data/locales/hr.txt +++ b/source/data/locales/hr.txt @@ -236,10 +236,21 @@ hr{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Skrenite na {0}. križanju desno."} + } + plural{ + few{"za {0} mjeseca"} + many{"za {0} mjeseci"} + one{"za {0} mjesec"} + other{"za {0} mjeseci"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/hr_BA.txt b/source/data/locales/hr_BA.txt index e1e9aaa..73e934b 100644 --- a/source/data/locales/hr_BA.txt +++ b/source/data/locales/hr_BA.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hr_BA{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/hr_HR.txt b/source/data/locales/hr_HR.txt index 799f7b8..10191f7 100644 --- a/source/data/locales/hr_HR.txt +++ b/source/data/locales/hr_HR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hr_HR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/hsb.txt b/source/data/locales/hsb.txt index 71db26c..be73c93 100644 --- a/source/data/locales/hsb.txt +++ b/source/data/locales/hsb.txt @@ -195,7 +195,7 @@ hsb{ } minimumGroupingDigits{"1"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/hsb_DE.txt b/source/data/locales/hsb_DE.txt index e122a0c..385b64f 100644 --- a/source/data/locales/hsb_DE.txt +++ b/source/data/locales/hsb_DE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hsb_DE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/hu.txt b/source/data/locales/hu.txt index e969497..00f9b53 100644 --- a/source/data/locales/hu.txt +++ b/source/data/locales/hu.txt @@ -207,10 +207,20 @@ hu{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Az {0}. lehetőségnél forduljon jobbra."} + other{"A {0}. lehetőségnél forduljon jobbra."} + } + plural{ + one{"A kosár tartalma: {0} X. Megveszi?"} + other{"A kosár tartalma: {0} X. Megveszi őket?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/hu_HU.txt b/source/data/locales/hu_HU.txt index cac981c..0ab8597 100644 --- a/source/data/locales/hu_HU.txt +++ b/source/data/locales/hu_HU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hu_HU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/hy.txt b/source/data/locales/hy.txt index 9964db9..665f3db 100644 --- a/source/data/locales/hy.txt +++ b/source/data/locales/hy.txt @@ -199,11 +199,21 @@ hy{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Թեքվեք աջ {0}-ին խաչմերուկից:"} + other{"Թեքվեք աջ {0}-րդ խաչմերուկից:"} + } + plural{ + one{"այդ {0} ժամը"} + other{"այդ {0} ժամերը"} + } + } minimumGroupingDigits{"1"} native{"latn"} traditional{"armn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/hy_AM.txt b/source/data/locales/hy_AM.txt index fd8373f..6b4422b 100644 --- a/source/data/locales/hy_AM.txt +++ b/source/data/locales/hy_AM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License hy_AM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/id.txt b/source/data/locales/id.txt index 7d6665b..fc54a18 100644 --- a/source/data/locales/id.txt +++ b/source/data/locales/id.txt @@ -12,7 +12,7 @@ id{ } ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"} ExemplarCharactersIndex{"[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]"} - ExemplarCharactersPunctuation{"[‐ – — , ; \\: ! ? . … ' ‘ ’ “ ” ( ) \\[ \\] /]"} + ExemplarCharactersPunctuation{"[\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ “ ” ( ) \\[ \\] /]"} MoreInformation{"?"} NumberElements{ default{"latn"} @@ -161,10 +161,18 @@ id{ timeSeparator{"."} } } + minimalPairs{ + ordinal{ + other{"Ambil belokan kanan ke-{0}."} + } + plural{ + other{"{0} hari"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/id_ID.txt b/source/data/locales/id_ID.txt index 47a6c79..8cd4655 100644 --- a/source/data/locales/id_ID.txt +++ b/source/data/locales/id_ID.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License id_ID{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ig.txt b/source/data/locales/ig.txt index 7f61395..c58c21e 100644 --- a/source/data/locales/ig.txt +++ b/source/data/locales/ig.txt @@ -86,7 +86,7 @@ ig{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ig_NG.txt b/source/data/locales/ig_NG.txt index 65f842f..7eff6a9 100644 --- a/source/data/locales/ig_NG.txt +++ b/source/data/locales/ig_NG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ig_NG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ii.txt b/source/data/locales/ii.txt index 30e6fc9..67160a1 100644 --- a/source/data/locales/ii.txt +++ b/source/data/locales/ii.txt @@ -19,7 +19,7 @@ ii{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/ii_CN.txt b/source/data/locales/ii_CN.txt index 2807bdc..405f3a5 100644 --- a/source/data/locales/ii_CN.txt +++ b/source/data/locales/ii_CN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ii_CN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/is.txt b/source/data/locales/is.txt index 9d1e8d5..c49ff82 100644 --- a/source/data/locales/is.txt +++ b/source/data/locales/is.txt @@ -188,10 +188,19 @@ is{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Taktu {0}. beygju til hægri."} + } + plural{ + one{"{0} dagur"} + other{"{0} dagar"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.65"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/is_IS.txt b/source/data/locales/is_IS.txt index dafbfa1..f906424 100644 --- a/source/data/locales/is_IS.txt +++ b/source/data/locales/is_IS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License is_IS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/it.txt b/source/data/locales/it.txt index a4165f7..da418b7 100644 --- a/source/data/locales/it.txt +++ b/source/data/locales/it.txt @@ -31,7 +31,7 @@ it{ patternsLong{ decimalFormat{ 1000{ - one{"0 mila"} + one{"0 mille"} other{"0 mila"} } 10000{ @@ -67,7 +67,7 @@ it{ other{"000 miliardi"} } 1000000000000{ - one{"0 mila miliardi"} + one{"0 mille miliardi"} other{"0 mila miliardi"} } 10000000000000{ @@ -197,10 +197,20 @@ it{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + many{"Prendi l’{0}° a destra."} + other{"Prendi la {0}° a destra."} + } + plural{ + one{"{0} giorno"} + other{"{0} giorni"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/it_CH.txt b/source/data/locales/it_CH.txt index 4fbfb3e..886d56e 100644 --- a/source/data/locales/it_CH.txt +++ b/source/data/locales/it_CH.txt @@ -8,11 +8,11 @@ it_CH{ } symbols{ decimal{"."} - group{"'"} + group{"’"} } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/it_IT.txt b/source/data/locales/it_IT.txt index 66f7477..58298b8 100644 --- a/source/data/locales/it_IT.txt +++ b/source/data/locales/it_IT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License it_IT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/it_SM.txt b/source/data/locales/it_SM.txt index 5112b13..9b06c39 100644 --- a/source/data/locales/it_SM.txt +++ b/source/data/locales/it_SM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License it_SM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/it_VA.txt b/source/data/locales/it_VA.txt new file mode 100644 index 0000000..f555501 --- /dev/null +++ b/source/data/locales/it_VA.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +it_VA{ + Version{"2.1.32.51"} +} diff --git a/source/data/locales/ja.txt b/source/data/locales/ja.txt index 763c323..bc31d77 100644 --- a/source/data/locales/ja.txt +++ b/source/data/locales/ja.txt @@ -64,7 +64,7 @@ ja{ "鑑 長 門 閉 開 閏 閑 間 関 閣 閥 閲 闘 阪 防 阻 附 降 限 陛 院-陥 陪 陰 陳 陵 陶 陸 険 陽 隅 隆 隊 階 随 隔 際 障 " "隠 隣 隷 隻 雄-雇 雉 雌 雑 離 難 雨 雪 雰 雲 零 雷 電 需 震 霊 霜 霧 露 青 静 非 面 革 靴 韓 音 韻 響 頂 頃 項 順 " "預-頒 領 頭 頻 頼 題 額 顔 顕 願 類 顧 風 飛 食 飢 飯 飲 飼-飾 養 餓 館 首 香 馬 駄-駆 駐 騎 騒 験 騰 驚 骨 髄 高 " - "髪 鬼 魂 魅 魔 魚 鮮 鯨 鳥 鳴 鶏 鹿 麗 麦 麻 黄 黒 黙 鼓 鼠 鼻 齢]" + "髪 鬼 魂 魅 魔 魚 鮮 鯨 鳥 鳴 鶏 鹿 麗 麦 麻 黄 黒 黙 鼓 鼠 鼻 齢 叱 剥 填 頬]" } ExemplarCharactersIndex{"[あ か さ た な は ま や ら わ]"} ExemplarCharactersPunctuation{ @@ -221,11 +221,19 @@ ja{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0} 番目の角を右折します。"} + } + plural{ + other{"{0}日"} + } + } minimumGroupingDigits{"1"} native{"latn"} traditional{"jpan"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/ja_JP.txt b/source/data/locales/ja_JP.txt index 81a27bb..3baabb8 100644 --- a/source/data/locales/ja_JP.txt +++ b/source/data/locales/ja_JP.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ja_JP{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/jgo.txt b/source/data/locales/jgo.txt index b349083..6d48c2d 100644 --- a/source/data/locales/jgo.txt +++ b/source/data/locales/jgo.txt @@ -38,7 +38,7 @@ jgo{ } native{"latn"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/jgo_CM.txt b/source/data/locales/jgo_CM.txt index 52fd192..eca904e 100644 --- a/source/data/locales/jgo_CM.txt +++ b/source/data/locales/jgo_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License jgo_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/jmc.txt b/source/data/locales/jmc.txt index f057868..09ec87d 100644 --- a/source/data/locales/jmc.txt +++ b/source/data/locales/jmc.txt @@ -11,7 +11,7 @@ jmc{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/jmc_TZ.txt b/source/data/locales/jmc_TZ.txt index c64d442..06eadaa 100644 --- a/source/data/locales/jmc_TZ.txt +++ b/source/data/locales/jmc_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License jmc_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ka.txt b/source/data/locales/ka.txt index a6c20e2..4ae0a1f 100644 --- a/source/data/locales/ka.txt +++ b/source/data/locales/ka.txt @@ -203,11 +203,22 @@ ka{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + many{"მე-{0}"} + one{"{0}-ლი"} + other{"{0}-ე"} + } + plural{ + one{"კალათში {0} X-ია. შეიძენთ მას?"} + other{"კალათში {0} X-ია. შეიძენთ მათ?"} + } + } minimumGroupingDigits{"2"} native{"latn"} traditional{"geor"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ka_GE.txt b/source/data/locales/ka_GE.txt index b476e4f..b4e467a 100644 --- a/source/data/locales/ka_GE.txt +++ b/source/data/locales/ka_GE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ka_GE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kab.txt b/source/data/locales/kab.txt index 63ef4e5..210f8c0 100644 --- a/source/data/locales/kab.txt +++ b/source/data/locales/kab.txt @@ -15,7 +15,7 @@ kab{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kab_DZ.txt b/source/data/locales/kab_DZ.txt index ae7ff07..9efcf0e 100644 --- a/source/data/locales/kab_DZ.txt +++ b/source/data/locales/kab_DZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kab_DZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kam.txt b/source/data/locales/kam.txt index a643dda..99635b5 100644 --- a/source/data/locales/kam.txt +++ b/source/data/locales/kam.txt @@ -11,7 +11,7 @@ kam{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kam_KE.txt b/source/data/locales/kam_KE.txt index 5bea75f..a8d7400 100644 --- a/source/data/locales/kam_KE.txt +++ b/source/data/locales/kam_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kam_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kde.txt b/source/data/locales/kde.txt index 02a1deb..7deeb95 100644 --- a/source/data/locales/kde.txt +++ b/source/data/locales/kde.txt @@ -11,7 +11,7 @@ kde{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kde_TZ.txt b/source/data/locales/kde_TZ.txt index 330ed64..6c6d2c9 100644 --- a/source/data/locales/kde_TZ.txt +++ b/source/data/locales/kde_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kde_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kea.txt b/source/data/locales/kea.txt index 11f1ec1..54acdc0 100644 --- a/source/data/locales/kea.txt +++ b/source/data/locales/kea.txt @@ -128,7 +128,7 @@ kea{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.27.46"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kea_CV.txt b/source/data/locales/kea_CV.txt index 6147ac3..b98fab1 100644 --- a/source/data/locales/kea_CV.txt +++ b/source/data/locales/kea_CV.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kea_CV{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/khq.txt b/source/data/locales/khq.txt index 1b04190..80f19c5 100644 --- a/source/data/locales/khq.txt +++ b/source/data/locales/khq.txt @@ -14,7 +14,7 @@ khq{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/khq_ML.txt b/source/data/locales/khq_ML.txt index fb0cacd..0a9f663 100644 --- a/source/data/locales/khq_ML.txt +++ b/source/data/locales/khq_ML.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License khq_ML{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ki.txt b/source/data/locales/ki.txt index 2c15a44..82e7732 100644 --- a/source/data/locales/ki.txt +++ b/source/data/locales/ki.txt @@ -12,7 +12,7 @@ ki{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ki_KE.txt b/source/data/locales/ki_KE.txt index ede703b..f6a0df7 100644 --- a/source/data/locales/ki_KE.txt +++ b/source/data/locales/ki_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ki_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kk.txt b/source/data/locales/kk.txt index f806196..517f309 100644 --- a/source/data/locales/kk.txt +++ b/source/data/locales/kk.txt @@ -205,10 +205,20 @@ kk{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + many{"{0}-ші бұрылыстан оңға бұрылыңыз."} + other{"{0}-шы бұрылыстан оңға бұрылыңыз."} + } + plural{ + one{"Cебетте {0} Х бар. Ол сіздікі ме?"} + other{"Себетте {0} Х бар. Олар сіздікі ме?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kk_KZ.txt b/source/data/locales/kk_KZ.txt index dbae802..5500950 100644 --- a/source/data/locales/kk_KZ.txt +++ b/source/data/locales/kk_KZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kk_KZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kkj.txt b/source/data/locales/kkj.txt index 9eaa9d4..7b35650 100644 --- a/source/data/locales/kkj.txt +++ b/source/data/locales/kkj.txt @@ -23,7 +23,7 @@ kkj{ } native{"latn"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kkj_CM.txt b/source/data/locales/kkj_CM.txt index 0edf994..0816d67 100644 --- a/source/data/locales/kkj_CM.txt +++ b/source/data/locales/kkj_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kkj_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kl.txt b/source/data/locales/kl.txt index 7392a1b..7946893 100644 --- a/source/data/locales/kl.txt +++ b/source/data/locales/kl.txt @@ -17,8 +17,14 @@ kl{ group{"."} } } + minimalPairs{ + plural{ + one{"{0} Ulloq"} + other{"{0} Ullut"} + } + } } - Version{"2.1.27.40"} + Version{"2.1.31.34"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/kl_GL.txt b/source/data/locales/kl_GL.txt index b9228e2..c7b1c74 100644 --- a/source/data/locales/kl_GL.txt +++ b/source/data/locales/kl_GL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kl_GL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kln.txt b/source/data/locales/kln.txt index 2baeb57..6c260ad 100644 --- a/source/data/locales/kln.txt +++ b/source/data/locales/kln.txt @@ -12,7 +12,7 @@ kln{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kln_KE.txt b/source/data/locales/kln_KE.txt index 27640a0..8dcf16e 100644 --- a/source/data/locales/kln_KE.txt +++ b/source/data/locales/kln_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kln_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/km.txt b/source/data/locales/km.txt index 44a22f1..647fceb 100644 --- a/source/data/locales/km.txt +++ b/source/data/locales/km.txt @@ -164,10 +164,18 @@ km{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"បត់​ស្តាំ​លើក​ទី​ {0}"} + } + plural{ + other{"{0} ថ្ងៃ"} + } + } minimumGroupingDigits{"1"} native{"khmr"} } - Version{"2.1.28.79"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/km_KH.txt b/source/data/locales/km_KH.txt index b87f9bd..e16ae14 100644 --- a/source/data/locales/km_KH.txt +++ b/source/data/locales/km_KH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License km_KH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kn.txt b/source/data/locales/kn.txt index b6ae1ac..c69ac9f 100644 --- a/source/data/locales/kn.txt +++ b/source/data/locales/kn.txt @@ -220,10 +220,19 @@ kn{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}ನೇ ಬಲತಿರುವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ."} + } + plural{ + one{"{0} ದಿನ"} + other{"{0} ದಿನಗಳು"} + } + } minimumGroupingDigits{"1"} native{"knda"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/kn_IN.txt b/source/data/locales/kn_IN.txt index d2f7dcc..baabc4f 100644 --- a/source/data/locales/kn_IN.txt +++ b/source/data/locales/kn_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kn_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ko.txt b/source/data/locales/ko.txt index 42f7b79..fd3136e 100644 --- a/source/data/locales/ko.txt +++ b/source/data/locales/ko.txt @@ -187,10 +187,18 @@ ko{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}번째 길목에서 우회전하세요."} + } + plural{ + other{"{0}일"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.22"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ko_KP.txt b/source/data/locales/ko_KP.txt index 993a892..27e3e2c 100644 --- a/source/data/locales/ko_KP.txt +++ b/source/data/locales/ko_KP.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ko_KP{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ko_KR.txt b/source/data/locales/ko_KR.txt index d6efd4e..18f6899 100644 --- a/source/data/locales/ko_KR.txt +++ b/source/data/locales/ko_KR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ko_KR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kok.txt b/source/data/locales/kok.txt index f338598..feea75d 100644 --- a/source/data/locales/kok.txt +++ b/source/data/locales/kok.txt @@ -19,7 +19,7 @@ kok{ } native{"deva"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/kok_IN.txt b/source/data/locales/kok_IN.txt index 4383a6f..ac19051 100644 --- a/source/data/locales/kok_IN.txt +++ b/source/data/locales/kok_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kok_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ks.txt b/source/data/locales/ks.txt index 6c6a2a4..7d83b1a 100644 --- a/source/data/locales/ks.txt +++ b/source/data/locales/ks.txt @@ -31,7 +31,7 @@ ks{ } native{"arabext"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ks_IN.txt b/source/data/locales/ks_IN.txt index 155ebc6..c6f74c6 100644 --- a/source/data/locales/ks_IN.txt +++ b/source/data/locales/ks_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ks_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ksb.txt b/source/data/locales/ksb.txt index f37f572..e13e0b2 100644 --- a/source/data/locales/ksb.txt +++ b/source/data/locales/ksb.txt @@ -11,7 +11,7 @@ ksb{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ksb_TZ.txt b/source/data/locales/ksb_TZ.txt index f6d91d2..5f42d59 100644 --- a/source/data/locales/ksb_TZ.txt +++ b/source/data/locales/ksb_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ksb_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ksf.txt b/source/data/locales/ksf.txt index b660bf3..03e37aa 100644 --- a/source/data/locales/ksf.txt +++ b/source/data/locales/ksf.txt @@ -19,7 +19,7 @@ ksf{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ksf_CM.txt b/source/data/locales/ksf_CM.txt index 2fe4939..c5a4ba4 100644 --- a/source/data/locales/ksf_CM.txt +++ b/source/data/locales/ksf_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ksf_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ksh.txt b/source/data/locales/ksh.txt index 465bf75..6c54e61 100644 --- a/source/data/locales/ksh.txt +++ b/source/data/locales/ksh.txt @@ -160,7 +160,7 @@ ksh{ } native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/ksh_DE.txt b/source/data/locales/ksh_DE.txt index beacb68..b734281 100644 --- a/source/data/locales/ksh_DE.txt +++ b/source/data/locales/ksh_DE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ksh_DE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/kw.txt b/source/data/locales/kw.txt index def1751..3fc4090 100644 --- a/source/data/locales/kw.txt +++ b/source/data/locales/kw.txt @@ -9,7 +9,7 @@ kw{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/kw_GB.txt b/source/data/locales/kw_GB.txt index 41e1e42..ae45c12 100644 --- a/source/data/locales/kw_GB.txt +++ b/source/data/locales/kw_GB.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License kw_GB{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ky.txt b/source/data/locales/ky.txt index 8ede76f..cda5cd5 100644 --- a/source/data/locales/ky.txt +++ b/source/data/locales/ky.txt @@ -199,10 +199,19 @@ ky{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}-бурулуштан оңго бурулуңуз."} + } + plural{ + one{"Себетте {0} Х бар. Аны аласызбы?"} + other{"Себетте {0} Х бар. Аларды аласызбы?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ky_KG.txt b/source/data/locales/ky_KG.txt index fce9a0b..224cbdb 100644 --- a/source/data/locales/ky_KG.txt +++ b/source/data/locales/ky_KG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ky_KG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lag.txt b/source/data/locales/lag.txt index 82f276a..34b3539 100644 --- a/source/data/locales/lag.txt +++ b/source/data/locales/lag.txt @@ -3,7 +3,7 @@ lag{ ExemplarCharacters{"[a á b c d e é f g h i í ɨ j k l m n o ó p q r s t u ú ʉ v w x y z]"} ExemplarCharactersIndex{"[A B C D E F G H I Ɨ J K L M N O P Q R S T U Ʉ V W X Y Z]"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/lag_TZ.txt b/source/data/locales/lag_TZ.txt index 79840de..1b25b3e 100644 --- a/source/data/locales/lag_TZ.txt +++ b/source/data/locales/lag_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lag_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lb.txt b/source/data/locales/lb.txt index d883ca5..b2784e8 100644 --- a/source/data/locales/lb.txt +++ b/source/data/locales/lb.txt @@ -155,7 +155,7 @@ lb{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/lb_LU.txt b/source/data/locales/lb_LU.txt index fc0e01c..7a42806 100644 --- a/source/data/locales/lb_LU.txt +++ b/source/data/locales/lb_LU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lb_LU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lg.txt b/source/data/locales/lg.txt index 8347ead..f0a0b5f 100644 --- a/source/data/locales/lg.txt +++ b/source/data/locales/lg.txt @@ -11,7 +11,7 @@ lg{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/lg_UG.txt b/source/data/locales/lg_UG.txt index 4aac8e4..d88ad66 100644 --- a/source/data/locales/lg_UG.txt +++ b/source/data/locales/lg_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lg_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lkt.txt b/source/data/locales/lkt.txt index de6dee6..2edcfae 100644 --- a/source/data/locales/lkt.txt +++ b/source/data/locales/lkt.txt @@ -8,7 +8,7 @@ lkt{ } ExemplarCharactersIndex{"[A B Č E G Ǧ H Ȟ I K L M N Ŋ O P S Š T U W Y Z Ž]"} ExemplarCharactersPunctuation{"[\\- ‐ – — , ; \\: ! ? . \u0022 “ ” ( ) \\[ \\] @ * / \\& #]"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/lkt_US.txt b/source/data/locales/lkt_US.txt index a360552..ec0bf2e 100644 --- a/source/data/locales/lkt_US.txt +++ b/source/data/locales/lkt_US.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lkt_US{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ln.txt b/source/data/locales/ln.txt index b7382f7..71aa960 100644 --- a/source/data/locales/ln.txt +++ b/source/data/locales/ln.txt @@ -23,7 +23,7 @@ ln{ } } } - Version{"2.1.28.76"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ln_AO.txt b/source/data/locales/ln_AO.txt index 4efa054..b22b145 100644 --- a/source/data/locales/ln_AO.txt +++ b/source/data/locales/ln_AO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ln_AO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ln_CD.txt b/source/data/locales/ln_CD.txt index 620a515..56898f8 100644 --- a/source/data/locales/ln_CD.txt +++ b/source/data/locales/ln_CD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ln_CD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ln_CF.txt b/source/data/locales/ln_CF.txt index bb95d5b..89a7f7f 100644 --- a/source/data/locales/ln_CF.txt +++ b/source/data/locales/ln_CF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ln_CF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ln_CG.txt b/source/data/locales/ln_CG.txt index 94c4e65..247e15e 100644 --- a/source/data/locales/ln_CG.txt +++ b/source/data/locales/ln_CG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ln_CG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lo.txt b/source/data/locales/lo.txt index 81b9756..b9b2a4c 100644 --- a/source/data/locales/lo.txt +++ b/source/data/locales/lo.txt @@ -249,10 +249,19 @@ lo{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"ລ້ຽວຂວາທຳອິດ."} + other{"ລ້ຽວຂວາທີ {0}."} + } + plural{ + other{"{0} ມື້"} + } + } minimumGroupingDigits{"1"} native{"laoo"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ chinese{ DateTimePatterns{ @@ -705,7 +714,7 @@ lo{ yyyyMEd{"E, G d/M/y"} yyyyMMM{"G MMM y"} yyyyMMMEd{"E, G d MMM y"} - yyyyMMMM{"G y MMMM"} + yyyyMMMM{"G MMMM y"} yyyyMMMd{"G d MMM y"} yyyyMd{"G d/M/y"} yyyyQQQ{"G QQQ y"} @@ -876,7 +885,7 @@ lo{ yMEd{"E, d/M/y"} yMMM{"MMM y"} yMMMEd{"E, d MMM y"} - yMMMM{"y MMMM"} + yMMMM{"MMMM y"} yMMMd{"d MMM y"} yMd{"d/M/y"} yQQQ{"QQQ y"} diff --git a/source/data/locales/lo_LA.txt b/source/data/locales/lo_LA.txt index a1ca49c..b27b901 100644 --- a/source/data/locales/lo_LA.txt +++ b/source/data/locales/lo_LA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lo_LA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lrc.txt b/source/data/locales/lrc.txt index 70bc398..0bcc2e4 100644 --- a/source/data/locales/lrc.txt +++ b/source/data/locales/lrc.txt @@ -30,7 +30,7 @@ lrc{ } native{"arabext"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ default{"persian"} generic{ diff --git a/source/data/locales/lrc_IQ.txt b/source/data/locales/lrc_IQ.txt index 3760941..d48cc09 100644 --- a/source/data/locales/lrc_IQ.txt +++ b/source/data/locales/lrc_IQ.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lrc_IQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ default{"gregorian"} gregorian{ diff --git a/source/data/locales/lrc_IR.txt b/source/data/locales/lrc_IR.txt index e331276..8339c5a 100644 --- a/source/data/locales/lrc_IR.txt +++ b/source/data/locales/lrc_IR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lrc_IR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lt.txt b/source/data/locales/lt.txt index 1f7a8cd..c750e62 100644 --- a/source/data/locales/lt.txt +++ b/source/data/locales/lt.txt @@ -275,10 +275,21 @@ lt{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}-ame posūkyje sukite į dešinę."} + } + plural{ + few{"{0} obuoliai"} + many{"{0} obuolio"} + one{"{0} obuolys"} + other{"{0} obuolių"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/lt_LT.txt b/source/data/locales/lt_LT.txt index 89c8e27..54830de 100644 --- a/source/data/locales/lt_LT.txt +++ b/source/data/locales/lt_LT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lt_LT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lu.txt b/source/data/locales/lu.txt index b7b47da..e7c6c8c 100644 --- a/source/data/locales/lu.txt +++ b/source/data/locales/lu.txt @@ -19,7 +19,7 @@ lu{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/lu_CD.txt b/source/data/locales/lu_CD.txt index 271f9c5..36480ae 100644 --- a/source/data/locales/lu_CD.txt +++ b/source/data/locales/lu_CD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lu_CD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/luo.txt b/source/data/locales/luo.txt index 20accf7..ead4a98 100644 --- a/source/data/locales/luo.txt +++ b/source/data/locales/luo.txt @@ -11,7 +11,7 @@ luo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/luo_KE.txt b/source/data/locales/luo_KE.txt index 31dae0d..bd544bc 100644 --- a/source/data/locales/luo_KE.txt +++ b/source/data/locales/luo_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License luo_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/luy.txt b/source/data/locales/luy.txt index 3d2937d..549c9ba 100644 --- a/source/data/locales/luy.txt +++ b/source/data/locales/luy.txt @@ -10,7 +10,7 @@ luy{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/luy_KE.txt b/source/data/locales/luy_KE.txt index a8f0715..4c060f4 100644 --- a/source/data/locales/luy_KE.txt +++ b/source/data/locales/luy_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License luy_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/lv.txt b/source/data/locales/lv.txt index 1e30eb0..b8ccab8 100644 --- a/source/data/locales/lv.txt +++ b/source/data/locales/lv.txt @@ -236,10 +236,20 @@ lv{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Dodieties {0}. pagriezienā pa labi."} + } + plural{ + one{"{0} diennakts"} + other{"{0} diennaktis"} + zero{"{0} diennakšu"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/lv_LV.txt b/source/data/locales/lv_LV.txt index 387a45e..06933d4 100644 --- a/source/data/locales/lv_LV.txt +++ b/source/data/locales/lv_LV.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License lv_LV{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mas.txt b/source/data/locales/mas.txt index 92596e0..ef70d09 100644 --- a/source/data/locales/mas.txt +++ b/source/data/locales/mas.txt @@ -15,7 +15,7 @@ mas{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mas_KE.txt b/source/data/locales/mas_KE.txt index f13e433..948c554 100644 --- a/source/data/locales/mas_KE.txt +++ b/source/data/locales/mas_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mas_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mas_TZ.txt b/source/data/locales/mas_TZ.txt index ae66e94..17a1ab1 100644 --- a/source/data/locales/mas_TZ.txt +++ b/source/data/locales/mas_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mas_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mer.txt b/source/data/locales/mer.txt index 466d551..cae44a9 100644 --- a/source/data/locales/mer.txt +++ b/source/data/locales/mer.txt @@ -11,7 +11,7 @@ mer{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mer_KE.txt b/source/data/locales/mer_KE.txt index f765013..7b48e1e 100644 --- a/source/data/locales/mer_KE.txt +++ b/source/data/locales/mer_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mer_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mfe.txt b/source/data/locales/mfe.txt index 536cd97..13f991d 100644 --- a/source/data/locales/mfe.txt +++ b/source/data/locales/mfe.txt @@ -10,7 +10,7 @@ mfe{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mfe_MU.txt b/source/data/locales/mfe_MU.txt index 25371d6..7c9fed6 100644 --- a/source/data/locales/mfe_MU.txt +++ b/source/data/locales/mfe_MU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mfe_MU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mg.txt b/source/data/locales/mg.txt index 31caa8b..1fbd324 100644 --- a/source/data/locales/mg.txt +++ b/source/data/locales/mg.txt @@ -32,7 +32,7 @@ mg{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mg_MG.txt b/source/data/locales/mg_MG.txt index 1f8fd99..eb57bf6 100644 --- a/source/data/locales/mg_MG.txt +++ b/source/data/locales/mg_MG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mg_MG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mgh.txt b/source/data/locales/mgh.txt index 3475fe6..e847621 100644 --- a/source/data/locales/mgh.txt +++ b/source/data/locales/mgh.txt @@ -12,7 +12,7 @@ mgh{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mgh_MZ.txt b/source/data/locales/mgh_MZ.txt index cd36910..db5642d 100644 --- a/source/data/locales/mgh_MZ.txt +++ b/source/data/locales/mgh_MZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mgh_MZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mgo.txt b/source/data/locales/mgo.txt index 72d3647..cd5fa28 100644 --- a/source/data/locales/mgo.txt +++ b/source/data/locales/mgo.txt @@ -38,7 +38,7 @@ mgo{ } native{"latn"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mgo_CM.txt b/source/data/locales/mgo_CM.txt index a42491d..eb0366b 100644 --- a/source/data/locales/mgo_CM.txt +++ b/source/data/locales/mgo_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mgo_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mk.txt b/source/data/locales/mk.txt index 4fc31a0..6a97cdd 100644 --- a/source/data/locales/mk.txt +++ b/source/data/locales/mk.txt @@ -197,10 +197,22 @@ mk{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + many{"Сврти на {0}-мата улица десно."} + one{"Сврти на {0}-вата улица десно."} + other{"Сврти на {0}-тата улица десно."} + two{"Сврти на {0}-рата улица десно."} + } + plural{ + one{"{0} ден"} + other{"{0} дена"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mk_MK.txt b/source/data/locales/mk_MK.txt index ee7770d..c76a54e 100644 --- a/source/data/locales/mk_MK.txt +++ b/source/data/locales/mk_MK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mk_MK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ml.txt b/source/data/locales/ml.txt index 1728a71..4457f5b 100644 --- a/source/data/locales/ml.txt +++ b/source/data/locales/ml.txt @@ -204,6 +204,15 @@ ml{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}-ാമത്തെ വലത്തേക്ക് തിരിയുക."} + } + plural{ + one{"{0} വ്യക്തി"} + other{"{0} വ്യക്തികൾ"} + } + } minimumGroupingDigits{"1"} mlym{ patterns{ @@ -229,7 +238,7 @@ ml{ } native{"mlym"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ml_IN.txt b/source/data/locales/ml_IN.txt index e51e403..ddf9180 100644 --- a/source/data/locales/ml_IN.txt +++ b/source/data/locales/ml_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ml_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mn.txt b/source/data/locales/mn.txt index a5d6e23..a7bbd4d 100644 --- a/source/data/locales/mn.txt +++ b/source/data/locales/mn.txt @@ -199,10 +199,19 @@ mn{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}-р баруун эргэлтээр орно уу"} + } + plural{ + one{"Картанд {0} Х байна. Үүнийг авах уу?"} + other{"Картанд {0} Х байна. Тэднийг авах уу?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mn_MN.txt b/source/data/locales/mn_MN.txt index 1c445ee..c294231 100644 --- a/source/data/locales/mn_MN.txt +++ b/source/data/locales/mn_MN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mn_MN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mr.txt b/source/data/locales/mr.txt index db2c027..7c771d7 100644 --- a/source/data/locales/mr.txt +++ b/source/data/locales/mr.txt @@ -11,9 +11,9 @@ mr{ word-medial{"{0} … {1}"} } ExemplarCharacters{ - "[\u093C ॐ \u0902 \u0901 ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट " - "ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ ा ि ी \u0941 \u0942 \u0943 " - "\u0944 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]" + "[{\u0931} \u093C ॐ \u0902 \u0901 ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ" + " ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ ा ि ी \u0941 \u0942" + " \u0943 \u0944 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]" } ExemplarCharactersIndex{ "[\u200D ॐ \u0902 ः अ आ इ ई उ ऊ ऋ ऌ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त" @@ -225,10 +225,22 @@ mr{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}थे उजवे वळण घ्या."} + one{"{0}ले उजवे वळण घ्या."} + other{"{0}वे उजवे वळण घ्या."} + two{"{0}रे उजवे वळण घ्या."} + } + plural{ + one{"{0} घर"} + other{"{0} घरे"} + } + } minimumGroupingDigits{"1"} native{"deva"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mr_IN.txt b/source/data/locales/mr_IN.txt index a9fcd66..71e6a42 100644 --- a/source/data/locales/mr_IN.txt +++ b/source/data/locales/mr_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mr_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ms.txt b/source/data/locales/ms.txt index a5306b5..f7b9331 100644 --- a/source/data/locales/ms.txt +++ b/source/data/locales/ms.txt @@ -167,10 +167,19 @@ ms{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Ambil belokan kanan yang pertama."} + other{"Ambil belokan kanan yang ke-{0}."} + } + plural{ + other{"{0} hari"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ms_BN.txt b/source/data/locales/ms_BN.txt index 82f8c76..49412ae 100644 --- a/source/data/locales/ms_BN.txt +++ b/source/data/locales/ms_BN.txt @@ -12,7 +12,7 @@ ms_BN{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ms_MY.txt b/source/data/locales/ms_MY.txt index a25d5e5..9ffb9df 100644 --- a/source/data/locales/ms_MY.txt +++ b/source/data/locales/ms_MY.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ms_MY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ms_SG.txt b/source/data/locales/ms_SG.txt index 653ef9c..3ba4291 100644 --- a/source/data/locales/ms_SG.txt +++ b/source/data/locales/ms_SG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ms_SG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mt.txt b/source/data/locales/mt.txt index 7bf0c46..4192928 100644 --- a/source/data/locales/mt.txt +++ b/source/data/locales/mt.txt @@ -44,7 +44,7 @@ mt{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mt_MT.txt b/source/data/locales/mt_MT.txt index d62e9cb..4ae4520 100644 --- a/source/data/locales/mt_MT.txt +++ b/source/data/locales/mt_MT.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mt_MT{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mua.txt b/source/data/locales/mua.txt index 7d575e1..378f507 100644 --- a/source/data/locales/mua.txt +++ b/source/data/locales/mua.txt @@ -18,7 +18,7 @@ mua{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/mua_CM.txt b/source/data/locales/mua_CM.txt index fbc81b0..8c043d4 100644 --- a/source/data/locales/mua_CM.txt +++ b/source/data/locales/mua_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mua_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/my.txt b/source/data/locales/my.txt index c14ca9f..9d30a5e 100644 --- a/source/data/locales/my.txt +++ b/source/data/locales/my.txt @@ -11,9 +11,9 @@ my{ word-medial{"{0} … {1}"} } ExemplarCharacters{ - "[က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ ဣ ဤ ဥ ဦ" - " ဧ ဩ ဪ ာ ါ \u102D \u102E \u102F \u1030 ေ \u1032 \u1036 ဿ ျ ြ \u103D \u103E " - "\u1039 \u103A \u1037 း]" + "[{\u104F} က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ " + "အ ဣ ဤ ဥ ဦ ဧ ဩ ဪ ာ ါ \u102D \u102E \u102F \u1030 ေ \u1032 \u1036 ဿ ျ ြ \u103D" + " \u103E \u1039 \u103A \u1037 း]" } ExemplarCharactersIndex{"[က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ]"} ExemplarCharactersPunctuation{"[၊ ။ ‘ ’ “ ”]"} @@ -165,6 +165,14 @@ my{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0} အုပ်မြောက်"} + } + plural{ + other{"{0}ရက်"} + } + } minimumGroupingDigits{"1"} mymr{ patterns{ @@ -184,7 +192,7 @@ my{ } native{"mymr"} } - Version{"2.1.30.50"} + Version{"2.1.33.28"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/my_MM.txt b/source/data/locales/my_MM.txt index fb0a830..4b22c00 100644 --- a/source/data/locales/my_MM.txt +++ b/source/data/locales/my_MM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License my_MM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/mzn.txt b/source/data/locales/mzn.txt index 809f247..8b149e0 100644 --- a/source/data/locales/mzn.txt +++ b/source/data/locales/mzn.txt @@ -21,7 +21,7 @@ mzn{ default{"arabext"} native{"arabext"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ default{"persian"} gregorian{ diff --git a/source/data/locales/mzn_IR.txt b/source/data/locales/mzn_IR.txt index 61854f7..0814d6d 100644 --- a/source/data/locales/mzn_IR.txt +++ b/source/data/locales/mzn_IR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License mzn_IR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/naq.txt b/source/data/locales/naq.txt index 506a286..3e8f55d 100644 --- a/source/data/locales/naq.txt +++ b/source/data/locales/naq.txt @@ -11,7 +11,7 @@ naq{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/naq_NA.txt b/source/data/locales/naq_NA.txt index 4e7b049..914f50a 100644 --- a/source/data/locales/naq_NA.txt +++ b/source/data/locales/naq_NA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License naq_NA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nb.txt b/source/data/locales/nb.txt index e836733..db3f94f 100644 --- a/source/data/locales/nb.txt +++ b/source/data/locales/nb.txt @@ -233,10 +233,19 @@ nb{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Ta {0}. svingen til høyre."} + } + plural{ + one{"{0} dag"} + other{"{0} dager"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} calendar{ buddhist{ availableFormats{ diff --git a/source/data/locales/nb_NO.txt b/source/data/locales/nb_NO.txt index 22fabcb..5e00af2 100644 --- a/source/data/locales/nb_NO.txt +++ b/source/data/locales/nb_NO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nb_NO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nb_SJ.txt b/source/data/locales/nb_SJ.txt index 28806ef..9041be5 100644 --- a/source/data/locales/nb_SJ.txt +++ b/source/data/locales/nb_SJ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nb_SJ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nd.txt b/source/data/locales/nd.txt index 7217780..db430e9 100644 --- a/source/data/locales/nd.txt +++ b/source/data/locales/nd.txt @@ -12,7 +12,7 @@ nd{ } } } - Version{"2.1.27.65"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nd_ZW.txt b/source/data/locales/nd_ZW.txt index 50e9618..8720335 100644 --- a/source/data/locales/nd_ZW.txt +++ b/source/data/locales/nd_ZW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nd_ZW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nds.txt b/source/data/locales/nds.txt index 0126abf..455c8f6 100644 --- a/source/data/locales/nds.txt +++ b/source/data/locales/nds.txt @@ -3,5 +3,5 @@ nds{ AuxExemplarCharacters{"[á à ă â ā æ ç é è ĕ ê ë ę ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ ú ù ŭ û ū ÿ]"} ExemplarCharacters{"[a å ä b c d e f g h i j k l m n o ö p q r s t u ü v w x y z]"} - Version{"2.1.28.71"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nds_DE.txt b/source/data/locales/nds_DE.txt index c35c1ad..6989592 100644 --- a/source/data/locales/nds_DE.txt +++ b/source/data/locales/nds_DE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nds_DE{ - Version{"2.1.28.71"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nds_NL.txt b/source/data/locales/nds_NL.txt index a47b8a2..d33dd45 100644 --- a/source/data/locales/nds_NL.txt +++ b/source/data/locales/nds_NL.txt @@ -8,5 +8,5 @@ nds_NL{ "[\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \u0022 “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ " "″]" } - Version{"2.1.28.71"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ne.txt b/source/data/locales/ne.txt index ffc4b09..af6b7cc 100644 --- a/source/data/locales/ne.txt +++ b/source/data/locales/ne.txt @@ -220,10 +220,20 @@ ne{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"{0} ओ दायाँ घुम्ति लिनुहोस्"} + other{"{0} औं दायाँ घुम्ति लिनुहोस्"} + } + plural{ + one{"तपाईँसँग {0} निम्तो छ"} + other{"तपाईँसँग {0} निम्ता छन््"} + } + } minimumGroupingDigits{"1"} native{"deva"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ne_IN.txt b/source/data/locales/ne_IN.txt index bb91048..c116a8c 100644 --- a/source/data/locales/ne_IN.txt +++ b/source/data/locales/ne_IN.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ne_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ne_NP.txt b/source/data/locales/ne_NP.txt index 83ebd0b..f748284 100644 --- a/source/data/locales/ne_NP.txt +++ b/source/data/locales/ne_NP.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ne_NP{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl.txt b/source/data/locales/nl.txt index 90e616a..b871363 100644 --- a/source/data/locales/nl.txt +++ b/source/data/locales/nl.txt @@ -236,10 +236,19 @@ nl{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Neem de {0}e afslag rechts."} + } + plural{ + one{"{0} dag"} + other{"{0} dagen"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/nl_AW.txt b/source/data/locales/nl_AW.txt index 0919d83..bdeca2d 100644 --- a/source/data/locales/nl_AW.txt +++ b/source/data/locales/nl_AW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_AW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl_BE.txt b/source/data/locales/nl_BE.txt index f603df8..899cb4f 100644 --- a/source/data/locales/nl_BE.txt +++ b/source/data/locales/nl_BE.txt @@ -8,7 +8,7 @@ nl_BE{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nl_BQ.txt b/source/data/locales/nl_BQ.txt index 7dd19c6..a5b7af3 100644 --- a/source/data/locales/nl_BQ.txt +++ b/source/data/locales/nl_BQ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_BQ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl_CW.txt b/source/data/locales/nl_CW.txt index 8dbfbbd..893b69f 100644 --- a/source/data/locales/nl_CW.txt +++ b/source/data/locales/nl_CW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_CW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl_NL.txt b/source/data/locales/nl_NL.txt index c7b379f..53f1f9f 100644 --- a/source/data/locales/nl_NL.txt +++ b/source/data/locales/nl_NL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_NL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl_SR.txt b/source/data/locales/nl_SR.txt index 25d26a6..7603e3e 100644 --- a/source/data/locales/nl_SR.txt +++ b/source/data/locales/nl_SR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_SR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nl_SX.txt b/source/data/locales/nl_SX.txt index 78cec98..a89d35f 100644 --- a/source/data/locales/nl_SX.txt +++ b/source/data/locales/nl_SX.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nl_SX{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nmg.txt b/source/data/locales/nmg.txt index 5240cfd..94378e9 100644 --- a/source/data/locales/nmg.txt +++ b/source/data/locales/nmg.txt @@ -21,7 +21,7 @@ nmg{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nmg_CM.txt b/source/data/locales/nmg_CM.txt index 7f3be5e..fc69a67 100644 --- a/source/data/locales/nmg_CM.txt +++ b/source/data/locales/nmg_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nmg_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nn.txt b/source/data/locales/nn.txt index cb76158..b0e8f54 100644 --- a/source/data/locales/nn.txt +++ b/source/data/locales/nn.txt @@ -36,7 +36,7 @@ nn{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nn_NO.txt b/source/data/locales/nn_NO.txt index 6df86ea..73baa40 100644 --- a/source/data/locales/nn_NO.txt +++ b/source/data/locales/nn_NO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nn_NO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nnh.txt b/source/data/locales/nnh.txt index 035e56b..296124f 100644 --- a/source/data/locales/nnh.txt +++ b/source/data/locales/nnh.txt @@ -27,7 +27,7 @@ nnh{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nnh_CM.txt b/source/data/locales/nnh_CM.txt index a529594..ffda18e 100644 --- a/source/data/locales/nnh_CM.txt +++ b/source/data/locales/nnh_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nnh_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nus.txt b/source/data/locales/nus.txt index 2f8a8e2..9dac7c1 100644 --- a/source/data/locales/nus.txt +++ b/source/data/locales/nus.txt @@ -21,7 +21,7 @@ nus{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nus_SS.txt b/source/data/locales/nus_SS.txt index 32ede21..c2e7960 100644 --- a/source/data/locales/nus_SS.txt +++ b/source/data/locales/nus_SS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nus_SS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/nyn.txt b/source/data/locales/nyn.txt index e237322..acb8e9e 100644 --- a/source/data/locales/nyn.txt +++ b/source/data/locales/nyn.txt @@ -10,7 +10,7 @@ nyn{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/nyn_UG.txt b/source/data/locales/nyn_UG.txt index 0f9ef2d..316c23e 100644 --- a/source/data/locales/nyn_UG.txt +++ b/source/data/locales/nyn_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nyn_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/om.txt b/source/data/locales/om.txt index 8c6a53a..215f18f 100644 --- a/source/data/locales/om.txt +++ b/source/data/locales/om.txt @@ -34,7 +34,7 @@ om{ native{"latn"} traditional{"ethi"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/om_ET.txt b/source/data/locales/om_ET.txt index a2d2fa3..bf0cbaf 100644 --- a/source/data/locales/om_ET.txt +++ b/source/data/locales/om_ET.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License om_ET{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/om_KE.txt b/source/data/locales/om_KE.txt index a74fc24..38968cb 100644 --- a/source/data/locales/om_KE.txt +++ b/source/data/locales/om_KE.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License om_KE{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/or.txt b/source/data/locales/or.txt index 109efa4..c0482db 100644 --- a/source/data/locales/or.txt +++ b/source/data/locales/or.txt @@ -26,7 +26,7 @@ or{ } native{"orya"} } - Version{"2.1.27.78"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/or_IN.txt b/source/data/locales/or_IN.txt index 6bb2596..b34ec0f 100644 --- a/source/data/locales/or_IN.txt +++ b/source/data/locales/or_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License or_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/os.txt b/source/data/locales/os.txt index bf1f23c..00c21e4 100644 --- a/source/data/locales/os.txt +++ b/source/data/locales/os.txt @@ -43,7 +43,7 @@ os{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/os_GE.txt b/source/data/locales/os_GE.txt index 4b523c1..f43cbb5 100644 --- a/source/data/locales/os_GE.txt +++ b/source/data/locales/os_GE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License os_GE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/os_RU.txt b/source/data/locales/os_RU.txt index f500bb6..001710c 100644 --- a/source/data/locales/os_RU.txt +++ b/source/data/locales/os_RU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License os_RU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pa.txt b/source/data/locales/pa.txt index 0de6e34..de8cb53 100644 --- a/source/data/locales/pa.txt +++ b/source/data/locales/pa.txt @@ -240,10 +240,19 @@ pa{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"ਸਜੇ ਪਾਸੇ {0} ਮੋੜ ਲਵੋ"} + } + plural{ + one{"{0} ਘੰਟਾ"} + other{"{0} ਘੰਟੇ"} + } + } minimumGroupingDigits{"1"} native{"guru"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ @@ -286,7 +295,7 @@ pa{ yyyyMEd{"E, d/M/y GGGGG"} yyyyMMM{"MMM y G"} yyyyMMMEd{"E, d MMM y G"} - yyyyMMMM{"G y MMMM"} + yyyyMMMM{"MMMM y G"} yyyyMMMd{"d MMM y G"} yyyyMd{"d/M/y GGGGG"} yyyyQQQ{"QQQ y G"} @@ -427,7 +436,7 @@ pa{ yMEd{"E, d/M/y"} yMMM{"MMM y"} yMMMEd{"E, d MMM y"} - yMMMM{"y MMMM"} + yMMMM{"MMMM y"} yMMMd{"d MMM y"} yMd{"d/M/y"} yQQQ{"QQQ y"} diff --git a/source/data/locales/pa_Arab.txt b/source/data/locales/pa_Arab.txt index 193392c..22e1d02 100644 --- a/source/data/locales/pa_Arab.txt +++ b/source/data/locales/pa_Arab.txt @@ -17,7 +17,7 @@ pa_Arab{ } native{"arabext"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/pa_Arab_PK.txt b/source/data/locales/pa_Arab_PK.txt index ad09c90..b75ed4d 100644 --- a/source/data/locales/pa_Arab_PK.txt +++ b/source/data/locales/pa_Arab_PK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pa_Arab_PK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pa_Guru.txt b/source/data/locales/pa_Guru.txt index dca680f..dc1602d 100644 --- a/source/data/locales/pa_Guru.txt +++ b/source/data/locales/pa_Guru.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pa_Guru{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pa_Guru_IN.txt b/source/data/locales/pa_Guru_IN.txt index 26d6e29..0b35aa7 100644 --- a/source/data/locales/pa_Guru_IN.txt +++ b/source/data/locales/pa_Guru_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pa_Guru_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pl.txt b/source/data/locales/pl.txt index 7396e44..d2d5944 100644 --- a/source/data/locales/pl.txt +++ b/source/data/locales/pl.txt @@ -272,10 +272,21 @@ pl{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Skręć w {0} w prawo."} + } + plural{ + few{"{0} miesiące"} + many{"{0} miesięcy"} + one{"{0} miesiąc"} + other{"{0} miesiąca"} + } + } minimumGroupingDigits{"2"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/pl_PL.txt b/source/data/locales/pl_PL.txt index e4e959c..05a9748 100644 --- a/source/data/locales/pl_PL.txt +++ b/source/data/locales/pl_PL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pl_PL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pool.res b/source/data/locales/pool.res index 99ef76c..4e500b9 100644 Binary files a/source/data/locales/pool.res and b/source/data/locales/pool.res differ diff --git a/source/data/locales/ps.txt b/source/data/locales/ps.txt index e106dc8..bbea3b4 100644 --- a/source/data/locales/ps.txt +++ b/source/data/locales/ps.txt @@ -57,7 +57,7 @@ ps{ minimumGroupingDigits{"1"} native{"arabext"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ default{"persian"} generic{ diff --git a/source/data/locales/ps_AF.txt b/source/data/locales/ps_AF.txt index c7b1b2c..5741f9c 100644 --- a/source/data/locales/ps_AF.txt +++ b/source/data/locales/ps_AF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ps_AF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt.txt b/source/data/locales/pt.txt index 60bd7f3..96ddf74 100644 --- a/source/data/locales/pt.txt +++ b/source/data/locales/pt.txt @@ -203,10 +203,19 @@ pt{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}º livro"} + } + plural{ + one{"{0} ponto"} + other{"{0} pontos"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/pt_AO.txt b/source/data/locales/pt_AO.txt index 149733f..3d5fbf3 100644 --- a/source/data/locales/pt_AO.txt +++ b/source/data/locales/pt_AO.txt @@ -5,5 +5,5 @@ pt_AO{ NumberElements{ minimumGroupingDigits{"1"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_BR.txt b/source/data/locales/pt_BR.txt index de0bcf3..3aab755 100644 --- a/source/data/locales/pt_BR.txt +++ b/source/data/locales/pt_BR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pt_BR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_CH.txt b/source/data/locales/pt_CH.txt index a4226b1..4ee7339 100644 --- a/source/data/locales/pt_CH.txt +++ b/source/data/locales/pt_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CH{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_CV.txt b/source/data/locales/pt_CV.txt index 829f400..ed8f313 100644 --- a/source/data/locales/pt_CV.txt +++ b/source/data/locales/pt_CV.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CV{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_GQ.txt b/source/data/locales/pt_GQ.txt index fd432f9..0f6e235 100644 --- a/source/data/locales/pt_GQ.txt +++ b/source/data/locales/pt_GQ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GQ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_GW.txt b/source/data/locales/pt_GW.txt index 75c5d9d..f4cd124 100644 --- a/source/data/locales/pt_GW.txt +++ b/source/data/locales/pt_GW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GW{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_LU.txt b/source/data/locales/pt_LU.txt index b5eca2f..b5a1669 100644 --- a/source/data/locales/pt_LU.txt +++ b/source/data/locales/pt_LU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_LU{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_MO.txt b/source/data/locales/pt_MO.txt index 534f5ba..ca01c7f 100644 --- a/source/data/locales/pt_MO.txt +++ b/source/data/locales/pt_MO.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MO{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/pt_MZ.txt b/source/data/locales/pt_MZ.txt index 9878c5a..060a5fc 100644 --- a/source/data/locales/pt_MZ.txt +++ b/source/data/locales/pt_MZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MZ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_PT.txt b/source/data/locales/pt_PT.txt index 97fe460..fd57bd8 100644 --- a/source/data/locales/pt_PT.txt +++ b/source/data/locales/pt_PT.txt @@ -141,7 +141,7 @@ pt_PT{ } minimumGroupingDigits{"2"} } - Version{"2.1.29.54"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/pt_ST.txt b/source/data/locales/pt_ST.txt index fcc981b..e3f0965 100644 --- a/source/data/locales/pt_ST.txt +++ b/source/data/locales/pt_ST.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_ST{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/pt_TL.txt b/source/data/locales/pt_TL.txt index 8bbbc3d..b8cb201 100644 --- a/source/data/locales/pt_TL.txt +++ b/source/data/locales/pt_TL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_TL{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/qu.txt b/source/data/locales/qu.txt index 1e313bd..7e4416c 100644 --- a/source/data/locales/qu.txt +++ b/source/data/locales/qu.txt @@ -34,7 +34,7 @@ qu{ } } } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/qu_BO.txt b/source/data/locales/qu_BO.txt index 0dbd93c..8b959e3 100644 --- a/source/data/locales/qu_BO.txt +++ b/source/data/locales/qu_BO.txt @@ -9,5 +9,5 @@ qu_BO{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/qu_EC.txt b/source/data/locales/qu_EC.txt index 69b8ba0..0da49d8 100644 --- a/source/data/locales/qu_EC.txt +++ b/source/data/locales/qu_EC.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License qu_EC{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/qu_PE.txt b/source/data/locales/qu_PE.txt index 2163c2a..803056f 100644 --- a/source/data/locales/qu_PE.txt +++ b/source/data/locales/qu_PE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License qu_PE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/resfiles.mk b/source/data/locales/resfiles.mk index ae413c9..fa01950 100644 --- a/source/data/locales/resfiles.mk +++ b/source/data/locales/resfiles.mk @@ -1,17 +1,17 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -GENRB_CLDR_VERSION = %version% +GENRB_CLDR_VERSION = 31.0.1 # A list of txt's to build # Note: # # If you are thinking of modifying this file, READ THIS. # # Instead of changing this file [unless you want to check it back in], -# you should consider creating a '%local%' file in this same directory. +# you should consider creating a 'reslocal.mk' file in this same directory. # Then, you can have your local changes remain even if you upgrade or # reconfigure ICU. # -# Example '%local%' files: +# Example 'reslocal.mk' files: # # * To add an additional locale to the list: # _____________________________________________________ @@ -26,15 +26,15 @@ GENRB_CLDR_VERSION = %version% # Generated by LDML2ICUConverter, from LDML source files. # Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml) -GENRB_SYNTHETIC_ALIAS = az_AZ.txt bs_BA.txt en_NH.txt en_RH.txt\ - in.txt in_ID.txt iw.txt iw_IL.txt ja_JP_TRADITIONAL.txt\ - mo.txt no.txt no_NO.txt no_NO_NY.txt pa_IN.txt\ - pa_PK.txt sh.txt sh_BA.txt sh_CS.txt sh_YU.txt\ - shi_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt sr_Cyrl_YU.txt\ - sr_Latn_CS.txt sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_XK.txt\ - sr_YU.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt\ - uz_UZ.txt vai_LR.txt zh_CN.txt zh_HK.txt zh_MO.txt\ - zh_SG.txt zh_TW.txt +GENRB_SYNTHETIC_ALIAS = ars.txt az_AZ.txt bs_BA.txt en_NH.txt\ + en_RH.txt in.txt in_ID.txt iw.txt iw_IL.txt\ + ja_JP_TRADITIONAL.txt mo.txt no.txt no_NO.txt no_NO_NY.txt\ + pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\ + sh_YU.txt shi_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt\ + sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_YU.txt sr_ME.txt sr_RS.txt\ + sr_XK.txt sr_YU.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt\ + uz_AF.txt uz_UZ.txt vai_LR.txt zh_CN.txt zh_HK.txt\ + zh_MO.txt zh_SG.txt zh_TW.txt # All aliases (to not be included under 'installed'), but not including root. @@ -89,99 +89,100 @@ GENRB_SOURCE = af.txt af_NA.txt af_ZA.txt agq.txt\ en_UG.txt en_UM.txt en_US.txt en_US_POSIX.txt en_VC.txt\ en_VG.txt en_VI.txt en_VU.txt en_WS.txt en_ZA.txt\ en_ZM.txt en_ZW.txt eo.txt es.txt es_419.txt\ - es_AR.txt es_BO.txt es_BR.txt es_CL.txt es_CO.txt\ - es_CR.txt es_CU.txt es_DO.txt es_EA.txt es_EC.txt\ - es_ES.txt es_GQ.txt es_GT.txt es_HN.txt es_IC.txt\ - es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PH.txt\ - es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\ - es_VE.txt et.txt et_EE.txt eu.txt eu_ES.txt\ - ewo.txt ewo_CM.txt fa.txt fa_AF.txt fa_IR.txt\ - ff.txt ff_CM.txt ff_GN.txt ff_MR.txt ff_SN.txt\ - fi.txt fi_FI.txt fil.txt fil_PH.txt fo.txt\ - fo_DK.txt fo_FO.txt fr.txt fr_BE.txt fr_BF.txt\ - fr_BI.txt fr_BJ.txt fr_BL.txt fr_CA.txt fr_CD.txt\ - fr_CF.txt fr_CG.txt fr_CH.txt fr_CI.txt fr_CM.txt\ - fr_DJ.txt fr_DZ.txt fr_FR.txt fr_GA.txt fr_GF.txt\ - fr_GN.txt fr_GP.txt fr_GQ.txt fr_HT.txt fr_KM.txt\ - fr_LU.txt fr_MA.txt fr_MC.txt fr_MF.txt fr_MG.txt\ - fr_ML.txt fr_MQ.txt fr_MR.txt fr_MU.txt fr_NC.txt\ - fr_NE.txt fr_PF.txt fr_PM.txt fr_RE.txt fr_RW.txt\ - fr_SC.txt fr_SN.txt fr_SY.txt fr_TD.txt fr_TG.txt\ - fr_TN.txt fr_VU.txt fr_WF.txt fr_YT.txt fur.txt\ - fur_IT.txt fy.txt fy_NL.txt ga.txt ga_IE.txt\ - gd.txt gd_GB.txt gl.txt gl_ES.txt gsw.txt\ - gsw_CH.txt gsw_FR.txt gsw_LI.txt gu.txt gu_IN.txt\ - guz.txt guz_KE.txt gv.txt gv_IM.txt ha.txt\ - ha_GH.txt ha_NE.txt ha_NG.txt haw.txt haw_US.txt\ - he.txt he_IL.txt hi.txt hi_IN.txt hr.txt\ - hr_BA.txt hr_HR.txt hsb.txt hsb_DE.txt hu.txt\ - hu_HU.txt hy.txt hy_AM.txt id.txt id_ID.txt\ - ig.txt ig_NG.txt ii.txt ii_CN.txt is.txt\ - is_IS.txt it.txt it_CH.txt it_IT.txt it_SM.txt\ - ja.txt ja_JP.txt jgo.txt jgo_CM.txt jmc.txt\ - jmc_TZ.txt ka.txt ka_GE.txt kab.txt kab_DZ.txt\ - kam.txt kam_KE.txt kde.txt kde_TZ.txt kea.txt\ - kea_CV.txt khq.txt khq_ML.txt ki.txt ki_KE.txt\ - kk.txt kk_KZ.txt kkj.txt kkj_CM.txt kl.txt\ - kl_GL.txt kln.txt kln_KE.txt km.txt km_KH.txt\ - kn.txt kn_IN.txt ko.txt ko_KP.txt ko_KR.txt\ - kok.txt kok_IN.txt ks.txt ks_IN.txt ksb.txt\ - ksb_TZ.txt ksf.txt ksf_CM.txt ksh.txt ksh_DE.txt\ - kw.txt kw_GB.txt ky.txt ky_KG.txt lag.txt\ - lag_TZ.txt lb.txt lb_LU.txt lg.txt lg_UG.txt\ - lkt.txt lkt_US.txt ln.txt ln_AO.txt ln_CD.txt\ - ln_CF.txt ln_CG.txt lo.txt lo_LA.txt lrc.txt\ - lrc_IQ.txt lrc_IR.txt lt.txt lt_LT.txt lu.txt\ - lu_CD.txt luo.txt luo_KE.txt luy.txt luy_KE.txt\ - lv.txt lv_LV.txt mas.txt mas_KE.txt mas_TZ.txt\ - mer.txt mer_KE.txt mfe.txt mfe_MU.txt mg.txt\ - mg_MG.txt mgh.txt mgh_MZ.txt mgo.txt mgo_CM.txt\ - mk.txt mk_MK.txt ml.txt ml_IN.txt mn.txt\ - mn_MN.txt mr.txt mr_IN.txt ms.txt ms_BN.txt\ - ms_MY.txt ms_SG.txt mt.txt mt_MT.txt mua.txt\ - mua_CM.txt my.txt my_MM.txt mzn.txt mzn_IR.txt\ - naq.txt naq_NA.txt nb.txt nb_NO.txt nb_SJ.txt\ - nd.txt nd_ZW.txt nds.txt nds_DE.txt nds_NL.txt\ - ne.txt ne_IN.txt ne_NP.txt nl.txt nl_AW.txt\ - nl_BE.txt nl_BQ.txt nl_CW.txt nl_NL.txt nl_SR.txt\ - nl_SX.txt nmg.txt nmg_CM.txt nn.txt nn_NO.txt\ - nnh.txt nnh_CM.txt nus.txt nus_SS.txt nyn.txt\ - nyn_UG.txt om.txt om_ET.txt om_KE.txt or.txt\ - or_IN.txt os.txt os_GE.txt os_RU.txt pa.txt\ - pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt pl.txt\ - pl_PL.txt ps.txt ps_AF.txt pt.txt pt_AO.txt\ - pt_BR.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\ - pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\ - pt_TL.txt qu.txt qu_BO.txt qu_EC.txt qu_PE.txt\ - rm.txt rm_CH.txt rn.txt rn_BI.txt ro.txt\ - ro_MD.txt ro_RO.txt rof.txt rof_TZ.txt ru.txt\ - ru_BY.txt ru_KG.txt ru_KZ.txt ru_MD.txt ru_RU.txt\ - ru_UA.txt rw.txt rw_RW.txt rwk.txt rwk_TZ.txt\ - sah.txt sah_RU.txt saq.txt saq_KE.txt sbp.txt\ - sbp_TZ.txt se.txt se_FI.txt se_NO.txt se_SE.txt\ - seh.txt seh_MZ.txt ses.txt ses_ML.txt sg.txt\ - sg_CF.txt shi.txt shi_Latn.txt shi_Latn_MA.txt shi_Tfng.txt\ - shi_Tfng_MA.txt si.txt si_LK.txt sk.txt sk_SK.txt\ - sl.txt sl_SI.txt smn.txt smn_FI.txt sn.txt\ - sn_ZW.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\ - so_SO.txt sq.txt sq_AL.txt sq_MK.txt sq_XK.txt\ - sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt\ - sr_Cyrl_XK.txt sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt\ - sr_Latn_XK.txt sv.txt sv_AX.txt sv_FI.txt sv_SE.txt\ - sw.txt sw_CD.txt sw_KE.txt sw_TZ.txt sw_UG.txt\ - ta.txt ta_IN.txt ta_LK.txt ta_MY.txt ta_SG.txt\ - te.txt te_IN.txt teo.txt teo_KE.txt teo_UG.txt\ - th.txt th_TH.txt ti.txt ti_ER.txt ti_ET.txt\ - to.txt to_TO.txt tr.txt tr_CY.txt tr_TR.txt\ - twq.txt twq_NE.txt tzm.txt tzm_MA.txt ug.txt\ - ug_CN.txt uk.txt uk_UA.txt ur.txt ur_IN.txt\ - ur_PK.txt uz.txt uz_Arab.txt uz_Arab_AF.txt uz_Cyrl.txt\ - uz_Cyrl_UZ.txt uz_Latn.txt uz_Latn_UZ.txt vai.txt vai_Latn.txt\ - vai_Latn_LR.txt vai_Vaii.txt vai_Vaii_LR.txt vi.txt vi_VN.txt\ - vun.txt vun_TZ.txt wae.txt wae_CH.txt xog.txt\ - xog_UG.txt yav.txt yav_CM.txt yi.txt yi_001.txt\ - yo.txt yo_BJ.txt yo_NG.txt yue.txt yue_HK.txt\ - zgh.txt zgh_MA.txt zh.txt zh_Hans.txt zh_Hans_CN.txt\ - zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt\ - zh_Hant_MO.txt zh_Hant_TW.txt zu.txt zu_ZA.txt + es_AR.txt es_BO.txt es_BR.txt es_BZ.txt es_CL.txt\ + es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EA.txt\ + es_EC.txt es_ES.txt es_GQ.txt es_GT.txt es_HN.txt\ + es_IC.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\ + es_PH.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\ + es_UY.txt es_VE.txt et.txt et_EE.txt eu.txt\ + eu_ES.txt ewo.txt ewo_CM.txt fa.txt fa_AF.txt\ + fa_IR.txt ff.txt ff_CM.txt ff_GN.txt ff_MR.txt\ + ff_SN.txt fi.txt fi_FI.txt fil.txt fil_PH.txt\ + fo.txt fo_DK.txt fo_FO.txt fr.txt fr_BE.txt\ + fr_BF.txt fr_BI.txt fr_BJ.txt fr_BL.txt fr_CA.txt\ + fr_CD.txt fr_CF.txt fr_CG.txt fr_CH.txt fr_CI.txt\ + fr_CM.txt fr_DJ.txt fr_DZ.txt fr_FR.txt fr_GA.txt\ + fr_GF.txt fr_GN.txt fr_GP.txt fr_GQ.txt fr_HT.txt\ + fr_KM.txt fr_LU.txt fr_MA.txt fr_MC.txt fr_MF.txt\ + fr_MG.txt fr_ML.txt fr_MQ.txt fr_MR.txt fr_MU.txt\ + fr_NC.txt fr_NE.txt fr_PF.txt fr_PM.txt fr_RE.txt\ + fr_RW.txt fr_SC.txt fr_SN.txt fr_SY.txt fr_TD.txt\ + fr_TG.txt fr_TN.txt fr_VU.txt fr_WF.txt fr_YT.txt\ + fur.txt fur_IT.txt fy.txt fy_NL.txt ga.txt\ + ga_IE.txt gd.txt gd_GB.txt gl.txt gl_ES.txt\ + gsw.txt gsw_CH.txt gsw_FR.txt gsw_LI.txt gu.txt\ + gu_IN.txt guz.txt guz_KE.txt gv.txt gv_IM.txt\ + ha.txt ha_GH.txt ha_NE.txt ha_NG.txt haw.txt\ + haw_US.txt he.txt he_IL.txt hi.txt hi_IN.txt\ + hr.txt hr_BA.txt hr_HR.txt hsb.txt hsb_DE.txt\ + hu.txt hu_HU.txt hy.txt hy_AM.txt id.txt\ + id_ID.txt ig.txt ig_NG.txt ii.txt ii_CN.txt\ + is.txt is_IS.txt it.txt it_CH.txt it_IT.txt\ + it_SM.txt it_VA.txt ja.txt ja_JP.txt jgo.txt\ + jgo_CM.txt jmc.txt jmc_TZ.txt ka.txt ka_GE.txt\ + kab.txt kab_DZ.txt kam.txt kam_KE.txt kde.txt\ + kde_TZ.txt kea.txt kea_CV.txt khq.txt khq_ML.txt\ + ki.txt ki_KE.txt kk.txt kk_KZ.txt kkj.txt\ + kkj_CM.txt kl.txt kl_GL.txt kln.txt kln_KE.txt\ + km.txt km_KH.txt kn.txt kn_IN.txt ko.txt\ + ko_KP.txt ko_KR.txt kok.txt kok_IN.txt ks.txt\ + ks_IN.txt ksb.txt ksb_TZ.txt ksf.txt ksf_CM.txt\ + ksh.txt ksh_DE.txt kw.txt kw_GB.txt ky.txt\ + ky_KG.txt lag.txt lag_TZ.txt lb.txt lb_LU.txt\ + lg.txt lg_UG.txt lkt.txt lkt_US.txt ln.txt\ + ln_AO.txt ln_CD.txt ln_CF.txt ln_CG.txt lo.txt\ + lo_LA.txt lrc.txt lrc_IQ.txt lrc_IR.txt lt.txt\ + lt_LT.txt lu.txt lu_CD.txt luo.txt luo_KE.txt\ + luy.txt luy_KE.txt lv.txt lv_LV.txt mas.txt\ + mas_KE.txt mas_TZ.txt mer.txt mer_KE.txt mfe.txt\ + mfe_MU.txt mg.txt mg_MG.txt mgh.txt mgh_MZ.txt\ + mgo.txt mgo_CM.txt mk.txt mk_MK.txt ml.txt\ + ml_IN.txt mn.txt mn_MN.txt mr.txt mr_IN.txt\ + ms.txt ms_BN.txt ms_MY.txt ms_SG.txt mt.txt\ + mt_MT.txt mua.txt mua_CM.txt my.txt my_MM.txt\ + mzn.txt mzn_IR.txt naq.txt naq_NA.txt nb.txt\ + nb_NO.txt nb_SJ.txt nd.txt nd_ZW.txt nds.txt\ + nds_DE.txt nds_NL.txt ne.txt ne_IN.txt ne_NP.txt\ + nl.txt nl_AW.txt nl_BE.txt nl_BQ.txt nl_CW.txt\ + nl_NL.txt nl_SR.txt nl_SX.txt nmg.txt nmg_CM.txt\ + nn.txt nn_NO.txt nnh.txt nnh_CM.txt nus.txt\ + nus_SS.txt nyn.txt nyn_UG.txt om.txt om_ET.txt\ + om_KE.txt or.txt or_IN.txt os.txt os_GE.txt\ + os_RU.txt pa.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt\ + pa_Guru_IN.txt pl.txt pl_PL.txt ps.txt ps_AF.txt\ + pt.txt pt_AO.txt pt_BR.txt pt_CH.txt pt_CV.txt\ + pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt\ + pt_PT.txt pt_ST.txt pt_TL.txt qu.txt qu_BO.txt\ + qu_EC.txt qu_PE.txt rm.txt rm_CH.txt rn.txt\ + rn_BI.txt ro.txt ro_MD.txt ro_RO.txt rof.txt\ + rof_TZ.txt ru.txt ru_BY.txt ru_KG.txt ru_KZ.txt\ + ru_MD.txt ru_RU.txt ru_UA.txt rw.txt rw_RW.txt\ + rwk.txt rwk_TZ.txt sah.txt sah_RU.txt saq.txt\ + saq_KE.txt sbp.txt sbp_TZ.txt se.txt se_FI.txt\ + se_NO.txt se_SE.txt seh.txt seh_MZ.txt ses.txt\ + ses_ML.txt sg.txt sg_CF.txt shi.txt shi_Latn.txt\ + shi_Latn_MA.txt shi_Tfng.txt shi_Tfng_MA.txt si.txt si_LK.txt\ + sk.txt sk_SK.txt sl.txt sl_SI.txt smn.txt\ + smn_FI.txt sn.txt sn_ZW.txt so.txt so_DJ.txt\ + so_ET.txt so_KE.txt so_SO.txt sq.txt sq_AL.txt\ + sq_MK.txt sq_XK.txt sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt\ + sr_Cyrl_ME.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Latn.txt sr_Latn_BA.txt\ + sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_XK.txt sv.txt sv_AX.txt\ + sv_FI.txt sv_SE.txt sw.txt sw_CD.txt sw_KE.txt\ + sw_TZ.txt sw_UG.txt ta.txt ta_IN.txt ta_LK.txt\ + ta_MY.txt ta_SG.txt te.txt te_IN.txt teo.txt\ + teo_KE.txt teo_UG.txt th.txt th_TH.txt ti.txt\ + ti_ER.txt ti_ET.txt to.txt to_TO.txt tr.txt\ + tr_CY.txt tr_TR.txt twq.txt twq_NE.txt tzm.txt\ + tzm_MA.txt ug.txt ug_CN.txt uk.txt uk_UA.txt\ + ur.txt ur_IN.txt ur_PK.txt uz.txt uz_Arab.txt\ + uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt uz_Latn_UZ.txt\ + vai.txt vai_Latn.txt vai_Latn_LR.txt vai_Vaii.txt vai_Vaii_LR.txt\ + vi.txt vi_VN.txt vun.txt vun_TZ.txt wae.txt\ + wae_CH.txt xog.txt xog_UG.txt yav.txt yav_CM.txt\ + yi.txt yi_001.txt yo.txt yo_BJ.txt yo_NG.txt\ + yue.txt yue_HK.txt zgh.txt zgh_MA.txt zh.txt\ + zh_Hans.txt zh_Hans_CN.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\ + zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zu.txt\ + zu_ZA.txt diff --git a/source/data/locales/rm.txt b/source/data/locales/rm.txt index 48efd86..ffef807 100644 --- a/source/data/locales/rm.txt +++ b/source/data/locales/rm.txt @@ -34,7 +34,7 @@ rm{ } minimumGroupingDigits{"1"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rm_CH.txt b/source/data/locales/rm_CH.txt index 8b9f156..9139d92 100644 --- a/source/data/locales/rm_CH.txt +++ b/source/data/locales/rm_CH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License rm_CH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/rn.txt b/source/data/locales/rn.txt index c2d7cbd..94d4199 100644 --- a/source/data/locales/rn.txt +++ b/source/data/locales/rn.txt @@ -16,7 +16,7 @@ rn{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rn_BI.txt b/source/data/locales/rn_BI.txt index e64be13..e0a6706 100644 --- a/source/data/locales/rn_BI.txt +++ b/source/data/locales/rn_BI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License rn_BI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ro.txt b/source/data/locales/ro.txt index e53b940..b084701 100644 --- a/source/data/locales/ro.txt +++ b/source/data/locales/ro.txt @@ -233,10 +233,21 @@ ro{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Faceți virajul nr. {0} la dreapta."} + other{"Faceți virajul al {0}-lea la dreapta."} + } + plural{ + few{"{0} zile"} + one{"{0} zi"} + other{"{0} de zile"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ro_MD.txt b/source/data/locales/ro_MD.txt index f10298a..f76f446 100644 --- a/source/data/locales/ro_MD.txt +++ b/source/data/locales/ro_MD.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ro_MD{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/ro_RO.txt b/source/data/locales/ro_RO.txt index c62372c..d04ff69 100644 --- a/source/data/locales/ro_RO.txt +++ b/source/data/locales/ro_RO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ro_RO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/rof.txt b/source/data/locales/rof.txt index c6aa38e..c1ff90c 100644 --- a/source/data/locales/rof.txt +++ b/source/data/locales/rof.txt @@ -11,7 +11,7 @@ rof{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rof_TZ.txt b/source/data/locales/rof_TZ.txt index 014d99d..8ad4782 100644 --- a/source/data/locales/rof_TZ.txt +++ b/source/data/locales/rof_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License rof_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/root.txt b/source/data/locales/root.txt index 100c07b..7108137 100644 --- a/source/data/locales/root.txt +++ b/source/data/locales/root.txt @@ -160,10 +160,18 @@ root{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}?"} + } + plural{ + other{"{0}?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.30.58"} + Version{"2.1.32.59"} calendar{ buddhist{ AmPmMarkers:alias{"/LOCALE/calendar/gregorian/AmPmMarkers"} @@ -2126,12 +2134,21 @@ root{ } day-narrow:alias{"/LOCALE/fields/day-short"} day-short:alias{"/LOCALE/fields/day"} + dayOfYear{ + dn{"Day Of Year"} + } + dayOfYear-narrow:alias{"/LOCALE/fields/dayOfYear-short"} + dayOfYear-short:alias{"/LOCALE/fields/dayOfYear"} dayperiod{ dn{"Dayperiod"} } + dayperiod-narrow:alias{"/LOCALE/fields/dayperiod-short"} + dayperiod-short:alias{"/LOCALE/fields/dayperiod"} era{ dn{"Era"} } + era-narrow:alias{"/LOCALE/fields/era-short"} + era-short:alias{"/LOCALE/fields/era"} fri{ relative{ "-1"{"last Friday"} @@ -2354,9 +2371,21 @@ root{ } week-narrow:alias{"/LOCALE/fields/week-short"} week-short:alias{"/LOCALE/fields/week"} + weekOfMonth{ + dn{"Week Of Month"} + } + weekOfMonth-narrow:alias{"/LOCALE/fields/weekOfMonth-short"} + weekOfMonth-short:alias{"/LOCALE/fields/weekOfMonth"} weekday{ dn{"Day of the Week"} } + weekday-narrow:alias{"/LOCALE/fields/weekday-short"} + weekday-short:alias{"/LOCALE/fields/weekday"} + weekdayOfMonth{ + dn{"Weekday Of Month"} + } + weekdayOfMonth-narrow:alias{"/LOCALE/fields/weekdayOfMonth-short"} + weekdayOfMonth-short:alias{"/LOCALE/fields/weekdayOfMonth"} year{ dn{"Year"} relative{ @@ -2378,6 +2407,8 @@ root{ zone{ dn{"Zone"} } + zone-narrow:alias{"/LOCALE/fields/zone-short"} + zone-short:alias{"/LOCALE/fields/zone"} } layout{ characters{"left-to-right"} @@ -2420,4 +2451,31 @@ root{ US{"US"} metric{"Metric"} } + parse{ + date{ + lenient{ + "[\\-./]", + "[\\:∶]", + } + } + general{ + lenient{ + "[..․﹒ 。︒。]", + "[$﹩$$]", + "[£₤]", + "[₨₹{Rs}{Rp}]", + } + } + number{ + lenient{ + "[\\--﹣ −⁻₋ ➖‒]", + "[,,﹐︐ ، ٫ 、﹑︑、]", + "[++﬩﹢⁺₊ ➕]", + } + stricter{ + "[,,﹐︐ ٫]", + "[..․﹒ 。]", + } + } + } } diff --git a/source/data/locales/ru.txt b/source/data/locales/ru.txt index dcd151a..9fedd8c 100644 --- a/source/data/locales/ru.txt +++ b/source/data/locales/ru.txt @@ -275,10 +275,21 @@ ru{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Сверните направо на {0}-м перекрестке."} + } + plural{ + few{"из {0} книг за {0} дня"} + many{"из {0} книг за {0} дней"} + one{"из {0} книги за {0} день"} + other{"из {0} книги за {0} дня"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ru_BY.txt b/source/data/locales/ru_BY.txt index 47177cf..7f8050c 100644 --- a/source/data/locales/ru_BY.txt +++ b/source/data/locales/ru_BY.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ru_BY{ - Version{"2.1.30.5"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ru_KG.txt b/source/data/locales/ru_KG.txt index 998d040..28d8764 100644 --- a/source/data/locales/ru_KG.txt +++ b/source/data/locales/ru_KG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ru_KG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ru_KZ.txt b/source/data/locales/ru_KZ.txt index 85c52fb..5d66d72 100644 --- a/source/data/locales/ru_KZ.txt +++ b/source/data/locales/ru_KZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ru_KZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ru_MD.txt b/source/data/locales/ru_MD.txt index 688c61c..d674bbc 100644 --- a/source/data/locales/ru_MD.txt +++ b/source/data/locales/ru_MD.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ru_MD{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ru_RU.txt b/source/data/locales/ru_RU.txt index 5c2a23c..d023d79 100644 --- a/source/data/locales/ru_RU.txt +++ b/source/data/locales/ru_RU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ru_RU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ru_UA.txt b/source/data/locales/ru_UA.txt index a8e6a15..ed6e77d 100644 --- a/source/data/locales/ru_UA.txt +++ b/source/data/locales/ru_UA.txt @@ -4,7 +4,7 @@ ru_UA{ NumberElements{ minimumGroupingDigits{"2"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rw.txt b/source/data/locales/rw.txt index 7507ee0..56a8a8f 100644 --- a/source/data/locales/rw.txt +++ b/source/data/locales/rw.txt @@ -31,7 +31,7 @@ rw{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rw_RW.txt b/source/data/locales/rw_RW.txt index 56f8864..4420ad9 100644 --- a/source/data/locales/rw_RW.txt +++ b/source/data/locales/rw_RW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License rw_RW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/rwk.txt b/source/data/locales/rwk.txt index b658eef..cb33ef8 100644 --- a/source/data/locales/rwk.txt +++ b/source/data/locales/rwk.txt @@ -11,7 +11,7 @@ rwk{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/rwk_TZ.txt b/source/data/locales/rwk_TZ.txt index a9dcefd..1ef6afe 100644 --- a/source/data/locales/rwk_TZ.txt +++ b/source/data/locales/rwk_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License rwk_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sah.txt b/source/data/locales/sah.txt index 4b0059b..15d137d 100644 --- a/source/data/locales/sah.txt +++ b/source/data/locales/sah.txt @@ -163,7 +163,7 @@ sah{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.27.87"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sah_RU.txt b/source/data/locales/sah_RU.txt index 7db1283..83f1bde 100644 --- a/source/data/locales/sah_RU.txt +++ b/source/data/locales/sah_RU.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sah_RU{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/saq.txt b/source/data/locales/saq.txt index 6243ec2..0287914 100644 --- a/source/data/locales/saq.txt +++ b/source/data/locales/saq.txt @@ -12,7 +12,7 @@ saq{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/saq_KE.txt b/source/data/locales/saq_KE.txt index 2097b13..c2085bf 100644 --- a/source/data/locales/saq_KE.txt +++ b/source/data/locales/saq_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License saq_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sbp.txt b/source/data/locales/sbp.txt index c9551b8..411b547 100644 --- a/source/data/locales/sbp.txt +++ b/source/data/locales/sbp.txt @@ -17,7 +17,7 @@ sbp{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sbp_TZ.txt b/source/data/locales/sbp_TZ.txt index 0fa45c3..bc9f302 100644 --- a/source/data/locales/sbp_TZ.txt +++ b/source/data/locales/sbp_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sbp_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/se.txt b/source/data/locales/se.txt index e6e81f4..bfea3a9 100644 --- a/source/data/locales/se.txt +++ b/source/data/locales/se.txt @@ -165,7 +165,7 @@ se{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/se_FI.txt b/source/data/locales/se_FI.txt index 38d5bd1..5303abb 100644 --- a/source/data/locales/se_FI.txt +++ b/source/data/locales/se_FI.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License se_FI{ - Version{"2.1.27.78"} + Version{"2.1.31.33"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/se_NO.txt b/source/data/locales/se_NO.txt index dccd6de..0ab7c02 100644 --- a/source/data/locales/se_NO.txt +++ b/source/data/locales/se_NO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License se_NO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/se_SE.txt b/source/data/locales/se_SE.txt index 8ed5b42..8cd1231 100644 --- a/source/data/locales/se_SE.txt +++ b/source/data/locales/se_SE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License se_SE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/seh.txt b/source/data/locales/seh.txt index 2bcee9e..4e4330e 100644 --- a/source/data/locales/seh.txt +++ b/source/data/locales/seh.txt @@ -17,7 +17,7 @@ seh{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/seh_MZ.txt b/source/data/locales/seh_MZ.txt index 3e1a5df..9836fd7 100644 --- a/source/data/locales/seh_MZ.txt +++ b/source/data/locales/seh_MZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License seh_MZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ses.txt b/source/data/locales/ses.txt index 23688e8..b59a4f4 100644 --- a/source/data/locales/ses.txt +++ b/source/data/locales/ses.txt @@ -14,7 +14,7 @@ ses{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ses_ML.txt b/source/data/locales/ses_ML.txt index 135f5bd..6ee0aec 100644 --- a/source/data/locales/ses_ML.txt +++ b/source/data/locales/ses_ML.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ses_ML{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sg.txt b/source/data/locales/sg.txt index 5dd1137..316b1d6 100644 --- a/source/data/locales/sg.txt +++ b/source/data/locales/sg.txt @@ -15,7 +15,7 @@ sg{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sg_CF.txt b/source/data/locales/sg_CF.txt index de3e492..e1a1f71 100644 --- a/source/data/locales/sg_CF.txt +++ b/source/data/locales/sg_CF.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sg_CF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/shi.txt b/source/data/locales/shi.txt index 193133c..52c3d54 100644 --- a/source/data/locales/shi.txt +++ b/source/data/locales/shi.txt @@ -14,7 +14,7 @@ shi{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/shi_Latn.txt b/source/data/locales/shi_Latn.txt index a2edf44..54d9c52 100644 --- a/source/data/locales/shi_Latn.txt +++ b/source/data/locales/shi_Latn.txt @@ -16,7 +16,7 @@ shi_Latn{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/shi_Latn_MA.txt b/source/data/locales/shi_Latn_MA.txt index 05d7980..b77a991 100644 --- a/source/data/locales/shi_Latn_MA.txt +++ b/source/data/locales/shi_Latn_MA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Latn_MA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/shi_Tfng.txt b/source/data/locales/shi_Tfng.txt index 22785f4..2db194b 100644 --- a/source/data/locales/shi_Tfng.txt +++ b/source/data/locales/shi_Tfng.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Tfng{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/shi_Tfng_MA.txt b/source/data/locales/shi_Tfng_MA.txt index 591ddc7..b7a021d 100644 --- a/source/data/locales/shi_Tfng_MA.txt +++ b/source/data/locales/shi_Tfng_MA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Tfng_MA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/si.txt b/source/data/locales/si.txt index a35ff51..49f9872 100644 --- a/source/data/locales/si.txt +++ b/source/data/locales/si.txt @@ -206,10 +206,19 @@ si{ timeSeparator{"."} } } + minimalPairs{ + ordinal{ + other{"{0} වන හැරවුම දකුණට"} + } + plural{ + one{"{0} පොතක් ඇත. එය කියවීමි."} + other{"පොත් {0}ක් ඇත. ඒවා කියවීමි."} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.33.28"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/si_LK.txt b/source/data/locales/si_LK.txt index 1135591..b716329 100644 --- a/source/data/locales/si_LK.txt +++ b/source/data/locales/si_LK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License si_LK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sk.txt b/source/data/locales/sk.txt index c46dbfe..5fed40b 100644 --- a/source/data/locales/sk.txt +++ b/source/data/locales/sk.txt @@ -272,10 +272,21 @@ sk{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Na {0}. križovatke odbočte doprava."} + } + plural{ + few{"{0} dni"} + many{"{0} dňa"} + one{"{0} deň"} + other{"{0} dní"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sk_SK.txt b/source/data/locales/sk_SK.txt index eaefd1a..e8c63e1 100644 --- a/source/data/locales/sk_SK.txt +++ b/source/data/locales/sk_SK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sk_SK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sl.txt b/source/data/locales/sl.txt index deb64b8..e4f3763 100644 --- a/source/data/locales/sl.txt +++ b/source/data/locales/sl.txt @@ -262,7 +262,7 @@ sl{ group{"."} infinity{"∞"} list{";"} - minusSign{"–"} + minusSign{"−"} nan{"NaN"} perMille{"‰"} percentSign{"%"} @@ -271,10 +271,21 @@ sl{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"V {0}. križišču zavijte desno."} + } + plural{ + few{"{0} ure"} + one{"{0} ura"} + other{"{0} ur"} + two{"{0} uri"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sl_SI.txt b/source/data/locales/sl_SI.txt index 5d0f70c..8d5f82a 100644 --- a/source/data/locales/sl_SI.txt +++ b/source/data/locales/sl_SI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sl_SI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/smn.txt b/source/data/locales/smn.txt index ba9b302..84960f6 100644 --- a/source/data/locales/smn.txt +++ b/source/data/locales/smn.txt @@ -97,7 +97,7 @@ smn{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/smn_FI.txt b/source/data/locales/smn_FI.txt index f9e1440..8f651d8 100644 --- a/source/data/locales/smn_FI.txt +++ b/source/data/locales/smn_FI.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License smn_FI{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sn.txt b/source/data/locales/sn.txt index 53b0245..3c55cbc 100644 --- a/source/data/locales/sn.txt +++ b/source/data/locales/sn.txt @@ -32,7 +32,7 @@ sn{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sn_ZW.txt b/source/data/locales/sn_ZW.txt index 6480fa5..8b6a348 100644 --- a/source/data/locales/sn_ZW.txt +++ b/source/data/locales/sn_ZW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sn_ZW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/so.txt b/source/data/locales/so.txt index 2110401..90e1219 100644 --- a/source/data/locales/so.txt +++ b/source/data/locales/so.txt @@ -10,7 +10,7 @@ so{ patternsLong{ decimalFormat{ 1000{ - one{"Kun"} + one{"0K"} other{"0K"} } 10000{ @@ -29,7 +29,7 @@ so{ } } } - Version{"2.1.27.78"} + Version{"2.1.33.76"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/so_DJ.txt b/source/data/locales/so_DJ.txt index 0327421..8436049 100644 --- a/source/data/locales/so_DJ.txt +++ b/source/data/locales/so_DJ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License so_DJ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/so_ET.txt b/source/data/locales/so_ET.txt index 1727964..20a9611 100644 --- a/source/data/locales/so_ET.txt +++ b/source/data/locales/so_ET.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License so_ET{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/so_KE.txt b/source/data/locales/so_KE.txt index 10f66a1..e0775cb 100644 --- a/source/data/locales/so_KE.txt +++ b/source/data/locales/so_KE.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License so_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/so_SO.txt b/source/data/locales/so_SO.txt index fc6b24f..02860c7 100644 --- a/source/data/locales/so_SO.txt +++ b/source/data/locales/so_SO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License so_SO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sq.txt b/source/data/locales/sq.txt index e40c039..1e10b43 100644 --- a/source/data/locales/sq.txt +++ b/source/data/locales/sq.txt @@ -205,10 +205,21 @@ sq{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + many{"Merrni kthesën e {0}-t në të djathtë."} + one{"Merrni kthesën e {0}-rë në të djathtë."} + other{"Merrni kthesën e {0}-të në të djathtë."} + } + plural{ + one{"{0} libër"} + other{"{0} libra"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sq_AL.txt b/source/data/locales/sq_AL.txt index 7062565..61b9457 100644 --- a/source/data/locales/sq_AL.txt +++ b/source/data/locales/sq_AL.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sq_AL{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sq_MK.txt b/source/data/locales/sq_MK.txt index fdc96bb..4f32aa8 100644 --- a/source/data/locales/sq_MK.txt +++ b/source/data/locales/sq_MK.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sq_MK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/sq_XK.txt b/source/data/locales/sq_XK.txt index cc4e136..c0d40dd 100644 --- a/source/data/locales/sq_XK.txt +++ b/source/data/locales/sq_XK.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sq_XK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/sr.txt b/source/data/locales/sr.txt index b502010..e3c54e6 100644 --- a/source/data/locales/sr.txt +++ b/source/data/locales/sr.txt @@ -230,13 +230,24 @@ sr{ percentSign{"%"} plusSign{"+"} superscriptingExponent{"×"} - timeSeparator{"."} + timeSeparator{":"} + } + } + minimalPairs{ + ordinal{ + other{"Скрените у {0}. десно."} + } + plural{ + few{"{0} сата"} + many{"{0} сати"} + one{"{0} сат"} + other{"{0} сати"} } } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.73"} calendar{ buddhist{ eras{ @@ -311,8 +322,8 @@ sr{ GyMMMEd{"E, d. MMM y. G"} GyMMMd{"d. MMM y. G"} H{"HH"} - Hm{"HH.mm"} - Hms{"HH.mm.ss"} + Hm{"HH:mm"} + Hms{"HH:mm:ss"} M{"L"} MEd{"E, d.M."} MMM{"LLL"} @@ -325,9 +336,9 @@ sr{ Md{"d.M."} d{"d"} h{"hh a"} - hm{"hh.mm a"} - hms{"hh.mm.ss a"} - ms{"mm.ss"} + hm{"hh:mm a"} + hms{"hh:mm:ss a"} + ms{"mm:ss"} y{"y. G"} yyyy{"y. G"} yyyyM{"M.y. GGGGG"} @@ -347,12 +358,12 @@ sr{ H{"HH–HH"} } Hm{ - H{"HH.mm–HH.mm"} - m{"HH.mm–HH.mm"} + H{"HH:mm–HH:mm"} + m{"HH:mm–HH:mm"} } Hmv{ - H{"HH.mm–HH.mm v"} - m{"HH.mm–HH.mm v"} + H{"HH:mm–HH:mm v"} + m{"HH:mm–HH:mm v"} } Hv{ H{"HH–HH v"} @@ -388,14 +399,14 @@ sr{ h{"h–h a"} } hm{ - a{"h.mm a – h.mm a"} - h{"h.mm–h.mm a"} - m{"h.mm–h.mm a"} + a{"h:mm a – h:mm a"} + h{"h:mm–h:mm a"} + m{"h:mm–h:mm a"} } hmv{ - a{"h.mm a – h.mm a v"} - h{"h.mm–h.mm a v"} - m{"h.mm–h.mm a v"} + a{"h:mm a – h:mm a v"} + h{"h:mm–h:mm a v"} + m{"h:mm–h:mm a v"} } hv{ a{"h a – h a v"} @@ -682,12 +693,12 @@ sr{ H{"HH–HH"} } Hm{ - H{"HH.mm–HH.mm"} - m{"HH.mm–HH.mm"} + H{"HH:mm–HH:mm"} + m{"HH:mm–HH:mm"} } Hmv{ - H{"HH.mm–HH.mm v"} - m{"HH.mm–HH.mm v"} + H{"HH:mm–HH:mm v"} + m{"HH:mm–HH:mm v"} } Hv{ H{"HH–HH v"} @@ -723,14 +734,14 @@ sr{ h{"h–h a"} } hm{ - a{"h.mm a – h.mm a"} - h{"h.mm–h.mm a"} - m{"h.mm–h.mm a"} + a{"h:mm a – h:mm a"} + h{"h:mm–h:mm a"} + m{"h:mm–h:mm a"} } hmv{ - a{"h.mm a – h.mm a v"} - h{"h.mm–h.mm a v"} - m{"h.mm–h.mm a v"} + a{"h:mm a – h:mm a v"} + h{"h:mm–h:mm a v"} + m{"h:mm–h:mm a v"} } hv{ a{"h a – h a v"} diff --git a/source/data/locales/sr_Cyrl.txt b/source/data/locales/sr_Cyrl.txt index 0b50a55..2e18268 100644 --- a/source/data/locales/sr_Cyrl.txt +++ b/source/data/locales/sr_Cyrl.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sr_Cyrl_BA.txt b/source/data/locales/sr_Cyrl_BA.txt index d23cd7d..5ee4a5b 100644 --- a/source/data/locales/sr_Cyrl_BA.txt +++ b/source/data/locales/sr_Cyrl_BA.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl_BA{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sr_Cyrl_ME.txt b/source/data/locales/sr_Cyrl_ME.txt index c1b8d72..381e9b8 100644 --- a/source/data/locales/sr_Cyrl_ME.txt +++ b/source/data/locales/sr_Cyrl_ME.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl_ME{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sr_Cyrl_RS.txt b/source/data/locales/sr_Cyrl_RS.txt index 676c665..7d0223f 100644 --- a/source/data/locales/sr_Cyrl_RS.txt +++ b/source/data/locales/sr_Cyrl_RS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl_RS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sr_Cyrl_XK.txt b/source/data/locales/sr_Cyrl_XK.txt index a70717c..820fcc7 100644 --- a/source/data/locales/sr_Cyrl_XK.txt +++ b/source/data/locales/sr_Cyrl_XK.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl_XK{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sr_Latn.txt b/source/data/locales/sr_Latn.txt index 24111d6..cddcd6e 100644 --- a/source/data/locales/sr_Latn.txt +++ b/source/data/locales/sr_Latn.txt @@ -231,13 +231,24 @@ sr_Latn{ percentSign{"%"} plusSign{"+"} superscriptingExponent{"×"} - timeSeparator{"."} + timeSeparator{":"} + } + } + minimalPairs{ + ordinal{ + other{"Skrenite u {0}. desno."} + } + plural{ + few{"{0} sata"} + many{"{0} sati"} + one{"{0} sat"} + other{"{0} sati"} } } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.33"} + Version{"2.1.32.73"} calendar{ buddhist{ eras{ @@ -312,8 +323,8 @@ sr_Latn{ GyMMMEd{"E, d. MMM y. G"} GyMMMd{"d. MMM y. G"} H{"HH"} - Hm{"HH.mm"} - Hms{"HH.mm.ss"} + Hm{"HH:mm"} + Hms{"HH:mm:ss"} M{"L"} MEd{"E, d.M."} MMM{"LLL"} @@ -326,9 +337,9 @@ sr_Latn{ Md{"d.M."} d{"d"} h{"hh a"} - hm{"hh.mm a"} - hms{"hh.mm.ss a"} - ms{"mm.ss"} + hm{"hh:mm a"} + hms{"hh:mm:ss a"} + ms{"mm:ss"} y{"y. G"} yyyy{"y. G"} yyyyM{"M.y. GGGGG"} @@ -348,12 +359,12 @@ sr_Latn{ H{"HH–HH"} } Hm{ - H{"HH.mm–HH.mm"} - m{"HH.mm–HH.mm"} + H{"HH:mm–HH:mm"} + m{"HH:mm–HH:mm"} } Hmv{ - H{"HH.mm–HH.mm v"} - m{"HH.mm–HH.mm v"} + H{"HH:mm–HH:mm v"} + m{"HH:mm–HH:mm v"} } Hv{ H{"HH–HH v"} @@ -389,14 +400,14 @@ sr_Latn{ h{"h–h a"} } hm{ - a{"h.mm a – h.mm a"} - h{"h.mm–h.mm a"} - m{"h.mm–h.mm a"} + a{"h:mm a – h:mm a"} + h{"h:mm–h:mm a"} + m{"h:mm–h:mm a"} } hmv{ - a{"h.mm a – h.mm a v"} - h{"h.mm–h.mm a v"} - m{"h.mm–h.mm a v"} + a{"h:mm a – h:mm a v"} + h{"h:mm–h:mm a v"} + m{"h:mm–h:mm a v"} } hv{ a{"h a – h a v"} @@ -683,12 +694,12 @@ sr_Latn{ H{"HH–HH"} } Hm{ - H{"HH.mm–HH.mm"} - m{"HH.mm–HH.mm"} + H{"HH:mm–HH:mm"} + m{"HH:mm–HH:mm"} } Hmv{ - H{"HH.mm–HH.mm v"} - m{"HH.mm–HH.mm v"} + H{"HH:mm–HH:mm v"} + m{"HH:mm–HH:mm v"} } Hv{ H{"HH–HH v"} @@ -724,14 +735,14 @@ sr_Latn{ h{"h–h a"} } hm{ - a{"h.mm a – h.mm a"} - h{"h.mm–h.mm a"} - m{"h.mm–h.mm a"} + a{"h:mm a – h:mm a"} + h{"h:mm–h:mm a"} + m{"h:mm–h:mm a"} } hmv{ - a{"h.mm a – h.mm a v"} - h{"h.mm–h.mm a v"} - m{"h.mm–h.mm a v"} + a{"h:mm a – h:mm a v"} + h{"h:mm–h:mm a v"} + m{"h:mm–h:mm a v"} } hv{ a{"h a – h a v"} diff --git a/source/data/locales/sr_Latn_BA.txt b/source/data/locales/sr_Latn_BA.txt index 1f7e08d..fe24051 100644 --- a/source/data/locales/sr_Latn_BA.txt +++ b/source/data/locales/sr_Latn_BA.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Latn_BA{ - Version{"2.1.29.33"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sr_Latn_ME.txt b/source/data/locales/sr_Latn_ME.txt index 6e41b02..ca00cb2 100644 --- a/source/data/locales/sr_Latn_ME.txt +++ b/source/data/locales/sr_Latn_ME.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Latn_ME{ - Version{"2.1.29.33"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sr_Latn_RS.txt b/source/data/locales/sr_Latn_RS.txt index 62df0de..dbfd1b6 100644 --- a/source/data/locales/sr_Latn_RS.txt +++ b/source/data/locales/sr_Latn_RS.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Latn_RS{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sr_Latn_XK.txt b/source/data/locales/sr_Latn_XK.txt index 72dfda9..35aca46 100644 --- a/source/data/locales/sr_Latn_XK.txt +++ b/source/data/locales/sr_Latn_XK.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Latn_XK{ - Version{"2.1.29.33"} + Version{"2.1.31.33"} calendar{ generic{ intervalFormats{ diff --git a/source/data/locales/sv.txt b/source/data/locales/sv.txt index 1efb155..a8e0518 100644 --- a/source/data/locales/sv.txt +++ b/source/data/locales/sv.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sv{ - AuxExemplarCharacters{"[á â ã ā ç ë í î ï ī ñ ó ú ÿ ü æ ø]"} + AuxExemplarCharacters{"[á â ã ā ç è ë í î ï ī ñ ó ú ÿ ü æ ø]"} Ellipsis{ final{"{0}…"} initial{"…{0}"} @@ -216,10 +216,20 @@ sv{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Ta {0}:a svängen till höger"} + other{"Ta {0}:e svängen till höger"} + } + plural{ + one{"om {0} dag"} + other{"om {0} dagar"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/sv_AX.txt b/source/data/locales/sv_AX.txt index b693a9d..f71e3c6 100644 --- a/source/data/locales/sv_AX.txt +++ b/source/data/locales/sv_AX.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sv_AX{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sv_FI.txt b/source/data/locales/sv_FI.txt index ce9be45..f6765b4 100644 --- a/source/data/locales/sv_FI.txt +++ b/source/data/locales/sv_FI.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sv_FI{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/sv_SE.txt b/source/data/locales/sv_SE.txt index 8d04d74..365ee3d 100644 --- a/source/data/locales/sv_SE.txt +++ b/source/data/locales/sv_SE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sv_SE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sw.txt b/source/data/locales/sw.txt index 9a97202..ea09319 100644 --- a/source/data/locales/sw.txt +++ b/source/data/locales/sw.txt @@ -29,154 +29,154 @@ sw{ patternsLong{ decimalFormat{ 1000{ - one{"Elfu 0"} - other{"Elfu 0"} + one{"Elfu 0;Elfu -0"} + other{"Elfu 0;Elfu -0"} } 10000{ - one{"Elfu 00"} - other{"Elfu 00"} + one{"Elfu 00;Elfu -00"} + other{"Elfu 00;Elfu -00"} } 100000{ - one{"Elfu 000"} - other{"Elfu 000"} + one{"Elfu 000;Elfu -000"} + other{"Elfu 000;Elfu -000"} } 1000000{ - one{"Milioni 0"} - other{"Milioni 0"} + one{"Milioni 0;Milioni -0"} + other{"Milioni 0;Milioni -0"} } 10000000{ - one{"Milioni 00"} - other{"Milioni 00"} + one{"Milioni 00;Milioni -00"} + other{"Milioni 00;Milioni -00"} } 100000000{ - one{"Milioni 000"} - other{"Milioni 000"} + one{"Milioni 000;Milioni -000"} + other{"Milioni 000;Milioni -000"} } 1000000000{ - one{"Bilioni 0"} - other{"Bilioni 0"} + one{"Bilioni 0;Bilioni -0"} + other{"Bilioni 0;Bilioni -0"} } 10000000000{ - one{"Bilioni 00"} - other{"Bilioni 00"} + one{"Bilioni 00;Bilioni -00"} + other{"Bilioni 00;Bilioni -00"} } 100000000000{ - one{"Bilioni 000"} - other{"Bilioni 000"} + one{"Bilioni 000;Bilioni -000"} + other{"Bilioni 000;Bilioni -000"} } 1000000000000{ - one{"Trilioni 0"} - other{"Trilioni 0"} + one{"Trilioni 0;Trilioni -0"} + other{"Trilioni 0;Trilioni -0"} } 10000000000000{ - one{"Trilioni 00"} - other{"Trilioni 00"} + one{"Trilioni 00;Trilioni -00"} + other{"Trilioni 00;Trilioni -00"} } 100000000000000{ - one{"Trilioni 000"} - other{"Trilioni 000"} + one{"Trilioni 000;Trilioni -000"} + other{"Trilioni 000;Trilioni -000"} } } } patternsShort{ currencyFormat{ 1000{ - one{"¤elfu 0"} - other{"¤elfu 0"} + one{"¤elfu 0;¤elfu -0"} + other{"¤elfu 0;¤elfu -0"} } 10000{ - one{"¤elfu 00"} - other{"¤elfu 00"} + one{"¤elfu 00;¤elfu -00"} + other{"¤elfu 00;¤elfu -00"} } 100000{ - one{"¤laki 000"} - other{"¤laki 000"} + one{"¤laki 000;¤laki -000"} + other{"¤laki 000;¤laki -000"} } 1000000{ - one{"¤M0"} - other{"¤M0"} + one{"¤M0;¤M-0"} + other{"¤M0;¤M-0"} } 10000000{ - one{"¤M00"} - other{"¤M00"} + one{"¤M00;¤M-00"} + other{"¤M00;¤M-00"} } 100000000{ - one{"¤M000"} - other{"¤M000"} + one{"¤M000;¤M-000"} + other{"¤M000;¤M-000"} } 1000000000{ - one{"¤B0"} - other{"¤B0"} + one{"¤B0;¤B-0"} + other{"¤B0;¤B-0"} } 10000000000{ - one{"¤B00"} - other{"¤B00"} + one{"¤B00;¤B-00"} + other{"¤B00;¤B-00"} } 100000000000{ - one{"¤B000"} - other{"¤B000"} + one{"¤B000;¤B-000"} + other{"¤B000;¤B-000"} } 1000000000000{ - one{"¤T0"} - other{"¤T0"} + one{"¤T0;¤T-0"} + other{"¤T0;¤T-0"} } 10000000000000{ - one{"¤T00"} - other{"¤T00"} + one{"¤T00;¤T-00"} + other{"¤T00;¤T-00"} } 100000000000000{ - one{"¤T000"} - other{"¤T000"} + one{"¤T000;¤T-000"} + other{"¤T000;¤T-000"} } } decimalFormat{ 1000{ - one{"elfu 0"} - other{"elfu 0"} + one{"elfu 0;elfu -0"} + other{"elfu 0;elfu -0"} } 10000{ - one{"elfu 00"} - other{"elfu 00"} + one{"elfu 00;elfu -00"} + other{"elfu 00;elfu -00"} } 100000{ - one{"elfu 000"} - other{"elfu 000"} + one{"elfu 000;elfu -000"} + other{"elfu 000;elfu -000"} } 1000000{ - one{"M0"} - other{"M0"} + one{"M0;M-0"} + other{"M0;M-0"} } 10000000{ - one{"M00"} - other{"M00"} + one{"M00;M-00"} + other{"M00;M-00"} } 100000000{ - one{"M000"} - other{"M000"} + one{"M000;M-000"} + other{"M000;M-000"} } 1000000000{ - one{"B0"} - other{"B0"} + one{"B0;B-0"} + other{"B0;B-0"} } 10000000000{ - one{"B00"} - other{"B00"} + one{"B00;B-00"} + other{"B00;B-00"} } 100000000000{ - one{"B000"} - other{"B000"} + one{"B000;B-000"} + other{"B000;B-000"} } 1000000000000{ - one{"T0"} - other{"T0"} + one{"T0;T-0"} + other{"T0;T-0"} } 10000000000000{ - one{"T00"} - other{"T00"} + one{"T00;T-00"} + other{"T00;T-00"} } 100000000000000{ - one{"T000"} - other{"T000"} + one{"T000;T-000"} + other{"T000;T-000"} } } } @@ -195,10 +195,19 @@ sw{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Chukua mpinduko wa {0} kulia."} + } + plural{ + one{"siku {0} iliyopita"} + other{"siku {0} zilizopita"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.33.73"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sw_CD.txt b/source/data/locales/sw_CD.txt index 074975d..92bab87 100644 --- a/source/data/locales/sw_CD.txt +++ b/source/data/locales/sw_CD.txt @@ -11,7 +11,7 @@ sw_CD{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ availableFormats{ diff --git a/source/data/locales/sw_KE.txt b/source/data/locales/sw_KE.txt index 3ba7866..0464c35 100644 --- a/source/data/locales/sw_KE.txt +++ b/source/data/locales/sw_KE.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sw_KE{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/sw_TZ.txt b/source/data/locales/sw_TZ.txt index e3dd777..c9c96ae 100644 --- a/source/data/locales/sw_TZ.txt +++ b/source/data/locales/sw_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sw_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/sw_UG.txt b/source/data/locales/sw_UG.txt index b18eaf1..341bdf9 100644 --- a/source/data/locales/sw_UG.txt +++ b/source/data/locales/sw_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sw_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ta.txt b/source/data/locales/ta.txt index cbcdd9e..9a9927e 100644 --- a/source/data/locales/ta.txt +++ b/source/data/locales/ta.txt @@ -202,6 +202,15 @@ ta{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}வது வலது திருப்பத்தை எடு."} + } + plural{ + one{"{0} நாள்"} + other{"{0} நாட்கள்"} + } + } minimumGroupingDigits{"1"} native{"tamldec"} tamldec{ @@ -225,7 +234,7 @@ ta{ } traditional{"taml"} } - Version{"2.1.28.79"} + Version{"2.1.32.4"} calendar{ chinese{ DateTimePatterns{ diff --git a/source/data/locales/ta_IN.txt b/source/data/locales/ta_IN.txt index bf8d3d4..bb765c8 100644 --- a/source/data/locales/ta_IN.txt +++ b/source/data/locales/ta_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ta_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ta_LK.txt b/source/data/locales/ta_LK.txt index c4854d4..6704eb0 100644 --- a/source/data/locales/ta_LK.txt +++ b/source/data/locales/ta_LK.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ta_LK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/ta_MY.txt b/source/data/locales/ta_MY.txt index 6d54270..4f84bf9 100644 --- a/source/data/locales/ta_MY.txt +++ b/source/data/locales/ta_MY.txt @@ -10,5 +10,5 @@ ta_MY{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ta_SG.txt b/source/data/locales/ta_SG.txt index d8f2715..def1605 100644 --- a/source/data/locales/ta_SG.txt +++ b/source/data/locales/ta_SG.txt @@ -10,5 +10,5 @@ ta_SG{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/te.txt b/source/data/locales/te.txt index 690b603..421a0f6 100644 --- a/source/data/locales/te.txt +++ b/source/data/locales/te.txt @@ -204,6 +204,15 @@ te{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}వ కుడి మలుపు తీసుకోండి."} + } + plural{ + one{"{0} రోజు"} + other{"{0} రోజులు"} + } + } minimumGroupingDigits{"1"} native{"telu"} telu{ @@ -228,7 +237,7 @@ te{ } } } - Version{"2.1.28.79"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/te_IN.txt b/source/data/locales/te_IN.txt index 38e26ee..0ec2d2a 100644 --- a/source/data/locales/te_IN.txt +++ b/source/data/locales/te_IN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License te_IN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/teo.txt b/source/data/locales/teo.txt index e67ce3d..d44e8bf 100644 --- a/source/data/locales/teo.txt +++ b/source/data/locales/teo.txt @@ -12,7 +12,7 @@ teo{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/teo_KE.txt b/source/data/locales/teo_KE.txt index 6bb77cb..eff4185 100644 --- a/source/data/locales/teo_KE.txt +++ b/source/data/locales/teo_KE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License teo_KE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/teo_UG.txt b/source/data/locales/teo_UG.txt index 1852ad9..b987f93 100644 --- a/source/data/locales/teo_UG.txt +++ b/source/data/locales/teo_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License teo_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/th.txt b/source/data/locales/th.txt index 0126369..d31c5b6 100644 --- a/source/data/locales/th.txt +++ b/source/data/locales/th.txt @@ -78,78 +78,78 @@ th{ patternsShort{ currencyFormat{ 1000{ - other{"¤0 พ'.'"} + other{"¤0K"} } 10000{ - other{"¤0 ม'.'"} + other{"¤00K"} } 100000{ - other{"¤0 ส'.'"} + other{"¤000K"} } 1000000{ - other{"¤0 ล'.'"} + other{"¤0M"} } 10000000{ - other{"¤00 ล'.'"} + other{"¤00M"} } 100000000{ - other{"¤000 ล'.'"} + other{"¤000M"} } 1000000000{ - other{"¤0 พ'.'ล'.'"} + other{"¤0B"} } 10000000000{ - other{"¤0 ม'.'ล'.'"} + other{"¤00B"} } 100000000000{ - other{"¤0 ส'.'ล'.'"} + other{"¤000B"} } 1000000000000{ - other{"¤0 ล'.'ล'.'"} + other{"¤0T"} } 10000000000000{ - other{"¤00 ล'.'ล'.'"} + other{"¤00T"} } 100000000000000{ - other{"¤000 ล'.'ล'.'"} + other{"¤000T"} } } decimalFormat{ 1000{ - other{"0 พ'.'"} + other{"0K"} } 10000{ - other{"0 ม'.'"} + other{"00K"} } 100000{ - other{"0 ส'.'"} + other{"000K"} } 1000000{ - other{"0 ล'.'"} + other{"0M"} } 10000000{ - other{"00 ล'.'"} + other{"00M"} } 100000000{ - other{"000 ล'.'"} + other{"000M"} } 1000000000{ - other{"0 พ'.'ล'.'"} + other{"0B"} } 10000000000{ - other{"0 ม'.'ล'.'"} + other{"00B"} } 100000000000{ - other{"0 ส'.'ล'.'"} + other{"000B"} } 1000000000000{ - other{"0 ล'.'ล'.'"} + other{"0T"} } 10000000000000{ - other{"00 ล'.'ล'.'"} + other{"00T"} } 100000000000000{ - other{"000 ล'.'ล'.'"} + other{"000T"} } } } @@ -168,10 +168,18 @@ th{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"เลี้ยวขวาที่ทางเลี้ยวที่ {0}"} + } + plural{ + other{"{0} วัน"} + } + } minimumGroupingDigits{"1"} native{"thai"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/th_TH.txt b/source/data/locales/th_TH.txt index 8f6a7a3..b06acb6 100644 --- a/source/data/locales/th_TH.txt +++ b/source/data/locales/th_TH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License th_TH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ti.txt b/source/data/locales/ti.txt index 66df2f4..7072d82 100644 --- a/source/data/locales/ti.txt +++ b/source/data/locales/ti.txt @@ -47,7 +47,7 @@ ti{ native{"latn"} traditional{"ethi"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ti_ER.txt b/source/data/locales/ti_ER.txt index 37ca4bb..eb10f4b 100644 --- a/source/data/locales/ti_ER.txt +++ b/source/data/locales/ti_ER.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ti_ER{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/ti_ET.txt b/source/data/locales/ti_ET.txt index 2d82c18..f4af622 100644 --- a/source/data/locales/ti_ET.txt +++ b/source/data/locales/ti_ET.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ti_ET{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/to.txt b/source/data/locales/to.txt index 1aa7abc..8488b49 100644 --- a/source/data/locales/to.txt +++ b/source/data/locales/to.txt @@ -131,7 +131,7 @@ to{ minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.27.98"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/to_TO.txt b/source/data/locales/to_TO.txt index 4d62e69..e8f96ad 100644 --- a/source/data/locales/to_TO.txt +++ b/source/data/locales/to_TO.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License to_TO{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/tr.txt b/source/data/locales/tr.txt index 07eeeb7..5cda648 100644 --- a/source/data/locales/tr.txt +++ b/source/data/locales/tr.txt @@ -203,10 +203,19 @@ tr{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}. sağdan dönün."} + } + plural{ + one{"Sepetinizde {0} X var. Bunu almak istiyor musunuz?"} + other{"Sepetinizde {0} X var. Bunları almak istiyor musunuz?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/tr_CY.txt b/source/data/locales/tr_CY.txt index 44b519d..fbe5e60 100644 --- a/source/data/locales/tr_CY.txt +++ b/source/data/locales/tr_CY.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License tr_CY{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ DateTimePatterns{ diff --git a/source/data/locales/tr_TR.txt b/source/data/locales/tr_TR.txt index bda5281..a805a98 100644 --- a/source/data/locales/tr_TR.txt +++ b/source/data/locales/tr_TR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License tr_TR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/twq.txt b/source/data/locales/twq.txt index 26c67c4..513701f 100644 --- a/source/data/locales/twq.txt +++ b/source/data/locales/twq.txt @@ -16,7 +16,7 @@ twq{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/twq_NE.txt b/source/data/locales/twq_NE.txt index 4a7d4d8..e506ace 100644 --- a/source/data/locales/twq_NE.txt +++ b/source/data/locales/twq_NE.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License twq_NE{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/tzm.txt b/source/data/locales/tzm.txt index 319351c..43b0812 100644 --- a/source/data/locales/tzm.txt +++ b/source/data/locales/tzm.txt @@ -15,7 +15,7 @@ tzm{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/tzm_MA.txt b/source/data/locales/tzm_MA.txt index 2c250c2..a23008a 100644 --- a/source/data/locales/tzm_MA.txt +++ b/source/data/locales/tzm_MA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License tzm_MA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ug.txt b/source/data/locales/ug.txt index 8a6748c..b7807e2 100644 --- a/source/data/locales/ug.txt +++ b/source/data/locales/ug.txt @@ -133,9 +133,15 @@ ug{ superscriptingExponent{"×"} } } + minimalPairs{ + plural{ + one{"{0}  كىتاب"} + other{"{0} بېلىق كۆردۈم ۋە ئۇنى يەۋەتتىم."} + } + } native{"arabext"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ eras{ diff --git a/source/data/locales/ug_CN.txt b/source/data/locales/ug_CN.txt index 98a87ab..6860a05 100644 --- a/source/data/locales/ug_CN.txt +++ b/source/data/locales/ug_CN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ug_CN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/uk.txt b/source/data/locales/uk.txt index 05c6e84..abc8d07 100644 --- a/source/data/locales/uk.txt +++ b/source/data/locales/uk.txt @@ -15,7 +15,7 @@ uk{ } ExemplarCharacters{"[а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ь ю я ʼ]"} ExemplarCharactersIndex{"[А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ю Я]"} - ExemplarCharactersPunctuation{"[\\- – , ; \\: ! ? . ' \u0022 “ „ « » ( ) \\[ \\] \\{ \\} § @ * / \\\\ №]"} + ExemplarCharactersPunctuation{"[\\- – , ; \\: ! ? . ' ’ \u0022 “ „ « » ( ) \\[ \\] \\{ \\} § @ * / \\\\ №]"} MoreInformation{"?"} NumberElements{ default{"latn"} @@ -272,10 +272,22 @@ uk{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + few{"{0}-я дивізія, {0}-є коло"} + other{"{0}-а дивізія, {0}-е коло"} + } + plural{ + few{"{0} дні"} + many{"{0} днів"} + one{"{0} день"} + other{"{0} дня"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.38"} + Version{"2.1.32.60"} calendar{ coptic{ monthNames{ diff --git a/source/data/locales/uk_UA.txt b/source/data/locales/uk_UA.txt index df32bfa..4e294e0 100644 --- a/source/data/locales/uk_UA.txt +++ b/source/data/locales/uk_UA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uk_UA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/ur.txt b/source/data/locales/ur.txt index 6217fe2..3080480 100644 --- a/source/data/locales/ur.txt +++ b/source/data/locales/ur.txt @@ -227,10 +227,19 @@ ur{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"دایاں موڑ نمبر {0} مڑیں۔"} + } + plural{ + one{"{0} گھنٹہ"} + other{"{0} گھنٹے"} + } + } minimumGroupingDigits{"1"} native{"arabext"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ generic{ DateTimePatterns{ @@ -276,7 +285,7 @@ ur{ yyyyMEd{"E، d/M/y G"} yyyyMMM{"MMM y G"} yyyyMMMEd{"E، d MMM، y G"} - yyyyMMMM{"G y MMMM"} + yyyyMMMM{"MMMM y G"} yyyyMMMd{"d MMM، y G"} yyyyMd{"d/M/y G"} yyyyQQQ{"QQQ y G"} @@ -448,7 +457,7 @@ ur{ yMEd{"E، d/M/y"} yMMM{"MMM y"} yMMMEd{"E، d MMM، y"} - yMMMM{"y MMMM"} + yMMMM{"MMMM y"} yMMMd{"d MMM، y"} yMd{"d/M/y"} yQQQ{"QQQ y"} diff --git a/source/data/locales/ur_IN.txt b/source/data/locales/ur_IN.txt index 93a6e25..0b2f6c9 100644 --- a/source/data/locales/ur_IN.txt +++ b/source/data/locales/ur_IN.txt @@ -14,7 +14,7 @@ ur_IN{ } } } - Version{"2.1.27.79"} + Version{"2.1.31.33"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/ur_PK.txt b/source/data/locales/ur_PK.txt index 593eb43..03a7aba 100644 --- a/source/data/locales/ur_PK.txt +++ b/source/data/locales/ur_PK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ur_PK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/uz.txt b/source/data/locales/uz.txt index 849da90..ba37a60 100644 --- a/source/data/locales/uz.txt +++ b/source/data/locales/uz.txt @@ -220,10 +220,19 @@ uz{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"{0}chi chorraxada oʼngga buriling."} + } + plural{ + one{"Savatingizda {0}X bor. Uni sotib olasizmi?"} + other{"Savatingizda {0}X bor. Ularni sotib olasizmi?"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.44"} + Version{"2.1.32.60"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/uz_Arab.txt b/source/data/locales/uz_Arab.txt index 3fe1bed..aced47d 100644 --- a/source/data/locales/uz_Arab.txt +++ b/source/data/locales/uz_Arab.txt @@ -27,7 +27,7 @@ uz_Arab{ } native{"arabext"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ gregorian{ dayNames{ diff --git a/source/data/locales/uz_Arab_AF.txt b/source/data/locales/uz_Arab_AF.txt index 98aee99..e4b7967 100644 --- a/source/data/locales/uz_Arab_AF.txt +++ b/source/data/locales/uz_Arab_AF.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Arab_AF{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ default{"persian"} } diff --git a/source/data/locales/uz_Cyrl.txt b/source/data/locales/uz_Cyrl.txt index 38eb8eb..976a5c1 100644 --- a/source/data/locales/uz_Cyrl.txt +++ b/source/data/locales/uz_Cyrl.txt @@ -164,7 +164,7 @@ uz_Cyrl{ } } } - Version{"2.1.27.98"} + Version{"2.1.31.86"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/uz_Cyrl_UZ.txt b/source/data/locales/uz_Cyrl_UZ.txt index 6d2c9f6..0debf66 100644 --- a/source/data/locales/uz_Cyrl_UZ.txt +++ b/source/data/locales/uz_Cyrl_UZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Cyrl_UZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/uz_Latn.txt b/source/data/locales/uz_Latn.txt index bdf99c4..fdd810c 100644 --- a/source/data/locales/uz_Latn.txt +++ b/source/data/locales/uz_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/uz_Latn_UZ.txt b/source/data/locales/uz_Latn_UZ.txt index 10499fb..0069ccc 100644 --- a/source/data/locales/uz_Latn_UZ.txt +++ b/source/data/locales/uz_Latn_UZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Latn_UZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/vai.txt b/source/data/locales/vai.txt index c63aad5..c5384ff 100644 --- a/source/data/locales/vai.txt +++ b/source/data/locales/vai.txt @@ -27,7 +27,7 @@ vai{ } native{"vaii"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/vai_Latn.txt b/source/data/locales/vai_Latn.txt index 414657f..be6e735 100644 --- a/source/data/locales/vai_Latn.txt +++ b/source/data/locales/vai_Latn.txt @@ -22,7 +22,7 @@ vai_Latn{ } native{"vaii"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/vai_Latn_LR.txt b/source/data/locales/vai_Latn_LR.txt index a356564..59e39ea 100644 --- a/source/data/locales/vai_Latn_LR.txt +++ b/source/data/locales/vai_Latn_LR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Latn_LR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/vai_Vaii.txt b/source/data/locales/vai_Vaii.txt index 38872b5..e66f0f3 100644 --- a/source/data/locales/vai_Vaii.txt +++ b/source/data/locales/vai_Vaii.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Vaii{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/vai_Vaii_LR.txt b/source/data/locales/vai_Vaii_LR.txt index 30c9f78..9aefce3 100644 --- a/source/data/locales/vai_Vaii_LR.txt +++ b/source/data/locales/vai_Vaii_LR.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Vaii_LR{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/vi.txt b/source/data/locales/vi.txt index a08cdb3..8fa9369 100644 --- a/source/data/locales/vi.txt +++ b/source/data/locales/vi.txt @@ -168,10 +168,20 @@ vi{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + one{"Rẽ vào lối rẽ thứ nhất bên phải."} + other{"Rẽ vào lối rẽ thứ {0} bên phải."} + } + plural{ + one{"Rẽ vào lối rẽ thứ nhất bên phải."} + other{"Rẽ vào lối rẽ thứ {0} bên phải."} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/vi_VN.txt b/source/data/locales/vi_VN.txt index 6bb46b4..43b4da3 100644 --- a/source/data/locales/vi_VN.txt +++ b/source/data/locales/vi_VN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vi_VN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/vun.txt b/source/data/locales/vun.txt index 3740856..42c4678 100644 --- a/source/data/locales/vun.txt +++ b/source/data/locales/vun.txt @@ -11,7 +11,7 @@ vun{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/vun_TZ.txt b/source/data/locales/vun_TZ.txt index 5d8d275..b6e01ac 100644 --- a/source/data/locales/vun_TZ.txt +++ b/source/data/locales/vun_TZ.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vun_TZ{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/wae.txt b/source/data/locales/wae.txt index 86e51fa..4ec4482 100644 --- a/source/data/locales/wae.txt +++ b/source/data/locales/wae.txt @@ -15,7 +15,7 @@ wae{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/wae_CH.txt b/source/data/locales/wae_CH.txt index 184e62c..67f3676 100644 --- a/source/data/locales/wae_CH.txt +++ b/source/data/locales/wae_CH.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License wae_CH{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/xog.txt b/source/data/locales/xog.txt index 3dcce2e..841dc76 100644 --- a/source/data/locales/xog.txt +++ b/source/data/locales/xog.txt @@ -10,7 +10,7 @@ xog{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/xog_UG.txt b/source/data/locales/xog_UG.txt index 43c14c2..21ab0f7 100644 --- a/source/data/locales/xog_UG.txt +++ b/source/data/locales/xog_UG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License xog_UG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/yav.txt b/source/data/locales/yav.txt index b05b478..3be826c 100644 --- a/source/data/locales/yav.txt +++ b/source/data/locales/yav.txt @@ -21,7 +21,7 @@ yav{ } } } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/yav_CM.txt b/source/data/locales/yav_CM.txt index 0f8eb26..7a57c8e 100644 --- a/source/data/locales/yav_CM.txt +++ b/source/data/locales/yav_CM.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License yav_CM{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/yi.txt b/source/data/locales/yi.txt index fc0257c..3c1aa2a 100644 --- a/source/data/locales/yi.txt +++ b/source/data/locales/yi.txt @@ -28,7 +28,7 @@ yi{ native{"latn"} traditional{"hebr"} } - Version{"2.1.27.97"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/yi_001.txt b/source/data/locales/yi_001.txt index 1e7c6ca..c45325b 100644 --- a/source/data/locales/yi_001.txt +++ b/source/data/locales/yi_001.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License yi_001{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/yo.txt b/source/data/locales/yo.txt index 6c5ff64..bbb7206 100644 --- a/source/data/locales/yo.txt +++ b/source/data/locales/yo.txt @@ -35,7 +35,7 @@ yo{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/yo_BJ.txt b/source/data/locales/yo_BJ.txt index 12c771e..d06ce38 100644 --- a/source/data/locales/yo_BJ.txt +++ b/source/data/locales/yo_BJ.txt @@ -5,7 +5,7 @@ yo_BJ{ "[a á à b d e é è ɛ {ɛ\u0301} {ɛ\u0300} f g {gb} h i í ì j k l m n o ó ò ɔ {ɔ" "\u0301} {ɔ\u0300} p r s {sh} t u ú ù w y]" } - Version{"2.1.29.54"} + Version{"2.1.31.33"} calendar{ gregorian{ AmPmMarkers{ diff --git a/source/data/locales/yo_NG.txt b/source/data/locales/yo_NG.txt index 5e1f0d5..ef97b8c 100644 --- a/source/data/locales/yo_NG.txt +++ b/source/data/locales/yo_NG.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License yo_NG{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/yue.txt b/source/data/locales/yue.txt index 2d116c6..abc5a1c 100644 --- a/source/data/locales/yue.txt +++ b/source/data/locales/yue.txt @@ -247,11 +247,19 @@ yue{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"第 {0} 本書"} + } + plural{ + other{"{0} 本書"} + } + } minimumGroupingDigits{"1"} native{"hanidec"} traditional{"hant"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/yue_HK.txt b/source/data/locales/yue_HK.txt index 246d841..2ad7ca8 100644 --- a/source/data/locales/yue_HK.txt +++ b/source/data/locales/yue_HK.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License yue_HK{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zgh.txt b/source/data/locales/zgh.txt index 25b5197..6cb32f6 100644 --- a/source/data/locales/zgh.txt +++ b/source/data/locales/zgh.txt @@ -31,7 +31,7 @@ zgh{ } minimumGroupingDigits{"1"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/zgh_MA.txt b/source/data/locales/zgh_MA.txt index 32ec1c0..1d9ed9d 100644 --- a/source/data/locales/zgh_MA.txt +++ b/source/data/locales/zgh_MA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zgh_MA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zh.txt b/source/data/locales/zh.txt index 13136bc..1cc5a21 100644 --- a/source/data/locales/zh.txt +++ b/source/data/locales/zh.txt @@ -1,7 +1,13 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh{ - AuxExemplarCharacters{"[仂 侣 傈 傣 僳 卑 卞 厘 吕 坝 堤 奎 屿 巽 撤 楔 楠 滕 瑚 甫 盲 碑 禄 粟 脚 艮 谬 钯 铂 锑 镑 魁]"} + AuxExemplarCharacters{ + "[仂 侣 傈 傣 僳 卑 卞 厘 吕 坝 堤 奎 屿 巽 撤 楔 楠 滕 瑚 甫 盲 碑 禄 粟 脚 艮 谬 钯 铂 锑 镑 魁 乒 乓 仓 伞 冥 凉" + " 刨 匕 厦 厨 呣 唇 啤 啮 喱 嗅 噘 噢 墟 妆 婴 媚 宅 寺 尬 尴 屑 巾 弓 彗 惊 戟 扔 扰 扳 抛 挂 捂 摇 撅 杆 杖 柜 柱" + " 栗 栽 桶 棍 棕 棺 榈 槟 橙 洒 浆 涌 淇 滚 滩 灾 烛 烟 焰 煎 犬 猫 瓢 皱 盆 盔 眨 眯 瞌 矿 祈 祭 祷 稻 竿 笼 筒 篷" + " 粮 纠 纬 缆 缎 耸 舔 舵 艇 芽 苜 苞 菇 菱 葫 葵 蒸 蓿 蔽 薯 蘑 蚂 蛛 蜗 蜘 蜡 蝎 蝴 螃 裹 谍 豚 账 跤 踪 躬 轴 辐" + " 迹 郁 鄙 酢 钉 钥 钮 铅 铛 锄 锚 锤 闺 阱 隧 雕 霾 靴 靶 鞠 颠 馏 驼 骆 髦 鲤 鲸 鳄 鸽]" + } Ellipsis{ final{"{0}…"} initial{"…{0}"} @@ -146,7 +152,7 @@ zh{ patternsLong{ decimalFormat{ 1000{ - other{"0千"} + other{"0"} } 10000{ other{"0万"} @@ -186,7 +192,7 @@ zh{ patternsShort{ currencyFormat{ 1000{ - other{"¤0千"} + other{"0"} } 10000{ other{"¤0万"} @@ -224,7 +230,7 @@ zh{ } decimalFormat{ 1000{ - other{"0千"} + other{"0"} } 10000{ other{"0万"} @@ -276,11 +282,19 @@ zh{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"在第 {0} 个路口右转。"} + } + plural{ + other{"{0} 天"} + } + } minimumGroupingDigits{"1"} native{"hanidec"} traditional{"hans"} } - Version{"2.1.29.84"} + Version{"2.1.33.94"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/zh_Hans.txt b/source/data/locales/zh_Hans.txt index c64cac5..1e311fc 100644 --- a/source/data/locales/zh_Hans.txt +++ b/source/data/locales/zh_Hans.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zh_Hans_CN.txt b/source/data/locales/zh_Hans_CN.txt index 14ddc17..9990427 100644 --- a/source/data/locales/zh_Hans_CN.txt +++ b/source/data/locales/zh_Hans_CN.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans_CN{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zh_Hans_HK.txt b/source/data/locales/zh_Hans_HK.txt index d8f8229..bf3dfaf 100644 --- a/source/data/locales/zh_Hans_HK.txt +++ b/source/data/locales/zh_Hans_HK.txt @@ -31,7 +31,7 @@ zh_Hans_HK{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/zh_Hans_MO.txt b/source/data/locales/zh_Hans_MO.txt index 5ea1f54..0ab64e6 100644 --- a/source/data/locales/zh_Hans_MO.txt +++ b/source/data/locales/zh_Hans_MO.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans_MO{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ chinese{ DateTimePatterns{ diff --git a/source/data/locales/zh_Hans_SG.txt b/source/data/locales/zh_Hans_SG.txt index 1058b3d..a5db5fb 100644 --- a/source/data/locales/zh_Hans_SG.txt +++ b/source/data/locales/zh_Hans_SG.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans_SG{ - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/zh_Hant.txt b/source/data/locales/zh_Hant.txt index 1b8ec8c..135b84f 100644 --- a/source/data/locales/zh_Hant.txt +++ b/source/data/locales/zh_Hant.txt @@ -4,7 +4,9 @@ zh_Hant{ %%Parent{"root"} AuxExemplarCharacters{ "[乍 仂 伏 佐 侶 僳 兆 兌 兹 别 券 勳 卑 卞 占 叶 堤 墎 壤 奥 孜 峇 嶼 巽 栗 楔 涅 渾 澎 燦 狄 琳 瑚 甫 碑 礁 芒 苗" - " 茨 蓬 蚩 蜀 裘 謬 酋 隴]" + " 茨 蓬 蚩 蜀 裘 謬 酋 隴 乳 划 匕 匙 匣 叉 吻 嘟 噘 妖 巾 帆 廁 廚 弋 弓 懸 戟 扳 捂 摔 暈 框 桶 桿 櫃 煎 燭 牡 皺" + " 盒 眨 眩 筒 簍 糰 紋 紗 纏 纜 羯 聳 肖 艇 虹 蛛 蜘 蝴 蝸 蠟 裙 豚 躬 釘 鈔 鈕 鉛 鎚 鎬 鐺 鑰 鑽 霄 鞠 骰 骷 髏 鯉" + " 鳶]" } Ellipsis{ final{"{0}…"} @@ -119,7 +121,7 @@ zh_Hant{ patternsLong{ decimalFormat{ 1000{ - other{"0千"} + other{"0"} } 10000{ other{"0萬"} @@ -159,7 +161,7 @@ zh_Hant{ patternsShort{ currencyFormat{ 1000{ - other{"¤0千"} + other{"0"} } 10000{ other{"¤0萬"} @@ -197,7 +199,7 @@ zh_Hant{ } decimalFormat{ 1000{ - other{"0千"} + other{"0"} } 10000{ other{"0萬"} @@ -249,10 +251,18 @@ zh_Hant{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"在第 {0} 個路口右轉。"} + } + plural{ + other{"{0} 日"} + } + } native{"hanidec"} traditional{"hant"} } - Version{"2.1.28.79"} + Version{"2.1.33.94"} calendar{ buddhist{ DateTimePatterns{ diff --git a/source/data/locales/zh_Hant_HK.txt b/source/data/locales/zh_Hant_HK.txt index a46edbb..d0ddf5d 100644 --- a/source/data/locales/zh_Hant_HK.txt +++ b/source/data/locales/zh_Hant_HK.txt @@ -91,7 +91,7 @@ zh_Hant_HK{ } } } - Version{"2.1.27.99"} + Version{"2.1.31.33"} calendar{ buddhist{ availableFormats{ diff --git a/source/data/locales/zh_Hant_MO.txt b/source/data/locales/zh_Hant_MO.txt index 9d2c5aa..9589854 100644 --- a/source/data/locales/zh_Hant_MO.txt +++ b/source/data/locales/zh_Hant_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hant_MO{ %%Parent{"zh_Hant_HK"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zh_Hant_TW.txt b/source/data/locales/zh_Hant_TW.txt index 48c2dc5..365603b 100644 --- a/source/data/locales/zh_Hant_TW.txt +++ b/source/data/locales/zh_Hant_TW.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hant_TW{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/locales/zu.txt b/source/data/locales/zu.txt index 065e71d..c0d35eb 100644 --- a/source/data/locales/zu.txt +++ b/source/data/locales/zu.txt @@ -203,10 +203,19 @@ zu{ timeSeparator{":"} } } + minimalPairs{ + ordinal{ + other{"Thatha indlela ejikela kwesokudla engu-{0}"} + } + plural{ + one{"{0} usuku"} + other{"{0} izinsuku"} + } + } minimumGroupingDigits{"1"} native{"latn"} } - Version{"2.1.29.22"} + Version{"2.1.31.74"} calendar{ generic{ DateTimePatterns{ diff --git a/source/data/locales/zu_ZA.txt b/source/data/locales/zu_ZA.txt index daab6cb..1db9f3a 100644 --- a/source/data/locales/zu_ZA.txt +++ b/source/data/locales/zu_ZA.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zu_ZA{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/makedata.mak b/source/data/makedata.mak index 83a2e8d..37efb00 100644 --- a/source/data/makedata.mak +++ b/source/data/makedata.mak @@ -12,8 +12,11 @@ ############################################################################## # Keep the following in sync with the version - see common/unicode/uvernum.h -U_ICUDATA_NAME=icudt58 +U_ICUDATA_NAME=icudt59 ############################################################################## +!IF "$(UWP)" == "UWP" +U_ICUDATA_NAME=icudt +!ENDIF U_ICUDATA_ENDIAN_SUFFIX=l UNICODE_VERSION=9.0 ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll @@ -119,10 +122,14 @@ ICUDATA=$(ICUP)\source\data # This is the same place that all of the other ICU DLLs go (the code-containing DLLs) # The lib file for the data DLL goes in $(DLL_OUTPUT)/../lib/ # -!IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug" -DLL_OUTPUT=$(ICUP)\bin64 +!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug" +DLL_OUTPUT=$(ICUP)\binARM$(UWP) +!ELSE IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug" +DLL_OUTPUT=$(ICUP)\bin64$(UWP) +!ELSE IF "$(UWP)" == "UWP" +DLL_OUTPUT=$(ICUP)\bin32$(UWP) !ELSE -DLL_OUTPUT=$(ICUP)\bin +DLL_OUTPUT=$(ICUP)\bin$(UWP) !ENDIF # @@ -147,14 +154,28 @@ TESTDATABLD=$(ICUP)\source\test\testdata\out\build # Directory under which all of the ICU data building tools live. # ICUTOOLS=$(ICUP)\source\tools +!MESSAGE ICU tools path is $(ICUTOOLS) + +# +# TOOLS CFG PATH +# ARM needs to use one of the other tools, so make sure to get an usable cfg path +# Since tools, particularly pkggen, have architecture built-in, we made x64 on +# Windows be machine-independent and use those tools. +# +CFGTOOLS=$(CFG) +!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug" +CFGTOOLS=x64\Release +!ENDIF +!MESSAGE ICU tools CFG subpath is $(CFGTOOLS) # The current ICU tools need to be in the path first. -!IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug" -PATH = $(ICUP)\bin64;$(PATH) -ICUPBIN=$(ICUP)\bin64 -!ELSE +# x86 uses x86, x64 and arm use x64 +!IF "$(CFG)" == "x86\Release" || "$(CFG)" == "x86\Debug" PATH = $(ICUP)\bin;$(PATH) ICUPBIN=$(ICUP)\bin +!ELSE +PATH = $(ICUP)\bin64;$(PATH) +ICUPBIN=$(ICUP)\bin64 !ENDIF @@ -492,6 +513,12 @@ SPREP_FILES = $(SPREP_SOURCE:.txt=.spp) # Common defines for both ways of building ICU's data library. COMMON_ICUDATA_DEPENDENCIES="$(ICUPBIN)\pkgdata.exe" "$(ICUTMP)\icudata.res" "$(ICUP)\source\stubdata\stubdatabuilt.txt" COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(ICUPKG) -T "$(ICUTMP)" -L $(U_ICUDATA_NAME) -d "$(ICUBLD_PKG)" -s . +!IF "$(UWP)" == "UWP" +COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -u +!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug" +COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -a +!ENDIF +!ENDIF ############################################################################# # @@ -505,6 +532,11 @@ COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $( ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat" @echo All targets are up to date +!IF "$(UWP)" == "UWP" + @if not exist "$(ICUMAKE)\..\..\commondata\" mkdir "$(ICUMAKE)\..\..\commondata\" + copy "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" "$(ICUMAKE)\..\..\commondata\" +!ENDIF + # The core Unicode properties files (uprops.icu, ucase.icu, ubidi.icu) # 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 and for getting the .c source files @@ -556,9 +588,9 @@ DEBUGUTILITIESDATA_DIR=main\tests\core\src\com\ibm\icu\dev\test\util DEBUGUTILITIESDATA_SRC=DebugUtilitiesData.java # Build DebugUtilitiesData.java -"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)" : {"$(ICUTOOLS)\gentest\$(CFG)"}gentest.exe +"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)" : {"$(ICUTOOLS)\gentest\$(CFGTOOLS)"}gentest.exe if not exist "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)" mkdir "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)" - "$(ICUTOOLS)\gentest\$(CFG)\gentest" -j -d"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)" + "$(ICUTOOLS)\gentest\$(CFGTOOLS)\gentest" -j -d"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)" ICU4J_DATA="$(ICUOUT)\icu4j\icudata.jar" "$(ICUOUT)\icu4j\testdata.jar" "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)" @@ -602,10 +634,10 @@ icu4j-data-install : # # testdata - nmake will invoke pkgdata, which will create testdata.dat # -"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe +"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFGTOOLS)"}genrb.exe @cd "$(TESTDATA)" @echo building testdata... - nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFG) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)" + nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFGTOOLS) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)" #invoke pkgdata for ICU common data # pkgdata will drop all output files (.dat, .dll, .lib) into the target (ICUBLD_PKG) directory. @@ -669,6 +701,7 @@ $(SPREP_FILES:.spp=.spp ) < - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B} - MakeFileProj - v140 - Makefile - false - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - .\x86\Release\ - .\x86\Release\ - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean all - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean - - $(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath) - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - .\x86\Debug\ - .\x86\Debug\ - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean all - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean - - $(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath) - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - .\x64\Release\ - .\x64\Release\ - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean all - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean - - $(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath) - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - .\x64\Debug\ - .\x64\Debug\ - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean all - NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean - - $(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath) - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - - - - .\out\tmp\x86\ReleaseBuildLog.html - - - - - .\out\tmp\x86\DebugBuildLog.html - - - - - .\out\tmp\x64\ReleaseBuildLog.html - - - - - .\out\tmp\x64\DebugBuildLog.html - - - - - - - - - - - - - - - - - - - {73c0a65b-d1f2-4de1-b3a6-15dad2c23f3d} - false - - - {dba4088d-f6f9-4f8f-8820-082a4765c16c} - false - - - {0178b127-6269-407d-b112-93877bb62776} - false - - - {c2b04507-2521-4801-bf0d-5fd79d6d518c} - false - - - {203ec78a-0531-43f0-a636-285439bde025} - false - - - {3d1246ae-1b32-479b-beca-aefa97be2321} - false - - - {73632960-b3a6-464d-83a3-4b43365f19b8} - false - - - {e4993e82-d68a-46ca-bae0-9d35e172e46f} - false - - - {eca6b435-b4fa-4f9f-bf95-f451d078fc47} - false - - - {c2be5000-7501-4e87-9724-b8d82494fae6} - false - - - {fdd3c4f2-9805-44eb-9a77-bc1c1c95b547} - false - - - {691ee0c0-dc57-4a48-8aee-8ed75eb3a057} - false - - - {a8d36f8d-09e6-4174-91c3-7beaa9c3f04f} - false - - - {8b41752b-5a52-41e4-b7e0-07921c0cc6bf} - false - - - {9d4211f7-2c77-439c-82f0-30a4e43ba569} - false - - - {c7891a65-80ab-4245-912e-5f1e17b0e6c4} - false - - - {d3065adb-8820-4cc7-9b6c-9510833961a3} - false - - - {97521d06-ec47-45d4-8bd0-9e16b3f93b2a} - false - - - {631c23ce-6c1d-4875-88f0-85e0a42b36ea} - false - - - {77c78066-746f-4ea6-b3fe-b8c8a4a97891} - false - - - {62d4b15d-7a90-4ecb-ba19-5e021d6a21bc} - false - - - {f5ad9738-1a3d-4906-b9c4-a7d9ce33dc2c} - false - - - {4c8454fe-81d3-4ca3-9927-29ba96f03dac} - false - - - {6b231032-3cb5-4eed-9210-810d666a23a0} - false - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B} + MakeFileProj + v140 + Makefile + false + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .\data\tmp\x86\ + .\data\build\ + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean + + $(NMakePreprocessorDefinitions) + $(NMakeIncludeSearchPath) + $(NMakeForcedIncludes) + $(NMakeAssemblySearchPath) + $(NMakeForcedUsingAssemblies) + .\data\tmp\x86\ + .\data\build\ + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean + + $(NMakePreprocessorDefinitions) + $(NMakeIncludeSearchPath) + $(NMakeForcedIncludes) + $(NMakeAssemblySearchPath) + $(NMakeForcedUsingAssemblies) + .\data\tmp\x64\ + .\data\build\ + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean + + $(NMakePreprocessorDefinitions) + $(NMakeIncludeSearchPath) + $(NMakeForcedIncludes) + $(NMakeAssemblySearchPath) + $(NMakeForcedUsingAssemblies) + .\data\tmp\x64\ + .\data\build\ + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean + + $(NMakePreprocessorDefinitions) + $(NMakeIncludeSearchPath) + $(NMakeForcedIncludes) + $(NMakeAssemblySearchPath) + $(NMakeForcedUsingAssemblies) + + + + .\out\tmp\x86\ReleaseBuildLog.html + + + + + .\out\tmp\x86\DebugBuildLog.html + + + + + .\out\tmp\x64\ReleaseBuildLog.html + + + + + .\out\tmp\x64\DebugBuildLog.html + + + + + + + + + + + + + + + + + + + {73c0a65b-d1f2-4de1-b3a6-15dad2c23f3d} + false + + + {dba4088d-f6f9-4f8f-8820-082a4765c16c} + false + + + {0178b127-6269-407d-b112-93877bb62776} + false + + + {c2b04507-2521-4801-bf0d-5fd79d6d518c} + false + + + {203ec78a-0531-43f0-a636-285439bde025} + false + + + {3d1246ae-1b32-479b-beca-aefa97be2321} + false + + + {73632960-b3a6-464d-83a3-4b43365f19b8} + false + + + {e4993e82-d68a-46ca-bae0-9d35e172e46f} + false + + + {eca6b435-b4fa-4f9f-bf95-f451d078fc47} + false + + + {c2be5000-7501-4e87-9724-b8d82494fae6} + false + + + {fdd3c4f2-9805-44eb-9a77-bc1c1c95b547} + false + + + {691ee0c0-dc57-4a48-8aee-8ed75eb3a057} + false + + + {a8d36f8d-09e6-4174-91c3-7beaa9c3f04f} + false + + + {8b41752b-5a52-41e4-b7e0-07921c0cc6bf} + false + + + {9d4211f7-2c77-439c-82f0-30a4e43ba569} + false + + + {c7891a65-80ab-4245-912e-5f1e17b0e6c4} + false + + + {d3065adb-8820-4cc7-9b6c-9510833961a3} + false + + + {97521d06-ec47-45d4-8bd0-9e16b3f93b2a} + false + + + {631c23ce-6c1d-4875-88f0-85e0a42b36ea} + false + + + {77c78066-746f-4ea6-b3fe-b8c8a4a97891} + false + + + {62d4b15d-7a90-4ecb-ba19-5e021d6a21bc} + false + + + {f5ad9738-1a3d-4906-b9c4-a7d9ce33dc2c} + false + + + {4c8454fe-81d3-4ca3-9927-29ba96f03dac} + false + + + {6b231032-3cb5-4eed-9210-810d666a23a0} + false + + + + + + \ No newline at end of file diff --git a/source/data/makedata_uwp.vcxproj b/source/data/makedata_uwp.vcxproj new file mode 100644 index 0000000..7d78872 --- /dev/null +++ b/source/data/makedata_uwp.vcxproj @@ -0,0 +1,137 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Debug + ARM + + + Release + Win32 + + + Release + x64 + + + Release + ARM + + + + {B1D53358-37BD-48BC-B27C-68BAF1E78508} + MakeFileProj + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + Makefile + false + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .\data\tmp\x86\ + .\data\tmp\x86\ + .\data\tmp\x64\ + .\data\tmp\x64\ + .\data\tmp\arm\ + .\data\tmp\arm\ + .\data\build\ + .\data\build\ + .\data\build\ + .\data\build\ + .\data\build\ + .\data\build\ + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP clean + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP clean + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP clean + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP clean + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP clean + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP clean all + NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP clean + + + + .\out\tmp\x86\ReleaseUWPBuildLog.html + + + + + .\out\tmp\x86\DebugUWPBuildLog.html + + + + + .\out\tmp\x64\ReleaseUWPBuildLog.html + + + + + .\out\tmp\x64\DebugUWPBuildLog.html + + + + + .\out\tmp\arm\ReleaseUWPBuildLog.html + + + + + .\out\tmp\arm\DebugUWPBuildLog.html + + + + + + + + + + + + + + + + + + + {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B} + false + + + + + + \ No newline at end of file diff --git a/source/data/mappings/convrtrs.txt b/source/data/mappings/convrtrs.txt index b98e106..8453585 100644 --- a/source/data/mappings/convrtrs.txt +++ b/source/data/mappings/convrtrs.txt @@ -938,6 +938,8 @@ ibm-1129_P100-1997 { UTR22* } ibm-1129 { IBM* } ibm-1131_P100-1997 { UTR22* } ibm-1131 { IBM* } cp1131 # Cyrillic Belarus PC ibm-1133_P100-1997 { UTR22* } ibm-1133 { IBM* } # ISO Lao +# GSM 03.38 +gsm-03.38-2009 { UTR22* } GSM0338 # GSM0338 alias is from Perl # Partially algorithmic converters @@ -1150,7 +1152,6 @@ ebcdic-xml-us # These are not installed by default. They are rarely used. # Many of them can be added through the online ICU Data Library Customization tool -gsm-03.38-2000 { UTR22* } GSM0338 # GSM0338 alias is from Perl ibm-1004_P100-1995 { UTR22* } ibm-1004 { IBM* } ibm-1008_P100-1995 { UTR22* } ibm-1008 { IBM* } # cp1008, 8-bit Arabic (w/o euro update) ibm-1009_P100-1995 { UTR22* } ibm-1009 { IBM* } diff --git a/source/data/mappings/gsm-03.38-2009.ucm b/source/data/mappings/gsm-03.38-2009.ucm new file mode 100644 index 0000000..5a172f7 --- /dev/null +++ b/source/data/mappings/gsm-03.38-2009.ucm @@ -0,0 +1,218 @@ +# Copyright (C) 2017 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html +# +# Name: GSM 03.38 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Date: 2009 Nov 10 +# Authors: Ken Whistler +# Kent Karlsson +# Markus Kuhn +# +# Source: http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT +# See there for the license and for a description of the charset. +# Formatted into ICU .ucm format by Markus Scherer on 2006-nov-02. +# Updated to table version 2.0 by Fredrik Roubert on 2017-feb-08. +# Commented-out mappings are turned into fallbacks (|1), all others are turned +# into round-trips (|0). +# Multi-byte mappings are preserved as multi-single-byte character mappings, +# using ICU's m:n conversion capability. +# +# The substitution character is not documented in the Unicode file. +# \x3F is chosen here because \x1A is a graphic character. +# +# Other deviations from the Unicode file: +# a) +# The GSM standard specifies that one or two ESC bytes (\x1B), if not followed +# by a recognized final byte, be mapped to spaces (that is, reverse fallbacks +# to U+0020). +# The Unicode file round-trips a single \x1B to U+00A0 (NBSP) and has no mapping +# for \x1B\x1B. +# (Reverse fallbacks to U+00A0 would result in Unicode text that cannot be +# converted back to GSM 03.38. A roundtrip for U+00A0 adds a character that is +# not mappable in the standard.) +# +# See the ietf-charsets list email "Re: GSM 03.38 substitution character?" +# at http://mail.apps.ietf.org/ietf/charsets/msg01696.html +# +# b) +# The GSM standard maps U+00C7 capital C-cedilla to \x09 but the Unicode file +# contains and documents a "fix" to map U+00E7 small c-cedilla instead, based on +# an interpretation of the intent of the standard. Prevailing implementations +# in mobile phones follow the standard. +# +# This file follows the GSM standard. +# +# See the GSM standard at +# http://www.3gpp.org/ftp/Specs/archive/03_series/03.38/0338-720.zip +# +# For problems with the table format please submit a bug +# at http://www.icu-project.org/ . +# For issues with the mappings please contact Unicode +# at http://www.unicode.org/reporting.html + + "gsm-03.38-2009" + "AXXXX" + 1 + 1 + "SBCS" + 0-7f + \x3F + "ASCII" + +CHARMAP + \x00 |1 + \x0A |0 + \x1B\x0A |0 + \x0D |0 + \x20 |0 + \x1B |3 + \x1B\x1B |3 + \x21 |0 + \x22 |0 + \x23 |0 + \x02 |0 + \x25 |0 + \x26 |0 + \x27 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x30 |0 + \x31 |0 + \x32 |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x37 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x3C |0 + \x3D |0 + \x3E |0 + \x3F |0 + \x00 |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x4A |0 + \x4B |0 + \x4C |0 + \x4D |0 + \x4E |0 + \x4F |0 + \x50 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x5A |0 + \x1B\x3C |0 + \x1B\x2F |0 + \x1B\x3E |0 + \x1B\x14 |0 + \x11 |0 + \x61 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \x6A |0 + \x6B |0 + \x6C |0 + \x6D |0 + \x6E |0 + \x6F |0 + \x70 |0 + \x71 |0 + \x72 |0 + \x73 |0 + \x74 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \x79 |0 + \x7A |0 + \x1B\x28 |0 + \x1B\x40 |0 + \x1B\x29 |0 + \x1B\x3D |0 + \x40 |0 + \x01 |0 + \x24 |0 + \x03 |0 + \x5F |0 + \x60 |0 + \x5B |0 + \x0E |0 + \x1C |0 + \x09 |0 + \x1F |0 + \x5D |0 + \x5C |0 + \x0B |0 + \x5E |0 + \x1E |0 + \x7F |0 + \x7B |0 + \x0F |0 + \x1D |0 + \x04 |0 + \x05 |0 + \x07 |0 + \x7D |0 + \x08 |0 + \x7C |0 + \x0C |0 + \x06 |0 + \x7E |0 + \x41 |1 + \x42 |1 + \x13 |0 + \x10 |0 + \x45 |1 + \x5A |1 + \x48 |1 + \x19 |0 + \x49 |1 + \x4B |1 + \x14 |0 + \x4D |1 + \x4E |1 + \x1A |0 + \x4F |1 + \x16 |0 + \x50 |1 + \x18 |0 + \x54 |1 + \x59 |1 + \x12 |0 + \x58 |1 + \x17 |0 + \x15 |0 + \x1B\x65 |0 +END CHARMAP diff --git a/source/data/mappings/ucmfiles.mk b/source/data/mappings/ucmfiles.mk index d61b7a4..82acfae 100644 --- a/source/data/mappings/ucmfiles.mk +++ b/source/data/mappings/ucmfiles.mk @@ -120,5 +120,5 @@ icu-internal-compound-d1.ucm icu-internal-compound-d2.ucm icu-internal-compound- icu-internal-compound-d5.ucm icu-internal-compound-d6.ucm icu-internal-compound-d7.ucm \ icu-internal-compound-s1.ucm icu-internal-compound-s2.ucm icu-internal-compound-s3.ucm icu-internal-compound-t.ucm \ euc-jp-2007.ucm\ -euc-tw-2014.ucm - +euc-tw-2014.ucm\ +gsm-03.38-2009.ucm diff --git a/source/data/misc/dayPeriods.txt b/source/data/misc/dayPeriods.txt index 94d511a..bc0d58d 100644 --- a/source/data/misc/dayPeriods.txt +++ b/source/data/misc/dayPeriods.txt @@ -3,159 +3,161 @@ dayPeriods:table(nofallback){ locales{ af{"set3"} - am{"set67"} - ar{"set65"} - az{"set61"} - bg{"set20"} - bn{"set33"} - bs{"set24"} - ca{"set14"} - chr{"set75"} - cs{"set26"} - da{"set6"} - de{"set5"} - ee{"set76"} - el{"set39"} + am{"set68"} + ar{"set66"} + az{"set62"} + bg{"set21"} + bn{"set34"} + bs{"set25"} + ca{"set15"} + chr{"set76"} + cs{"set27"} + da{"set7"} + de{"set6"} + ee{"set77"} + el{"set40"} en{"set2"} - es{"set12"} - es_CO{"set13"} - et{"set48"} - eu{"set73"} - fa{"set42"} - fi{"set47"} - fil{"set59"} - fr{"set17"} - gl{"set11"} - gu{"set34"} - he{"set66"} - hi{"set32"} - hr{"set23"} - hu{"set49"} - hy{"set41"} - id{"set57"} - is{"set9"} - it{"set15"} - ja{"set52"} - ka{"set72"} - kk{"set62"} - km{"set69"} - kn{"set46"} - ko{"set53"} - ky{"set63"} - lo{"set56"} - lt{"set29"} - lv{"set30"} - mk{"set21"} - ml{"set45"} - mn{"set74"} - mr{"set35"} - ms{"set58"} - my{"set54"} - nb{"set7"} - ne{"set36"} + es{"set13"} + es_CO{"set14"} + et{"set49"} + eu{"set74"} + fa{"set43"} + fi{"set48"} + fil{"set60"} + fr{"set18"} + gl{"set12"} + gsw{"set5"} + gu{"set35"} + he{"set67"} + hi{"set33"} + hr{"set24"} + hu{"set50"} + hy{"set42"} + id{"set58"} + is{"set10"} + it{"set16"} + ja{"set53"} + ka{"set73"} + kk{"set63"} + km{"set70"} + kn{"set47"} + ko{"set54"} + ky{"set64"} + lo{"set57"} + lt{"set30"} + lv{"set31"} + mk{"set22"} + ml{"set46"} + mn{"set75"} + mr{"set36"} + ms{"set59"} + my{"set55"} + nb{"set8"} + ne{"set37"} nl{"set4"} - pa{"set37"} - pl{"set28"} - pt{"set10"} - ro{"set16"} + pa{"set38"} + pl{"set29"} + pt{"set11"} + ro{"set17"} root{"set1"} - ru{"set18"} - si{"set38"} - sk{"set27"} - sl{"set25"} - sq{"set40"} - sr{"set22"} - sv{"set8"} - sw{"set70"} - ta{"set43"} - te{"set44"} - th{"set55"} - tr{"set60"} - uk{"set19"} - ur{"set31"} - uz{"set64"} - vi{"set68"} - yue{"set51"} - zh{"set50"} - zu{"set71"} + ru{"set19"} + si{"set39"} + sk{"set28"} + sl{"set26"} + sq{"set41"} + sr{"set23"} + sv{"set9"} + sw{"set71"} + ta{"set44"} + te{"set45"} + th{"set56"} + tr{"set61"} + uk{"set20"} + ur{"set32"} + uz{"set65"} + vi{"set69"} + yue{"set52"} + zh{"set51"} + zu{"set72"} } locales_selection{ - af{"set79"} - am{"set147"} - ar{"set138"} - az{"set129"} - bg{"set101"} - bn{"set114"} - bs{"set95"} - ca{"set90"} - chr{"set151"} - cs{"set98"} - da{"set82"} - de{"set81"} - ee{"set152"} - el{"set107"} - en{"set78"} - es{"set88"} - es_CO{"set89"} - et{"set133"} - eu{"set148"} - fa{"set108"} - fi{"set134"} - fil{"set142"} - fr{"set93"} - gl{"set87"} - gu{"set115"} - he{"set139"} - hi{"set113"} - hr{"set94"} - hu{"set135"} - hy{"set109"} - id{"set140"} - is{"set85"} - it{"set91"} - ja{"set126"} - ka{"set110"} - kk{"set130"} - km{"set144"} - kn{"set123"} - ko{"set127"} - ky{"set131"} - lo{"set137"} - lt{"set105"} - lv{"set106"} - mk{"set102"} - ml{"set122"} - mn{"set149"} - mr{"set116"} - ms{"set141"} - my{"set150"} - nb{"set83"} - ne{"set117"} - nl{"set80"} - pa{"set118"} - pl{"set100"} - pt{"set86"} - ro{"set92"} - root{"set77"} - ru{"set103"} - si{"set119"} - sk{"set99"} - sl{"set97"} - sq{"set111"} - sr{"set96"} - sv{"set84"} - sw{"set145"} - ta{"set120"} - te{"set121"} - th{"set136"} - tr{"set128"} - uk{"set104"} - ur{"set112"} - uz{"set132"} - vi{"set143"} - yue{"set125"} - zh{"set124"} - zu{"set146"} + af{"set80"} + am{"set149"} + ar{"set140"} + az{"set131"} + bg{"set103"} + bn{"set116"} + bs{"set97"} + ca{"set92"} + chr{"set153"} + cs{"set100"} + da{"set84"} + de{"set83"} + ee{"set154"} + el{"set109"} + en{"set79"} + es{"set90"} + es_CO{"set91"} + et{"set135"} + eu{"set150"} + fa{"set110"} + fi{"set136"} + fil{"set144"} + fr{"set95"} + gl{"set89"} + gsw{"set82"} + gu{"set117"} + he{"set141"} + hi{"set115"} + hr{"set96"} + hu{"set137"} + hy{"set111"} + id{"set142"} + is{"set87"} + it{"set93"} + ja{"set128"} + ka{"set112"} + kk{"set132"} + km{"set146"} + kn{"set125"} + ko{"set129"} + ky{"set133"} + lo{"set139"} + lt{"set107"} + lv{"set108"} + mk{"set104"} + ml{"set124"} + mn{"set151"} + mr{"set118"} + ms{"set143"} + my{"set152"} + nb{"set85"} + ne{"set119"} + nl{"set81"} + pa{"set120"} + pl{"set102"} + pt{"set88"} + ro{"set94"} + root{"set78"} + ru{"set105"} + si{"set121"} + sk{"set101"} + sl{"set99"} + sq{"set113"} + sr{"set98"} + sv{"set86"} + sw{"set147"} + ta{"set122"} + te{"set123"} + th{"set138"} + tr{"set130"} + uk{"set106"} + ur{"set114"} + uz{"set134"} + vi{"set145"} + yue{"set127"} + zh{"set126"} + zu{"set148"} } rules{ set1{ @@ -170,12 +172,12 @@ dayPeriods:table(nofallback){ } set10{ afternoon1{ - before{"19:00"} + before{"18:00"} from{"12:00"} } evening1{ before{"24:00"} - from{"19:00"} + from{"18:00"} } midnight{ at{"00:00"} @@ -198,6 +200,50 @@ dayPeriods:table(nofallback){ from{"12:00"} } evening1{ + before{"22:00"} + from{"18:00"} + } + morning1{ + before{"09:00"} + from{"04:00"} + } + morning2{ + before{"12:00"} + from{"09:00"} + } + night1{ + before{"04:00"} + from{"22:00"} + } + } + set101{ + afternoon1{ + before{"18:00"} + from{"12:00"} + } + evening1{ + before{"22:00"} + from{"18:00"} + } + morning1{ + before{"09:00"} + from{"04:00"} + } + morning2{ + before{"12:00"} + from{"09:00"} + } + night1{ + before{"04:00"} + from{"22:00"} + } + } + set102{ + afternoon1{ + before{"18:00"} + from{"12:00"} + } + evening1{ before{"21:00"} from{"18:00"} } @@ -214,7 +260,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set101{ + set103{ afternoon1{ before{"18:00"} from{"14:00"} @@ -236,7 +282,7 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set102{ + set104{ afternoon1{ before{"18:00"} from{"12:00"} @@ -258,7 +304,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set103{ + set105{ afternoon1{ before{"18:00"} from{"12:00"} @@ -276,7 +322,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set104{ + set106{ afternoon1{ before{"18:00"} from{"12:00"} @@ -294,7 +340,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set105{ + set107{ afternoon1{ before{"18:00"} from{"12:00"} @@ -312,7 +358,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set106{ + set108{ afternoon1{ before{"18:00"} from{"12:00"} @@ -330,7 +376,7 @@ dayPeriods:table(nofallback){ from{"23:00"} } } - set107{ + set109{ afternoon1{ before{"17:00"} from{"12:00"} @@ -348,68 +394,67 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set108{ + set11{ afternoon1{ - before{"17:00"} + before{"19:00"} from{"12:00"} } evening1{ - before{"19:00"} - from{"17:00"} + before{"24:00"} + from{"19:00"} + } + midnight{ + at{"00:00"} } morning1{ before{"12:00"} - from{"04:00"} + from{"06:00"} } night1{ - before{"04:00"} - from{"19:00"} + before{"06:00"} + from{"00:00"} + } + noon{ + at{"12:00"} } } - set109{ + set110{ afternoon1{ - before{"18:00"} + before{"17:00"} from{"12:00"} } evening1{ - before{"24:00"} - from{"18:00"} + before{"19:00"} + from{"17:00"} } morning1{ before{"12:00"} - from{"06:00"} + from{"04:00"} } night1{ - before{"06:00"} - from{"00:00"} + before{"04:00"} + from{"19:00"} } } - set11{ + set111{ afternoon1{ - before{"13:00"} + before{"18:00"} from{"12:00"} } evening1{ - before{"21:00"} - from{"13:00"} - } - midnight{ - at{"00:00"} + before{"24:00"} + from{"18:00"} } morning1{ - before{"06:00"} - from{"00:00"} - } - morning2{ before{"12:00"} from{"06:00"} } night1{ - before{"24:00"} - from{"21:00"} + before{"06:00"} + from{"00:00"} } } - set110{ + set112{ afternoon1{ before{"18:00"} from{"12:00"} @@ -427,7 +472,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set111{ + set113{ afternoon1{ before{"18:00"} from{"12:00"} @@ -449,7 +494,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set112{ + set114{ afternoon1{ before{"16:00"} from{"12:00"} @@ -471,7 +516,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set113{ + set115{ afternoon1{ before{"16:00"} from{"12:00"} @@ -489,7 +534,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set114{ + set116{ afternoon1{ before{"16:00"} from{"12:00"} @@ -515,7 +560,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set115{ + set117{ afternoon1{ before{"16:00"} from{"12:00"} @@ -533,7 +578,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set116{ + set118{ afternoon1{ before{"16:00"} from{"12:00"} @@ -559,7 +604,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set117{ + set119{ afternoon1{ before{"16:00"} from{"12:00"} @@ -581,7 +626,32 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set118{ + set12{ + afternoon1{ + before{"13:00"} + from{"12:00"} + } + evening1{ + before{"21:00"} + from{"13:00"} + } + midnight{ + at{"00:00"} + } + morning1{ + before{"06:00"} + from{"00:00"} + } + morning2{ + before{"12:00"} + from{"06:00"} + } + night1{ + before{"24:00"} + from{"21:00"} + } + } + set120{ afternoon1{ before{"16:00"} from{"12:00"} @@ -599,7 +669,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set119{ + set121{ afternoon1{ before{"14:00"} from{"12:00"} @@ -625,28 +695,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set12{ - evening1{ - before{"20:00"} - from{"12:00"} - } - morning1{ - before{"06:00"} - from{"00:00"} - } - morning2{ - before{"12:00"} - from{"06:00"} - } - night1{ - before{"24:00"} - from{"20:00"} - } - noon{ - at{"12:00"} - } - } - set120{ + set122{ afternoon1{ before{"14:00"} from{"12:00"} @@ -676,7 +725,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set121{ + set123{ afternoon1{ before{"18:00"} from{"12:00"} @@ -694,7 +743,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set122{ + set124{ afternoon1{ before{"14:00"} from{"12:00"} @@ -724,7 +773,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set123{ + set125{ afternoon1{ before{"18:00"} from{"12:00"} @@ -742,7 +791,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set124{ + set126{ afternoon1{ before{"13:00"} from{"12:00"} @@ -768,7 +817,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set125{ + set127{ afternoon1{ before{"13:00"} from{"12:00"} @@ -794,7 +843,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set126{ + set128{ afternoon1{ before{"16:00"} from{"12:00"} @@ -816,7 +865,7 @@ dayPeriods:table(nofallback){ from{"23:00"} } } - set127{ + set129{ afternoon1{ before{"18:00"} from{"12:00"} @@ -838,7 +887,28 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set128{ + set13{ + evening1{ + before{"20:00"} + from{"12:00"} + } + morning1{ + before{"06:00"} + from{"00:00"} + } + morning2{ + before{"12:00"} + from{"06:00"} + } + night1{ + before{"24:00"} + from{"20:00"} + } + noon{ + at{"12:00"} + } + } + set130{ afternoon1{ before{"18:00"} from{"12:00"} @@ -864,7 +934,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set129{ + set131{ afternoon1{ before{"17:00"} from{"12:00"} @@ -890,24 +960,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set13{ - evening1{ - before{"20:00"} - from{"12:00"} - } - morning2{ - before{"12:00"} - from{"00:00"} - } - night1{ - before{"24:00"} - from{"20:00"} - } - noon{ - at{"12:00"} - } - } - set130{ + set132{ afternoon1{ before{"18:00"} from{"12:00"} @@ -925,7 +978,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set131{ + set133{ afternoon1{ before{"18:00"} from{"12:00"} @@ -943,7 +996,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set132{ + set134{ afternoon1{ before{"18:00"} from{"11:00"} @@ -961,7 +1014,7 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set133{ + set135{ afternoon1{ before{"18:00"} from{"12:00"} @@ -979,7 +1032,7 @@ dayPeriods:table(nofallback){ from{"23:00"} } } - set134{ + set136{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1001,7 +1054,7 @@ dayPeriods:table(nofallback){ from{"23:00"} } } - set135{ + set137{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1027,7 +1080,7 @@ dayPeriods:table(nofallback){ from{"04:00"} } } - set136{ + set138{ afternoon1{ before{"13:00"} from{"12:00"} @@ -1053,7 +1106,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set137{ + set139{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1071,7 +1124,24 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set138{ + set14{ + evening1{ + before{"20:00"} + from{"12:00"} + } + morning2{ + before{"12:00"} + from{"00:00"} + } + night1{ + before{"24:00"} + from{"20:00"} + } + noon{ + at{"12:00"} + } + } + set140{ afternoon1{ before{"13:00"} from{"12:00"} @@ -1101,7 +1171,7 @@ dayPeriods:table(nofallback){ from{"01:00"} } } - set139{ + set141{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1127,36 +1197,7 @@ dayPeriods:table(nofallback){ from{"03:00"} } } - set14{ - afternoon1{ - before{"13:00"} - from{"12:00"} - } - afternoon2{ - before{"19:00"} - from{"13:00"} - } - evening1{ - before{"21:00"} - from{"19:00"} - } - midnight{ - at{"00:00"} - } - morning1{ - before{"06:00"} - from{"00:00"} - } - morning2{ - before{"12:00"} - from{"06:00"} - } - night1{ - before{"24:00"} - from{"21:00"} - } - } - set140{ + set142{ afternoon1{ before{"15:00"} from{"10:00"} @@ -1174,7 +1215,7 @@ dayPeriods:table(nofallback){ from{"18:00"} } } - set141{ + set143{ afternoon1{ before{"14:00"} from{"12:00"} @@ -1196,7 +1237,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set142{ + set144{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1218,7 +1259,7 @@ dayPeriods:table(nofallback){ from{"18:00"} } } - set143{ + set145{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1236,7 +1277,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set144{ + set146{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1254,7 +1295,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set145{ + set147{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1276,7 +1317,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set146{ + set148{ afternoon1{ before{"13:00"} from{"10:00"} @@ -1298,7 +1339,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set147{ + set149{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1316,19 +1357,22 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set148{ + set15{ afternoon1{ - before{"14:00"} + before{"13:00"} from{"12:00"} } afternoon2{ before{"19:00"} - from{"14:00"} + from{"13:00"} } evening1{ before{"21:00"} from{"19:00"} } + midnight{ + at{"00:00"} + } morning1{ before{"06:00"} from{"00:00"} @@ -1342,49 +1386,51 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set149{ + set150{ afternoon1{ - before{"18:00"} + before{"14:00"} from{"12:00"} } + afternoon2{ + before{"19:00"} + from{"14:00"} + } evening1{ before{"21:00"} - from{"18:00"} + from{"19:00"} } morning1{ + before{"06:00"} + from{"00:00"} + } + morning2{ before{"12:00"} from{"06:00"} } night1{ - before{"06:00"} + before{"24:00"} from{"21:00"} } } - set15{ + set151{ afternoon1{ before{"18:00"} from{"12:00"} } evening1{ - before{"24:00"} + before{"21:00"} from{"18:00"} } - midnight{ - at{"00:00"} - } morning1{ before{"12:00"} from{"06:00"} } night1{ before{"06:00"} - from{"00:00"} - } - noon{ - at{"12:00"} + from{"21:00"} } } - set150{ + set152{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1402,7 +1448,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set151{ + set153{ afternoon1{ before{"24:00"} from{"12:00"} @@ -1412,7 +1458,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set152{ + set154{ afternoon1{ before{"14:00"} from{"12:00"} @@ -1444,7 +1490,7 @@ dayPeriods:table(nofallback){ from{"12:00"} } evening1{ - before{"22:00"} + before{"24:00"} from{"18:00"} } midnight{ @@ -1452,11 +1498,11 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"05:00"} + from{"06:00"} } night1{ - before{"05:00"} - from{"22:00"} + before{"06:00"} + from{"00:00"} } noon{ at{"12:00"} @@ -1468,7 +1514,7 @@ dayPeriods:table(nofallback){ from{"12:00"} } evening1{ - before{"24:00"} + before{"22:00"} from{"18:00"} } midnight{ @@ -1476,11 +1522,11 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"04:00"} + from{"05:00"} } night1{ - before{"04:00"} - from{"00:00"} + before{"05:00"} + from{"22:00"} } noon{ at{"12:00"} @@ -1561,6 +1607,30 @@ dayPeriods:table(nofallback){ set20{ afternoon1{ before{"18:00"} + from{"12:00"} + } + evening1{ + before{"24:00"} + from{"18:00"} + } + midnight{ + at{"00:00"} + } + morning1{ + before{"12:00"} + from{"04:00"} + } + night1{ + before{"04:00"} + from{"00:00"} + } + noon{ + at{"12:00"} + } + } + set21{ + afternoon1{ + before{"18:00"} from{"14:00"} } evening1{ @@ -1583,7 +1653,7 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set21{ + set22{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1611,7 +1681,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set22{ + set23{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1635,7 +1705,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set23{ + set24{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1659,7 +1729,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set24{ + set25{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1683,7 +1753,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set25{ + set26{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1711,7 +1781,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set26{ + set27{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1739,7 +1809,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set27{ + set28{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1767,7 +1837,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set28{ + set29{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1795,7 +1865,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set29{ + set3{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1809,17 +1879,14 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"06:00"} + from{"05:00"} } night1{ - before{"06:00"} + before{"05:00"} from{"00:00"} } - noon{ - at{"12:00"} - } } - set3{ + set30{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1833,14 +1900,17 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"05:00"} + from{"06:00"} } night1{ - before{"05:00"} + before{"06:00"} from{"00:00"} } + noon{ + at{"12:00"} + } } - set30{ + set31{ afternoon1{ before{"18:00"} from{"12:00"} @@ -1864,7 +1934,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set31{ + set32{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1889,7 +1959,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set32{ + set33{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1910,7 +1980,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set33{ + set34{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1936,7 +2006,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set34{ + set35{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1957,7 +2027,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set35{ + set36{ afternoon1{ before{"16:00"} from{"12:00"} @@ -1989,7 +2059,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set36{ + set37{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2017,7 +2087,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set37{ + set38{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2038,7 +2108,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set38{ + set39{ afternoon1{ before{"14:00"} from{"12:00"} @@ -2070,24 +2140,6 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set39{ - afternoon1{ - before{"17:00"} - from{"12:00"} - } - evening1{ - before{"20:00"} - from{"17:00"} - } - morning1{ - before{"12:00"} - from{"04:00"} - } - night1{ - before{"04:00"} - from{"20:00"} - } - } set4{ afternoon1{ before{"18:00"} @@ -2111,6 +2163,24 @@ dayPeriods:table(nofallback){ } set40{ afternoon1{ + before{"17:00"} + from{"12:00"} + } + evening1{ + before{"20:00"} + from{"17:00"} + } + morning1{ + before{"12:00"} + from{"04:00"} + } + night1{ + before{"04:00"} + from{"20:00"} + } + } + set41{ + afternoon1{ before{"18:00"} from{"12:00"} } @@ -2137,7 +2207,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set41{ + set42{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2161,7 +2231,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set42{ + set43{ afternoon1{ before{"17:00"} from{"12:00"} @@ -2185,7 +2255,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set43{ + set44{ afternoon1{ before{"14:00"} from{"12:00"} @@ -2221,7 +2291,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set44{ + set45{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2242,7 +2312,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set45{ + set46{ afternoon1{ before{"14:00"} from{"12:00"} @@ -2278,7 +2348,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set46{ + set47{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2299,7 +2369,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set47{ + set48{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2327,7 +2397,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set48{ + set49{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2351,68 +2421,64 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set49{ + set5{ afternoon1{ - before{"18:00"} + before{"14:00"} from{"12:00"} } + afternoon2{ + before{"18:00"} + from{"14:00"} + } evening1{ - before{"21:00"} + before{"24:00"} from{"18:00"} } midnight{ at{"00:00"} } morning1{ - before{"09:00"} - from{"06:00"} - } - morning2{ before{"12:00"} - from{"09:00"} + from{"05:00"} } night1{ - before{"04:00"} - from{"21:00"} - } - night2{ - before{"06:00"} - from{"04:00"} - } - noon{ - at{"12:00"} + before{"05:00"} + from{"00:00"} } } - set5{ + set50{ afternoon1{ - before{"13:00"} - from{"12:00"} - } - afternoon2{ before{"18:00"} - from{"13:00"} + from{"12:00"} } evening1{ - before{"24:00"} + before{"21:00"} from{"18:00"} } midnight{ at{"00:00"} } morning1{ - before{"10:00"} - from{"05:00"} + before{"09:00"} + from{"06:00"} } morning2{ before{"12:00"} - from{"10:00"} + from{"09:00"} } night1{ - before{"05:00"} - from{"00:00"} + before{"04:00"} + from{"21:00"} + } + night2{ + before{"06:00"} + from{"04:00"} + } + noon{ + at{"12:00"} } } - set50{ + set51{ afternoon1{ before{"13:00"} from{"12:00"} @@ -2441,7 +2507,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set51{ + set52{ afternoon1{ before{"13:00"} from{"12:00"} @@ -2470,7 +2536,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set52{ + set53{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2498,7 +2564,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set53{ + set54{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2526,7 +2592,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set54{ + set55{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2550,7 +2616,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set55{ + set56{ afternoon1{ before{"13:00"} from{"12:00"} @@ -2582,7 +2648,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set56{ + set57{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2606,7 +2672,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set57{ + set58{ afternoon1{ before{"15:00"} from{"10:00"} @@ -2630,7 +2696,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set58{ + set59{ afternoon1{ before{"14:00"} from{"12:00"} @@ -2652,60 +2718,64 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set59{ + set6{ afternoon1{ - before{"16:00"} + before{"13:00"} from{"12:00"} } - evening1{ + afternoon2{ before{"18:00"} - from{"16:00"} + from{"13:00"} + } + evening1{ + before{"24:00"} + from{"18:00"} } midnight{ at{"00:00"} } morning1{ - before{"06:00"} - from{"00:00"} + before{"10:00"} + from{"05:00"} } morning2{ before{"12:00"} - from{"06:00"} + from{"10:00"} } night1{ - before{"24:00"} - from{"18:00"} - } - noon{ - at{"12:00"} + before{"05:00"} + from{"00:00"} } } - set6{ + set60{ afternoon1{ - before{"18:00"} + before{"16:00"} from{"12:00"} } evening1{ - before{"24:00"} - from{"18:00"} + before{"18:00"} + from{"16:00"} } midnight{ at{"00:00"} } morning1{ - before{"10:00"} - from{"05:00"} + before{"06:00"} + from{"00:00"} } morning2{ before{"12:00"} - from{"10:00"} + from{"06:00"} } night1{ - before{"05:00"} - from{"00:00"} + before{"24:00"} + from{"18:00"} + } + noon{ + at{"12:00"} } } - set60{ + set61{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2737,7 +2807,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set61{ + set62{ afternoon1{ before{"17:00"} from{"12:00"} @@ -2769,7 +2839,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set62{ + set63{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2793,7 +2863,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set63{ + set64{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2817,7 +2887,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set64{ + set65{ afternoon1{ before{"18:00"} from{"11:00"} @@ -2841,7 +2911,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set65{ + set66{ afternoon1{ before{"13:00"} from{"12:00"} @@ -2871,7 +2941,7 @@ dayPeriods:table(nofallback){ from{"01:00"} } } - set66{ + set67{ afternoon1{ before{"16:00"} from{"12:00"} @@ -2900,7 +2970,7 @@ dayPeriods:table(nofallback){ from{"03:00"} } } - set67{ + set68{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2924,7 +2994,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set68{ + set69{ afternoon1{ before{"18:00"} from{"12:00"} @@ -2948,56 +3018,56 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set69{ + set7{ afternoon1{ before{"18:00"} from{"12:00"} } evening1{ - before{"21:00"} + before{"24:00"} from{"18:00"} } midnight{ at{"00:00"} } morning1{ + before{"10:00"} + from{"05:00"} + } + morning2{ before{"12:00"} - from{"00:00"} + from{"10:00"} } night1{ - before{"24:00"} - from{"21:00"} - } - noon{ - at{"12:00"} + before{"05:00"} + from{"00:00"} } } - set7{ + set70{ afternoon1{ before{"18:00"} from{"12:00"} } evening1{ - before{"24:00"} + before{"21:00"} from{"18:00"} } midnight{ at{"00:00"} } morning1{ - before{"10:00"} - from{"06:00"} - } - morning2{ before{"12:00"} - from{"10:00"} + from{"00:00"} } night1{ - before{"06:00"} - from{"00:00"} + before{"24:00"} + from{"21:00"} + } + noon{ + at{"12:00"} } } - set70{ + set71{ afternoon1{ before{"16:00"} from{"12:00"} @@ -3025,7 +3095,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set71{ + set72{ afternoon1{ before{"13:00"} from{"10:00"} @@ -3047,7 +3117,7 @@ dayPeriods:table(nofallback){ from{"19:00"} } } - set72{ + set73{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3071,7 +3141,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set73{ + set74{ afternoon1{ before{"14:00"} from{"12:00"} @@ -3100,7 +3170,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set74{ + set75{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3124,7 +3194,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set75{ + set76{ afternoon1{ before{"24:00"} from{"12:00"} @@ -3137,7 +3207,7 @@ dayPeriods:table(nofallback){ at{"12:00"} } } - set76{ + set77{ afternoon1{ before{"14:00"} from{"12:00"} @@ -3163,7 +3233,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set77{ + set78{ am{ before{"12:00"} from{"00:00"} @@ -3173,7 +3243,7 @@ dayPeriods:table(nofallback){ from{"12:00"} } } - set78{ + set79{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3191,7 +3261,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set79{ + set8{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3200,16 +3270,23 @@ dayPeriods:table(nofallback){ before{"24:00"} from{"18:00"} } + midnight{ + at{"00:00"} + } morning1{ + before{"10:00"} + from{"06:00"} + } + morning2{ before{"12:00"} - from{"05:00"} + from{"10:00"} } night1{ - before{"05:00"} + before{"06:00"} from{"00:00"} } } - set8{ + set80{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3218,23 +3295,16 @@ dayPeriods:table(nofallback){ before{"24:00"} from{"18:00"} } - midnight{ - at{"00:00"} - } morning1{ - before{"10:00"} - from{"05:00"} - } - morning2{ before{"12:00"} - from{"10:00"} + from{"05:00"} } night1{ before{"05:00"} from{"00:00"} } } - set80{ + set81{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3252,7 +3322,32 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set81{ + set82{ + afternoon1{ + before{"14:00"} + from{"12:00"} + } + afternoon2{ + before{"18:00"} + from{"14:00"} + } + evening1{ + before{"24:00"} + from{"18:00"} + } + midnight{ + at{"00:00"} + } + morning1{ + before{"12:00"} + from{"05:00"} + } + night1{ + before{"05:00"} + from{"00:00"} + } + } + set83{ afternoon1{ before{"13:00"} from{"12:00"} @@ -3278,7 +3373,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set82{ + set84{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3300,7 +3395,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set83{ + set85{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3322,7 +3417,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set84{ + set86{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3344,7 +3439,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set85{ + set87{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3362,7 +3457,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set86{ + set88{ afternoon1{ before{"19:00"} from{"12:00"} @@ -3380,7 +3475,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set87{ + set89{ afternoon1{ before{"13:00"} from{"12:00"} @@ -3402,7 +3497,32 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set88{ + set9{ + afternoon1{ + before{"18:00"} + from{"12:00"} + } + evening1{ + before{"24:00"} + from{"18:00"} + } + midnight{ + at{"00:00"} + } + morning1{ + before{"10:00"} + from{"05:00"} + } + morning2{ + before{"12:00"} + from{"10:00"} + } + night1{ + before{"05:00"} + from{"00:00"} + } + } + set90{ evening1{ before{"20:00"} from{"12:00"} @@ -3420,7 +3540,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set89{ + set91{ evening1{ before{"20:00"} from{"12:00"} @@ -3434,31 +3554,7 @@ dayPeriods:table(nofallback){ from{"20:00"} } } - set9{ - afternoon1{ - before{"18:00"} - from{"12:00"} - } - evening1{ - before{"24:00"} - from{"18:00"} - } - midnight{ - at{"00:00"} - } - morning1{ - before{"12:00"} - from{"06:00"} - } - night1{ - before{"06:00"} - from{"00:00"} - } - noon{ - at{"12:00"} - } - } - set90{ + set92{ afternoon1{ before{"13:00"} from{"12:00"} @@ -3484,7 +3580,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set91{ + set93{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3502,7 +3598,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set92{ + set94{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3520,7 +3616,7 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set93{ + set95{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3538,7 +3634,7 @@ dayPeriods:table(nofallback){ from{"00:00"} } } - set94{ + set96{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3556,7 +3652,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set95{ + set97{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3574,7 +3670,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set96{ + set98{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3592,7 +3688,7 @@ dayPeriods:table(nofallback){ from{"21:00"} } } - set97{ + set99{ afternoon1{ before{"18:00"} from{"12:00"} @@ -3614,49 +3710,5 @@ dayPeriods:table(nofallback){ from{"22:00"} } } - set98{ - afternoon1{ - before{"18:00"} - from{"12:00"} - } - evening1{ - before{"22:00"} - from{"18:00"} - } - morning1{ - before{"09:00"} - from{"04:00"} - } - morning2{ - before{"12:00"} - from{"09:00"} - } - night1{ - before{"04:00"} - from{"22:00"} - } - } - set99{ - afternoon1{ - before{"18:00"} - from{"12:00"} - } - evening1{ - before{"22:00"} - from{"18:00"} - } - morning1{ - before{"09:00"} - from{"04:00"} - } - morning2{ - before{"12:00"} - from{"09:00"} - } - night1{ - before{"04:00"} - from{"22:00"} - } - } } } diff --git a/source/data/misc/icuver.txt b/source/data/misc/icuver.txt index cb7704f..d4c9ece 100644 --- a/source/data/misc/icuver.txt +++ b/source/data/misc/icuver.txt @@ -8,6 +8,6 @@ // *************************************************************************** icuver:table(nofallback){ - DataVersion { "58.2.0.0" } - ICUVersion { "58.2.0.0" } + DataVersion { "59.1.0.0" } + ICUVersion { "59.1.0.0" } } diff --git a/source/data/misc/keyTypeData.txt b/source/data/misc/keyTypeData.txt index 0318b4f..643ede2 100644 --- a/source/data/misc/keyTypeData.txt +++ b/source/data/misc/keyTypeData.txt @@ -14,6 +14,7 @@ keyTypeData:table(nofallback){ } valueType{ ca{"incremental"} + h0{"single"} kr{"multiple"} vt{"multiple"} x0{"any"} @@ -36,6 +37,7 @@ keyTypeData:table(nofallback){ d0{""} em{""} fw{""} + h0{""} hours{"hc"} i0{""} k0{""} @@ -216,6 +218,7 @@ keyTypeData:table(nofallback){ buk{""} bwp{""} byb{""} + byn{""} byr{""} bzd{""} cad{""} @@ -497,6 +500,9 @@ keyTypeData:table(nofallback){ tue{""} wed{""} } + h0{ + hybrid{""} + } hours{ h11{""} h12{""} diff --git a/source/data/misc/likelySubtags.txt b/source/data/misc/likelySubtags.txt index 9fd9505..03d878c 100644 --- a/source/data/misc/likelySubtags.txt +++ b/source/data/misc/likelySubtags.txt @@ -7,6 +7,7 @@ likelySubtags:table(nofallback){ aau{"aau_Latn_ZZ"} ab{"ab_Cyrl_GE"} abi{"abi_Latn_ZZ"} + abq{"abq_Cyrl_ZZ"} abr{"abr_Latn_GH"} abt{"abt_Latn_ZZ"} aby{"aby_Latn_ZZ"} @@ -154,6 +155,7 @@ likelySubtags:table(nofallback){ bjn{"bjn_Latn_ID"} bjo{"bjo_Latn_ZZ"} bjr{"bjr_Latn_ZZ"} + bjt{"bjt_Latn_SN"} bjz{"bjz_Latn_ZZ"} bkc{"bkc_Latn_ZZ"} bkm{"bkm_Latn_CM"} @@ -220,8 +222,7 @@ likelySubtags:table(nofallback){ can{"can_Latn_ZZ"} cbj{"cbj_Latn_ZZ"} cch{"cch_Latn_NG"} - ccp{"ccp_Beng_IN"} - ccp_Cakm{"ccp_Cakm_BD"} + ccp{"ccp_Cakm_BD"} ce{"ce_Cyrl_RU"} ceb{"ceb_Latn_PH"} cfa{"cfa_Latn_ZZ"} @@ -245,6 +246,7 @@ likelySubtags:table(nofallback){ cop{"cop_Copt_EG"} cps{"cps_Latn_PH"} cr{"cr_Cans_CA"} + crh{"crh_Cyrl_UA"} crj{"crj_Cans_CA"} crk{"crk_Cans_CA"} crl{"crl_Cans_CA"} @@ -309,6 +311,7 @@ likelySubtags:table(nofallback){ efi{"efi_Latn_NG"} egl{"egl_Latn_IT"} egy{"egy_Egyp_EG"} + eka{"eka_Latn_ZZ"} eky{"eky_Kali_MM"} el{"el_Grek_GR"} ema{"ema_Latn_ZZ"} @@ -416,6 +419,7 @@ likelySubtags:table(nofallback){ gor{"gor_Latn_ID"} gos{"gos_Latn_NL"} got{"got_Goth_UA"} + grb{"grb_Latn_ZZ"} grc{"grc_Cprt_CY"} grc_Linb{"grc_Linb_GR"} grt{"grt_Beng_IN"} @@ -488,6 +492,7 @@ likelySubtags:table(nofallback){ idd{"idd_Latn_ZZ"} idi{"idi_Latn_ZZ"} idu{"idu_Latn_ZZ"} + ife{"ife_Latn_TG"} ig{"ig_Latn_NG"} igb{"igb_Latn_ZZ"} ige{"ige_Latn_ZZ"} @@ -598,6 +603,7 @@ likelySubtags:table(nofallback){ kmu{"kmu_Latn_ZZ"} kmw{"kmw_Latn_ZZ"} kn{"kn_Knda_IN"} + knf{"knf_Latn_SN"} knp{"knp_Latn_ZZ"} ko{"ko_Kore_KR"} koi{"koi_Cyrl_RU"} @@ -1021,6 +1027,7 @@ likelySubtags:table(nofallback){ saq{"saq_Latn_KE"} sas{"sas_Latn_ID"} sat{"sat_Latn_IN"} + sav{"sav_Latn_SN"} saz{"saz_Saur_IN"} sba{"sba_Latn_ZZ"} sbe{"sbe_Latn_ZZ"} @@ -1344,7 +1351,6 @@ likelySubtags:table(nofallback){ und_Cyrl_GE{"ab_Cyrl_GE"} und_Cyrl_GR{"mk_Cyrl_GR"} und_Cyrl_MD{"uk_Cyrl_MD"} - und_Cyrl_PL{"be_Cyrl_PL"} und_Cyrl_RO{"bg_Cyrl_RO"} und_Cyrl_SK{"uk_Cyrl_SK"} und_Cyrl_TR{"kbd_Cyrl_TR"} diff --git a/source/data/misc/metaZones.txt b/source/data/misc/metaZones.txt index 3438968..1a6e771 100644 --- a/source/data/misc/metaZones.txt +++ b/source/data/misc/metaZones.txt @@ -212,7 +212,6 @@ metaZones:table(nofallback){ } Chile{ 001{"America/Santiago"} - AQ{"Antarctica/Palmer"} } China{ 001{"Asia/Shanghai"} @@ -2245,6 +2244,13 @@ metaZones:table(nofallback){ "Atlantic", } } + "America:Punta_Arenas"{ + { + "Chile", + "1970-01-01 00:00", + "2016-12-03 23:00", + } + } "America:Rainy_River"{ { "America_Central", @@ -2576,7 +2582,7 @@ metaZones:table(nofallback){ { "Chile", "1982-05-01 03:00", - "9999-12-31 23:59", + "2016-12-03 23:00", } } "Antarctica:Rothera"{ @@ -3454,6 +3460,11 @@ metaZones:table(nofallback){ "America_Eastern", } } + "Etc:GMT"{ + { + "GMT", + } + } "Europe:Amsterdam"{ { "Europe_Central", diff --git a/source/data/misc/metadata.txt b/source/data/misc/metadata.txt index 8d02b8e..86c5f38 100644 --- a/source/data/misc/metadata.txt +++ b/source/data/misc/metadata.txt @@ -1279,6 +1279,14 @@ metadata:table(nofallback){ reason{"overlong"} replacement{"yo"} } + yue_CN{ + reason{"legacy"} + replacement{"yue_Hans_CN"} + } + yue_HK{ + reason{"legacy"} + replacement{"yue_Hant_HK"} + } zai{ reason{"macrolanguage"} replacement{"zap"} @@ -1347,163 +1355,311 @@ metadata:table(nofallback){ } } subdivision{ - CN-71{ + cn71{ reason{"overlong"} replacement{"TW"} } - CN-91{ + cn91{ reason{"overlong"} replacement{"HK"} } - CN-92{ + cn92{ reason{"overlong"} replacement{"MO"} } - FR-BL{ + czjc{ + reason{"deprecated"} + replacement{"cz31"} + } + czka{ + reason{"deprecated"} + replacement{"cz41"} + } + czkr{ + reason{"deprecated"} + replacement{"cz52"} + } + czli{ + reason{"deprecated"} + replacement{"cz51"} + } + czmo{ + reason{"deprecated"} + replacement{"cz80"} + } + czol{ + reason{"deprecated"} + replacement{"cz71"} + } + czpa{ + reason{"deprecated"} + replacement{"cz53"} + } + czpl{ + reason{"deprecated"} + replacement{"cz32"} + } + czst{ + reason{"deprecated"} + replacement{"cz20"} + } + czus{ + reason{"deprecated"} + replacement{"cz42"} + } + czzl{ + reason{"deprecated"} + replacement{"cz72"} + } + escn{ + reason{"overlong"} + replacement{"IC"} + } + fi01{ + reason{"overlong"} + replacement{"AX"} + } + fra{ + reason{"deprecated"} + replacement{"frges"} + } + frb{ + reason{"deprecated"} + replacement{"frnaq"} + } + frbl{ reason{"overlong"} replacement{"BL"} } - FR-GF{ + frc{ + reason{"deprecated"} + replacement{"frara"} + } + frcp{ + reason{"overlong"} + replacement{"CP"} + } + frd{ + reason{"deprecated"} + replacement{"frbfc"} + } + fre{ + reason{"deprecated"} + replacement{"frbre"} + } + frf{ + reason{"deprecated"} + replacement{"frcvl"} + } + frg{ + reason{"deprecated"} + replacement{"frges"} + } + frgf{ reason{"overlong"} replacement{"GF"} } - FR-GP{ + frgp{ reason{"overlong"} replacement{"GP"} } - FR-MF{ + frh{ + reason{"deprecated"} + replacement{"frcor"} + } + fri{ + reason{"deprecated"} + replacement{"frbfc"} + } + frj{ + reason{"deprecated"} + replacement{"fridf"} + } + frk{ + reason{"deprecated"} + replacement{"frocc"} + } + frl{ + reason{"deprecated"} + replacement{"frnaq"} + } + frm{ + reason{"deprecated"} + replacement{"frges"} + } + frmf{ reason{"overlong"} replacement{"MF"} } - FR-MQ{ + frmq{ reason{"overlong"} replacement{"MQ"} } - FR-NC{ + frn{ + reason{"deprecated"} + replacement{"frocc"} + } + frnc{ reason{"overlong"} replacement{"NC"} } - FR-PF{ + fro{ + reason{"deprecated"} + replacement{"frhdf"} + } + frp{ + reason{"deprecated"} + replacement{"frnor"} + } + frpf{ reason{"overlong"} replacement{"PF"} } - FR-PM{ + frpm{ reason{"overlong"} replacement{"PM"} } - FR-RE{ + frq{ + reason{"deprecated"} + replacement{"frnor"} + } + frr{ + reason{"deprecated"} + replacement{"frpdl"} + } + frre{ reason{"overlong"} replacement{"RE"} } - FR-TF{ + frs{ + reason{"deprecated"} + replacement{"frhdf"} + } + frt{ + reason{"deprecated"} + replacement{"frnaq"} + } + frtf{ reason{"overlong"} replacement{"TF"} } - FR-WF{ + fru{ + reason{"deprecated"} + replacement{"frpac"} + } + frv{ + reason{"deprecated"} + replacement{"frara"} + } + frwf{ reason{"overlong"} replacement{"WF"} } - FR-YT{ + fryt{ reason{"overlong"} replacement{"YT"} } - LA-XN{ + laxn{ reason{"deprecated"} - replacement{"LA-XS"} + replacement{"laxs"} } - LU-D{ + lud{ reason{"deprecated"} - replacement{"LU-CL LU-DI LU-RD LU-VD LU-WI"} + replacement{"lucl ludi lurd luvd luwi"} } - LU-G{ + lug{ reason{"deprecated"} - replacement{"LU-EC LU-GR LU-RM"} + replacement{"luec lugr lurm"} } - LU-L{ + lul{ reason{"deprecated"} - replacement{"LU-CA LU-ES LU-LU LU-ME"} + replacement{"luca lues lulu lume"} } - MR-NKC{ + mrnkc{ reason{"deprecated"} - replacement{"MR-13 MR-14 MR-15"} + replacement{"mr13 mr14 mr15"} } - NL-AW{ + nlaw{ reason{"overlong"} replacement{"AW"} } - NL-CW{ + nlcw{ reason{"overlong"} replacement{"CW"} } - NL-SX{ + nlsx{ reason{"overlong"} replacement{"SX"} } - NZ-N{ + nzn{ reason{"deprecated"} - replacement{"NZ-AUK NZ-BOP NZ-GIS NZ-HKB NZ-MWT NZ-NTL NZ-TKI NZ-WGN NZ-WKO"} + replacement{"nzauk nzbop nzgis nzhkb nzmwt nzntl nztki nzwgn nzwko"} } - NZ-S{ + nzs{ reason{"deprecated"} - replacement{"NZ-CAN NZ-MBH NZ-NSN NZ-OTA NZ-STL NZ-TAS NZ-WTC"} + replacement{"nzcan nzmbh nznsn nzota nzstl nztas nzwtc"} } - OM-BA{ + omba{ reason{"deprecated"} - replacement{"OM-BJ OM-BS"} + replacement{"ombj ombs"} } - OM-SH{ + omsh{ reason{"deprecated"} - replacement{"OM-SJ OM-SS"} + replacement{"omsj omss"} + } + shta{ + reason{"overlong"} + replacement{"TA"} } - TT-ETO{ + tteto{ reason{"deprecated"} - replacement{"TT-TOB"} + replacement{"tttob"} } - TT-RCM{ + ttrcm{ reason{"deprecated"} - replacement{"TT-MRC"} + replacement{"ttmrc"} } - TT-WTO{ + ttwto{ reason{"deprecated"} - replacement{"TT-TOB"} + replacement{"tttob"} } - TW-KHQ{ + twkhq{ reason{"deprecated"} - replacement{"TW-KHH"} + replacement{"twkhh"} } - TW-TNQ{ + twtnq{ reason{"deprecated"} - replacement{"TW-TNN"} + replacement{"twtnn"} } - TW-TPQ{ + twtpq{ reason{"deprecated"} - replacement{"TW-NWT"} + replacement{"twnwt"} } - TW-TXQ{ + twtxq{ reason{"deprecated"} - replacement{"TW-TXG"} + replacement{"twtxg"} } - US-AS{ + usas{ reason{"overlong"} replacement{"AS"} } - US-GU{ + usgu{ reason{"overlong"} replacement{"GU"} } - US-MP{ + usmp{ reason{"overlong"} replacement{"MP"} } - US-PR{ + uspr{ reason{"overlong"} replacement{"PR"} } - US-UM{ + usum{ reason{"overlong"} replacement{"UM"} } - US-VI{ + usvi{ reason{"overlong"} replacement{"VI"} } @@ -4107,6 +4263,7 @@ metadata:table(nofallback){ "bez_TZ", "bg_BG", "bgn_PK", + "blt_Tavt_VN", "bm_ML", "bm_Nkoo_ML", "bn_BD", @@ -4120,6 +4277,7 @@ metadata:table(nofallback){ "byn_ER", "ca_ES", "cch_NG", + "ccp_BD", "ce_RU", "cgg_UG", "chr_US", diff --git a/source/data/misc/plurals.txt b/source/data/misc/plurals.txt index 031595a..007a56d 100644 --- a/source/data/misc/plurals.txt +++ b/source/data/misc/plurals.txt @@ -3,79 +3,79 @@ plurals:table(nofallback){ locales{ af{"set8"} - ak{"set5"} + ak{"set6"} am{"set1"} - ar{"set34"} - ars{"set34"} + ar{"set33"} + ars{"set33"} as{"set1"} asa{"set8"} - ast{"set3"} + ast{"set4"} az{"set8"} - be{"set27"} + be{"set26"} bem{"set8"} bez{"set8"} bg{"set8"} - bh{"set5"} + bh{"set6"} bm{"set0"} bn{"set1"} bo{"set0"} - br{"set31"} + br{"set30"} brx{"set8"} - bs{"set20"} - ca{"set3"} + bs{"set19"} + ca{"set4"} ce{"set8"} cgg{"set8"} chr{"set8"} ckb{"set8"} - cs{"set25"} - cy{"set35"} - da{"set10"} - de{"set3"} - dsb{"set23"} + cs{"set24"} + cy{"set34"} + da{"set9"} + de{"set4"} + dsb{"set22"} dv{"set8"} dz{"set0"} ee{"set8"} el{"set8"} - en{"set3"} + en{"set4"} eo{"set8"} es{"set8"} - et{"set3"} + et{"set4"} eu{"set8"} fa{"set1"} ff{"set2"} - fi{"set3"} - fil{"set13"} + fi{"set4"} + fil{"set12"} fo{"set8"} fr{"set2"} fur{"set8"} - fy{"set3"} - ga{"set32"} - gd{"set21"} - gl{"set3"} + fy{"set4"} + ga{"set31"} + gd{"set20"} + gl{"set4"} gsw{"set8"} gu{"set1"} - guw{"set5"} - gv{"set33"} + guw{"set6"} + gv{"set32"} ha{"set8"} haw{"set8"} - he{"set24"} + he{"set23"} hi{"set1"} - hr{"set20"} - hsb{"set23"} + hr{"set19"} + hsb{"set22"} hu{"set8"} hy{"set2"} id{"set0"} ig{"set0"} ii{"set0"} in{"set0"} - is{"set11"} - it{"set3"} - iu{"set17"} - iw{"set24"} + is{"set10"} + it{"set4"} + iu{"set16"} + iw{"set23"} ja{"set0"} jbo{"set0"} jgo{"set8"} - ji{"set3"} + ji{"set4"} jmc{"set8"} jv{"set0"} jw{"set0"} @@ -93,206 +93,206 @@ plurals:table(nofallback){ ko{"set0"} ks{"set8"} ksb{"set8"} - ksh{"set16"} + ksh{"set15"} ku{"set8"} - kw{"set17"} + kw{"set16"} ky{"set8"} - lag{"set15"} + lag{"set14"} lb{"set8"} lg{"set8"} lkt{"set0"} - ln{"set5"} + ln{"set6"} lo{"set0"} - lt{"set28"} - lv{"set14"} + lt{"set27"} + lv{"set13"} mas{"set8"} - mg{"set5"} + mg{"set6"} mgo{"set8"} - mk{"set12"} + mk{"set11"} ml{"set8"} mn{"set8"} - mo{"set19"} + mo{"set18"} mr{"set1"} ms{"set0"} - mt{"set29"} + mt{"set28"} my{"set0"} nah{"set8"} - naq{"set17"} + naq{"set16"} nb{"set8"} nd{"set8"} ne{"set8"} - nl{"set3"} + nl{"set4"} nn{"set8"} nnh{"set8"} no{"set8"} nqo{"set0"} nr{"set8"} - nso{"set5"} + nso{"set6"} ny{"set8"} nyn{"set8"} om{"set8"} or{"set8"} os{"set8"} - pa{"set5"} + pa{"set6"} pap{"set8"} - pl{"set26"} - prg{"set14"} + pl{"set25"} + prg{"set13"} ps{"set8"} - pt{"set7"} - pt_PT{"set9"} + pt{"set3"} rm{"set8"} - ro{"set19"} + ro{"set18"} rof{"set8"} root{"set0"} - ru{"set30"} + ru{"set29"} rwk{"set8"} sah{"set0"} saq{"set8"} sdh{"set8"} - se{"set17"} + se{"set16"} seh{"set8"} ses{"set0"} sg{"set0"} - sh{"set20"} - shi{"set18"} - si{"set4"} - sk{"set25"} - sl{"set22"} - sma{"set17"} - smi{"set17"} - smj{"set17"} - smn{"set17"} - sms{"set17"} + sh{"set19"} + shi{"set17"} + si{"set5"} + sk{"set24"} + sl{"set21"} + sma{"set16"} + smi{"set16"} + smj{"set16"} + smn{"set16"} + sms{"set16"} sn{"set8"} so{"set8"} sq{"set8"} - sr{"set20"} + sr{"set19"} ss{"set8"} ssy{"set8"} st{"set8"} - sv{"set3"} - sw{"set3"} + sv{"set4"} + sw{"set4"} syr{"set8"} ta{"set8"} te{"set8"} teo{"set8"} th{"set0"} - ti{"set5"} + ti{"set6"} tig{"set8"} tk{"set8"} - tl{"set13"} + tl{"set12"} tn{"set8"} to{"set0"} tr{"set8"} ts{"set8"} - tzm{"set6"} + tzm{"set7"} ug{"set8"} - uk{"set30"} - ur{"set3"} + uk{"set29"} + ur{"set4"} uz{"set8"} ve{"set8"} vi{"set0"} vo{"set8"} vun{"set8"} - wa{"set5"} + wa{"set6"} wae{"set8"} wo{"set0"} xh{"set8"} xog{"set8"} - yi{"set3"} + yi{"set4"} yo{"set0"} yue{"set0"} zh{"set0"} zu{"set1"} } locales_ordinals{ - af{"set36"} - am{"set36"} - ar{"set36"} - as{"set53"} - az{"set51"} - be{"set41"} - bg{"set36"} - bn{"set53"} - bs{"set36"} - ca{"set49"} - ce{"set36"} - cs{"set36"} - cy{"set54"} - da{"set36"} - de{"set36"} - dsb{"set36"} - el{"set36"} - en{"set47"} - es{"set36"} - et{"set36"} - eu{"set36"} - fa{"set36"} - fi{"set36"} - fil{"set38"} - fr{"set38"} - fy{"set36"} - ga{"set38"} - gl{"set36"} - gu{"set52"} - he{"set36"} - hi{"set52"} - hr{"set36"} - hsb{"set36"} - hu{"set39"} - hy{"set38"} - id{"set36"} - in{"set36"} - is{"set36"} - it{"set44"} - iw{"set36"} - ja{"set36"} - ka{"set45"} - kk{"set43"} - km{"set36"} - kn{"set36"} - ko{"set36"} - ky{"set36"} - lo{"set38"} - lt{"set36"} - lv{"set36"} - mk{"set50"} - ml{"set36"} - mn{"set36"} - mo{"set38"} - mr{"set48"} - ms{"set38"} - my{"set36"} - nb{"set36"} - ne{"set40"} - nl{"set36"} - pa{"set36"} - pl{"set36"} - prg{"set36"} - pt{"set36"} - ro{"set38"} - root{"set36"} - ru{"set36"} - sh{"set36"} - si{"set36"} - sk{"set36"} - sl{"set36"} - sq{"set46"} - sr{"set36"} - sv{"set37"} - sw{"set36"} - ta{"set36"} - te{"set36"} - th{"set36"} - tl{"set38"} - tr{"set36"} - uk{"set42"} - ur{"set36"} - uz{"set36"} - vi{"set38"} - yue{"set36"} - zh{"set36"} - zu{"set36"} + af{"set35"} + am{"set35"} + ar{"set35"} + as{"set52"} + az{"set50"} + be{"set40"} + bg{"set35"} + bn{"set52"} + bs{"set35"} + ca{"set48"} + ce{"set35"} + cs{"set35"} + cy{"set53"} + da{"set35"} + de{"set35"} + dsb{"set35"} + el{"set35"} + en{"set46"} + es{"set35"} + et{"set35"} + eu{"set35"} + fa{"set35"} + fi{"set35"} + fil{"set37"} + fr{"set37"} + fy{"set35"} + ga{"set37"} + gl{"set35"} + gsw{"set35"} + gu{"set51"} + he{"set35"} + hi{"set51"} + hr{"set35"} + hsb{"set35"} + hu{"set38"} + hy{"set37"} + id{"set35"} + in{"set35"} + is{"set35"} + it{"set43"} + iw{"set35"} + ja{"set35"} + ka{"set44"} + kk{"set42"} + km{"set35"} + kn{"set35"} + ko{"set35"} + ky{"set35"} + lo{"set37"} + lt{"set35"} + lv{"set35"} + mk{"set49"} + ml{"set35"} + mn{"set35"} + mo{"set37"} + mr{"set47"} + ms{"set37"} + my{"set35"} + nb{"set35"} + ne{"set39"} + nl{"set35"} + pa{"set35"} + pl{"set35"} + prg{"set35"} + pt{"set35"} + ro{"set37"} + root{"set35"} + ru{"set35"} + sh{"set35"} + si{"set35"} + sk{"set35"} + sl{"set35"} + sq{"set45"} + sr{"set35"} + sv{"set36"} + sw{"set35"} + ta{"set35"} + te{"set35"} + th{"set35"} + tl{"set37"} + tr{"set35"} + uk{"set41"} + ur{"set35"} + uz{"set35"} + vi{"set37"} + yue{"set35"} + zh{"set35"} + zu{"set35"} } rules{ set0{ @@ -309,13 +309,6 @@ plurals:table(nofallback){ } } set10{ - one{"n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6"} - other{ - " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0" - ", 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - set11{ one{ "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31," " 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 100" @@ -327,7 +320,7 @@ plurals:table(nofallback){ "00000.0, 1000000.0, …" } } - set12{ + set11{ one{ "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 6" "1, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1," @@ -339,7 +332,7 @@ plurals:table(nofallback){ "000000.0, …" } } - set13{ + set12{ one{ "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 1" "0 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 10" @@ -352,7 +345,7 @@ plurals:table(nofallback){ "6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" } } - set14{ + set13{ one{ "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != " "11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, " @@ -370,7 +363,7 @@ plurals:table(nofallback){ "10000.0, 100000.0, 1000000.0, …" } } - set15{ + set14{ one{"i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6"} other{ " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3." @@ -378,7 +371,7 @@ plurals:table(nofallback){ } zero{"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000"} } - set16{ + set15{ one{"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000"} other{ " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0." @@ -386,7 +379,7 @@ plurals:table(nofallback){ } zero{"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000"} } - set17{ + set16{ one{"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000"} other{ " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0" @@ -394,7 +387,7 @@ plurals:table(nofallback){ } two{"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000"} } - set18{ + set17{ few{ "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, " "9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00" @@ -405,7 +398,7 @@ plurals:table(nofallback){ ".9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } - set19{ + set18{ few{ "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101," " 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1" @@ -414,14 +407,7 @@ plurals:table(nofallback){ one{"i = 1 and v = 0 @integer 1"} other{" @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"} } - set2{ - one{"i = 0,1 @integer 0, 1 @decimal 0.0~1.5"} - other{ - " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3." - "5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - set20{ + set19{ few{ "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f" " % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, " @@ -439,7 +425,14 @@ plurals:table(nofallback){ " 1000000.0, …" } } - set21{ + set2{ + one{"i = 0,1 @integer 0, 1 @decimal 0.0~1.5"} + other{ + " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3." + "5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + set20{ few{ "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7" ".0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00" @@ -457,7 +450,7 @@ plurals:table(nofallback){ "00, 2.0000" } } - set22{ + set21{ few{ "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204" ", 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal" @@ -473,7 +466,7 @@ plurals:table(nofallback){ " 1002, …" } } - set23{ + set22{ few{ "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, " "203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … " @@ -496,7 +489,7 @@ plurals:table(nofallback){ "7.2, 10.2, 100.2, 1000.2, …" } } - set24{ + set23{ many{ "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70," " 80, 90, 100, 1000, 10000, 100000, 1000000, …" @@ -508,7 +501,7 @@ plurals:table(nofallback){ } two{"i = 2 and v = 0 @integer 2"} } - set25{ + set24{ few{"i = 2..4 and v = 0 @integer 2~4"} many{ "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1" @@ -517,7 +510,7 @@ plurals:table(nofallback){ one{"i = 1 and v = 0 @integer 1"} other{" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"} } - set26{ + set25{ few{ "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 3" "2~34, 42~44, 52~54, 62, 102, 1002, …" @@ -533,7 +526,7 @@ plurals:table(nofallback){ ".0, …" } } - set27{ + set26{ few{ "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~4" "4, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0," @@ -551,7 +544,7 @@ plurals:table(nofallback){ } other{" @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …"} } - set28{ + set27{ few{ "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, " "… @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002" @@ -569,7 +562,7 @@ plurals:table(nofallback){ "1000.0, 10000.0, 100000.0, 1000000.0, …" } } - set29{ + set28{ few{ "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal" " 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …" @@ -584,14 +577,7 @@ plurals:table(nofallback){ ".9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } - set3{ - one{"i = 1 and v = 0 @integer 1"} - other{ - " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0" - "~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - set30{ + set29{ few{ "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 3" "2~34, 42~44, 52~54, 62, 102, 1002, …" @@ -609,7 +595,14 @@ plurals:table(nofallback){ ".0, …" } } - set31{ + set3{ + one{"i = 0..1 @integer 0, 1 @decimal 0.0~1.5"} + other{ + " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3." + "5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + set30{ few{ "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9" ", 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0" @@ -634,7 +627,7 @@ plurals:table(nofallback){ "2.0, 1002.0, …" } } - set32{ + set31{ few{ "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00," " 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000" @@ -651,7 +644,7 @@ plurals:table(nofallback){ } two{"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000"} } - set33{ + set32{ few{ "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 1" "20, 140, 1000, 10000, 100000, 1000000, …" @@ -670,7 +663,7 @@ plurals:table(nofallback){ "02, …" } } - set34{ + set33{ few{ "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5" ".0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …" @@ -688,7 +681,7 @@ plurals:table(nofallback){ two{"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000"} zero{"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000"} } - set35{ + set34{ few{"n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000"} many{"n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000"} one{"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000"} @@ -700,53 +693,50 @@ plurals:table(nofallback){ two{"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000"} zero{"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000"} } - set36{ + set35{ other{" @integer 0~15, 100, 1000, 10000, 100000, 1000000, …"} } - set37{ + set36{ one{ "n % 10 = 1,2 and n % 100 != 11,12 @integer 1, 2, 21, 22, 31, 32, 41," " 42, 51, 52, 61, 62, 71, 72, 81, 82, 101, 1001, …" } other{" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, …"} } - set38{ + set37{ one{"n = 1 @integer 1"} other{" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, …"} } - set39{ + set38{ one{"n = 1,5 @integer 1, 5"} other{" @integer 0, 2~4, 6~17, 100, 1000, 10000, 100000, 1000000, …"} } + set39{ + one{"n = 1..4 @integer 1~4"} + other{" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"} + } set4{ - one{ - "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.0" - "0, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000" - } + one{"i = 1 and v = 0 @integer 1"} other{ - " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0." - "9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0" + "~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } set40{ - one{"n = 1..4 @integer 1~4"} - other{" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"} - } - set41{ few{ "n % 10 = 2,3 and n % 100 != 12,13 @integer 2, 3, 22, 23, 32, 33, 42," " 43, 52, 53, 62, 63, 72, 73, 82, 83, 102, 1002, …" } other{" @integer 0, 1, 4~17, 100, 1000, 10000, 100000, 1000000, …"} } - set42{ + set41{ few{ "n % 10 = 3 and n % 100 != 13 @integer 3, 23, 33, 43, 53, 63, 73, 83," " 103, 1003, …" } other{" @integer 0~2, 4~16, 100, 1000, 10000, 100000, 1000000, …"} } - set43{ + set42{ many{ "n % 10 = 6 or n % 10 = 9 or n % 10 = 0 and n != 0 @integer 6, 9, 10," " 16, 19, 20, 26, 29, 30, 36, 39, 40, 100, 1000, 10000, 100000, 10000" @@ -754,16 +744,16 @@ plurals:table(nofallback){ } other{" @integer 0~5, 7, 8, 11~15, 17, 18, 21, 101, 1001, …"} } - set44{ + set43{ many{"n = 11,8,80,800 @integer 8, 11, 80, 800"} other{" @integer 0~7, 9, 10, 12~17, 100, 1000, 10000, 100000, 1000000, …"} } - set45{ + set44{ many{"i = 0 or i % 100 = 2..20,40,60,80 @integer 0, 2~16, 102, 1002, …"} one{"i = 1 @integer 1"} other{" @integer 21~36, 100, 1000, 10000, 100000, 1000000, …"} } - set46{ + set45{ many{ "n % 10 = 4 and n % 100 != 14 @integer 4, 24, 34, 44, 54, 64, 74, 84," " 104, 1004, …" @@ -771,7 +761,7 @@ plurals:table(nofallback){ one{"n = 1 @integer 1"} other{" @integer 0, 2, 3, 5~17, 100, 1000, 10000, 100000, 1000000, …"} } - set47{ + set46{ few{ "n % 10 = 3 and n % 100 != 13 @integer 3, 23, 33, 43, 53, 63, 73, 83," " 103, 1003, …" @@ -786,29 +776,19 @@ plurals:table(nofallback){ " 102, 1002, …" } } - set48{ + set47{ few{"n = 4 @integer 4"} one{"n = 1 @integer 1"} other{" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"} two{"n = 2,3 @integer 2, 3"} } - set49{ + set48{ few{"n = 4 @integer 4"} one{"n = 1,3 @integer 1, 3"} other{" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"} two{"n = 2 @integer 2"} } - set5{ - one{ - "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, " - "0.0000, 1.0000" - } - other{ - " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0." - "9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - set50{ + set49{ many{ "i % 10 = 7,8 and i % 100 != 17,18 @integer 7, 8, 27, 28, 37, 38, 47," " 48, 57, 58, 67, 68, 77, 78, 87, 88, 107, 1007, …" @@ -823,7 +803,17 @@ plurals:table(nofallback){ " 102, 1002, …" } } - set51{ + set5{ + one{ + "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.0" + "0, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000" + } + other{ + " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0." + "9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + set50{ few{ "i % 10 = 3,4 or i % 1000 = 100,200,300,400,500,600,700,800,900 @inte" "ger 3, 4, 13, 14, 23, 24, 33, 34, 43, 44, 53, 54, 63, 64, 73, 74, 10" @@ -842,21 +832,21 @@ plurals:table(nofallback){ "00000, 1000000, …" } } - set52{ + set51{ few{"n = 4 @integer 4"} many{"n = 6 @integer 6"} one{"n = 1 @integer 1"} other{" @integer 0, 5, 7~20, 100, 1000, 10000, 100000, 1000000, …"} two{"n = 2,3 @integer 2, 3"} } - set53{ + set52{ few{"n = 4 @integer 4"} many{"n = 6 @integer 6"} one{"n = 1,5,7,8,9,10 @integer 1, 5, 7~10"} other{" @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, …"} two{"n = 2,3 @integer 2, 3"} } - set54{ + set53{ few{"n = 3,4 @integer 3, 4"} many{"n = 5,6 @integer 5, 6"} one{"n = 1 @integer 1"} @@ -866,23 +856,23 @@ plurals:table(nofallback){ } set6{ one{ - "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0," - " 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 2" - "3.0, 24.0" + "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, " + "0.0000, 1.0000" } other{ - " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0." - "1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0." + "9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } set7{ one{ - "n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.0" - "00, 1.000, 0.0000, 1.0000" + "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0," + " 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 2" + "3.0, 24.0" } other{ - " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0." - "9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0." + "1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } set8{ @@ -893,10 +883,10 @@ plurals:table(nofallback){ } } set9{ - one{"n = 1 and v = 0 @integer 1"} + one{"n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6"} other{ " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0" - "~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + ", 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" } } } diff --git a/source/data/misc/supplementalData.txt b/source/data/misc/supplementalData.txt index 86f8039..1cc21d7 100644 --- a/source/data/misc/supplementalData.txt +++ b/source/data/misc/supplementalData.txt @@ -1841,7 +1841,7 @@ supplementalData:table(nofallback){ "islamic-tbla", } } - cldrVersion{"30.0.3"} + cldrVersion{"31.0.1"} codeMappings{ { "AA", @@ -4100,6 +4100,7 @@ supplementalData:table(nofallback){ "BRZ", "BUK", "BYB", + "BYR", "CHE", "CHW", "CLE~F", @@ -4229,7 +4230,6 @@ supplementalData:table(nofallback){ "BTN", "BWP", "BYN", - "BYR", "BZD", "CAD", "CDF", @@ -7355,20 +7355,53 @@ supplementalData:table(nofallback){ "ba01~9", "ba10", "bh16", + "cdbn", + "cdka", + "cdkw", + "cdor", "ci01~9", "ci10~9", "cn71", "cn91~2", + "cz10a~f", + "cz611~5", + "cz621~7", + "czjc", + "czjm", + "czka", + "czkr", + "czli", + "czmo", + "czol", + "czpa", + "czpl", + "czpr", + "czst", + "czus", + "czvy", + "czzl", + "escn", + "fi01", + "fra~b", "frbl", + "frc", + "frcp", + "frd~g", "frgf", "frgp", + "frh~m", "frmf", "frmq", + "frn", "frnc", + "fro~p", "frpf", "frpm", + "frq~r", "frre", + "frs~t", "frtf", + "fru~v", "frwf", "fryt", "gbant", @@ -7396,6 +7429,18 @@ supplementalData:table(nofallback){ "gbnym", "gbomh", "gbstb", + "gr01", + "gr03~7", + "gr11~7", + "gr21~4", + "gr31~4", + "gr41~4", + "gr51~9", + "gr61~4", + "gr71~3", + "gr81~5", + "gr91~4", + "gra1", "is0", "laxn", "lud", @@ -7414,6 +7459,7 @@ supplementalData:table(nofallback){ "mk79", "mk84", "mrnkc", + "mxdif", "nlaw", "nlcw", "nlsx", @@ -7421,6 +7467,7 @@ supplementalData:table(nofallback){ "nzs", "omba", "omsh", + "shta", "tteto", "ttrcm", "ttwto", @@ -7428,6 +7475,7 @@ supplementalData:table(nofallback){ "twtnq", "twtpq", "twtxq", + "ug331", "usas", "usgu", "usmp", @@ -7609,7 +7657,7 @@ supplementalData:table(nofallback){ "bd40~9", "bd50~9", "bd60~4", - "bda~g", + "bda~h", "bebru", "bevan", "bevbr", @@ -7811,16 +7859,29 @@ supplementalData:table(nofallback){ "cask", "cayt", "cdbc", - "cdbn", + "cdbu", "cdeq", - "cdka", + "cdhk~l", + "cdhu", + "cdit", + "cdkc", "cdke", + "cdkg", + "cdkl", "cdkn", - "cdkw", + "cdks", + "cdlo", + "cdlu", "cdma", + "cdmn~o", "cdnk", - "cdor", + "cdnu", + "cdsa", "cdsk", + "cdsu", + "cdta", + "cdto", + "cdtu", "cfac", "cfbb", "cfbgf", @@ -7979,36 +8040,37 @@ supplementalData:table(nofallback){ "cvta", "cvts", "cy01~6", + "cz10", "cz101~9", - "cz10a~f", + "cz110~9", + "cz120~2", + "cz20", "cz201~9", "cz20a~c", + "cz31", "cz311~7", + "cz32", "cz321~7", + "cz41", "cz411~3", + "cz42", "cz421~7", + "cz51", "cz511~4", + "cz52", "cz521~5", + "cz53", "cz531~4", - "cz611~5", - "cz621~7", + "cz63", + "cz631~5", + "cz64", + "cz641~7", + "cz71", "cz711~5", + "cz72", "cz721~4", + "cz80", "cz801~6", - "czjc", - "czjm", - "czka", - "czkr", - "czli", - "czmo", - "czol", - "czpa", - "czpl", - "czpr", - "czst", - "czus", - "czvy", - "czzl", "debb", "debe", "debw", @@ -8109,7 +8171,8 @@ supplementalData:table(nofallback){ "esc", "esca~c", "esce", - "escl~o", + "escl~m", + "esco", "escr~u", "esex", "esga", @@ -8164,7 +8227,7 @@ supplementalData:table(nofallback){ "etor", "etsn~o", "etti", - "fi01~9", + "fi02~9", "fi10~9", "fj01~9", "fj10~4", @@ -8188,9 +8251,22 @@ supplementalData:table(nofallback){ "fr70~9", "fr80~9", "fr90~5", - "fra~c", - "frcp", - "frd~v", + "frara", + "frbfc", + "frbre", + "frcor", + "frcvl", + "frges", + "frgua", + "frhdf", + "fridf", + "frlre", + "frmay", + "frnaq", + "frnor", + "frocc", + "frpac", + "frpdl", "ga1~9", "gbabc~e", "gbagb", @@ -8480,21 +8556,8 @@ supplementalData:table(nofallback){ "gqkn", "gqli", "gqwn", - "gr01", - "gr03~7", - "gr11~7", - "gr21~4", - "gr31~4", - "gr41~4", - "gr51~9", - "gr61~4", "gr69", - "gr71~3", - "gr81~5", - "gr91~4", - "gra", - "gra1", - "grb~m", + "gra~m", "gtav", "gtbv", "gtcm", @@ -8888,6 +8951,7 @@ supplementalData:table(nofallback){ "kzalm", "kzast", "kzaty", + "kzbay", "kzkar", "kzkus", "kzkzy", @@ -9290,9 +9354,9 @@ supplementalData:table(nofallback){ "mxcam", "mxchh", "mxchp", + "mxcmx", "mxcoa", "mxcol", - "mxdif", "mxdur", "mxgro", "mxgua", @@ -9824,7 +9888,6 @@ supplementalData:table(nofallback){ "sg01~5", "shac", "shhl", - "shta", "si001~9", "si010~9", "si020~9", @@ -9847,7 +9910,7 @@ supplementalData:table(nofallback){ "si180~9", "si190~9", "si200~9", - "si210~2", + "si210~3", "skbc", "skbl", "skki", @@ -9986,6 +10049,7 @@ supplementalData:table(nofallback){ "tjdu", "tjgb", "tjkt", + "tjra", "tjsu", "tlal", "tlan", @@ -10108,10 +10172,10 @@ supplementalData:table(nofallback){ "ug301~9", "ug310~9", "ug320~9", - "ug330~1", + "ug330", "ug401~9", "ug410~9", - "ug420~5", + "ug420~6", "ugc", "uge", "ugn", @@ -10742,6 +10806,7 @@ supplementalData:table(nofallback){ "nulik", "osojs", "oxendict", + "pahawh2~4", "pamaka", "petr1708", "pinyin", @@ -11565,10 +11630,10 @@ supplementalData:table(nofallback){ } ccp{ primary{ - scripts{"Beng"} - } - secondary{ - scripts{"Cakm"} + scripts{ + "Beng", + "Cakm", + } } } ce{ @@ -11831,7 +11896,6 @@ supplementalData:table(nofallback){ "BE", "CH", "DE", - "IT", "LI", "LU", } @@ -12997,6 +13061,11 @@ supplementalData:table(nofallback){ scripts{"Arab"} } } + ife{ + primary{ + scripts{"Latn"} + } + } ig{ primary{ scripts{"Latn"} @@ -13060,6 +13129,7 @@ supplementalData:table(nofallback){ "CH", "IT", "SM", + "VA", } } secondary{ @@ -13069,7 +13139,6 @@ supplementalData:table(nofallback){ "HR", "MT", "US", - "VA", } } } @@ -13117,9 +13186,6 @@ supplementalData:table(nofallback){ primary{ scripts{"Deva"} } - secondary{ - territories{"NP"} - } } jpr{ primary{ @@ -14352,9 +14418,6 @@ supplementalData:table(nofallback){ primary{ scripts{"Deva"} } - secondary{ - territories{"NP"} - } } ng{ primary{ @@ -16475,6 +16538,66 @@ supplementalData:table(nofallback){ languageMatching{ written{ { + "no", + "nb", + "99", + "0", + } + { + "hr", + "bs", + "96", + "0", + } + { + "sh", + "bs", + "96", + "0", + } + { + "sh", + "hr", + "96", + "0", + } + { + "sh", + "sr", + "96", + "0", + } + { + "ssy", + "aa", + "96", + "0", + } + { + "gsw", + "de", + "96", + "1", + } + { + "lb", + "de", + "96", + "1", + } + { + "da", + "no", + "92", + "0", + } + { + "da", + "nb", + "92", + "0", + } + { "ab", "ru", "90", @@ -16511,13 +16634,19 @@ supplementalData:table(nofallback){ "1", } { + "az", + "ru", + "90", + "1", + } + { "az_Latn", "ru_Cyrl", "90", "1", } { - "az", + "be", "ru", "90", "1", @@ -16529,14 +16658,14 @@ supplementalData:table(nofallback){ "1", } { - "be", - "ru", + "bho", + "hi", "90", "1", } { - "bh", - "hi", + "bn", + "en", "90", "1", } @@ -16547,12 +16676,6 @@ supplementalData:table(nofallback){ "1", } { - "bn", - "en", - "90", - "1", - } - { "br", "fr", "90", @@ -16577,12 +16700,6 @@ supplementalData:table(nofallback){ "1", } { - "ckb", - "ku", - "92", - "0", - } - { "co", "fr", "90", @@ -16601,72 +16718,18 @@ supplementalData:table(nofallback){ "1", } { - "da", - "nb", - "92", - "0", - } - { - "da", - "no", - "92", - "0", - } - { "ee", "en", "90", "1", } { - "en_*_001", - "en_*_*", - "96", - "0", - } - { - "en_*_GB", - "en_*_*", - "96", - "0", - } - { - "en_*_US", - "en_*_*", - "94", - "0", - } - { - "en_*_*", - "en_*_*", - "95", - "0", - } - { "eo", "en", "90", "1", } { - "es_*_419", - "es_*_*", - "96", - "0", - } - { - "es_*_ES", - "es_*_*", - "92", - "0", - } - { - "es_*_*", - "es_*_*", - "95", - "0", - } - { "et", "fi", "90", @@ -16691,13 +16754,13 @@ supplementalData:table(nofallback){ "1", } { - "gaa", + "ga", "en", "90", "1", } { - "ga", + "gaa", "en", "90", "1", @@ -16721,12 +16784,6 @@ supplementalData:table(nofallback){ "1", } { - "gsw", - "de", - "96", - "1", - } - { "gu", "hi", "90", @@ -16745,30 +16802,24 @@ supplementalData:table(nofallback){ "1", } { - "hr", - "bs", - "96", - "0", - } - { "ht", "fr", "90", "1", } { - "hy_Armn", - "ru_Cyrl", - "90", - "1", - } - { "hy", "ru", "90", "1", } { + "hy_Armn", + "ru_Cyrl", + "90", + "1", + } + { "ia", "en", "90", @@ -16817,19 +16868,13 @@ supplementalData:table(nofallback){ "1", } { - "km_Khmr", - "en_Latn", - "90", - "1", - } - { "km", "en", "90", "1", } { - "kn_Knda", + "km_Khmr", "en_Latn", "90", "1", @@ -16841,16 +16886,16 @@ supplementalData:table(nofallback){ "1", } { - "kri", - "en", + "kn_Knda", + "en_Latn", "90", "1", } { - "ku", - "ckb", - "96", - "0", + "kri", + "en", + "90", + "1", } { "ku", @@ -16871,12 +16916,6 @@ supplementalData:table(nofallback){ "1", } { - "lb", - "de", - "96", - "1", - } - { "lg", "en", "90", @@ -16889,14 +16928,14 @@ supplementalData:table(nofallback){ "1", } { - "lo_Laoo", - "en_Latn", + "lo", + "en", "90", "1", } { - "lo", - "en", + "lo_Laoo", + "en_Latn", "90", "1", } @@ -16937,14 +16976,14 @@ supplementalData:table(nofallback){ "1", } { - "ml_Mlym", - "en_Latn", + "ml", + "en", "90", "1", } { - "ml", - "en", + "ml_Mlym", + "en_Latn", "90", "1", } @@ -16973,19 +17012,13 @@ supplementalData:table(nofallback){ "1", } { - "my_Mymr", - "en_Latn", - "90", - "1", - } - { "my", "en", "90", "1", } { - "ne_Deva", + "my_Mymr", "en_Latn", "90", "1", @@ -16997,6 +17030,12 @@ supplementalData:table(nofallback){ "1", } { + "ne_Deva", + "en_Latn", + "90", + "1", + } + { "nn", "nb", "90", @@ -17009,12 +17048,6 @@ supplementalData:table(nofallback){ "1", } { - "no", - "nb", - "99", - "0", - } - { "nso", "en", "90", @@ -17045,19 +17078,13 @@ supplementalData:table(nofallback){ "1", } { - "or_Orya", - "en_Latn", - "90", - "1", - } - { "or", "en", "90", "1", } { - "pa_Guru", + "or_Orya", "en_Latn", "90", "1", @@ -17069,14 +17096,14 @@ supplementalData:table(nofallback){ "1", } { - "pcm", - "en", + "pa_Guru", + "en_Latn", "90", "1", } { - "ps_Arab", - "en_Latn", + "pcm", + "en", "90", "1", } @@ -17087,28 +17114,10 @@ supplementalData:table(nofallback){ "1", } { - "pt_*_BR", - "pt_*_US", - "96", - "0", - } - { - "pt_*_BR", - "pt_*_*", - "92", - "0", - } - { - "pt_*_US", - "pt_*_*", - "92", - "0", - } - { - "pt_*_*", - "pt_*_*", - "96", - "0", + "ps_Arab", + "en_Latn", + "90", + "1", } { "qu", @@ -17141,37 +17150,13 @@ supplementalData:table(nofallback){ "1", } { - "sd_Arab", - "en_Latn", - "90", - "1", - } - { "sd", "en", "90", "1", } { - "sh", - "bs", - "96", - "0", - } - { - "sh", - "hr", - "96", - "0", - } - { - "sh", - "sr", - "96", - "0", - } - { - "si_Sinh", + "sd_Arab", "en_Latn", "90", "1", @@ -17183,6 +17168,12 @@ supplementalData:table(nofallback){ "1", } { + "si_Sinh", + "en_Latn", + "90", + "1", + } + { "sn", "en", "90", @@ -17201,30 +17192,6 @@ supplementalData:table(nofallback){ "1", } { - "sr_Latn", - "sr_Cyrl", - "95", - "0", - } - { - "sr", - "bs", - "96", - "0", - } - { - "sr", - "hr", - "96", - "0", - } - { - "ssy", - "aa", - "96", - "0", - } - { "st", "en", "90", @@ -17243,19 +17210,13 @@ supplementalData:table(nofallback){ "1", } { - "ta_Taml", - "en_Latn", - "90", - "1", - } - { "ta", "en", "90", "1", } { - "te_Telu", + "ta_Taml", "en_Latn", "90", "1", @@ -17267,14 +17228,14 @@ supplementalData:table(nofallback){ "1", } { - "tg", - "ru", + "te_Telu", + "en_Latn", "90", "1", } { - "ti_Ethi", - "en_Latn", + "tg", + "ru", "90", "1", } @@ -17285,8 +17246,8 @@ supplementalData:table(nofallback){ "1", } { - "tk_Latn", - "ru_Cyrl", + "ti_Ethi", + "en_Latn", "90", "1", } @@ -17297,6 +17258,12 @@ supplementalData:table(nofallback){ "1", } { + "tk_Latn", + "ru_Cyrl", + "90", + "1", + } + { "tlh", "en", "90", @@ -17333,20 +17300,14 @@ supplementalData:table(nofallback){ "1", } { - "ur_Arab", - "en_Latn", - "90", - "1", - } - { "ur", "en", "90", "1", } { - "uz_Latn", - "ru_Cyrl", + "ur_Arab", + "en_Latn", "90", "1", } @@ -17357,6 +17318,12 @@ supplementalData:table(nofallback){ "1", } { + "uz_Latn", + "ru_Cyrl", + "90", + "1", + } + { "wo", "fr", "90", @@ -17369,14 +17336,14 @@ supplementalData:table(nofallback){ "1", } { - "yi_Hebr", - "en_Latn", + "yi", + "en", "90", "1", } { - "yi", - "en", + "yi_Hebr", + "en_Latn", "90", "1", } @@ -17387,6128 +17354,7102 @@ supplementalData:table(nofallback){ "1", } { - "zh_Hant_HK", - "zh_Hant_MO", - "97", - "0", - } - { "zu", "en", "90", "1", } { - "*_Hans", - "*_Hant", + "sr_Latn", + "sr_Cyrl", + "95", + "0", + } + { + "zh_Hans", + "zh_Hant", "85", "1", } { - "*_Hant", - "*_Hans", + "zh_Hant", + "zh_Hans", "81", "1", } { - "*_*_*", - "*_*_*", + "zh_Hant_HK", + "zh_Hant_MO", + "97", + "0", + } + { + "pt_*_BR", + "pt_*_US", "96", "0", } { - "*_*", - "*_*", - "60", + "pt_*_US", + "pt_*_*", + "92", "0", } { - "*", - "*", - "20", + "pt_*_BR", + "pt_*_*", + "92", "0", } - } - } - measurementData{ - 001{ - MeasurementSystem:int{0} - PaperSize:intvector{ - 297, - 210, + { + "pt_*_*", + "pt_*_*", + "96", + "0", } - } - BS{ - MeasurementSystemCategory{ - temperature:int{1} + { + "en_*_US", + "en_*_*", + "94", + "0", } - } - BZ{ - MeasurementSystemCategory{ - temperature:int{1} + { + "en_*_GB", + "en_*_*", + "96", + "0", } - PaperSize:intvector{ - 279, - 216, + { + "en_*_001", + "en_*_*", + "96", + "0", } - } - CA{ - PaperSize:intvector{ - 279, - 216, + { + "en_*_*", + "en_*_*", + "95", + "0", } - } - CL{ - PaperSize:intvector{ - 279, - 216, + { + "es_*_ES", + "es_*_*", + "92", + "0", } - } - CO{ - PaperSize:intvector{ - 279, - 216, + { + "es_*_419", + "es_*_*", + "96", + "0", } - } - CR{ - PaperSize:intvector{ - 279, - 216, + { + "es_*_*", + "es_*_*", + "95", + "0", } - } - GB{ - MeasurementSystem:int{2} - } - GT{ - PaperSize:intvector{ - 279, - 216, + { + "*", + "*", + "20", + "0", } - } - KY{ - MeasurementSystemCategory{ - temperature:int{1} + { + "*_*", + "*_*", + "60", + "0", } - } - LR{ - MeasurementSystem:int{1} - MeasurementSystemCategory{ - temperature:int{0} + { + "*_*_*", + "*_*_*", + "96", + "0", } } - MM{ - MeasurementSystem:int{1} - MeasurementSystemCategory{ - temperature:int{0} + } + languageMatchingInfo{ + written{ + matchVariable{ + americas{"019"} + cnsar{"HK+MO"} + enUS{"AS+GU+MH+MP+PR+UM+US+VI"} + maghreb{"MA+DZ+TN+LY+MR+EH"} } - } - MX{ - PaperSize:intvector{ - 279, - 216, + paradigmLocales{ + "en", + "en-GB", + "es", + "es-419", + "pt-BR", + "pt-PT", } } - NI{ - PaperSize:intvector{ - 279, - 216, + } + languageMatchingNew{ + written{ + { + "no", + "nb", + "1", + "0", } - } - PA{ - PaperSize:intvector{ - 279, - 216, + { + "hr", + "bs", + "4", + "0", } - } - PH{ - PaperSize:intvector{ - 279, - 216, + { + "sh", + "bs", + "4", + "0", } - } - PR{ - MeasurementSystemCategory{ - temperature:int{1} + { + "sh", + "hr", + "4", + "0", } - PaperSize:intvector{ - 279, - 216, + { + "sh", + "sr", + "4", + "0", } - } - PW{ - MeasurementSystemCategory{ - temperature:int{1} + { + "ssy", + "aa", + "4", + "0", } - } - SV{ - PaperSize:intvector{ - 279, - 216, + { + "gsw", + "de", + "4", + "1", } - } - US{ - MeasurementSystem:int{1} - PaperSize:intvector{ - 279, - 216, + { + "lb", + "de", + "4", + "1", } - } - VE{ - PaperSize:intvector{ - 279, - 216, + { + "da", + "no", + "8", + "0", + } + { + "da", + "nb", + "8", + "0", + } + { + "ab", + "ru", + "10", + "1", + } + { + "ach", + "en", + "10", + "1", + } + { + "af", + "nl", + "10", + "1", + } + { + "ak", + "en", + "10", + "1", + } + { + "ay", + "es", + "10", + "1", + } + { + "az", + "ru", + "10", + "1", + } + { + "be", + "ru", + "10", + "1", + } + { + "bem", + "en", + "10", + "1", + } + { + "bh", + "hi", + "10", + "1", + } + { + "bn", + "en", + "10", + "1", + } + { + "br", + "fr", + "10", + "1", + } + { + "ceb", + "fil", + "10", + "1", + } + { + "chr", + "en", + "10", + "1", + } + { + "ckb", + "ar", + "10", + "1", + } + { + "co", + "fr", + "10", + "1", + } + { + "crs", + "fr", + "10", + "1", + } + { + "cy", + "en", + "10", + "1", + } + { + "ee", + "en", + "10", + "1", + } + { + "eo", + "en", + "10", + "1", + } + { + "et", + "fi", + "10", + "1", + } + { + "eu", + "es", + "10", + "1", + } + { + "fo", + "da", + "10", + "1", + } + { + "fy", + "nl", + "10", + "1", + } + { + "ga", + "en", + "10", + "1", + } + { + "gaa", + "en", + "10", + "1", + } + { + "gd", + "en", + "10", + "1", + } + { + "gl", + "es", + "10", + "1", + } + { + "gn", + "es", + "10", + "1", + } + { + "gu", + "hi", + "10", + "1", + } + { + "ha", + "en", + "10", + "1", + } + { + "haw", + "en", + "10", + "1", + } + { + "ht", + "fr", + "10", + "1", + } + { + "hy", + "ru", + "10", + "1", + } + { + "ia", + "en", + "10", + "1", + } + { + "ig", + "en", + "10", + "1", + } + { + "is", + "en", + "10", + "1", + } + { + "jv", + "id", + "10", + "1", + } + { + "ka", + "en", + "10", + "1", + } + { + "kg", + "fr", + "10", + "1", + } + { + "kk", + "ru", + "10", + "1", + } + { + "km", + "en", + "10", + "1", + } + { + "kn", + "en", + "10", + "1", + } + { + "kri", + "en", + "10", + "1", + } + { + "ku", + "tr", + "10", + "1", + } + { + "ky", + "ru", + "10", + "1", + } + { + "la", + "it", + "10", + "1", + } + { + "lg", + "en", + "10", + "1", + } + { + "ln", + "fr", + "10", + "1", + } + { + "lo", + "en", + "10", + "1", + } + { + "loz", + "en", + "10", + "1", + } + { + "lua", + "fr", + "10", + "1", + } + { + "mfe", + "en", + "10", + "1", + } + { + "mg", + "fr", + "10", + "1", + } + { + "mi", + "en", + "10", + "1", + } + { + "mk", + "bg", + "10", + "1", + } + { + "ml", + "en", + "10", + "1", + } + { + "mn", + "ru", + "10", + "1", + } + { + "mr", + "hi", + "10", + "1", + } + { + "ms", + "id", + "10", + "1", + } + { + "mt", + "en", + "10", + "1", + } + { + "my", + "en", + "10", + "1", + } + { + "ne", + "en", + "10", + "1", + } + { + "nn", + "nb", + "10", + "0", + } + { + "nn", + "no", + "10", + "1", + } + { + "nso", + "en", + "10", + "1", + } + { + "ny", + "en", + "10", + "1", + } + { + "nyn", + "en", + "10", + "1", + } + { + "oc", + "fr", + "10", + "1", + } + { + "om", + "en", + "10", + "1", + } + { + "or", + "en", + "10", + "1", + } + { + "pa", + "en", + "10", + "1", + } + { + "pcm", + "en", + "10", + "1", + } + { + "ps", + "en", + "10", + "1", + } + { + "qu", + "es", + "10", + "1", + } + { + "rm", + "de", + "10", + "1", + } + { + "rn", + "en", + "10", + "1", + } + { + "rw", + "fr", + "10", + "1", + } + { + "sa", + "hi", + "10", + "1", + } + { + "sd", + "en", + "10", + "1", + } + { + "si", + "en", + "10", + "1", + } + { + "sn", + "en", + "10", + "1", + } + { + "so", + "en", + "10", + "1", + } + { + "sq", + "en", + "10", + "1", + } + { + "st", + "en", + "10", + "1", + } + { + "su", + "id", + "10", + "1", + } + { + "sw", + "en", + "10", + "1", + } + { + "ta", + "en", + "10", + "1", + } + { + "te", + "en", + "10", + "1", + } + { + "tg", + "ru", + "10", + "1", + } + { + "ti", + "en", + "10", + "1", + } + { + "tk", + "ru", + "10", + "1", + } + { + "tlh", + "en", + "10", + "1", + } + { + "tn", + "en", + "10", + "1", + } + { + "to", + "en", + "10", + "1", + } + { + "tt", + "ru", + "10", + "1", + } + { + "tum", + "en", + "10", + "1", + } + { + "ug", + "zh", + "10", + "1", + } + { + "ur", + "en", + "10", + "1", + } + { + "uz", + "ru", + "10", + "1", + } + { + "wo", + "fr", + "10", + "1", + } + { + "xh", + "en", + "10", + "1", + } + { + "yi", + "en", + "10", + "1", + } + { + "yo", + "en", + "10", + "1", + } + { + "zu", + "en", + "10", + "1", + } + { + "*", + "*", + "80", + "0", + } + { + "az_Latn", + "ru_Cyrl", + "10", + "1", + } + { + "bn_Beng", + "en_Latn", + "10", + "1", + } + { + "hy_Armn", + "ru_Cyrl", + "10", + "1", + } + { + "ka_Geor", + "en_Latn", + "10", + "1", + } + { + "km_Khmr", + "en_Latn", + "10", + "1", + } + { + "kn_Knda", + "en_Latn", + "10", + "1", + } + { + "lo_Laoo", + "en_Latn", + "10", + "1", + } + { + "ml_Mlym", + "en_Latn", + "10", + "1", + } + { + "my_Mymr", + "en_Latn", + "10", + "1", + } + { + "ne_Deva", + "en_Latn", + "10", + "1", + } + { + "or_Orya", + "en_Latn", + "10", + "1", + } + { + "pa_Guru", + "en_Latn", + "10", + "1", + } + { + "ps_Arab", + "en_Latn", + "10", + "1", + } + { + "sd_Arab", + "en_Latn", + "10", + "1", + } + { + "si_Sinh", + "en_Latn", + "10", + "1", + } + { + "ta_Taml", + "en_Latn", + "10", + "1", + } + { + "te_Telu", + "en_Latn", + "10", + "1", + } + { + "ti_Ethi", + "en_Latn", + "10", + "1", + } + { + "tk_Latn", + "ru_Cyrl", + "10", + "1", + } + { + "ur_Arab", + "en_Latn", + "10", + "1", + } + { + "uz_Latn", + "ru_Cyrl", + "10", + "1", + } + { + "yi_Hebr", + "en_Latn", + "10", + "1", + } + { + "sr_Latn", + "sr_Cyrl", + "5", + "0", + } + { + "zh_Hans", + "zh_Hant", + "15", + "1", + } + { + "zh_Hant", + "zh_Hans", + "19", + "1", + } + { + "*_*", + "*_*", + "50", + "0", + } + { + "ar_*_$maghreb", + "ar_*_$maghreb", + "4", + "0", + } + { + "ar_*_$!maghreb", + "ar_*_$!maghreb", + "4", + "0", + } + { + "ar_*_*", + "ar_*_*", + "5", + "0", + } + { + "en_*_$enUS", + "en_*_$enUS", + "4", + "0", + } + { + "en_*_$!enUS", + "en_*_$!enUS", + "4", + "0", + } + { + "en_*_*", + "en_*_*", + "5", + "0", + } + { + "es_*_$americas", + "es_*_$americas", + "4", + "0", + } + { + "es_*_$!americas", + "es_*_$!americas", + "4", + "0", + } + { + "es_*_*", + "es_*_*", + "5", + "0", + } + { + "pt_*_$americas", + "pt_*_$americas", + "4", + "0", + } + { + "pt_*_$!americas", + "pt_*_$!americas", + "4", + "0", + } + { + "pt_*_*", + "pt_*_*", + "5", + "0", + } + { + "zh_Hant_$cnsar", + "zh_Hant_$cnsar", + "4", + "0", + } + { + "zh_Hant_$!cnsar", + "zh_Hant_$!cnsar", + "4", + "0", + } + { + "zh_Hant_*", + "zh_Hant_*", + "5", + "0", + } + { + "*_*_*", + "*_*_*", + "4", + "0", } } - } - parentLocales{ - en_001{ - "en_150", - "en_AG", - "en_AI", - "en_AU", - "en_BB", - "en_BE", - "en_BM", - "en_BS", - "en_BW", - "en_BZ", - "en_CA", - "en_CC", - "en_CK", - "en_CM", - "en_CX", - "en_CY", - "en_DG", - "en_DM", - "en_ER", - "en_FJ", - "en_FK", - "en_FM", - "en_GB", - "en_GD", - "en_GG", - "en_GH", - "en_GI", - "en_GM", - "en_GY", - "en_HK", - "en_IE", - "en_IL", - "en_IM", - "en_IN", - "en_IO", - "en_JE", - "en_JM", - "en_KE", - "en_KI", - "en_KN", - "en_KY", - "en_LC", - "en_LR", - "en_LS", - "en_MG", - "en_MO", - "en_MS", - "en_MT", - "en_MU", - "en_MW", - "en_MY", - "en_NA", - "en_NF", - "en_NG", - "en_NR", - "en_NU", - "en_NZ", - "en_PG", - "en_PH", - "en_PK", - "en_PN", - "en_PW", - "en_RW", - "en_SB", - "en_SC", - "en_SD", - "en_SG", - "en_SH", - "en_SL", - "en_SS", - "en_SX", - "en_SZ", - "en_TC", - "en_TK", - "en_TO", - "en_TT", - "en_TV", - "en_TZ", - "en_UG", - "en_VC", - "en_VG", - "en_VU", - "en_WS", - "en_ZA", - "en_ZM", - "en_ZW", - } - en_150{ - "en_AT", - "en_CH", - "en_DE", - "en_DK", - "en_FI", - "en_NL", - "en_SE", - "en_SI", - } - es_419{ - "es_AR", - "es_BO", - "es_BR", - "es_CL", - "es_CO", - "es_CR", - "es_CU", - "es_DO", - "es_EC", - "es_GT", - "es_HN", - "es_MX", - "es_NI", - "es_PA", - "es_PE", - "es_PR", - "es_PY", - "es_SV", - "es_US", - "es_UY", - "es_VE", - } - pt_PT{ - "pt_AO", - "pt_CH", - "pt_CV", - "pt_GQ", - "pt_GW", - "pt_LU", - "pt_MO", - "pt_MZ", - "pt_ST", - "pt_TL", - } - root{ - "az_Arab", - "az_Cyrl", - "bm_Nkoo", - "bs_Cyrl", - "en_Dsrt", - "en_Shaw", - "ha_Arab", - "iu_Latn", - "mn_Mong", - "ms_Arab", - "pa_Arab", - "shi_Latn", - "sr_Latn", - "uz_Arab", - "uz_Cyrl", - "vai_Latn", - "zh_Hant", - "yue_Hans", - } - zh_Hant_HK{"zh_Hant_MO"} - } - subdivisionContainment{ - AD{ - "02", - "03", - "04", - "05", - "06", - "07", - "08", - } - AE{ - "AJ", - "AZ", - "DU", - "FU", - "RK", - "SH", - "UQ", - } - AF{ - "BAL", - "BAM", - "BDG", - "BDS", - "BGL", - "DAY", - "FRA", - "FYB", - "GHA", - "GHO", - "HEL", - "HER", - "JOW", - "KAB", - "KAN", - "KAP", - "KDZ", - "KHO", - "KNR", - "LAG", - "LOG", - "NAN", - "NIM", - "NUR", - "PAN", - "PAR", - "PIA", - "PKA", - "SAM", - "SAR", - "TAK", - "URU", - "WAR", - "ZAB", - } - AG{ - "03", - "04", - "05", - "06", - "07", - "08", - "10", - "11", - } - AL{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - } - AM{ - "AG", - "AR", - "AV", - "ER", - "GR", - "KT", - "LO", - "SH", - "SU", - "TV", - "VD", - } - AO{ - "BGO", - "BGU", - "BIE", - "CAB", - "CCU", - "CNN", - "CNO", - "CUS", - "HUA", - "HUI", - "LNO", - "LSU", - "LUA", - "MAL", - "MOX", - "NAM", - "UIG", - "ZAI", - } - AR{ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "J", - "K", - "L", - "M", - "N", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - } - AT{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - } - AU{ - "ACT", - "NSW", - "NT", - "QLD", - "SA", - "TAS", - "VIC", - "WA", - } - AZ{ - "ABS", - "AGA", - "AGC", - "AGM", - "AGS", - "AGU", - "AST", - "BA", - "BAL", - "BAR", - "BEY", - "BIL", - "CAB", - "CAL", - "DAS", - "FUZ", - "GA", - "GAD", - "GOR", - "GOY", - "GYG", - "HAC", - "IMI", - "ISM", - "KAL", - "KUR", - "LA", - "LAC", - "LAN", - "LER", - "MAS", - "MI", - "NA", - "NEF", - "NX", - "OGU", - "QAB", - "QAX", - "QAZ", - "QBA", - "QBI", - "QOB", - "QUS", - "SA", - "SAB", - "SAK", - "SAL", - "SAT", - "SBN", - "SIY", - "SKR", - "SM", - "SMI", - "SMX", - "SR", - "SUS", - "TAR", - "TOV", - "UCA", - "XA", - "XAC", - "XCI", - "XIZ", - "XVD", - "YAR", - "YE", - "YEV", - "ZAN", - "ZAQ", - "ZAR", - } - AZ-NX{ - "BAB", - "CUL", - "KAN", - "NV", - "ORD", - "SAD", - "SAH", - "SAR", - } - BA{ - "BIH", - "BRC", - "SRP", - } - BB{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - } - BD{ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - } - BD-A{ - "02", - "06", - "07", - "25", - "50", - "51", - } - BD-B{ - "01", - "04", - "08", - "09", - "10", - "11", - "16", - "29", - "31", - "47", - "56", - } - BD-C{ - "13", - "15", - "17", - "18", - "21", - "26", - "33", - "34", - "35", - "36", - "40", - "41", - "42", - "53", - "57", - "62", - "63", - } - BD-D{ - "05", - "12", - "22", - "23", - "27", - "30", - "37", - "39", - "43", - "58", - } - BD-E{ - "03", - "24", - "44", - "45", - "48", - "49", - "54", - "55", - "59", - } - BD-F{ - "14", - "19", - "28", - "32", - "46", - "52", - "64", - } - BD-G{ - "20", - "38", - "60", - "61", - } - BE{ - "BRU", - "VLG", - "WAL", - } - BE-VLG{ - "VAN", - "VBR", - "VLI", - "VOV", - "VWV", - } - BE-WAL{ - "WBR", - "WHT", - "WLG", - "WLX", - "WNA", - } - BF{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - } - BF-01{ - "BAL", - "BAN", - "KOS", - "MOU", - "NAY", - "SOR", - } - BF-02{ - "COM", - "LER", - } - BF-03{"KAD"} - BF-04{ - "BLG", - "KOP", - "KOT", - } - BF-05{ - "BAM", - "NAM", - "SMT", - } - BF-06{ - "BLK", - "SIS", - "SNG", - "ZIR", - } - BF-07{ - "BAZ", - "NAO", - "ZOU", - } - BF-08{ - "GNA", - "GOU", - "KMD", - "KMP", - "TAP", - } - BF-09{ - "HOU", - "KEN", - "TUI", - } - BF-10{ - "LOR", - "PAS", - "YAT", - "ZON", - } - BF-11{ - "GAN", - "KOW", - "OUB", - } - BF-12{ - "OUD", - "SEN", - "SOM", - "YAG", - } - BF-13{ - "BGR", - "IOB", - "NOU", - "PON", - } - BG{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - } - BH{ - "13", - "14", - "15", - "17", - } - BI{ - "BB", - "BL", - "BM", - "BR", - "CA", - "CI", - "GI", - "KI", - "KR", - "KY", - "MA", - "MU", - "MW", - "MY", - "NG", - "RM", - "RT", - "RY", - } - BJ{ - "AK", - "AL", - "AQ", - "BO", - "CO", - "DO", - "KO", - "LI", - "MO", - "OU", - "PL", - "ZO", - } - BN{ - "BE", - "BM", - "TE", - "TU", - } - BO{ - "B", - "C", - "H", - "L", - "N", - "O", - "P", - "S", - "T", - } - BQ{ - "BO", - "SA", - "SE", - } - BR{ - "AC", - "AL", - "AM", - "AP", - "BA", - "CE", - "DF", - "ES", - "GO", - "MA", - "MG", - "MS", - "MT", - "PA", - "PB", - "PE", - "PI", - "PR", - "RJ", - "RN", - "RO", - "RR", - "RS", - "SC", - "SE", - "SP", - "TO", - } - BS{ - "AK", - "BI", - "BP", - "BY", - "CE", - "CI", - "CK", - "CO", - "CS", - "EG", - "EX", - "FP", - "GC", - "HI", - "HT", - "IN", - "LI", - "MC", - "MG", - "MI", - "NE", - "NO", - "NS", - "RC", - "RI", - "SA", - "SE", - "SO", - "SS", - "SW", - "WG", - } - BT{ - "11", - "12", - "13", - "14", - "15", - "21", - "22", - "23", - "24", - "31", - "32", - "33", - "34", - "41", - "42", - "43", - "44", - "45", - "GA", - "TY", - } - BW{ - "CE", - "CH", - "FR", - "GA", - "GH", - "JW", - "KG", - "KL", - "KW", - "LO", - "NE", - "NW", - "SE", - "SO", - "SP", - "ST", - } - BY{ - "BR", - "HM", - "HO", - "HR", - "MA", - "MI", - "VI", - } - BZ{ - "BZ", - "CY", - "CZL", - "OW", - "SC", - "TOL", - } - CA{ - "AB", - "BC", - "MB", - "NB", - "NL", - "NS", - "NT", - "NU", - "ON", - "PE", - "QC", - "SK", - "YT", - } - CD{ - "BC", - "BN", - "EQ", - "KA", - "KE", - "KN", - "KW", - "MA", - "NK", - "OR", - "SK", - } - CF{ - "AC", - "BB", - "BGF", - "BK", - "HK", - "HM", - "HS", - "KB", - "KG", - "LB", - "MB", - "MP", - "NM", - "OP", - "SE", - "UK", - "VK", - } - CG{ - "2", - "5", - "7", - "8", - "9", - "11", - "12", - "13", - "14", - "15", - "16", - "BZV", - } - CH{ - "AG", - "AI", - "AR", - "BE", - "BL", - "BS", - "FR", - "GE", - "GL", - "GR", - "JU", - "LU", - "NE", - "NW", - "OW", - "SG", - "SH", - "SO", - "SZ", - "TG", - "TI", - "UR", - "VD", - "VS", - "ZG", - "ZH", - } - CI{ - "AB", - "BS", - "CM", - "DN", - "GD", - "LC", - "LG", - "MG", - "SM", - "SV", - "VB", - "WR", - "YM", - "ZZ", - } - CL{ - "AI", - "AN", - "AP", - "AR", - "AT", - "BI", - "CO", - "LI", - "LL", - "LR", - "MA", - "ML", - "RM", - "TA", - "VS", - } - CM{ - "AD", - "CE", - "EN", - "ES", - "LT", - "NO", - "NW", - "OU", - "SU", - "SW", - } - CN{ - "11", - "12", - "13", - "14", - "15", - "21", - "22", - "23", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "41", - "42", - "43", - "44", - "45", - "46", - "50", - "51", - "52", - "53", - "54", - "61", - "62", - "63", - "64", - "65", - "71", - "91", - "92", - } - CO{ - "AMA", - "ANT", - "ARA", - "ATL", - "BOL", - "BOY", - "CAL", - "CAQ", - "CAS", - "CAU", - "CES", - "CHO", - "COR", - "CUN", - "DC", - "GUA", - "GUV", - "HUI", - "LAG", - "MAG", - "MET", - "NAR", - "NSA", - "PUT", - "QUI", - "RIS", - "SAN", - "SAP", - "SUC", - "TOL", - "VAC", - "VAU", - "VID", - } - CR{ - "A", - "C", - "G", - "H", - "L", - "P", - "SJ", - } - CU{ - "01", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "99", - } - CV{ - "B", - "S", - } - CV-B{ - "BV", - "PA", - "PN", - "RB", - "RG", - "SL", - "SV", - "TS", - } - CV-S{ - "BR", - "CA", - "CF", - "CR", - "MA", - "MO", - "PR", - "RS", - "SD", - "SF", - "SM", - "SO", - "SS", - "TA", - } - CY{ - "01", - "02", - "03", - "04", - "05", - "06", - } - CZ{ - "JC", - "JM", - "KA", - "KR", - "LI", - "MO", - "OL", - "PA", - "PL", - "PR", - "ST", - "US", - "VY", - "ZL", - } - CZ-JC{ - "311", - "312", - "313", - "314", - "315", - "316", - "317", - } - CZ-JM{ - "621", - "622", - "623", - "624", - "625", - "626", - "627", - } - CZ-KA{ - "411", - "412", - "413", - } - CZ-KR{ - "521", - "522", - "523", - "524", - "525", - } - CZ-LI{ - "511", - "512", - "513", - "514", - } - CZ-MO{ - "801", - "802", - "803", - "804", - "805", - "806", - } - CZ-OL{ - "711", - "712", - "713", - "714", - "715", - } - CZ-PA{ - "531", - "532", - "533", - "534", - } - CZ-PL{ - "321", - "322", - "323", - "324", - "325", - "326", - "327", - } - CZ-PR{ - "10A", - "10B", - "10C", - "10D", - "10E", - "10F", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - } - CZ-ST{ - "20A", - "20B", - "20C", - "201", - "202", - "203", - "204", - "205", - "206", - "207", - "208", - "209", - } - CZ-US{ - "421", - "422", - "423", - "424", - "425", - "426", - "427", - } - CZ-VY{ - "611", - "612", - "613", - "614", - "615", - } - CZ-ZL{ - "721", - "722", - "723", - "724", - } - DE{ - "BB", - "BE", - "BW", - "BY", - "HB", - "HE", - "HH", - "MV", - "NI", - "NW", - "RP", - "SH", - "SL", - "SN", - "ST", - "TH", - } - DJ{ - "AR", - "AS", - "DI", - "DJ", - "OB", - "TA", - } - DK{ - "81", - "82", - "83", - "84", - "85", - } - DM{ - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - } - DO{ - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - } - DO-33{ - "06", - "14", - "19", - "20", - } - DO-34{ - "05", - "15", - "26", - "27", - } - DO-35{ - "09", - "18", - "25", - } - DO-36{ - "13", - "24", - "28", - } - DO-37{ - "07", - "22", - } - DO-38{ - "03", - "04", - "10", - "16", - } - DO-39{ - "23", - "29", - "30", - } - DO-40{ - "01", - "32", - } - DO-41{ - "02", - "17", - "21", - "31", - } - DO-42{ - "08", - "11", - "12", - } - DZ{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - } - EC{ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "L", - "M", - "N", - "O", - "P", - "R", - "S", - "SD", - "SE", - "T", - "U", - "W", - "X", - "Y", - "Z", - } - EE{ - "37", - "39", - "44", - "49", - "51", - "57", - "59", - "65", - "67", - "70", - "74", - "78", - "82", - "84", - "86", - } - EG{ - "ALX", - "ASN", - "AST", - "BA", - "BH", - "BNS", - "C", - "DK", - "DT", - "FYM", - "GH", - "GZ", - "IS", - "JS", - "KB", - "KFS", - "KN", - "LX", - "MN", - "MNF", - "MT", - "PTS", - "SHG", - "SHR", - "SIN", - "SUZ", - "WAD", - } - ER{ - "AN", - "DK", - "DU", - "GB", - "MA", - "SK", - } - ES{ - "AN", - "AR", - "AS", - "CB", - "CE", - "CL", - "CM", - "CN", - "CT", - "EX", - "GA", - "IB", - "MC", - "MD", - "ML", - "NC", - "PV", - "RI", - "VC", - } - ES-AN{ - "AL", - "CA", - "CO", - "GR", - "H", - "J", - "MA", - "SE", - } - ES-AR{ - "HU", - "TE", - "Z", - } - ES-AS{"O"} - ES-CB{"S"} - ES-CL{ - "AV", - "BU", - "LE", - "P", - "SA", - "SG", - "SO", - "VA", - "ZA", - } - ES-CM{ - "AB", - "CR", - "CU", - "GU", - "TO", - } - ES-CN{ - "GC", - "TF", - } - ES-CT{ - "B", - "GI", - "L", - "T", - } - ES-EX{ - "BA", - "CC", - } - ES-GA{ - "C", - "LU", - "OR", - "PO", - } - ES-IB{"PM"} - ES-MC{"MU"} - ES-MD{"M"} - ES-NC{"NA"} - ES-PV{ - "BI", - "SS", - "VI", - } - ES-RI{"LO"} - ES-VC{ - "A", - "CS", - "V", - } - ET{ - "AA", - "AF", - "AM", - "BE", - "DD", - "GA", - "HA", - "OR", - "SN", - "SO", - "TI", - } - FI{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - } - FJ{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "C", - "E", - "N", - "R", - "W", - } - FM{ - "KSA", - "PNI", - "TRK", - "YAP", - } - FR{ - "A", - "B", - "BL", - "C", - "CP", - "D", - "E", - "F", - "G", - "GF", - "GP", - "H", - "I", - "J", - "K", - "L", - "M", - "MF", - "MQ", - "N", - "NC", - "O", - "P", - "PF", - "PM", - "Q", - "R", - "RE", - "S", - "T", - "TF", - "U", - "V", - "WF", - "YT", - } - FR-A{ - "67", - "68", - } - FR-B{ - "24", - "33", - "40", - "47", - "64", - } - FR-C{ - "03", - "15", - "43", - "63", - } - FR-D{ - "21", - "58", - "71", - "89", - } - FR-E{ - "22", - "29", - "35", - "56", - } - FR-F{ - "18", - "28", - "36", - "37", - "41", - "45", - } - FR-G{ - "08", - "10", - "51", - "52", - } - FR-H{ - "2A", - "2B", - } - FR-I{ - "25", - "39", - "70", - "90", - } - FR-J{ - "75", - "77", - "78", - "91", - "92", - "93", - "94", - "95", - } - FR-K{ - "11", - "30", - "34", - "48", - "66", - } - FR-L{ - "19", - "23", - "87", - } - FR-M{ - "54", - "55", - "57", - "88", - } - FR-N{ - "09", - "12", - "31", - "32", - "46", - "65", - "81", - "82", - } - FR-O{ - "59", - "62", - } - FR-P{ - "14", - "50", - "61", - } - FR-Q{ - "27", - "76", - } - FR-R{ - "44", - "49", - "53", - "72", - "85", - } - FR-S{ - "02", - "60", - "80", - } - FR-T{ - "16", - "17", - "79", - "86", - } - FR-U{ - "04", - "05", - "06", - "13", - "83", - "84", + } + measurementData{ + 001{ + MeasurementSystem:int{0} + PaperSize:intvector{ + 297, + 210, + } } - FR-V{ - "01", - "07", - "26", - "38", - "42", - "69", - "73", - "74", + BS{ + MeasurementSystemCategory{ + temperature:int{1} + } } - GA{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", + BZ{ + MeasurementSystemCategory{ + temperature:int{1} + } + PaperSize:intvector{ + 279, + 216, + } } - GB{ - "EAW", - "ENG", - "GBN", - "NIR", - "SCT", - "UKM", - "WLS", - } - GB-ENG{ - "BAS", - "BBD", - "BDF", - "BDG", - "BEN", - "BEX", - "BIR", - "BKM", - "BMH", - "BNE", - "BNH", - "BNS", - "BOL", - "BPL", - "BRC", - "BRD", - "BRY", - "BST", - "BUR", - "CAM", - "CBF", - "CHE", - "CHW", - "CLD", - "CMA", - "CMD", - "CON", - "COV", - "CRY", - "DAL", - "DBY", - "DER", - "DEV", - "DNC", - "DOR", - "DUD", - "DUR", - "EAL", - "ENF", - "ERY", - "ESS", - "ESX", - "GAT", - "GLS", - "GRE", - "HAL", - "HAM", - "HAV", - "HCK", - "HEF", - "HIL", - "HMF", - "HNS", - "HPL", - "HRT", - "HRW", - "HRY", - "IOS", - "IOW", - "ISL", - "KEC", - "KEN", - "KHL", - "KIR", - "KTT", - "KWL", - "LAN", - "LBH", - "LCE", - "LDS", - "LEC", - "LEW", - "LIN", - "LIV", - "LND", - "LUT", - "MAN", - "MDB", - "MDW", - "MIK", - "MRT", - "NBL", - "NEL", - "NET", - "NFK", - "NGM", - "NLN", - "NSM", - "NTH", - "NTT", - "NTY", - "NWM", - "NYK", - "OLD", - "OXF", - "PLY", - "POL", - "POR", - "PTE", - "RCC", - "RCH", - "RDB", - "RDG", - "RIC", - "ROT", - "RUT", - "SAW", - "SFK", - "SFT", - "SGC", - "SHF", - "SHN", - "SHR", - "SKP", - "SLF", - "SLG", - "SND", - "SOL", - "SOM", - "SOS", - "SRY", - "STE", - "STH", - "STN", - "STS", - "STT", - "STY", - "SWD", - "SWK", - "TAM", - "TFW", - "THR", - "TOB", - "TRF", - "TWH", - "WAR", - "WBK", - "WFT", - "WGN", - "WIL", - "WKF", - "WLL", - "WLV", - "WND", - "WNM", - "WOK", - "WOR", - "WRL", - "WRT", - "WSM", - "WSX", - "YOR", + CA{ + PaperSize:intvector{ + 279, + 216, + } } - GB-NIR{ - "ABC", - "AND", - "ANN", - "BFS", - "CCG", - "DRS", - "FMO", - "LBC", - "MEA", - "MUL", - "NMD", - } - GB-SCT{ - "ABD", - "ABE", - "AGB", - "ANS", - "CLK", - "DGY", - "DND", - "EAY", - "EDH", - "EDU", - "ELN", - "ELS", - "ERW", - "FAL", - "FIF", - "GLG", - "HLD", - "IVC", - "MLN", - "MRY", - "NAY", - "NLK", - "ORK", - "PKN", - "RFW", - "SAY", - "SCB", - "SLK", - "STG", - "WDU", - "WLN", - "ZET", - } - GB-WLS{ - "AGY", - "BGE", - "BGW", - "CAY", - "CGN", - "CMN", - "CRF", - "CWY", - "DEN", - "FLN", - "GWN", - "MON", - "MTY", - "NTL", - "NWP", - "PEM", - "POW", - "RCT", - "SWA", - "TOF", - "VGL", - "WRX", + CL{ + PaperSize:intvector{ + 279, + 216, + } } - GD{ - "01", - "02", - "03", - "04", - "05", - "06", - "10", + CO{ + PaperSize:intvector{ + 279, + 216, + } } - GE{ - "AB", - "AJ", - "GU", - "IM", - "KA", - "KK", - "MM", - "RL", - "SJ", - "SK", - "SZ", - "TB", + CR{ + PaperSize:intvector{ + 279, + 216, + } } - GH{ - "AA", - "AH", - "BA", - "CP", - "EP", - "NP", - "TV", - "UE", - "UW", - "WP", + GB{ + MeasurementSystem:int{2} } - GL{ - "KU", - "QA", - "QE", - "SM", + GT{ + PaperSize:intvector{ + 279, + 216, + } } - GM{ - "B", - "L", - "M", - "N", - "U", - "W", + KY{ + MeasurementSystemCategory{ + temperature:int{1} + } } - GN{ - "B", - "C", - "D", - "F", - "K", - "L", - "M", - "N", - } - GN-B{ - "BF", - "BK", - "FR", - "GA", - "KN", + LR{ + MeasurementSystem:int{1} + MeasurementSystemCategory{ + temperature:int{0} + } } - GN-D{ - "CO", - "DU", - "FO", - "KD", - "TE", + MM{ + MeasurementSystem:int{1} + MeasurementSystemCategory{ + temperature:int{0} + } } - GN-F{ - "DB", - "DI", - "FA", - "KS", + MX{ + PaperSize:intvector{ + 279, + 216, + } } - GN-K{ - "KA", - "KE", - "KO", - "MD", - "SI", + NI{ + PaperSize:intvector{ + 279, + 216, + } } - GN-L{ - "KB", - "LA", - "LE", - "ML", - "TO", + PA{ + PaperSize:intvector{ + 279, + 216, + } } - GN-M{ - "DL", - "MM", - "PI", + PH{ + PaperSize:intvector{ + 279, + 216, + } } - GN-N{ - "BE", - "GU", - "LO", - "MC", - "NZ", - "YO", + PR{ + MeasurementSystemCategory{ + temperature:int{1} + } + PaperSize:intvector{ + 279, + 216, + } } - GQ{ - "C", - "I", + PW{ + MeasurementSystemCategory{ + temperature:int{1} + } } - GQ-C{ - "CS", - "KN", - "LI", - "WN", + SV{ + PaperSize:intvector{ + 279, + 216, + } } - GQ-I{ - "AN", - "BN", - "BS", + US{ + MeasurementSystem:int{1} + PaperSize:intvector{ + 279, + 216, + } } - GR{ - "69", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - } - GR-A{ - "52", - "55", - "71", - "72", - "73", - } - GR-B{ - "53", - "54", - "57", - "59", - "61", - "62", - "64", + VE{ + PaperSize:intvector{ + 279, + 216, + } } - GR-C{ - "51", - "56", - "58", - "63", + } + parentLocales{ + en_001{ + "en_150", + "en_AG", + "en_AI", + "en_AU", + "en_BB", + "en_BE", + "en_BM", + "en_BS", + "en_BW", + "en_BZ", + "en_CA", + "en_CC", + "en_CK", + "en_CM", + "en_CX", + "en_CY", + "en_DG", + "en_DM", + "en_ER", + "en_FJ", + "en_FK", + "en_FM", + "en_GB", + "en_GD", + "en_GG", + "en_GH", + "en_GI", + "en_GM", + "en_GY", + "en_HK", + "en_IE", + "en_IL", + "en_IM", + "en_IN", + "en_IO", + "en_JE", + "en_JM", + "en_KE", + "en_KI", + "en_KN", + "en_KY", + "en_LC", + "en_LR", + "en_LS", + "en_MG", + "en_MO", + "en_MS", + "en_MT", + "en_MU", + "en_MW", + "en_MY", + "en_NA", + "en_NF", + "en_NG", + "en_NR", + "en_NU", + "en_NZ", + "en_PG", + "en_PH", + "en_PK", + "en_PN", + "en_PW", + "en_RW", + "en_SB", + "en_SC", + "en_SD", + "en_SG", + "en_SH", + "en_SL", + "en_SS", + "en_SX", + "en_SZ", + "en_TC", + "en_TK", + "en_TO", + "en_TT", + "en_TV", + "en_TZ", + "en_UG", + "en_VC", + "en_VG", + "en_VU", + "en_WS", + "en_ZA", + "en_ZM", + "en_ZW", } - GR-D{ - "31", - "32", - "33", - "34", + en_150{ + "en_AT", + "en_CH", + "en_DE", + "en_DK", + "en_FI", + "en_NL", + "en_SE", + "en_SI", } - GR-E{ - "41", - "42", - "43", - "44", + es_419{ + "es_AR", + "es_BO", + "es_BR", + "es_BZ", + "es_CL", + "es_CO", + "es_CR", + "es_CU", + "es_DO", + "es_EC", + "es_GT", + "es_HN", + "es_MX", + "es_NI", + "es_PA", + "es_PE", + "es_PR", + "es_PY", + "es_SV", + "es_US", + "es_UY", + "es_VE", } - GR-F{ - "21", - "22", - "23", - "24", - } - GR-G{ - "01", - "13", - "14", - } - GR-H{ - "03", - "04", - "05", - "06", - "07", - } - GR-I{"A1"} - GR-J{ - "11", - "12", - "15", - "16", - "17", + pt_PT{ + "pt_AO", + "pt_CH", + "pt_CV", + "pt_GQ", + "pt_GW", + "pt_LU", + "pt_MO", + "pt_MZ", + "pt_ST", + "pt_TL", } - GR-K{ - "83", - "84", - "85", + root{ + "az_Arab", + "az_Cyrl", + "bm_Nkoo", + "bs_Cyrl", + "en_Dsrt", + "en_Shaw", + "ha_Arab", + "iu_Latn", + "mn_Mong", + "ms_Arab", + "pa_Arab", + "shi_Latn", + "sr_Latn", + "uz_Arab", + "uz_Cyrl", + "vai_Latn", + "zh_Hant", + "yue_Hans", } - GR-L{ - "81", - "82", + zh_Hant_HK{"zh_Hant_MO"} + } + subdivisionContainment{ + AD{ + "ad02", + "ad03", + "ad04", + "ad05", + "ad06", + "ad07", + "ad08", } - GR-M{ - "91", - "92", - "93", - "94", + AE{ + "aeaj", + "aeaz", + "aedu", + "aefu", + "aerk", + "aesh", + "aeuq", } - GT{ - "AV", - "BV", - "CM", - "CQ", - "ES", - "GU", - "HU", - "IZ", - "JA", - "JU", - "PE", - "PR", - "QC", - "QZ", - "RE", - "SA", - "SM", - "SO", - "SR", - "SU", - "TO", - "ZA", + AF{ + "afbal", + "afbam", + "afbdg", + "afbds", + "afbgl", + "afday", + "affra", + "affyb", + "afgha", + "afgho", + "afhel", + "afher", + "afjow", + "afkab", + "afkan", + "afkap", + "afkdz", + "afkho", + "afknr", + "aflag", + "aflog", + "afnan", + "afnim", + "afnur", + "afpan", + "afpar", + "afpia", + "afpka", + "afsam", + "afsar", + "aftak", + "afuru", + "afwar", + "afzab", } - GW{ - "BS", - "L", - "N", - "S", + AG{ + "ag03", + "ag04", + "ag05", + "ag06", + "ag07", + "ag08", + "ag10", + "ag11", } - GW-L{ - "BA", - "GA", + AL{ + "al01", + "al02", + "al03", + "al04", + "al05", + "al06", + "al07", + "al08", + "al09", + "al10", + "al11", + "al12", } - GW-N{ - "BM", - "CA", - "OI", + AM{ + "amag", + "amar", + "amav", + "amer", + "amgr", + "amkt", + "amlo", + "amsh", + "amsu", + "amtv", + "amvd", } - GW-S{ - "BL", - "QU", - "TO", + AO{ + "aobgo", + "aobgu", + "aobie", + "aocab", + "aoccu", + "aocnn", + "aocno", + "aocus", + "aohua", + "aohui", + "aolno", + "aolsu", + "aolua", + "aomal", + "aomox", + "aonam", + "aouig", + "aozai", } - GY{ - "BA", - "CU", - "DE", - "EB", - "ES", - "MA", - "PM", - "PT", - "UD", - "UT", + AR{ + "ara", + "arb", + "arc", + "ard", + "are", + "arf", + "arg", + "arh", + "arj", + "ark", + "arl", + "arm", + "arn", + "arp", + "arq", + "arr", + "ars", + "art", + "aru", + "arv", + "arw", + "arx", + "ary", + "arz", } - HN{ - "AT", - "CH", - "CL", - "CM", - "CP", - "CR", - "EP", - "FM", - "GD", - "IB", - "IN", - "LE", - "LP", - "OC", - "OL", - "SB", - "VA", - "YO", + AT{ + "at1", + "at2", + "at3", + "at4", + "at5", + "at6", + "at7", + "at8", + "at9", } - HR{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", + AU{ + "auact", + "aunsw", + "aunt", + "auqld", + "ausa", + "autas", + "auvic", + "auwa", } - HT{ - "AR", - "CE", - "GA", - "ND", - "NE", - "NI", - "NO", - "OU", - "SD", - "SE", + AZ{ + "azabs", + "azaga", + "azagc", + "azagm", + "azags", + "azagu", + "azast", + "azba", + "azbal", + "azbar", + "azbey", + "azbil", + "azcab", + "azcal", + "azdas", + "azfuz", + "azga", + "azgad", + "azgor", + "azgoy", + "azgyg", + "azhac", + "azimi", + "azism", + "azkal", + "azkur", + "azla", + "azlac", + "azlan", + "azler", + "azmas", + "azmi", + "azna", + "aznef", + "aznx", + "azogu", + "azqab", + "azqax", + "azqaz", + "azqba", + "azqbi", + "azqob", + "azqus", + "azsa", + "azsab", + "azsak", + "azsal", + "azsat", + "azsbn", + "azsiy", + "azskr", + "azsm", + "azsmi", + "azsmx", + "azsr", + "azsus", + "aztar", + "aztov", + "azuca", + "azxa", + "azxac", + "azxci", + "azxiz", + "azxvd", + "azyar", + "azye", + "azyev", + "azzan", + "azzaq", + "azzar", } - HU{ - "BA", - "BC", - "BE", - "BK", - "BU", - "BZ", - "CS", - "DE", - "DU", - "EG", - "ER", - "FE", - "GS", - "GY", - "HB", - "HE", - "HV", - "JN", - "KE", - "KM", - "KV", - "MI", - "NK", - "NO", - "NY", - "PE", - "PS", - "SD", - "SF", - "SH", - "SK", - "SN", - "SO", - "SS", - "ST", - "SZ", - "TB", - "TO", - "VA", - "VE", - "VM", - "ZA", - "ZE", + BA{ + "babih", + "babrc", + "basrp", } - ID{ - "JW", - "KA", - "ML", - "NU", - "PP", - "SL", - "SM", + BB{ + "bb01", + "bb02", + "bb03", + "bb04", + "bb05", + "bb06", + "bb07", + "bb08", + "bb09", + "bb10", + "bb11", } - ID-JW{ - "BT", - "JB", - "JI", - "JK", - "JT", - "YO", - } - ID-KA{ - "KB", - "KI", - "KS", - "KT", - "KU", + BD{ + "bda", + "bdb", + "bdc", + "bdd", + "bde", + "bdf", + "bdg", + "bdh", } - ID-ML{ - "MA", - "MU", + BE{ + "bebru", + "bevlg", + "bewal", } - ID-NU{ - "BA", - "NB", - "NT", + BF{ + "bf01", + "bf02", + "bf03", + "bf04", + "bf05", + "bf06", + "bf07", + "bf08", + "bf09", + "bf10", + "bf11", + "bf12", + "bf13", } - ID-PP{ - "PA", - "PB", + BG{ + "bg01", + "bg02", + "bg03", + "bg04", + "bg05", + "bg06", + "bg07", + "bg08", + "bg09", + "bg10", + "bg11", + "bg12", + "bg13", + "bg14", + "bg15", + "bg16", + "bg17", + "bg18", + "bg19", + "bg20", + "bg21", + "bg22", + "bg23", + "bg24", + "bg25", + "bg26", + "bg27", + "bg28", } - ID-SL{ - "GO", - "SA", - "SG", - "SN", - "SR", - "ST", + BH{ + "bh13", + "bh14", + "bh15", + "bh17", } - ID-SM{ - "AC", - "BB", - "BE", - "JA", - "KR", - "LA", - "RI", - "SB", - "SS", - "SU", + BI{ + "bibb", + "bibl", + "bibm", + "bibr", + "bica", + "bici", + "bigi", + "biki", + "bikr", + "biky", + "bima", + "bimu", + "bimw", + "bimy", + "bing", + "birm", + "birt", + "biry", } - IE{ - "C", - "L", - "M", - "U", - } - IE-C{ - "G", - "LM", - "MO", - "RN", - "SO", + BJ{ + "bjak", + "bjal", + "bjaq", + "bjbo", + "bjco", + "bjdo", + "bjko", + "bjli", + "bjmo", + "bjou", + "bjpl", + "bjzo", } - IE-L{ - "CW", - "D", - "KE", - "KK", - "LD", - "LH", - "LS", - "MH", - "OY", - "WH", - "WW", - "WX", + BN{ + "bnbe", + "bnbm", + "bnte", + "bntu", } - IE-M{ - "CE", - "CO", - "KY", - "LK", - "TA", - "WD", + BO{ + "bob", + "boc", + "boh", + "bol", + "bon", + "boo", + "bop", + "bos", + "bot", } - IE-U{ - "CN", - "DL", - "MN", + BQ{ + "bqbo", + "bqsa", + "bqse", } - IL{ - "D", - "HA", - "JM", - "M", - "TA", - "Z", + BR{ + "brac", + "bral", + "bram", + "brap", + "brba", + "brce", + "brdf", + "bres", + "brgo", + "brma", + "brmg", + "brms", + "brmt", + "brpa", + "brpb", + "brpe", + "brpi", + "brpr", + "brrj", + "brrn", + "brro", + "brrr", + "brrs", + "brsc", + "brse", + "brsp", + "brto", } - IN{ - "AN", - "AP", - "AR", - "AS", - "BR", - "CH", - "CT", - "DD", - "DL", - "DN", - "GA", - "GJ", - "HP", - "HR", - "JH", - "JK", - "KA", - "KL", - "LD", - "MH", - "ML", - "MN", - "MP", - "MZ", - "NL", - "OR", - "PB", - "PY", - "RJ", - "SK", - "TG", - "TN", - "TR", - "UP", - "UT", - "WB", + BS{ + "bsak", + "bsbi", + "bsbp", + "bsby", + "bsce", + "bsci", + "bsck", + "bsco", + "bscs", + "bseg", + "bsex", + "bsfp", + "bsgc", + "bshi", + "bsht", + "bsin", + "bsli", + "bsmc", + "bsmg", + "bsmi", + "bsne", + "bsno", + "bsns", + "bsrc", + "bsri", + "bssa", + "bsse", + "bsso", + "bsss", + "bssw", + "bswg", } - IQ{ - "AN", - "AR", - "BA", - "BB", - "BG", - "DA", - "DI", - "DQ", - "KA", - "KI", - "MA", - "MU", - "NA", - "NI", - "QA", - "SD", - "SU", - "WA", + BT{ + "bt11", + "bt12", + "bt13", + "bt14", + "bt15", + "bt21", + "bt22", + "bt23", + "bt24", + "bt31", + "bt32", + "bt33", + "bt34", + "bt41", + "bt42", + "bt43", + "bt44", + "bt45", + "btga", + "btty", } - IR{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", + BW{ + "bwce", + "bwch", + "bwfr", + "bwga", + "bwgh", + "bwjw", + "bwkg", + "bwkl", + "bwkw", + "bwlo", + "bwne", + "bwnw", + "bwse", + "bwso", + "bwsp", + "bwst", } - IS{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", + BY{ + "bybr", + "byhm", + "byho", + "byhr", + "byma", + "bymi", + "byvi", } - IT{ - "21", - "23", - "25", - "32", - "34", - "36", - "42", - "45", - "52", - "55", - "57", - "62", - "65", - "67", - "72", - "75", - "77", - "78", - "82", - "88", + BZ{ + "bzbz", + "bzcy", + "bzczl", + "bzow", + "bzsc", + "bztol", } - IT-21{ - "AL", - "AT", - "BI", - "CN", - "NO", - "TO", - "VB", - "VC", + CA{ + "caab", + "cabc", + "camb", + "canb", + "canl", + "cans", + "cant", + "canu", + "caon", + "cape", + "caqc", + "cask", + "cayt", } - IT-23{"AO"} - IT-25{ - "BG", - "BS", - "CO", - "CR", - "LC", - "LO", - "MB", - "MI", - "MN", - "PV", - "SO", - "VA", + CD{ + "cdbc", + "cdbu", + "cdeq", + "cdhk", + "cdhl", + "cdhu", + "cdit", + "cdkc", + "cdke", + "cdkg", + "cdkl", + "cdkn", + "cdks", + "cdlo", + "cdlu", + "cdma", + "cdmn", + "cdmo", + "cdnk", + "cdnu", + "cdsa", + "cdsk", + "cdsu", + "cdta", + "cdto", + "cdtu", } - IT-32{ - "BZ", - "TN", + CF{ + "cfac", + "cfbb", + "cfbgf", + "cfbk", + "cfhk", + "cfhm", + "cfhs", + "cfkb", + "cfkg", + "cflb", + "cfmb", + "cfmp", + "cfnm", + "cfop", + "cfse", + "cfuk", + "cfvk", } - IT-34{ - "BL", - "PD", - "RO", - "TV", - "VE", - "VI", - "VR", + CG{ + "cg2", + "cg5", + "cg7", + "cg8", + "cg9", + "cg11", + "cg12", + "cg13", + "cg14", + "cg15", + "cg16", + "cgbzv", } - IT-36{ - "GO", - "PN", - "TS", - "UD", + CH{ + "chag", + "chai", + "char", + "chbe", + "chbl", + "chbs", + "chfr", + "chge", + "chgl", + "chgr", + "chju", + "chlu", + "chne", + "chnw", + "chow", + "chsg", + "chsh", + "chso", + "chsz", + "chtg", + "chti", + "chur", + "chvd", + "chvs", + "chzg", + "chzh", } - IT-42{ - "GE", - "IM", - "SP", - "SV", + CI{ + "ciab", + "cibs", + "cicm", + "cidn", + "cigd", + "cilc", + "cilg", + "cimg", + "cism", + "cisv", + "civb", + "ciwr", + "ciym", + "cizz", } - IT-45{ - "BO", - "FC", - "FE", - "MO", - "PC", - "PR", - "RA", - "RE", - "RN", + CL{ + "clai", + "clan", + "clap", + "clar", + "clat", + "clbi", + "clco", + "clli", + "clll", + "cllr", + "clma", + "clml", + "clrm", + "clta", + "clvs", } - IT-52{ - "AR", - "FI", - "GR", - "LI", - "LU", - "MS", - "PI", - "PO", - "PT", - "SI", + CM{ + "cmad", + "cmce", + "cmen", + "cmes", + "cmlt", + "cmno", + "cmnw", + "cmou", + "cmsu", + "cmsw", } - IT-55{ - "PG", - "TR", + CN{ + "cn11", + "cn12", + "cn13", + "cn14", + "cn15", + "cn21", + "cn22", + "cn23", + "cn31", + "cn32", + "cn33", + "cn34", + "cn35", + "cn36", + "cn37", + "cn41", + "cn42", + "cn43", + "cn44", + "cn45", + "cn46", + "cn50", + "cn51", + "cn52", + "cn53", + "cn54", + "cn61", + "cn62", + "cn63", + "cn64", + "cn65", + "cn71", + "cn91", + "cn92", } - IT-57{ - "AN", - "AP", - "FM", - "MC", - "PU", + CO{ + "coama", + "coant", + "coara", + "coatl", + "cobol", + "coboy", + "cocal", + "cocaq", + "cocas", + "cocau", + "coces", + "cocho", + "cocor", + "cocun", + "codc", + "cogua", + "coguv", + "cohui", + "colag", + "comag", + "comet", + "conar", + "consa", + "coput", + "coqui", + "coris", + "cosan", + "cosap", + "cosuc", + "cotol", + "covac", + "covau", + "covid", } - IT-62{ - "FR", - "LT", - "RI", - "RM", - "VT", + CR{ + "cra", + "crc", + "crg", + "crh", + "crl", + "crp", + "crsj", } - IT-65{ - "AQ", - "CH", - "PE", - "TE", + CU{ + "cu01", + "cu03", + "cu04", + "cu05", + "cu06", + "cu07", + "cu08", + "cu09", + "cu10", + "cu11", + "cu12", + "cu13", + "cu14", + "cu15", + "cu16", + "cu99", } - IT-67{ - "CB", - "IS", + CV{ + "cvb", + "cvs", } - IT-72{ - "AV", - "BN", - "CE", - "NA", - "SA", + CY{ + "cy01", + "cy02", + "cy03", + "cy04", + "cy05", + "cy06", } - IT-75{ - "BA", - "BR", - "BT", - "FG", - "LE", - "TA", + CZ{ + "cz10", + "cz20", + "cz31", + "cz32", + "cz41", + "cz42", + "cz51", + "cz52", + "cz53", + "cz63", + "cz64", + "cz71", + "cz72", + "cz80", } - IT-77{ - "MT", - "PZ", + DE{ + "debb", + "debe", + "debw", + "deby", + "dehb", + "dehe", + "dehh", + "demv", + "deni", + "denw", + "derp", + "desh", + "desl", + "desn", + "dest", + "deth", } - IT-78{ - "CS", - "CZ", - "KR", - "RC", - "VV", + DJ{ + "djar", + "djas", + "djdi", + "djdj", + "djob", + "djta", } - IT-82{ - "AG", - "CL", - "CT", - "EN", - "ME", - "PA", - "RG", - "SR", - "TP", + DK{ + "dk81", + "dk82", + "dk83", + "dk84", + "dk85", } - IT-88{ - "CA", - "CI", - "NU", - "OG", - "OR", - "OT", - "SS", - "VS", + DM{ + "dm02", + "dm03", + "dm04", + "dm05", + "dm06", + "dm07", + "dm08", + "dm09", + "dm10", + "dm11", } - JM{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", + DO{ + "do33", + "do34", + "do35", + "do36", + "do37", + "do38", + "do39", + "do40", + "do41", + "do42", } - JO{ - "AJ", - "AM", - "AQ", - "AT", - "AZ", - "BA", - "IR", - "JA", - "KA", - "MA", - "MD", - "MN", + DZ{ + "dz01", + "dz02", + "dz03", + "dz04", + "dz05", + "dz06", + "dz07", + "dz08", + "dz09", + "dz10", + "dz11", + "dz12", + "dz13", + "dz14", + "dz15", + "dz16", + "dz17", + "dz18", + "dz19", + "dz20", + "dz21", + "dz22", + "dz23", + "dz24", + "dz25", + "dz26", + "dz27", + "dz28", + "dz29", + "dz30", + "dz31", + "dz32", + "dz33", + "dz34", + "dz35", + "dz36", + "dz37", + "dz38", + "dz39", + "dz40", + "dz41", + "dz42", + "dz43", + "dz44", + "dz45", + "dz46", + "dz47", + "dz48", } - JP{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", + EC{ + "eca", + "ecb", + "ecc", + "ecd", + "ece", + "ecf", + "ecg", + "ech", + "eci", + "ecl", + "ecm", + "ecn", + "eco", + "ecp", + "ecr", + "ecs", + "ecsd", + "ecse", + "ect", + "ecu", + "ecw", + "ecx", + "ecy", + "ecz", } - KE{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", + EE{ + "ee37", + "ee39", + "ee44", + "ee49", + "ee51", + "ee57", + "ee59", + "ee65", + "ee67", + "ee70", + "ee74", + "ee78", + "ee82", + "ee84", + "ee86", } - KG{ - "B", - "C", - "GB", - "GO", - "J", - "N", - "O", - "T", - "Y", + EG{ + "egalx", + "egasn", + "egast", + "egba", + "egbh", + "egbns", + "egc", + "egdk", + "egdt", + "egfym", + "eggh", + "eggz", + "egis", + "egjs", + "egkb", + "egkfs", + "egkn", + "eglx", + "egmn", + "egmnf", + "egmt", + "egpts", + "egshg", + "egshr", + "egsin", + "egsuz", + "egwad", } - KH{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", + ER{ + "eran", + "erdk", + "erdu", + "ergb", + "erma", + "ersk", } - KI{ - "G", - "L", - "P", + ES{ + "esan", + "esar", + "esas", + "escb", + "esce", + "escl", + "escm", + "escn", + "esct", + "esex", + "esga", + "esib", + "esmc", + "esmd", + "esml", + "esnc", + "espv", + "esri", + "esvc", } - KM{ - "A", - "G", - "M", + ET{ + "etaa", + "etaf", + "etam", + "etbe", + "etdd", + "etga", + "etha", + "etor", + "etsn", + "etso", + "etti", } - KN{ - "K", - "N", - } - KN-K{ - "01", - "02", - "03", - "06", - "08", - "09", - "11", - "13", - "15", - } - KN-N{ - "04", - "05", - "07", - "10", - "12", + FI{ + "fi01", + "fi02", + "fi03", + "fi04", + "fi05", + "fi06", + "fi07", + "fi08", + "fi09", + "fi10", + "fi11", + "fi12", + "fi13", + "fi14", + "fi15", + "fi16", + "fi17", + "fi18", + "fi19", } - KP{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "13", + FJ{ + "fjc", + "fje", + "fjn", + "fjr", + "fjw", } - KR{ - "11", - "26", - "27", - "28", - "29", - "30", - "31", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", + FM{ + "fmksa", + "fmpni", + "fmtrk", + "fmyap", } - KW{ - "AH", - "FA", - "HA", - "JA", - "KU", - "MU", + FR{ + "frara", + "frbfc", + "frbl", + "frbre", + "frcor", + "frcp", + "frcvl", + "frges", + "frgf", + "frgua", + "frhdf", + "fridf", + "frlre", + "frmay", + "frmf", + "frmq", + "frnaq", + "frnc", + "frnor", + "frocc", + "frpac", + "frpdl", + "frpf", + "frpm", + "frtf", + "frwf", } - KZ{ - "AKM", - "AKT", - "ALA", - "ALM", - "AST", - "ATY", - "KAR", - "KUS", - "KZY", - "MAN", - "PAV", - "SEV", - "VOS", - "YUZ", - "ZAP", - "ZHA", + GA{ + "ga1", + "ga2", + "ga3", + "ga4", + "ga5", + "ga6", + "ga7", + "ga8", + "ga9", } - LA{ - "AT", - "BK", - "BL", - "CH", - "HO", - "KH", - "LM", - "LP", - "OU", - "PH", - "SL", - "SV", - "VI", - "VT", - "XA", - "XE", - "XI", - "XS", + GB{ + "gbeaw", + "gbeng", + "gbgbn", + "gbnir", + "gbsct", + "gbukm", + "gbwls", } - LB{ - "AK", - "AS", - "BA", - "BH", - "BI", - "JA", - "JL", - "NA", + GD{ + "gd01", + "gd02", + "gd03", + "gd04", + "gd05", + "gd06", + "gd10", } - LC{ - "01", - "02", - "03", - "05", - "06", - "07", - "08", - "10", - "11", - "12", + GE{ + "geab", + "geaj", + "gegu", + "geim", + "geka", + "gekk", + "gemm", + "gerl", + "gesj", + "gesk", + "gesz", + "getb", } - LI{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", + GH{ + "ghaa", + "ghah", + "ghba", + "ghcp", + "ghep", + "ghnp", + "ghtv", + "ghue", + "ghuw", + "ghwp", } - LK{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", + GL{ + "glku", + "glqa", + "glqe", + "glsm", } - LK-1{ - "52", - "71", - "81", + GM{ + "gmb", + "gml", + "gmm", + "gmn", + "gmu", + "gmw", } - LK-2{ - "11", - "31", - "51", + GN{ + "gnb", + "gnc", + "gnd", + "gnf", + "gnk", + "gnl", + "gnm", + "gnn", } - LK-3{ - "12", - "33", - "41", - } - LK-4{ - "13", - "21", - "42", - "61", - "92", - } - LK-5{ - "22", - "32", - "43", + GQ{ + "gqc", + "gqi", } - LK-6{ - "45", - "82", + GR{ + "gr69", + "gra", + "grb", + "grc", + "grd", + "gre", + "grf", + "grg", + "grh", + "gri", + "grj", + "grk", + "grl", + "grm", } - LK-7{ - "23", - "72", + GT{ + "gtav", + "gtbv", + "gtcm", + "gtcq", + "gtes", + "gtgu", + "gthu", + "gtiz", + "gtja", + "gtju", + "gtpe", + "gtpr", + "gtqc", + "gtqz", + "gtre", + "gtsa", + "gtsm", + "gtso", + "gtsr", + "gtsu", + "gtto", + "gtza", } - LK-8{ - "62", - "91", + GW{ + "gwbs", + "gwl", + "gwn", + "gws", } - LK-9{ - "44", - "53", + GY{ + "gyba", + "gycu", + "gyde", + "gyeb", + "gyes", + "gyma", + "gypm", + "gypt", + "gyud", + "gyut", } - LR{ - "BG", - "BM", - "CM", - "GB", - "GG", - "GK", - "GP", - "LO", - "MG", - "MO", - "MY", - "NI", - "RG", - "RI", - "SI", + HN{ + "hnat", + "hnch", + "hncl", + "hncm", + "hncp", + "hncr", + "hnep", + "hnfm", + "hngd", + "hnib", + "hnin", + "hnle", + "hnlp", + "hnoc", + "hnol", + "hnsb", + "hnva", + "hnyo", } - LS{ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "J", - "K", + HR{ + "hr01", + "hr02", + "hr03", + "hr04", + "hr05", + "hr06", + "hr07", + "hr08", + "hr09", + "hr10", + "hr11", + "hr12", + "hr13", + "hr14", + "hr15", + "hr16", + "hr17", + "hr18", + "hr19", + "hr20", + "hr21", } - LT{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "57", - "58", - "59", - "60", - "AL", - "KL", - "KU", - "MR", - "PN", - "SA", - "TA", - "TE", - "UT", - "VL", + HT{ + "htar", + "htce", + "htga", + "htnd", + "htne", + "htni", + "htno", + "htou", + "htsd", + "htse", } - LU{ - "CA", - "CL", - "DI", - "EC", - "ES", - "GR", - "LU", - "ME", - "RD", - "RM", - "VD", - "WI", + HU{ + "huba", + "hubc", + "hube", + "hubk", + "hubu", + "hubz", + "hucs", + "hude", + "hudu", + "hueg", + "huer", + "hufe", + "hugs", + "hugy", + "huhb", + "huhe", + "huhv", + "hujn", + "huke", + "hukm", + "hukv", + "humi", + "hunk", + "huno", + "huny", + "hupe", + "hups", + "husd", + "husf", + "hush", + "husk", + "husn", + "huso", + "huss", + "hust", + "husz", + "hutb", + "huto", + "huva", + "huve", + "huvm", + "huza", + "huze", } - LV{ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058", - "059", - "060", - "061", - "062", - "063", - "064", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080", - "081", - "082", - "083", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "DGV", - "JEL", - "JKB", - "JUR", - "LPX", - "REZ", - "RIX", - "VEN", - "VMR", + ID{ + "idjw", + "idka", + "idml", + "idnu", + "idpp", + "idsl", + "idsm", } - LY{ - "BA", - "BU", - "DR", - "GT", - "JA", - "JG", - "JI", - "JU", - "KF", - "MB", - "MI", - "MJ", - "MQ", - "NL", - "NQ", - "SB", - "SR", - "TB", - "WA", - "WD", - "WS", - "ZA", + IE{ + "iec", + "iel", + "iem", + "ieu", } - MA{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", + IL{ + "ild", + "ilha", + "iljm", + "ilm", + "ilta", + "ilz", } - MA-01{ - "CHE", - "FAH", - "LAR", - "TET", - "TNG", + IN{ + "inan", + "inap", + "inar", + "inas", + "inbr", + "inch", + "inct", + "indd", + "indl", + "indn", + "inga", + "ingj", + "inhp", + "inhr", + "injh", + "injk", + "inka", + "inkl", + "inld", + "inmh", + "inml", + "inmn", + "inmp", + "inmz", + "innl", + "inor", + "inpb", + "inpy", + "inrj", + "insk", + "intg", + "intn", + "intr", + "inup", + "inut", + "inwb", } - MA-02{ - "KEN", - "SIK", + IQ{ + "iqan", + "iqar", + "iqba", + "iqbb", + "iqbg", + "iqda", + "iqdi", + "iqdq", + "iqka", + "iqki", + "iqma", + "iqmu", + "iqna", + "iqni", + "iqqa", + "iqsd", + "iqsu", + "iqwa", } - MA-03{ - "HOC", - "TAO", - "TAZ", + IR{ + "ir01", + "ir02", + "ir03", + "ir04", + "ir05", + "ir06", + "ir07", + "ir08", + "ir10", + "ir11", + "ir12", + "ir13", + "ir14", + "ir15", + "ir16", + "ir17", + "ir18", + "ir19", + "ir20", + "ir21", + "ir22", + "ir23", + "ir24", + "ir25", + "ir26", + "ir27", + "ir28", + "ir29", + "ir30", + "ir31", + "ir32", } - MA-04{ - "BER", - "FIG", - "JRA", - "NAD", - "OUJ", - "TAI", - } - MA-05{ - "BOM", - "FES", - "MOU", - "SEF", - } - MA-06{ - "ERR", - "HAJ", - "IFR", - "KHN", - "MEK", - } - MA-07{ - "KHE", - "RAB", - "SAL", - "SKH", - } - MA-08{ - "CAS", - "MED", - "MOH", - "NOU", - } - MA-09{ - "BES", - "KHO", - "SET", + IS{ + "is1", + "is2", + "is3", + "is4", + "is5", + "is6", + "is7", + "is8", } - MA-10{ - "JDI", - "SAF", + IT{ + "it21", + "it23", + "it25", + "it32", + "it34", + "it36", + "it42", + "it45", + "it52", + "it55", + "it57", + "it62", + "it65", + "it67", + "it72", + "it75", + "it77", + "it78", + "it82", + "it88", } - MA-11{ - "CHI", - "ESI", - "HAO", - "KES", - "MMD", - "MMN", - "SYB", - } - MA-12{ - "AZI", - "BEM", - } - MA-13{ - "AGD", - "CHT", - "INE", - "OUA", - "TAR", - "TIZ", - "ZAG", - } - MA-14{ - "ASZ", - "ESM", - "GUE", - "TAT", - "TNT", - } - MA-15{ - "BOD", - "LAA", - } - MA-16{ - "AOU", - "OUD", + JM{ + "jm01", + "jm02", + "jm03", + "jm04", + "jm05", + "jm06", + "jm07", + "jm08", + "jm09", + "jm10", + "jm11", + "jm12", + "jm13", + "jm14", + } + JO{ + "joaj", + "joam", + "joaq", + "joat", + "joaz", + "joba", + "joir", + "joja", + "joka", + "joma", + "jomd", + "jomn", + } + JP{ + "jp01", + "jp02", + "jp03", + "jp04", + "jp05", + "jp06", + "jp07", + "jp08", + "jp09", + "jp10", + "jp11", + "jp12", + "jp13", + "jp14", + "jp15", + "jp16", + "jp17", + "jp18", + "jp19", + "jp20", + "jp21", + "jp22", + "jp23", + "jp24", + "jp25", + "jp26", + "jp27", + "jp28", + "jp29", + "jp30", + "jp31", + "jp32", + "jp33", + "jp34", + "jp35", + "jp36", + "jp37", + "jp38", + "jp39", + "jp40", + "jp41", + "jp42", + "jp43", + "jp44", + "jp45", + "jp46", + "jp47", + } + KE{ + "ke01", + "ke02", + "ke03", + "ke04", + "ke05", + "ke06", + "ke07", + "ke08", + "ke09", + "ke10", + "ke11", + "ke12", + "ke13", + "ke14", + "ke15", + "ke16", + "ke17", + "ke18", + "ke19", + "ke20", + "ke21", + "ke22", + "ke23", + "ke24", + "ke25", + "ke26", + "ke27", + "ke28", + "ke29", + "ke30", + "ke31", + "ke32", + "ke33", + "ke34", + "ke35", + "ke36", + "ke37", + "ke38", + "ke39", + "ke40", + "ke41", + "ke42", + "ke43", + "ke44", + "ke45", + "ke46", + "ke47", + } + KG{ + "kgb", + "kgc", + "kggb", + "kggo", + "kgj", + "kgn", + "kgo", + "kgt", + "kgy", + } + KH{ + "kh1", + "kh2", + "kh3", + "kh4", + "kh5", + "kh6", + "kh7", + "kh8", + "kh9", + "kh10", + "kh11", + "kh12", + "kh13", + "kh14", + "kh15", + "kh16", + "kh17", + "kh18", + "kh19", + "kh20", + "kh21", + "kh22", + "kh23", + "kh24", + "kh25", + } + KI{ + "kig", + "kil", + "kip", + } + KM{ + "kma", + "kmg", + "kmm", + } + KN{ + "knk", + "knn", + } + KP{ + "kp01", + "kp02", + "kp03", + "kp04", + "kp05", + "kp06", + "kp07", + "kp08", + "kp09", + "kp10", + "kp13", + } + KR{ + "kr11", + "kr26", + "kr27", + "kr28", + "kr29", + "kr30", + "kr31", + "kr41", + "kr42", + "kr43", + "kr44", + "kr45", + "kr46", + "kr47", + "kr48", + "kr49", + "kr50", + } + KW{ + "kwah", + "kwfa", + "kwha", + "kwja", + "kwku", + "kwmu", + } + KZ{ + "kzakm", + "kzakt", + "kzala", + "kzalm", + "kzast", + "kzaty", + "kzbay", + "kzkar", + "kzkus", + "kzkzy", + "kzman", + "kzpav", + "kzsev", + "kzvos", + "kzyuz", + "kzzap", + "kzzha", + } + LA{ + "laat", + "labk", + "labl", + "lach", + "laho", + "lakh", + "lalm", + "lalp", + "laou", + "laph", + "lasl", + "lasv", + "lavi", + "lavt", + "laxa", + "laxe", + "laxi", + "laxs", + } + LB{ + "lbak", + "lbas", + "lbba", + "lbbh", + "lbbi", + "lbja", + "lbjl", + "lbna", + } + LC{ + "lc01", + "lc02", + "lc03", + "lc05", + "lc06", + "lc07", + "lc08", + "lc10", + "lc11", + "lc12", + } + LI{ + "li01", + "li02", + "li03", + "li04", + "li05", + "li06", + "li07", + "li08", + "li09", + "li10", + "li11", + } + LK{ + "lk1", + "lk2", + "lk3", + "lk4", + "lk5", + "lk6", + "lk7", + "lk8", + "lk9", + } + LR{ + "lrbg", + "lrbm", + "lrcm", + "lrgb", + "lrgg", + "lrgk", + "lrgp", + "lrlo", + "lrmg", + "lrmo", + "lrmy", + "lrni", + "lrrg", + "lrri", + "lrsi", + } + LS{ + "lsa", + "lsb", + "lsc", + "lsd", + "lse", + "lsf", + "lsg", + "lsh", + "lsj", + "lsk", + } + LT{ + "lt01", + "lt02", + "lt03", + "lt04", + "lt05", + "lt06", + "lt07", + "lt08", + "lt09", + "lt10", + "lt11", + "lt12", + "lt13", + "lt14", + "lt15", + "lt16", + "lt17", + "lt18", + "lt19", + "lt20", + "lt21", + "lt22", + "lt23", + "lt24", + "lt25", + "lt26", + "lt27", + "lt28", + "lt29", + "lt30", + "lt31", + "lt32", + "lt33", + "lt34", + "lt35", + "lt36", + "lt37", + "lt38", + "lt39", + "lt40", + "lt41", + "lt42", + "lt43", + "lt44", + "lt45", + "lt46", + "lt47", + "lt48", + "lt49", + "lt50", + "lt51", + "lt52", + "lt53", + "lt54", + "lt55", + "lt56", + "lt57", + "lt58", + "lt59", + "lt60", + "ltal", + "ltkl", + "ltku", + "ltmr", + "ltpn", + "ltsa", + "ltta", + "ltte", + "ltut", + "ltvl", + } + LU{ + "luca", + "lucl", + "ludi", + "luec", + "lues", + "lugr", + "lulu", + "lume", + "lurd", + "lurm", + "luvd", + "luwi", + } + LV{ + "lv001", + "lv002", + "lv003", + "lv004", + "lv005", + "lv006", + "lv007", + "lv008", + "lv009", + "lv010", + "lv011", + "lv012", + "lv013", + "lv014", + "lv015", + "lv016", + "lv017", + "lv018", + "lv019", + "lv020", + "lv021", + "lv022", + "lv023", + "lv024", + "lv025", + "lv026", + "lv027", + "lv028", + "lv029", + "lv030", + "lv031", + "lv032", + "lv033", + "lv034", + "lv035", + "lv036", + "lv037", + "lv038", + "lv039", + "lv040", + "lv041", + "lv042", + "lv043", + "lv044", + "lv045", + "lv046", + "lv047", + "lv048", + "lv049", + "lv050", + "lv051", + "lv052", + "lv053", + "lv054", + "lv055", + "lv056", + "lv057", + "lv058", + "lv059", + "lv060", + "lv061", + "lv062", + "lv063", + "lv064", + "lv065", + "lv066", + "lv067", + "lv068", + "lv069", + "lv070", + "lv071", + "lv072", + "lv073", + "lv074", + "lv075", + "lv076", + "lv077", + "lv078", + "lv079", + "lv080", + "lv081", + "lv082", + "lv083", + "lv084", + "lv085", + "lv086", + "lv087", + "lv088", + "lv089", + "lv090", + "lv091", + "lv092", + "lv093", + "lv094", + "lv095", + "lv096", + "lv097", + "lv098", + "lv099", + "lv100", + "lv101", + "lv102", + "lv103", + "lv104", + "lv105", + "lv106", + "lv107", + "lv108", + "lv109", + "lv110", + "lvdgv", + "lvjel", + "lvjkb", + "lvjur", + "lvlpx", + "lvrez", + "lvrix", + "lvven", + "lvvmr", + } + LY{ + "lyba", + "lybu", + "lydr", + "lygt", + "lyja", + "lyjg", + "lyji", + "lyju", + "lykf", + "lymb", + "lymi", + "lymj", + "lymq", + "lynl", + "lynq", + "lysb", + "lysr", + "lytb", + "lywa", + "lywd", + "lyws", + "lyza", + } + MA{ + "ma01", + "ma02", + "ma03", + "ma04", + "ma05", + "ma06", + "ma07", + "ma08", + "ma09", + "ma10", + "ma11", + "ma12", + "ma13", + "ma14", + "ma15", + "ma16", } MC{ - "CL", - "CO", - "FO", - "GA", - "JE", - "LA", - "MA", - "MC", - "MG", - "MO", - "MU", - "PH", - "SD", - "SO", - "SP", - "SR", - "VR", + "mccl", + "mcco", + "mcfo", + "mcga", + "mcje", + "mcla", + "mcma", + "mcmc", + "mcmg", + "mcmo", + "mcmu", + "mcph", + "mcsd", + "mcso", + "mcsp", + "mcsr", + "mcvr", } MD{ - "AN", - "BA", - "BD", - "BR", - "BS", - "CA", - "CL", - "CM", - "CR", - "CS", - "CT", - "CU", - "DO", - "DR", - "DU", - "ED", - "FA", - "FL", - "GA", - "GL", - "HI", - "IA", - "LE", - "NI", - "OC", - "OR", - "RE", - "RI", - "SD", - "SI", - "SN", - "SO", - "ST", - "SV", - "TA", - "TE", - "UN", + "mdan", + "mdba", + "mdbd", + "mdbr", + "mdbs", + "mdca", + "mdcl", + "mdcm", + "mdcr", + "mdcs", + "mdct", + "mdcu", + "mddo", + "mddr", + "mddu", + "mded", + "mdfa", + "mdfl", + "mdga", + "mdgl", + "mdhi", + "mdia", + "mdle", + "mdni", + "mdoc", + "mdor", + "mdre", + "mdri", + "mdsd", + "mdsi", + "mdsn", + "mdso", + "mdst", + "mdsv", + "mdta", + "mdte", + "mdun", } ME{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", + "me01", + "me02", + "me03", + "me04", + "me05", + "me06", + "me07", + "me08", + "me09", + "me10", + "me11", + "me12", + "me13", + "me14", + "me15", + "me16", + "me17", + "me18", + "me19", + "me20", + "me21", + "me22", + "me23", } MG{ - "A", - "D", - "F", - "M", - "T", - "U", + "mga", + "mgd", + "mgf", + "mgm", + "mgt", + "mgu", } MH{ - "L", - "T", - } - MH-L{ - "ALL", - "EBO", - "ENI", - "JAB", - "JAL", - "KIL", - "KWA", - "LAE", - "LIB", - "NMK", - "NMU", - "RON", - "UJA", - "WTH", - } - MH-T{ - "ALK", - "ARN", - "AUR", - "LIK", - "MAJ", - "MAL", - "MEJ", - "MIL", - "UTI", - "WTJ", + "mhl", + "mht", } MK{ - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "10", - "11", - "12", - "13", - "14", - "16", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "30", - "32", - "33", - "34", - "35", - "36", - "37", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "58", - "59", - "60", - "61", - "62", - "63", - "64", - "65", - "66", - "67", - "69", - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "78", - "80", - "81", - "82", - "83", - "85", + "mk02", + "mk03", + "mk04", + "mk05", + "mk06", + "mk07", + "mk08", + "mk10", + "mk11", + "mk12", + "mk13", + "mk14", + "mk16", + "mk18", + "mk19", + "mk20", + "mk21", + "mk22", + "mk23", + "mk24", + "mk25", + "mk26", + "mk27", + "mk30", + "mk32", + "mk33", + "mk34", + "mk35", + "mk36", + "mk37", + "mk40", + "mk41", + "mk42", + "mk43", + "mk44", + "mk45", + "mk46", + "mk47", + "mk48", + "mk49", + "mk50", + "mk51", + "mk52", + "mk53", + "mk54", + "mk55", + "mk56", + "mk58", + "mk59", + "mk60", + "mk61", + "mk62", + "mk63", + "mk64", + "mk65", + "mk66", + "mk67", + "mk69", + "mk70", + "mk71", + "mk72", + "mk73", + "mk74", + "mk75", + "mk76", + "mk78", + "mk80", + "mk81", + "mk82", + "mk83", + "mk85", } ML{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "BKO", + "ml1", + "ml2", + "ml3", + "ml4", + "ml5", + "ml6", + "ml7", + "ml8", + "mlbko", } MM{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", + "mm01", + "mm02", + "mm03", + "mm04", + "mm05", + "mm06", + "mm07", + "mm11", + "mm12", + "mm13", + "mm14", + "mm15", + "mm16", + "mm17", + "mm18", } MN{ - "1", - "035", - "037", - "039", - "041", - "043", - "046", - "047", - "049", - "051", - "053", - "055", - "057", - "059", - "061", - "063", - "064", - "065", - "067", - "069", - "071", - "073", + "mn1", + "mn035", + "mn037", + "mn039", + "mn041", + "mn043", + "mn046", + "mn047", + "mn049", + "mn051", + "mn053", + "mn055", + "mn057", + "mn059", + "mn061", + "mn063", + "mn064", + "mn065", + "mn067", + "mn069", + "mn071", + "mn073", } MR{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", + "mr01", + "mr02", + "mr03", + "mr04", + "mr05", + "mr06", + "mr07", + "mr08", + "mr09", + "mr10", + "mr11", + "mr12", + "mr13", + "mr14", + "mr15", } MT{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "57", - "58", - "59", - "60", - "61", - "62", - "63", - "64", - "65", - "66", - "67", - "68", + "mt01", + "mt02", + "mt03", + "mt04", + "mt05", + "mt06", + "mt07", + "mt08", + "mt09", + "mt10", + "mt11", + "mt12", + "mt13", + "mt14", + "mt15", + "mt16", + "mt17", + "mt18", + "mt19", + "mt20", + "mt21", + "mt22", + "mt23", + "mt24", + "mt25", + "mt26", + "mt27", + "mt28", + "mt29", + "mt30", + "mt31", + "mt32", + "mt33", + "mt34", + "mt35", + "mt36", + "mt37", + "mt38", + "mt39", + "mt40", + "mt41", + "mt42", + "mt43", + "mt44", + "mt45", + "mt46", + "mt47", + "mt48", + "mt49", + "mt50", + "mt51", + "mt52", + "mt53", + "mt54", + "mt55", + "mt56", + "mt57", + "mt58", + "mt59", + "mt60", + "mt61", + "mt62", + "mt63", + "mt64", + "mt65", + "mt66", + "mt67", + "mt68", } MU{ - "AG", - "BL", - "BR", - "CC", - "CU", - "FL", - "GP", - "MO", - "PA", - "PL", - "PU", - "PW", - "QB", - "RO", - "RR", - "SA", - "VP", + "muag", + "mubl", + "mubr", + "mucc", + "mucu", + "mufl", + "mugp", + "mumo", + "mupa", + "mupl", + "mupu", + "mupw", + "muqb", + "muro", + "murr", + "musa", + "muvp", } MV{ - "CE", - "MLE", - "NC", - "NO", - "SC", - "SU", - "UN", - "US", - } - MV-CE{ - "12", - "14", - "17", - } - MV-NC{ - "00", - "02", - "04", - "26", - } - MV-NO{ - "03", - "13", - "20", - "25", - } - MV-SC{ - "27", - "28", - } - MV-SU{ - "01", - "29", - } - MV-UN{ - "07", - "23", - "24", - } - MV-US{ - "05", - "08", + "mvce", + "mvmle", + "mvnc", + "mvno", + "mvsc", + "mvsu", + "mvun", + "mvus", } MW{ - "C", - "N", - "S", - } - MW-C{ - "DE", - "DO", - "KS", - "LI", - "MC", - "NI", - "NK", - "NU", - "SA", - } - MW-N{ - "CT", - "KR", - "LK", - "MZ", - "NB", - "RU", - } - MW-S{ - "BA", - "BL", - "CK", - "CR", - "MG", - "MH", - "MU", - "MW", - "NE", - "NS", - "PH", - "TH", - "ZO", + "mwc", + "mwn", + "mws", } MX{ - "AGU", - "BCN", - "BCS", - "CAM", - "CHH", - "CHP", - "COA", - "COL", - "DIF", - "DUR", - "GRO", - "GUA", - "HID", - "JAL", - "MEX", - "MIC", - "MOR", - "NAY", - "NLE", - "OAX", - "PUE", - "QUE", - "ROO", - "SIN", - "SLP", - "SON", - "TAB", - "TAM", - "TLA", - "VER", - "YUC", - "ZAC", + "mxagu", + "mxbcn", + "mxbcs", + "mxcam", + "mxchh", + "mxchp", + "mxcmx", + "mxcoa", + "mxcol", + "mxdur", + "mxgro", + "mxgua", + "mxhid", + "mxjal", + "mxmex", + "mxmic", + "mxmor", + "mxnay", + "mxnle", + "mxoax", + "mxpue", + "mxque", + "mxroo", + "mxsin", + "mxslp", + "mxson", + "mxtab", + "mxtam", + "mxtla", + "mxver", + "mxyuc", + "mxzac", } MY{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", + "my01", + "my02", + "my03", + "my04", + "my05", + "my06", + "my07", + "my08", + "my09", + "my10", + "my11", + "my12", + "my13", + "my14", + "my15", + "my16", } MZ{ - "A", - "B", - "G", - "I", - "L", - "MPM", - "N", - "P", - "Q", - "S", - "T", + "mza", + "mzb", + "mzg", + "mzi", + "mzl", + "mzmpm", + "mzn", + "mzp", + "mzq", + "mzs", + "mzt", } NA{ - "CA", - "ER", - "HA", - "KA", - "KE", - "KH", - "KU", - "KW", - "OD", - "OH", - "ON", - "OS", - "OT", - "OW", + "naca", + "naer", + "naha", + "naka", + "nake", + "nakh", + "naku", + "nakw", + "naod", + "naoh", + "naon", + "naos", + "naot", + "naow", } NE{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", + "ne1", + "ne2", + "ne3", + "ne4", + "ne5", + "ne6", + "ne7", + "ne8", } NG{ - "AB", - "AD", - "AK", - "AN", - "BA", - "BE", - "BO", - "BY", - "CR", - "DE", - "EB", - "ED", - "EK", - "EN", - "FC", - "GO", - "IM", - "JI", - "KD", - "KE", - "KN", - "KO", - "KT", - "KW", - "LA", - "NA", - "NI", - "OG", - "ON", - "OS", - "OY", - "PL", - "RI", - "SO", - "TA", - "YO", - "ZA", + "ngab", + "ngad", + "ngak", + "ngan", + "ngba", + "ngbe", + "ngbo", + "ngby", + "ngcr", + "ngde", + "ngeb", + "nged", + "ngek", + "ngen", + "ngfc", + "nggo", + "ngim", + "ngji", + "ngkd", + "ngke", + "ngkn", + "ngko", + "ngkt", + "ngkw", + "ngla", + "ngna", + "ngni", + "ngog", + "ngon", + "ngos", + "ngoy", + "ngpl", + "ngri", + "ngso", + "ngta", + "ngyo", + "ngza", } NI{ - "AN", - "AS", - "BO", - "CA", - "CI", - "CO", - "ES", - "GR", - "JI", - "LE", - "MD", - "MN", - "MS", - "MT", - "NS", - "RI", - "SJ", + "nian", + "nias", + "nibo", + "nica", + "nici", + "nico", + "nies", + "nigr", + "niji", + "nile", + "nimd", + "nimn", + "nims", + "nimt", + "nins", + "niri", + "nisj", } NL{ - "AW", - "BQ1", - "BQ2", - "BQ3", - "CW", - "DR", - "FL", - "FR", - "GE", - "GR", - "LI", - "NB", - "NH", - "OV", - "SX", - "UT", - "ZE", - "ZH", - } - NO{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - } - NP{ - "1", - "2", - "3", - "4", - "5", - } - NP-1{ - "BA", - "JA", - "NA", - } - NP-2{ - "BH", - "KA", - "RA", - } - NP-3{ - "DH", - "GA", - "LU", + "nlaw", + "nlbq1", + "nlbq2", + "nlbq3", + "nlcw", + "nldr", + "nlfl", + "nlfr", + "nlge", + "nlgr", + "nlli", + "nlnb", + "nlnh", + "nlov", + "nlsx", + "nlut", + "nlze", + "nlzh", } - NP-4{ - "KO", - "ME", - "SA", + NO{ + "no01", + "no02", + "no03", + "no04", + "no05", + "no06", + "no07", + "no08", + "no09", + "no10", + "no11", + "no12", + "no14", + "no15", + "no16", + "no17", + "no18", + "no19", + "no20", + "no21", + "no22", } - NP-5{ - "MA", - "SE", + NP{ + "np1", + "np2", + "np3", + "np4", + "np5", } NR{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", + "nr01", + "nr02", + "nr03", + "nr04", + "nr05", + "nr06", + "nr07", + "nr08", + "nr09", + "nr10", + "nr11", + "nr12", + "nr13", + "nr14", } NZ{ - "AUK", - "BOP", - "CAN", - "CIT", - "GIS", - "HKB", - "MBH", - "MWT", - "NSN", - "NTL", - "OTA", - "STL", - "TAS", - "TKI", - "WGN", - "WKO", - "WTC", + "nzauk", + "nzbop", + "nzcan", + "nzcit", + "nzgis", + "nzhkb", + "nzmbh", + "nzmwt", + "nznsn", + "nzntl", + "nzota", + "nzstl", + "nztas", + "nztki", + "nzwgn", + "nzwko", + "nzwtc", } OM{ - "BJ", - "BS", - "BU", - "DA", - "MA", - "MU", - "SJ", - "SS", - "WU", - "ZA", - "ZU", + "ombj", + "ombs", + "ombu", + "omda", + "omma", + "ommu", + "omsj", + "omss", + "omwu", + "omza", + "omzu", } PA{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "EM", - "KY", - "NB", + "pa1", + "pa2", + "pa3", + "pa4", + "pa5", + "pa6", + "pa7", + "pa8", + "pa9", + "pa10", + "paem", + "paky", + "panb", } PE{ - "AMA", - "ANC", - "APU", - "ARE", - "AYA", - "CAJ", - "CAL", - "CUS", - "HUC", - "HUV", - "ICA", - "JUN", - "LAL", - "LAM", - "LIM", - "LMA", - "LOR", - "MDD", - "MOQ", - "PAS", - "PIU", - "PUN", - "SAM", - "TAC", - "TUM", - "UCA", + "peama", + "peanc", + "peapu", + "peare", + "peaya", + "pecaj", + "pecal", + "pecus", + "pehuc", + "pehuv", + "peica", + "pejun", + "pelal", + "pelam", + "pelim", + "pelma", + "pelor", + "pemdd", + "pemoq", + "pepas", + "pepiu", + "pepun", + "pesam", + "petac", + "petum", + "peuca", } PG{ - "CPK", - "CPM", - "EBR", - "EHG", - "EPW", - "ESW", - "GPK", - "HLA", - "JWK", - "MBA", - "MPL", - "MPM", - "MRL", - "NCD", - "NIK", - "NPP", - "NSB", - "SAN", - "SHM", - "WBK", - "WHM", - "WPD", + "pgcpk", + "pgcpm", + "pgebr", + "pgehg", + "pgepw", + "pgesw", + "pggpk", + "pghla", + "pgjwk", + "pgmba", + "pgmpl", + "pgmpm", + "pgmrl", + "pgncd", + "pgnik", + "pgnpp", + "pgnsb", + "pgsan", + "pgshm", + "pgwbk", + "pgwhm", + "pgwpd", } PH{ - "00", - "01", - "02", - "03", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "40", - "41", - } - PH-01{ - "ILN", - "ILS", - "LUN", - "PAN", - } - PH-02{ - "BTN", - "CAG", - "ISA", - "NUV", - "QUI", - } - PH-03{ - "AUR", - "BAN", - "BUL", - "NUE", - "PAM", - "TAR", - "ZMB", - } - PH-05{ - "ALB", - "CAN", - "CAS", - "CAT", - "MAS", - "SOR", - } - PH-06{ - "AKL", - "ANT", - "CAP", - "GUI", - "ILI", - "NEC", - } - PH-07{ - "BOH", - "CEB", - "NER", - "SIG", - } - PH-08{ - "BIL", - "EAS", - "LEY", - "NSA", - "SLE", - "WSA", - } - PH-09{ - "BAS", - "ZAN", - "ZAS", - "ZSI", - } - PH-10{ - "BUK", - "CAM", - "MSC", - "MSR", - } - PH-11{ - "COM", - "DAO", - "DAS", - "DAV", - "DVO", - "SAR", - "SCO", - } - PH-12{ - "LAN", - "NCO", - "SUK", - } - PH-13{ - "AGN", - "AGS", - "DIN", - "SUN", - "SUR", - } - PH-14{ - "LAS", - "MAG", - "SLU", - "TAW", - } - PH-15{ - "ABR", - "APA", - "BEN", - "IFU", - "KAL", - "MOU", - } - PH-40{ - "BTG", - "CAV", - "LAG", - "QUE", - "RIZ", - } - PH-41{ - "MAD", - "MDC", - "MDR", - "PLW", - "ROM", + "ph00", + "ph01", + "ph02", + "ph03", + "ph05", + "ph06", + "ph07", + "ph08", + "ph09", + "ph10", + "ph11", + "ph12", + "ph13", + "ph14", + "ph15", + "ph40", + "ph41", } PK{ - "BA", - "GB", - "IS", - "JK", - "KP", - "PB", - "SD", - "TA", + "pkba", + "pkgb", + "pkis", + "pkjk", + "pkkp", + "pkpb", + "pksd", + "pkta", } PL{ - "DS", - "KP", - "LB", - "LD", - "LU", - "MA", - "MZ", - "OP", - "PD", - "PK", - "PM", - "SK", - "SL", - "WN", - "WP", - "ZP", + "plds", + "plkp", + "pllb", + "plld", + "pllu", + "plma", + "plmz", + "plop", + "plpd", + "plpk", + "plpm", + "plsk", + "plsl", + "plwn", + "plwp", + "plzp", } PS{ - "BTH", - "DEB", - "GZA", - "HBN", - "JEM", - "JEN", - "JRH", - "KYS", - "NBS", - "NGZ", - "QQA", - "RBH", - "RFH", - "SLT", - "TBS", - "TKM", + "psbth", + "psdeb", + "psgza", + "pshbn", + "psjem", + "psjen", + "psjrh", + "pskys", + "psnbs", + "psngz", + "psqqa", + "psrbh", + "psrfh", + "psslt", + "pstbs", + "pstkm", } PT{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "20", - "30", + "pt01", + "pt02", + "pt03", + "pt04", + "pt05", + "pt06", + "pt07", + "pt08", + "pt09", + "pt10", + "pt11", + "pt12", + "pt13", + "pt14", + "pt15", + "pt16", + "pt17", + "pt18", + "pt20", + "pt30", } PW{ - "002", - "004", - "010", - "050", - "100", - "150", - "212", - "214", - "218", - "222", - "224", - "226", - "227", - "228", - "350", - "370", + "pw002", + "pw004", + "pw010", + "pw050", + "pw100", + "pw150", + "pw212", + "pw214", + "pw218", + "pw222", + "pw224", + "pw226", + "pw227", + "pw228", + "pw350", + "pw370", } PY{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "19", - "ASU", + "py1", + "py2", + "py3", + "py4", + "py5", + "py6", + "py7", + "py8", + "py9", + "py10", + "py11", + "py12", + "py13", + "py14", + "py15", + "py16", + "py19", + "pyasu", } QA{ - "DA", - "KH", - "MS", - "RA", - "US", - "WA", - "ZA", + "qada", + "qakh", + "qams", + "qara", + "qaus", + "qawa", + "qaza", } RO{ - "AB", - "AG", - "AR", - "B", - "BC", - "BH", - "BN", - "BR", - "BT", - "BV", - "BZ", - "CJ", - "CL", - "CS", - "CT", - "CV", - "DB", - "DJ", - "GJ", - "GL", - "GR", - "HD", - "HR", - "IF", - "IL", - "IS", - "MH", - "MM", - "MS", - "NT", - "OT", - "PH", - "SB", - "SJ", - "SM", - "SV", - "TL", - "TM", - "TR", - "VL", - "VN", - "VS", + "roab", + "roag", + "roar", + "rob", + "robc", + "robh", + "robn", + "robr", + "robt", + "robv", + "robz", + "rocj", + "rocl", + "rocs", + "roct", + "rocv", + "rodb", + "rodj", + "rogj", + "rogl", + "rogr", + "rohd", + "rohr", + "roif", + "roil", + "rois", + "romh", + "romm", + "roms", + "ront", + "root", + "roph", + "rosb", + "rosj", + "rosm", + "rosv", + "rotl", + "rotm", + "rotr", + "rovl", + "rovn", + "rovs", } RS{ - "00", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "KM", - "VO", - } - RS-KM{ - "25", - "26", - "27", - "28", - "29", - } - RS-VO{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", + "rs00", + "rs08", + "rs09", + "rs10", + "rs11", + "rs12", + "rs13", + "rs14", + "rs15", + "rs16", + "rs17", + "rs18", + "rs19", + "rs20", + "rs21", + "rs22", + "rs23", + "rs24", + "rskm", + "rsvo", } RU{ - "AD", - "AL", - "ALT", - "AMU", - "ARK", - "AST", - "BA", - "BEL", - "BRY", - "BU", - "CE", - "CHE", - "CHU", - "CU", - "DA", - "IN", - "IRK", - "IVA", - "KAM", - "KB", - "KC", - "KDA", - "KEM", - "KGD", - "KGN", - "KHA", - "KHM", - "KIR", - "KK", - "KL", - "KLU", - "KO", - "KOS", - "KR", - "KRS", - "KYA", - "LEN", - "LIP", - "MAG", - "ME", - "MO", - "MOS", - "MOW", - "MUR", - "NEN", - "NGR", - "NIZ", - "NVS", - "OMS", - "ORE", - "ORL", - "PER", - "PNZ", - "PRI", - "PSK", - "ROS", - "RYA", - "SA", - "SAK", - "SAM", - "SAR", - "SE", - "SMO", - "SPE", - "STA", - "SVE", - "TA", - "TAM", - "TOM", - "TUL", - "TVE", - "TY", - "TYU", - "UD", - "ULY", - "VGG", - "VLA", - "VLG", - "VOR", - "YAN", - "YAR", - "YEV", - "ZAB", + "ruad", + "rual", + "rualt", + "ruamu", + "ruark", + "ruast", + "ruba", + "rubel", + "rubry", + "rubu", + "ruce", + "ruche", + "ruchu", + "rucu", + "ruda", + "ruin", + "ruirk", + "ruiva", + "rukam", + "rukb", + "rukc", + "rukda", + "rukem", + "rukgd", + "rukgn", + "rukha", + "rukhm", + "rukir", + "rukk", + "rukl", + "ruklu", + "ruko", + "rukos", + "rukr", + "rukrs", + "rukya", + "rulen", + "rulip", + "rumag", + "rume", + "rumo", + "rumos", + "rumow", + "rumur", + "runen", + "rungr", + "runiz", + "runvs", + "ruoms", + "ruore", + "ruorl", + "ruper", + "rupnz", + "rupri", + "rupsk", + "ruros", + "rurya", + "rusa", + "rusak", + "rusam", + "rusar", + "ruse", + "rusmo", + "ruspe", + "rusta", + "rusve", + "ruta", + "rutam", + "rutom", + "rutul", + "rutve", + "ruty", + "rutyu", + "ruud", + "ruuly", + "ruvgg", + "ruvla", + "ruvlg", + "ruvor", + "ruyan", + "ruyar", + "ruyev", + "ruzab", } RW{ - "01", - "02", - "03", - "04", - "05", + "rw01", + "rw02", + "rw03", + "rw04", + "rw05", } SA{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "14", + "sa01", + "sa02", + "sa03", + "sa04", + "sa05", + "sa06", + "sa07", + "sa08", + "sa09", + "sa10", + "sa11", + "sa12", + "sa14", } SB{ - "CE", - "CH", - "CT", - "GU", - "IS", - "MK", - "ML", - "RB", - "TE", - "WE", + "sbce", + "sbch", + "sbct", + "sbgu", + "sbis", + "sbmk", + "sbml", + "sbrb", + "sbte", + "sbwe", } SC{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", + "sc01", + "sc02", + "sc03", + "sc04", + "sc05", + "sc06", + "sc07", + "sc08", + "sc09", + "sc10", + "sc11", + "sc12", + "sc13", + "sc14", + "sc15", + "sc16", + "sc17", + "sc18", + "sc19", + "sc20", + "sc21", + "sc22", + "sc23", + "sc24", + "sc25", } SD{ - "DC", - "DE", - "DN", - "DS", - "DW", - "GD", - "GK", - "GZ", - "KA", - "KH", - "KN", - "KS", - "NB", - "NO", - "NR", - "NW", - "RS", - "SI", + "sddc", + "sdde", + "sddn", + "sdds", + "sddw", + "sdgd", + "sdgk", + "sdgz", + "sdka", + "sdkh", + "sdkn", + "sdks", + "sdnb", + "sdno", + "sdnr", + "sdnw", + "sdrs", + "sdsi", } SE{ - "AB", - "AC", - "BD", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "K", - "M", - "N", - "O", - "S", - "T", - "U", - "W", - "X", - "Y", - "Z", + "seab", + "seac", + "sebd", + "sec", + "sed", + "see", + "sef", + "seg", + "seh", + "sei", + "sek", + "sem", + "sen", + "seo", + "ses", + "set", + "seu", + "sew", + "sex", + "sey", + "sez", } SG{ - "01", - "02", - "03", - "04", - "05", + "sg01", + "sg02", + "sg03", + "sg04", + "sg05", } SH{ - "AC", - "HL", - "TA", + "shac", + "shhl", + "shta", } SI{ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058", - "059", - "060", - "061", - "062", - "063", - "064", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080", - "081", - "082", - "083", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "146", - "147", - "148", - "149", - "150", - "151", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", - "165", - "166", - "167", - "168", - "169", - "170", - "171", - "172", - "173", - "174", - "175", - "176", - "177", - "178", - "179", - "180", - "181", - "182", - "183", - "184", - "185", - "186", - "187", - "188", - "189", - "190", - "191", - "192", - "193", - "194", - "195", - "196", - "197", - "198", - "199", - "200", - "201", - "202", - "203", - "204", - "205", - "206", - "207", - "208", - "209", - "210", - "211", - "212", + "si001", + "si002", + "si003", + "si004", + "si005", + "si006", + "si007", + "si008", + "si009", + "si010", + "si011", + "si012", + "si013", + "si014", + "si015", + "si016", + "si017", + "si018", + "si019", + "si020", + "si021", + "si022", + "si023", + "si024", + "si025", + "si026", + "si027", + "si028", + "si029", + "si030", + "si031", + "si032", + "si033", + "si034", + "si035", + "si036", + "si037", + "si038", + "si039", + "si040", + "si041", + "si042", + "si043", + "si044", + "si045", + "si046", + "si047", + "si048", + "si049", + "si050", + "si051", + "si052", + "si053", + "si054", + "si055", + "si056", + "si057", + "si058", + "si059", + "si060", + "si061", + "si062", + "si063", + "si064", + "si065", + "si066", + "si067", + "si068", + "si069", + "si070", + "si071", + "si072", + "si073", + "si074", + "si075", + "si076", + "si077", + "si078", + "si079", + "si080", + "si081", + "si082", + "si083", + "si084", + "si085", + "si086", + "si087", + "si088", + "si089", + "si090", + "si091", + "si092", + "si093", + "si094", + "si095", + "si096", + "si097", + "si098", + "si099", + "si100", + "si101", + "si102", + "si103", + "si104", + "si105", + "si106", + "si107", + "si108", + "si109", + "si110", + "si111", + "si112", + "si113", + "si114", + "si115", + "si116", + "si117", + "si118", + "si119", + "si120", + "si121", + "si122", + "si123", + "si124", + "si125", + "si126", + "si127", + "si128", + "si129", + "si130", + "si131", + "si132", + "si133", + "si134", + "si135", + "si136", + "si137", + "si138", + "si139", + "si140", + "si141", + "si142", + "si143", + "si144", + "si146", + "si147", + "si148", + "si149", + "si150", + "si151", + "si152", + "si153", + "si154", + "si155", + "si156", + "si157", + "si158", + "si159", + "si160", + "si161", + "si162", + "si163", + "si164", + "si165", + "si166", + "si167", + "si168", + "si169", + "si170", + "si171", + "si172", + "si173", + "si174", + "si175", + "si176", + "si177", + "si178", + "si179", + "si180", + "si181", + "si182", + "si183", + "si184", + "si185", + "si186", + "si187", + "si188", + "si189", + "si190", + "si191", + "si192", + "si193", + "si194", + "si195", + "si196", + "si197", + "si198", + "si199", + "si200", + "si201", + "si202", + "si203", + "si204", + "si205", + "si206", + "si207", + "si208", + "si209", + "si210", + "si211", + "si212", + "si213", } SK{ - "BC", - "BL", - "KI", - "NI", - "PV", - "TA", - "TC", - "ZI", - } - SL{ - "E", - "N", - "S", - "W", - } - SM{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - } - SN{ - "DB", - "DK", - "FK", - "KA", - "KD", - "KE", - "KL", - "LG", - "MT", - "SE", - "SL", - "TC", - "TH", - "ZG", + "skbc", + "skbl", + "skki", + "skni", + "skpv", + "skta", + "sktc", + "skzi", + } + SL{ + "sle", + "sln", + "sls", + "slw", + } + SM{ + "sm01", + "sm02", + "sm03", + "sm04", + "sm05", + "sm06", + "sm07", + "sm08", + "sm09", + } + SN{ + "sndb", + "sndk", + "snfk", + "snka", + "snkd", + "snke", + "snkl", + "snlg", + "snmt", + "snse", + "snsl", + "sntc", + "snth", + "snzg", } SO{ - "AW", - "BK", - "BN", - "BR", - "BY", - "GA", - "GE", - "HI", - "JD", - "JH", - "MU", - "NU", - "SA", - "SD", - "SH", - "SO", - "TO", - "WO", + "soaw", + "sobk", + "sobn", + "sobr", + "soby", + "soga", + "soge", + "sohi", + "sojd", + "sojh", + "somu", + "sonu", + "sosa", + "sosd", + "sosh", + "soso", + "soto", + "sowo", } SR{ - "BR", - "CM", - "CR", - "MA", - "NI", - "PM", - "PR", - "SA", - "SI", - "WA", + "srbr", + "srcm", + "srcr", + "srma", + "srni", + "srpm", + "srpr", + "srsa", + "srsi", + "srwa", } SS{ - "BN", - "BW", - "EC", - "EE", - "EW", - "JG", - "LK", - "NU", - "UY", - "WR", + "ssbn", + "ssbw", + "ssec", + "ssee", + "ssew", + "ssjg", + "sslk", + "ssnu", + "ssuy", + "sswr", } ST{ - "P", - "S", + "stp", + "sts", } SV{ - "AH", - "CA", - "CH", - "CU", - "LI", - "MO", - "PA", - "SA", - "SM", - "SO", - "SS", - "SV", - "UN", - "US", + "svah", + "svca", + "svch", + "svcu", + "svli", + "svmo", + "svpa", + "svsa", + "svsm", + "svso", + "svss", + "svsv", + "svun", + "svus", } SY{ - "DI", - "DR", - "DY", - "HA", - "HI", - "HL", - "HM", - "ID", - "LA", - "QU", - "RA", - "RD", - "SU", - "TA", + "sydi", + "sydr", + "sydy", + "syha", + "syhi", + "syhl", + "syhm", + "syid", + "syla", + "syqu", + "syra", + "syrd", + "sysu", + "syta", } SZ{ - "HH", - "LU", - "MA", - "SH", + "szhh", + "szlu", + "szma", + "szsh", } TD{ - "BA", - "BG", - "BO", - "CB", - "EE", - "EO", - "GR", - "HL", - "KA", - "LC", - "LO", - "LR", - "MA", - "MC", - "ME", - "MO", - "ND", - "OD", - "SA", - "SI", - "TA", - "TI", - "WF", + "tdba", + "tdbg", + "tdbo", + "tdcb", + "tdee", + "tdeo", + "tdgr", + "tdhl", + "tdka", + "tdlc", + "tdlo", + "tdlr", + "tdma", + "tdmc", + "tdme", + "tdmo", + "tdnd", + "tdod", + "tdsa", + "tdsi", + "tdta", + "tdti", + "tdwf", } TG{ - "C", - "K", - "M", - "P", - "S", + "tgc", + "tgk", + "tgm", + "tgp", + "tgs", } TH{ - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "57", - "58", - "60", - "61", - "62", - "63", - "64", - "65", - "66", - "67", - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "77", - "80", - "81", - "82", - "83", - "84", - "85", - "86", - "90", - "91", - "92", - "93", - "94", - "95", - "96", - "S", + "th10", + "th11", + "th12", + "th13", + "th14", + "th15", + "th16", + "th17", + "th18", + "th19", + "th20", + "th21", + "th22", + "th23", + "th24", + "th25", + "th26", + "th27", + "th30", + "th31", + "th32", + "th33", + "th34", + "th35", + "th36", + "th37", + "th38", + "th39", + "th40", + "th41", + "th42", + "th43", + "th44", + "th45", + "th46", + "th47", + "th48", + "th49", + "th50", + "th51", + "th52", + "th53", + "th54", + "th55", + "th56", + "th57", + "th58", + "th60", + "th61", + "th62", + "th63", + "th64", + "th65", + "th66", + "th67", + "th70", + "th71", + "th72", + "th73", + "th74", + "th75", + "th76", + "th77", + "th80", + "th81", + "th82", + "th83", + "th84", + "th85", + "th86", + "th90", + "th91", + "th92", + "th93", + "th94", + "th95", + "th96", + "ths", } TJ{ - "DU", - "GB", - "KT", - "SU", + "tjdu", + "tjgb", + "tjkt", + "tjra", + "tjsu", } TL{ - "AL", - "AN", - "BA", - "BO", - "CO", - "DI", - "ER", - "LA", - "LI", - "MF", - "MT", - "OE", - "VI", + "tlal", + "tlan", + "tlba", + "tlbo", + "tlco", + "tldi", + "tler", + "tlla", + "tlli", + "tlmf", + "tlmt", + "tloe", + "tlvi", } TM{ - "A", - "B", - "D", - "L", - "M", - "S", + "tma", + "tmb", + "tmd", + "tml", + "tmm", + "tms", } TN{ - "11", - "12", - "13", - "14", - "21", - "22", - "23", - "31", - "32", - "33", - "34", - "41", - "42", - "43", - "51", - "52", - "53", - "61", - "71", - "72", - "73", - "81", - "82", - "83", + "tn11", + "tn12", + "tn13", + "tn14", + "tn21", + "tn22", + "tn23", + "tn31", + "tn32", + "tn33", + "tn34", + "tn41", + "tn42", + "tn43", + "tn51", + "tn52", + "tn53", + "tn61", + "tn71", + "tn72", + "tn73", + "tn81", + "tn82", + "tn83", } TO{ - "01", - "02", - "03", - "04", - "05", + "to01", + "to02", + "to03", + "to04", + "to05", } TR{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "38", - "39", - "40", - "41", - "42", - "43", - "44", - "45", - "46", - "47", - "48", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "57", - "58", - "59", - "60", - "61", - "62", - "63", - "64", - "65", - "66", - "67", - "68", - "69", - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "77", - "78", - "79", - "80", - "81", + "tr01", + "tr02", + "tr03", + "tr04", + "tr05", + "tr06", + "tr07", + "tr08", + "tr09", + "tr10", + "tr11", + "tr12", + "tr13", + "tr14", + "tr15", + "tr16", + "tr17", + "tr18", + "tr19", + "tr20", + "tr21", + "tr22", + "tr23", + "tr24", + "tr25", + "tr26", + "tr27", + "tr28", + "tr29", + "tr30", + "tr31", + "tr32", + "tr33", + "tr34", + "tr35", + "tr36", + "tr37", + "tr38", + "tr39", + "tr40", + "tr41", + "tr42", + "tr43", + "tr44", + "tr45", + "tr46", + "tr47", + "tr48", + "tr49", + "tr50", + "tr51", + "tr52", + "tr53", + "tr54", + "tr55", + "tr56", + "tr57", + "tr58", + "tr59", + "tr60", + "tr61", + "tr62", + "tr63", + "tr64", + "tr65", + "tr66", + "tr67", + "tr68", + "tr69", + "tr70", + "tr71", + "tr72", + "tr73", + "tr74", + "tr75", + "tr76", + "tr77", + "tr78", + "tr79", + "tr80", + "tr81", } TT{ - "ARI", - "CHA", - "CTT", - "DMN", - "MRC", - "PED", - "POS", - "PRT", - "PTF", - "SFO", - "SGE", - "SIP", - "SJL", - "TOB", - "TUP", + "ttari", + "ttcha", + "ttctt", + "ttdmn", + "ttmrc", + "ttped", + "ttpos", + "ttprt", + "ttptf", + "ttsfo", + "ttsge", + "ttsip", + "ttsjl", + "tttob", + "tttup", } TV{ - "FUN", - "NIT", - "NKF", - "NKL", - "NMA", - "NMG", - "NUI", - "VAI", + "tvfun", + "tvnit", + "tvnkf", + "tvnkl", + "tvnma", + "tvnmg", + "tvnui", + "tvvai", } TW{ - "CHA", - "CYI", - "CYQ", - "HSQ", - "HSZ", - "HUA", - "ILA", - "KEE", - "KHH", - "KIN", - "LIE", - "MIA", - "NAN", - "NWT", - "PEN", - "PIF", - "TAO", - "TNN", - "TPE", - "TTT", - "TXG", - "YUN", + "twcha", + "twcyi", + "twcyq", + "twhsq", + "twhsz", + "twhua", + "twila", + "twkee", + "twkhh", + "twkin", + "twlie", + "twmia", + "twnan", + "twnwt", + "twpen", + "twpif", + "twtao", + "twtnn", + "twtpe", + "twttt", + "twtxg", + "twyun", } TZ{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "18", - "19", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", + "tz01", + "tz02", + "tz03", + "tz04", + "tz05", + "tz06", + "tz07", + "tz08", + "tz09", + "tz10", + "tz11", + "tz12", + "tz13", + "tz14", + "tz15", + "tz16", + "tz17", + "tz18", + "tz19", + "tz20", + "tz21", + "tz22", + "tz23", + "tz24", + "tz25", + "tz26", + "tz27", + "tz28", + "tz29", + "tz30", } UA{ - "05", - "07", - "09", - "12", - "14", - "18", - "21", - "23", - "26", - "30", - "32", - "35", - "40", - "43", - "46", - "48", - "51", - "53", - "56", - "59", - "61", - "63", - "65", - "68", - "71", - "74", - "77", + "ua05", + "ua07", + "ua09", + "ua12", + "ua14", + "ua18", + "ua21", + "ua23", + "ua26", + "ua30", + "ua32", + "ua35", + "ua40", + "ua43", + "ua46", + "ua48", + "ua51", + "ua53", + "ua56", + "ua59", + "ua61", + "ua63", + "ua65", + "ua68", + "ua71", + "ua74", + "ua77", } UG{ - "C", - "E", - "N", - "W", - } - UG-C{ - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - } - UG-E{ - "201", - "202", - "203", - "204", - "205", - "206", - "207", - "208", - "209", - "210", - "211", - "212", - "213", - "214", - "215", - "216", - "217", - "218", - "219", - "220", - "221", - "222", - "223", - "224", - "225", - "226", - "227", - "228", - "229", - "230", - "231", - "232", - } - UG-N{ - "301", - "302", - "303", - "304", - "305", - "306", - "307", - "308", - "309", - "310", - "311", - "312", - "313", - "314", - "315", - "316", - "317", - "318", - "319", - "320", - "321", - "322", - "323", - "324", - "325", - "326", - "327", - "328", - "329", - "330", - "331", - } - UG-W{ - "401", - "402", - "403", - "404", - "405", - "406", - "407", - "408", - "409", - "410", - "411", - "412", - "413", - "414", - "415", - "416", - "417", - "418", - "419", - "420", - "421", - "422", - "423", - "424", - "425", + "ugc", + "uge", + "ugn", + "ugw", } UM{ - "67", - "71", - "76", - "79", - "81", - "84", - "86", - "89", - "95", + "um67", + "um71", + "um76", + "um79", + "um81", + "um84", + "um86", + "um89", + "um95", } US{ - "AK", - "AL", - "AR", - "AS", - "AZ", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "GA", - "GU", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MD", - "ME", - "MI", - "MN", - "MO", - "MP", - "MS", - "MT", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NM", - "NV", - "NY", - "OH", - "OK", - "OR", - "PA", - "PR", - "RI", - "SC", - "SD", - "TN", - "TX", - "UM", - "UT", - "VA", - "VI", - "VT", - "WA", - "WI", - "WV", - "WY", + "usak", + "usal", + "usar", + "usas", + "usaz", + "usca", + "usco", + "usct", + "usdc", + "usde", + "usfl", + "usga", + "usgu", + "ushi", + "usia", + "usid", + "usil", + "usin", + "usks", + "usky", + "usla", + "usma", + "usmd", + "usme", + "usmi", + "usmn", + "usmo", + "usmp", + "usms", + "usmt", + "usnc", + "usnd", + "usne", + "usnh", + "usnj", + "usnm", + "usnv", + "usny", + "usoh", + "usok", + "usor", + "uspa", + "uspr", + "usri", + "ussc", + "ussd", + "ustn", + "ustx", + "usum", + "usut", + "usva", + "usvi", + "usvt", + "uswa", + "uswi", + "uswv", + "uswy", } UY{ - "AR", - "CA", - "CL", - "CO", - "DU", - "FD", - "FS", - "LA", - "MA", - "MO", - "PA", - "RN", - "RO", - "RV", - "SA", - "SJ", - "SO", - "TA", - "TT", + "uyar", + "uyca", + "uycl", + "uyco", + "uydu", + "uyfd", + "uyfs", + "uyla", + "uyma", + "uymo", + "uypa", + "uyrn", + "uyro", + "uyrv", + "uysa", + "uysj", + "uyso", + "uyta", + "uytt", } UZ{ - "AN", - "BU", - "FA", - "JI", - "NG", - "NW", - "QA", - "QR", - "SA", - "SI", - "SU", - "TK", - "TO", - "XO", + "uzan", + "uzbu", + "uzfa", + "uzji", + "uzng", + "uznw", + "uzqa", + "uzqr", + "uzsa", + "uzsi", + "uzsu", + "uztk", + "uzto", + "uzxo", } VC{ - "01", - "02", - "03", - "04", - "05", - "06", + "vc01", + "vc02", + "vc03", + "vc04", + "vc05", + "vc06", } VE{ - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", + "vea", + "veb", + "vec", + "ved", + "vee", + "vef", + "veg", + "veh", + "vei", + "vej", + "vek", + "vel", + "vem", + "ven", + "veo", + "vep", + "ver", + "ves", + "vet", + "veu", + "vev", + "vew", + "vex", + "vey", + "vez", } VN{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "09", - "13", - "14", - "18", - "20", - "21", - "22", - "23", - "24", - "25", - "26", - "27", - "28", - "29", - "30", - "31", - "32", - "33", - "34", - "35", - "36", - "37", - "39", - "40", - "41", - "43", - "44", - "45", - "46", - "47", - "49", - "50", - "51", - "52", - "53", - "54", - "55", - "56", - "57", - "58", - "59", - "61", - "63", - "66", - "67", - "68", - "69", - "70", - "71", - "72", - "73", - "CT", - "DN", - "HN", - "HP", - "SG", + "vn01", + "vn02", + "vn03", + "vn04", + "vn05", + "vn06", + "vn07", + "vn09", + "vn13", + "vn14", + "vn18", + "vn20", + "vn21", + "vn22", + "vn23", + "vn24", + "vn25", + "vn26", + "vn27", + "vn28", + "vn29", + "vn30", + "vn31", + "vn32", + "vn33", + "vn34", + "vn35", + "vn36", + "vn37", + "vn39", + "vn40", + "vn41", + "vn43", + "vn44", + "vn45", + "vn46", + "vn47", + "vn49", + "vn50", + "vn51", + "vn52", + "vn53", + "vn54", + "vn55", + "vn56", + "vn57", + "vn58", + "vn59", + "vn61", + "vn63", + "vn66", + "vn67", + "vn68", + "vn69", + "vn70", + "vn71", + "vn72", + "vn73", + "vnct", + "vndn", + "vnhn", + "vnhp", + "vnsg", } VU{ - "MAP", - "PAM", - "SAM", - "SEE", - "TAE", - "TOB", + "vumap", + "vupam", + "vusam", + "vusee", + "vutae", + "vutob", } WF{ - "AL", - "SG", - "UV", + "wfal", + "wfsg", + "wfuv", } WS{ - "AA", - "AL", - "AT", - "FA", - "GE", - "GI", - "PA", - "SA", - "TU", - "VF", - "VS", + "wsaa", + "wsal", + "wsat", + "wsfa", + "wsge", + "wsgi", + "wspa", + "wssa", + "wstu", + "wsvf", + "wsvs", } YE{ - "AB", - "AD", - "AM", - "BA", - "DA", - "DH", - "HD", - "HJ", - "HU", - "IB", - "JA", - "LA", - "MA", - "MR", - "MW", - "RA", - "SA", - "SD", - "SH", - "SN", - "SU", - "TA", + "yeab", + "yead", + "yeam", + "yeba", + "yeda", + "yedh", + "yehd", + "yehj", + "yehu", + "yeib", + "yeja", + "yela", + "yema", + "yemr", + "yemw", + "yera", + "yesa", + "yesd", + "yesh", + "yesn", + "yesu", + "yeta", } - ZA{ - "EC", - "FS", - "GT", - "LP", - "MP", - "NC", - "NL", - "NW", - "WC", + ZA{ + "zaec", + "zafs", + "zagt", + "zalp", + "zamp", + "zanc", + "zanl", + "zanw", + "zawc", } ZM{ - "01", - "02", - "03", - "04", - "05", - "06", - "07", - "08", - "09", - "10", + "zm01", + "zm02", + "zm03", + "zm04", + "zm05", + "zm06", + "zm07", + "zm08", + "zm09", + "zm10", } ZW{ - "BU", - "HA", - "MA", - "MC", - "ME", - "MI", - "MN", - "MS", - "MV", - "MW", + "zwbu", + "zwha", + "zwma", + "zwmc", + "zwme", + "zwmi", + "zwmn", + "zwms", + "zwmv", + "zwmw", + } + aznx{ + "azbab", + "azcul", + "azkan", + "aznv", + "azord", + "azsad", + "azsah", + "azsar", + } + bda{ + "bd02", + "bd06", + "bd07", + "bd25", + "bd50", + "bd51", + } + bdb{ + "bd01", + "bd04", + "bd08", + "bd09", + "bd10", + "bd11", + "bd16", + "bd29", + "bd31", + "bd47", + "bd56", + } + bdc{ + "bd13", + "bd15", + "bd17", + "bd18", + "bd26", + "bd33", + "bd35", + "bd36", + "bd40", + "bd42", + "bd53", + "bd62", + "bd63", + } + bdd{ + "bd05", + "bd12", + "bd22", + "bd23", + "bd27", + "bd30", + "bd37", + "bd39", + "bd43", + "bd58", + } + bde{ + "bd03", + "bd24", + "bd44", + "bd45", + "bd48", + "bd49", + "bd54", + "bd59", + } + bdf{ + "bd14", + "bd19", + "bd28", + "bd32", + "bd46", + "bd52", + "bd55", + "bd64", + } + bdg{ + "bd20", + "bd38", + "bd60", + "bd61", + } + bdh{ + "bd21", + "bd34", + "bd41", + "bd57", + } + bevlg{ + "bevan", + "bevbr", + "bevli", + "bevov", + "bevwv", + } + bewal{ + "bewbr", + "bewht", + "bewlg", + "bewlx", + "bewna", + } + bf01{ + "bfbal", + "bfban", + "bfkos", + "bfmou", + "bfnay", + "bfsor", + } + bf02{ + "bfcom", + "bfler", + } + bf03{"bfkad"} + bf04{ + "bfblg", + "bfkop", + "bfkot", + } + bf05{ + "bfbam", + "bfnam", + "bfsmt", + } + bf06{ + "bfblk", + "bfsis", + "bfsng", + "bfzir", + } + bf07{ + "bfbaz", + "bfnao", + "bfzou", + } + bf08{ + "bfgna", + "bfgou", + "bfkmd", + "bfkmp", + "bftap", + } + bf09{ + "bfhou", + "bfken", + "bftui", + } + bf10{ + "bflor", + "bfpas", + "bfyat", + "bfzon", + } + bf11{ + "bfgan", + "bfkow", + "bfoub", + } + bf12{ + "bfoud", + "bfsen", + "bfsom", + "bfyag", + } + bf13{ + "bfbgr", + "bfiob", + "bfnou", + "bfpon", + } + cvb{ + "cvbv", + "cvpa", + "cvpn", + "cvrb", + "cvrg", + "cvsl", + "cvsv", + "cvts", + } + cvs{ + "cvbr", + "cvca", + "cvcf", + "cvcr", + "cvma", + "cvmo", + "cvpr", + "cvrs", + "cvsd", + "cvsf", + "cvsm", + "cvso", + "cvss", + "cvta", + } + cz10{ + "cz101", + "cz102", + "cz103", + "cz104", + "cz105", + "cz106", + "cz107", + "cz108", + "cz109", + "cz110", + "cz111", + "cz112", + "cz113", + "cz114", + "cz115", + "cz116", + "cz117", + "cz118", + "cz119", + "cz120", + "cz121", + "cz122", + } + cz20{ + "cz20a", + "cz20b", + "cz20c", + "cz201", + "cz202", + "cz203", + "cz204", + "cz205", + "cz206", + "cz207", + "cz208", + "cz209", + } + cz31{ + "cz311", + "cz312", + "cz313", + "cz314", + "cz315", + "cz316", + "cz317", + } + cz32{ + "cz321", + "cz322", + "cz323", + "cz324", + "cz325", + "cz326", + "cz327", + } + cz41{ + "cz411", + "cz412", + "cz413", + } + cz42{ + "cz421", + "cz422", + "cz423", + "cz424", + "cz425", + "cz426", + "cz427", + } + cz51{ + "cz511", + "cz512", + "cz513", + "cz514", + } + cz52{ + "cz521", + "cz522", + "cz523", + "cz524", + "cz525", + } + cz53{ + "cz531", + "cz532", + "cz533", + "cz534", + } + cz63{ + "cz631", + "cz632", + "cz633", + "cz634", + "cz635", + } + cz64{ + "cz641", + "cz642", + "cz643", + "cz644", + "cz645", + "cz646", + "cz647", + } + cz71{ + "cz711", + "cz712", + "cz713", + "cz714", + "cz715", + } + cz72{ + "cz721", + "cz722", + "cz723", + "cz724", + } + cz80{ + "cz801", + "cz802", + "cz803", + "cz804", + "cz805", + "cz806", + } + do33{ + "do06", + "do14", + "do19", + "do20", + } + do34{ + "do05", + "do15", + "do26", + "do27", + } + do35{ + "do09", + "do18", + "do25", + } + do36{ + "do13", + "do24", + "do28", + } + do37{ + "do07", + "do22", + } + do38{ + "do03", + "do04", + "do10", + "do16", + } + do39{ + "do23", + "do29", + "do30", + } + do40{ + "do01", + "do32", + } + do41{ + "do02", + "do17", + "do21", + "do31", + } + do42{ + "do08", + "do11", + "do12", + } + esan{ + "esal", + "esca", + "esco", + "esgr", + "esh", + "esj", + "esma", + "esse", + } + esar{ + "eshu", + "este", + "esz", + } + esas{"eso"} + escb{"ess"} + escl{ + "esav", + "esbu", + "esle", + "esp", + "essa", + "essg", + "esso", + "esva", + "esza", + } + escm{ + "esab", + "escr", + "escu", + "esgu", + "esto", + } + escn{ + "esgc", + "estf", + } + esct{ + "esb", + "esgi", + "esl", + "est", + } + esex{ + "esba", + "escc", + } + esga{ + "esc", + "eslu", + "esor", + "espo", + } + esib{"espm"} + esmc{"esmu"} + esmd{"esm"} + esnc{"esna"} + espv{ + "esbi", + "esss", + "esvi", + } + esri{"eslo"} + esvc{ + "esa", + "escs", + "esv", + } + fjc{ + "fj09", + "fj10", + "fj12", + "fj13", + "fj14", + } + fje{ + "fj04", + "fj05", + "fj06", + } + fjn{ + "fj02", + "fj03", + "fj07", + } + fjw{ + "fj01", + "fj08", + "fj11", + } + frara{ + "fr01", + "fr03", + "fr07", + "fr15", + "fr26", + "fr38", + "fr42", + "fr43", + "fr63", + "fr69", + "fr73", + "fr74", + } + frbfc{ + "fr21", + "fr25", + "fr39", + "fr58", + "fr70", + "fr71", + "fr89", + "fr90", + } + frbre{ + "fr22", + "fr29", + "fr35", + "fr56", + } + frcor{ + "fr2a", + "fr2b", + } + frcvl{ + "fr18", + "fr28", + "fr36", + "fr37", + "fr41", + "fr45", + } + frges{ + "fr08", + "fr10", + "fr51", + "fr52", + "fr54", + "fr55", + "fr57", + "fr67", + "fr68", + "fr88", + } + frgua{"frgp"} + frhdf{ + "fr02", + "fr59", + "fr60", + "fr62", + "fr80", + } + fridf{ + "fr75", + "fr77", + "fr78", + "fr91", + "fr92", + "fr93", + "fr94", + "fr95", + } + frlre{"frre"} + frmay{"fryt"} + frnaq{ + "fr16", + "fr17", + "fr19", + "fr23", + "fr24", + "fr33", + "fr40", + "fr47", + "fr64", + "fr79", + "fr86", + "fr87", + } + frnor{ + "fr14", + "fr27", + "fr50", + "fr61", + "fr76", + } + frocc{ + "fr09", + "fr11", + "fr12", + "fr30", + "fr31", + "fr32", + "fr34", + "fr46", + "fr48", + "fr65", + "fr66", + "fr81", + "fr82", + } + frpac{ + "fr04", + "fr05", + "fr06", + "fr13", + "fr83", + "fr84", + } + frpdl{ + "fr44", + "fr49", + "fr53", + "fr72", + "fr85", + } + gbeng{ + "gbbas", + "gbbbd", + "gbbdf", + "gbbdg", + "gbben", + "gbbex", + "gbbir", + "gbbkm", + "gbbmh", + "gbbne", + "gbbnh", + "gbbns", + "gbbol", + "gbbpl", + "gbbrc", + "gbbrd", + "gbbry", + "gbbst", + "gbbur", + "gbcam", + "gbcbf", + "gbche", + "gbchw", + "gbcld", + "gbcma", + "gbcmd", + "gbcon", + "gbcov", + "gbcry", + "gbdal", + "gbdby", + "gbder", + "gbdev", + "gbdnc", + "gbdor", + "gbdud", + "gbdur", + "gbeal", + "gbenf", + "gbery", + "gbess", + "gbesx", + "gbgat", + "gbgls", + "gbgre", + "gbhal", + "gbham", + "gbhav", + "gbhck", + "gbhef", + "gbhil", + "gbhmf", + "gbhns", + "gbhpl", + "gbhrt", + "gbhrw", + "gbhry", + "gbios", + "gbiow", + "gbisl", + "gbkec", + "gbken", + "gbkhl", + "gbkir", + "gbktt", + "gbkwl", + "gblan", + "gblbh", + "gblce", + "gblds", + "gblec", + "gblew", + "gblin", + "gbliv", + "gblnd", + "gblut", + "gbman", + "gbmdb", + "gbmdw", + "gbmik", + "gbmrt", + "gbnbl", + "gbnel", + "gbnet", + "gbnfk", + "gbngm", + "gbnln", + "gbnsm", + "gbnth", + "gbntt", + "gbnty", + "gbnwm", + "gbnyk", + "gbold", + "gboxf", + "gbply", + "gbpol", + "gbpor", + "gbpte", + "gbrcc", + "gbrch", + "gbrdb", + "gbrdg", + "gbric", + "gbrot", + "gbrut", + "gbsaw", + "gbsfk", + "gbsft", + "gbsgc", + "gbshf", + "gbshn", + "gbshr", + "gbskp", + "gbslf", + "gbslg", + "gbsnd", + "gbsol", + "gbsom", + "gbsos", + "gbsry", + "gbste", + "gbsth", + "gbstn", + "gbsts", + "gbstt", + "gbsty", + "gbswd", + "gbswk", + "gbtam", + "gbtfw", + "gbthr", + "gbtob", + "gbtrf", + "gbtwh", + "gbwar", + "gbwbk", + "gbwft", + "gbwgn", + "gbwil", + "gbwkf", + "gbwll", + "gbwlv", + "gbwnd", + "gbwnm", + "gbwok", + "gbwor", + "gbwrl", + "gbwrt", + "gbwsm", + "gbwsx", + "gbyor", + } + gbnir{ + "gbabc", + "gband", + "gbann", + "gbbfs", + "gbccg", + "gbdrs", + "gbfmo", + "gblbc", + "gbmea", + "gbmul", + "gbnmd", + } + gbsct{ + "gbabd", + "gbabe", + "gbagb", + "gbans", + "gbclk", + "gbdgy", + "gbdnd", + "gbeay", + "gbedh", + "gbedu", + "gbeln", + "gbels", + "gberw", + "gbfal", + "gbfif", + "gbglg", + "gbhld", + "gbivc", + "gbmln", + "gbmry", + "gbnay", + "gbnlk", + "gbork", + "gbpkn", + "gbrfw", + "gbsay", + "gbscb", + "gbslk", + "gbstg", + "gbwdu", + "gbwln", + "gbzet", + } + gbwls{ + "gbagy", + "gbbge", + "gbbgw", + "gbcay", + "gbcgn", + "gbcmn", + "gbcrf", + "gbcwy", + "gbden", + "gbfln", + "gbgwn", + "gbmon", + "gbmty", + "gbntl", + "gbnwp", + "gbpem", + "gbpow", + "gbrct", + "gbswa", + "gbtof", + "gbvgl", + "gbwrx", + } + gnb{ + "gnbf", + "gnbk", + "gnfr", + "gnga", + "gnkn", + } + gnd{ + "gnco", + "gndu", + "gnfo", + "gnkd", + "gnte", + } + gnf{ + "gndb", + "gndi", + "gnfa", + "gnks", + } + gnk{ + "gnka", + "gnke", + "gnko", + "gnmd", + "gnsi", + } + gnl{ + "gnkb", + "gnla", + "gnle", + "gnml", + "gnto", + } + gnm{ + "gndl", + "gnmm", + "gnpi", + } + gnn{ + "gnbe", + "gngu", + "gnlo", + "gnmc", + "gnnz", + "gnyo", + } + gqc{ + "gqcs", + "gqkn", + "gqli", + "gqwn", + } + gqi{ + "gqan", + "gqbn", + "gqbs", + } + gwl{ + "gwba", + "gwga", + } + gwn{ + "gwbm", + "gwca", + "gwoi", + } + gws{ + "gwbl", + "gwqu", + "gwto", + } + idjw{ + "idbt", + "idjb", + "idji", + "idjk", + "idjt", + "idyo", + } + idka{ + "idkb", + "idki", + "idks", + "idkt", + "idku", + } + idml{ + "idma", + "idmu", + } + idnu{ + "idba", + "idnb", + "idnt", + } + idpp{ + "idpa", + "idpb", + } + idsl{ + "idgo", + "idsa", + "idsg", + "idsn", + "idsr", + "idst", + } + idsm{ + "idac", + "idbb", + "idbe", + "idja", + "idkr", + "idla", + "idri", + "idsb", + "idss", + "idsu", + } + iec{ + "ieg", + "ielm", + "iemo", + "iern", + "ieso", + } + iel{ + "iecw", + "ied", + "ieke", + "iekk", + "ield", + "ielh", + "iels", + "iemh", + "ieoy", + "iewh", + "ieww", + "iewx", + } + iem{ + "iece", + "ieco", + "ieky", + "ielk", + "ieta", + "iewd", + } + ieu{ + "iecn", + "iedl", + "iemn", + } + it21{ + "ital", + "itat", + "itbi", + "itcn", + "itno", + "itto", + "itvb", + "itvc", + } + it23{"itao"} + it25{ + "itbg", + "itbs", + "itco", + "itcr", + "itlc", + "itlo", + "itmb", + "itmi", + "itmn", + "itpv", + "itso", + "itva", + } + it32{ + "itbz", + "ittn", + } + it34{ + "itbl", + "itpd", + "itro", + "ittv", + "itve", + "itvi", + "itvr", + } + it36{ + "itgo", + "itpn", + "itts", + "itud", + } + it42{ + "itge", + "itim", + "itsp", + "itsv", + } + it45{ + "itbo", + "itfc", + "itfe", + "itmo", + "itpc", + "itpr", + "itra", + "itre", + "itrn", + } + it52{ + "itar", + "itfi", + "itgr", + "itli", + "itlu", + "itms", + "itpi", + "itpo", + "itpt", + "itsi", + } + it55{ + "itpg", + "ittr", + } + it57{ + "itan", + "itap", + "itfm", + "itmc", + "itpu", + } + it62{ + "itfr", + "itlt", + "itri", + "itrm", + "itvt", + } + it65{ + "itaq", + "itch", + "itpe", + "itte", + } + it67{ + "itcb", + "itis", + } + it72{ + "itav", + "itbn", + "itce", + "itna", + "itsa", + } + it75{ + "itba", + "itbr", + "itbt", + "itfg", + "itle", + "itta", + } + it77{ + "itmt", + "itpz", + } + it78{ + "itcs", + "itcz", + "itkr", + "itrc", + "itvv", + } + it82{ + "itag", + "itcl", + "itct", + "iten", + "itme", + "itpa", + "itrg", + "itsr", + "ittp", + } + it88{ + "itca", + "itci", + "itnu", + "itog", + "itor", + "itot", + "itss", + "itvs", + } + knk{ + "kn01", + "kn02", + "kn03", + "kn06", + "kn08", + "kn09", + "kn11", + "kn13", + "kn15", + } + knn{ + "kn04", + "kn05", + "kn07", + "kn10", + "kn12", + } + lk1{ + "lk52", + "lk71", + "lk81", + } + lk2{ + "lk11", + "lk31", + "lk51", + } + lk3{ + "lk12", + "lk33", + "lk41", + } + lk4{ + "lk13", + "lk21", + "lk42", + "lk61", + "lk92", + } + lk5{ + "lk22", + "lk32", + "lk43", + } + lk6{ + "lk45", + "lk82", + } + lk7{ + "lk23", + "lk72", + } + lk8{ + "lk62", + "lk91", + } + lk9{ + "lk44", + "lk53", + } + ma01{ + "mache", + "mafah", + "malar", + "matet", + "matng", + } + ma02{ + "maken", + "masik", + } + ma03{ + "mahoc", + "matao", + "mataz", + } + ma04{ + "maber", + "mafig", + "majra", + "manad", + "maouj", + "matai", + } + ma05{ + "mabom", + "mafes", + "mamou", + "masef", + } + ma06{ + "maerr", + "mahaj", + "maifr", + "makhn", + "mamek", + } + ma07{ + "makhe", + "marab", + "masal", + "maskh", + } + ma08{ + "macas", + "mamed", + "mamoh", + "manou", + } + ma09{ + "mabes", + "makho", + "maset", + } + ma10{ + "majdi", + "masaf", + } + ma11{ + "machi", + "maesi", + "mahao", + "makes", + "mammd", + "mammn", + "masyb", + } + ma12{ + "maazi", + "mabem", + } + ma13{ + "maagd", + "macht", + "maine", + "maoua", + "matar", + "matiz", + "mazag", + } + ma14{ + "maasz", + "maesm", + "mague", + "matat", + "matnt", + } + ma15{ + "mabod", + "malaa", + } + ma16{ + "maaou", + "maoud", + } + mhl{ + "mhall", + "mhebo", + "mheni", + "mhjab", + "mhjal", + "mhkil", + "mhkwa", + "mhlae", + "mhlib", + "mhnmk", + "mhnmu", + "mhron", + "mhuja", + "mhwth", + } + mht{ + "mhalk", + "mharn", + "mhaur", + "mhlik", + "mhmaj", + "mhmal", + "mhmej", + "mhmil", + "mhuti", + "mhwtj", + } + mvce{ + "mv12", + "mv14", + "mv17", + } + mvnc{ + "mv00", + "mv02", + "mv04", + "mv26", + } + mvno{ + "mv03", + "mv13", + "mv20", + "mv25", + } + mvsc{ + "mv27", + "mv28", + } + mvsu{ + "mv01", + "mv29", + } + mvun{ + "mv07", + "mv23", + "mv24", + } + mvus{ + "mv05", + "mv08", + } + mwc{ + "mwde", + "mwdo", + "mwks", + "mwli", + "mwmc", + "mwni", + "mwnk", + "mwnu", + "mwsa", + } + mwn{ + "mwct", + "mwkr", + "mwlk", + "mwmz", + "mwnb", + "mwru", + } + mws{ + "mwba", + "mwbl", + "mwck", + "mwcr", + "mwmg", + "mwmh", + "mwmu", + "mwmw", + "mwne", + "mwns", + "mwph", + "mwth", + "mwzo", + } + np1{ + "npba", + "npja", + "npna", + } + np2{ + "npbh", + "npka", + "npra", + } + np3{ + "npdh", + "npga", + "nplu", + } + np4{ + "npko", + "npme", + "npsa", + } + np5{ + "npma", + "npse", + } + ph01{ + "philn", + "phils", + "phlun", + "phpan", + } + ph02{ + "phbtn", + "phcag", + "phisa", + "phnuv", + "phqui", + } + ph03{ + "phaur", + "phban", + "phbul", + "phnue", + "phpam", + "phtar", + "phzmb", + } + ph05{ + "phalb", + "phcan", + "phcas", + "phcat", + "phmas", + "phsor", + } + ph06{ + "phakl", + "phant", + "phcap", + "phgui", + "phili", + "phnec", + } + ph07{ + "phboh", + "phceb", + "phner", + "phsig", + } + ph08{ + "phbil", + "pheas", + "phley", + "phnsa", + "phsle", + "phwsa", + } + ph09{ + "phbas", + "phzan", + "phzas", + "phzsi", + } + ph10{ + "phbuk", + "phcam", + "phmsc", + "phmsr", + } + ph11{ + "phcom", + "phdao", + "phdas", + "phdav", + "phdvo", + "phsar", + "phsco", + } + ph12{ + "phlan", + "phnco", + "phsuk", + } + ph13{ + "phagn", + "phags", + "phdin", + "phsun", + "phsur", + } + ph14{ + "phlas", + "phmag", + "phslu", + "phtaw", + } + ph15{ + "phabr", + "phapa", + "phben", + "phifu", + "phkal", + "phmou", + } + ph40{ + "phbtg", + "phcav", + "phlag", + "phque", + "phriz", + } + ph41{ + "phmad", + "phmdc", + "phmdr", + "phplw", + "phrom", + } + rskm{ + "rs25", + "rs26", + "rs27", + "rs28", + "rs29", + } + rsvo{ + "rs01", + "rs02", + "rs03", + "rs04", + "rs05", + "rs06", + "rs07", + } + ugc{ + "ug101", + "ug102", + "ug103", + "ug104", + "ug105", + "ug106", + "ug107", + "ug108", + "ug109", + "ug110", + "ug111", + "ug112", + "ug113", + "ug114", + "ug115", + "ug116", + "ug117", + "ug118", + "ug119", + "ug120", + "ug121", + "ug122", + "ug123", + "ug124", + } + uge{ + "ug201", + "ug202", + "ug203", + "ug204", + "ug205", + "ug206", + "ug207", + "ug208", + "ug209", + "ug210", + "ug211", + "ug212", + "ug213", + "ug214", + "ug215", + "ug216", + "ug217", + "ug218", + "ug219", + "ug220", + "ug221", + "ug222", + "ug223", + "ug224", + "ug225", + "ug226", + "ug227", + "ug228", + "ug229", + "ug230", + "ug231", + "ug232", + } + ugn{ + "ug301", + "ug302", + "ug303", + "ug304", + "ug305", + "ug306", + "ug307", + "ug308", + "ug309", + "ug310", + "ug311", + "ug312", + "ug313", + "ug314", + "ug315", + "ug316", + "ug317", + "ug318", + "ug319", + "ug320", + "ug321", + "ug322", + "ug323", + "ug324", + "ug325", + "ug326", + "ug327", + "ug328", + "ug329", + "ug330", + } + ugw{ + "ug401", + "ug402", + "ug403", + "ug404", + "ug405", + "ug406", + "ug407", + "ug408", + "ug409", + "ug410", + "ug411", + "ug412", + "ug413", + "ug414", + "ug415", + "ug416", + "ug417", + "ug418", + "ug419", + "ug420", + "ug421", + "ug422", + "ug423", + "ug424", + "ug425", + "ug426", } } telephoneCodeData{ @@ -24785,6 +25726,9 @@ supplementalData:table(nofallback){ code{"381"} } { + code{"383"} + } + { code{"386"} } } @@ -25204,7 +26148,7 @@ supplementalData:table(nofallback){ populationShareF:int{49990000} } territoryF:intvector{ - 57376800, + 57406800, 49990000, 52940000, } @@ -25218,12 +26162,12 @@ supplementalData:table(nofallback){ populationShareF:int{49430000} } fr{ - populationShareF:int{48680000} + populationShareF:int{48670000} } territoryF:intvector{ 59316300, 50100000, - 54855800, + 54856600, } } AE{ @@ -25244,9 +26188,9 @@ supplementalData:table(nofallback){ populationShareF:int{48290000} } territoryF:intvector{ - 61617100, + 61667200, 49900000, - 56577976, + 56592748, } } AF{ @@ -25266,7 +26210,7 @@ supplementalData:table(nofallback){ populationShareF:int{48590000} } kk_Arab{ - populationShareF:int{45610000} + populationShareF:int{45600000} } prd{ populationShareF:int{48120000} @@ -25276,16 +26220,16 @@ supplementalData:table(nofallback){ populationShareF:int{49430000} } territoryF:intvector{ - 60608100, + 60640800, 49281000, - 57325643, + 57333320, } - tk_Latn{ + tk{ officialStatus{"official_regional"} populationShareF:int{48170000} } - ug_Arab{ - populationShareF:int{45920000} + ug{ + populationShareF:int{45900000} } uz_Arab{ officialStatus{"official_regional"} @@ -25301,9 +26245,9 @@ supplementalData:table(nofallback){ populationShareF:int{48170000} } territoryF:intvector{ - 59203200, + 59217100, 49990000, - 54924360, + 54935810, } } AI{ @@ -25314,7 +26258,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58175400, 49950000, - 54164180, + 54167520, } } AL{ @@ -25329,32 +26273,32 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 60315900, + 60342100, 49968000, - 56302928, + 56303859, } } AM{ - az_Latn{ + az{ populationShareF:int{0} } hy{ officialStatus{"official"} populationShareF:int{49980000} } - ku_Latn{ + ku{ populationShareF:int{48330000} } territoryF:intvector{ - 60243700, + 60265600, 49996000, - 56305638, + 56305125, } } AO{ kmb{ + literacyShareF:int{49100000} populationShareF:int{49250000} - writingShareF:int{49100000} } ln{ populationShareF:int{47670000} @@ -25364,9 +26308,9 @@ supplementalData:table(nofallback){ populationShareF:int{49670000} } territoryF:intvector{ - 61177300, + 61187300, 49704000, - 57196254, + 57201723, } umb{ populationShareF:int{49290000} @@ -25374,7 +26318,7 @@ supplementalData:table(nofallback){ } AQ{ territoryF:intvector{ - 57162000, + 57171900, 49990000, 52300000, } @@ -25397,9 +26341,9 @@ supplementalData:table(nofallback){ populationShareF:int{46470000} } territoryF:intvector{ - 61951000, + 61879400, 49979000, - 57434319, + 57438867, } } AS{ @@ -25414,7 +26358,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58711000, 49970000, - 54543430, + 54541940, } } AT{ @@ -25428,6 +26372,9 @@ supplementalData:table(nofallback){ en{ populationShareF:int{49730000} } + fr{ + populationShareF:int{49110000} + } hr{ officialStatus{"official_regional"} populationShareF:int{48120000} @@ -25436,14 +26383,17 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47270000} } + it{ + populationShareF:int{48900000} + } sl{ officialStatus{"official_regional"} populationShareF:int{47370000} } territoryF:intvector{ - 61396800, + 61415900, 49980000, - 56866555, + 56871177, } } AU{ @@ -25455,9 +26405,9 @@ supplementalData:table(nofallback){ populationShareF:int{48190000} } territoryF:intvector{ - 62110000, + 62118900, 49990000, - 57227510, + 57229927, } wbp{ populationShareF:int{46110000} @@ -25468,7 +26418,7 @@ supplementalData:table(nofallback){ } AW{ en{ - populationShareF:int{48270000} + populationShareF:int{48260000} } nl{ officialStatus{"official"} @@ -25481,7 +26431,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59251600, 49968000, - 55112162, + 55113648, } } AX{ @@ -25496,41 +26446,41 @@ supplementalData:table(nofallback){ } } AZ{ - az_Cyrl{ + az{ officialStatus{"official"} - populationShareF:int{48990000} + populationShareF:int{49890000} } - az_Latn{ + az_Cyrl{ officialStatus{"official"} - populationShareF:int{49890000} + populationShareF:int{48990000} } - ku_Latn{ + ku{ populationShareF:int{47240000} } territoryF:intvector{ - 61165900, + 61167900, 49998000, - 56978078, + 56987277, } - tkr_Latn{ + tkr{ populationShareF:int{47160000} } - tly_Latn{ + tly{ populationShareF:int{48980000} } - ttt_Latn{ + ttt{ populationShareF:int{47220000} } } BA{ - bs_Cyrl{ + bs{ officialStatus{"official"} populationShareF:int{49990000} - writingShareF:int{48500000} } - bs_Latn{ + bs_Cyrl{ officialStatus{"official"} populationShareF:int{49990000} + writingShareF:int{48500000} } en{ populationShareF:int{49450000} @@ -25539,7 +26489,7 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49120000} } - sr_Cyrl{ + sr{ officialStatus{"official"} populationShareF:int{49100000} } @@ -25549,9 +26499,9 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 60382900, + 60425300, 49980000, - 56386706, + 56386191, } } BB{ @@ -25560,9 +26510,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59456700, + 59480400, 49997000, - 55290604, + 55291495, } } BD{ @@ -25589,23 +26539,23 @@ supplementalData:table(nofallback){ populationShareF:int{47210000} } rkt{ + literacyShareF:int{49200000} populationShareF:int{48650000} - writingShareF:int{49200000} } syl{ + literacyShareF:int{49350000} populationShareF:int{48500000} - writingShareF:int{49350000} } territoryF:intvector{ - 61536500, + 61628400, 49577000, - 58168958, + 58156187, } } BE{ de{ officialStatus{"official"} - populationShareF:int{48140000} + populationShareF:int{49220000} } en{ populationShareF:int{49590000} @@ -25619,9 +26569,9 @@ supplementalData:table(nofallback){ populationShareF:int{49550000} } territoryF:intvector{ - 61483300, + 61508600, 49990000, - 57113240, + 57114091, } vls{ populationShareF:int{49100000} @@ -25643,9 +26593,9 @@ supplementalData:table(nofallback){ populationShareF:int{49400000} } territoryF:intvector{ - 60294200, + 60329900, 49287000, - 57189317, + 57195125, } } BG{ @@ -25653,13 +26603,19 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{50100000} } + de{ + populationShareF:int{48800000} + } en{ populationShareF:int{49250000} } + ru{ + populationShareF:int{49230000} + } territoryF:intvector{ - 61129100, + 61143100, 49984000, - 56718689, + 56714465, } tr{ populationShareF:int{49110000} @@ -25674,15 +26630,15 @@ supplementalData:table(nofallback){ populationShareF:int{48330000} } territoryF:intvector{ - 60621700, + 60663700, 49946000, - 56134661, + 56137890, } } BI{ en{ officialStatus{"official"} - populationShareF:int{46580000} + populationShareF:int{46560000} } fr{ officialStatus{"official"} @@ -25693,12 +26649,12 @@ supplementalData:table(nofallback){ populationShareF:int{49630000} } sw{ - populationShareF:int{46590000} + populationShareF:int{46570000} } territoryF:intvector{ - 59840900, + 59789200, 49672000, - 57107423, + 57110993, } } BJ{ @@ -25710,9 +26666,9 @@ supplementalData:table(nofallback){ populationShareF:int{49350000} } territoryF:intvector{ - 60198600, + 60243100, 49424000, - 57104486, + 57107415, } yo{ populationShareF:int{48670000} @@ -25726,7 +26682,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58255000, 49990000, - 53723700, + 53720900, } } BM{ @@ -25737,25 +26693,25 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59519800, 49980000, - 54701960, + 54705370, } } BN{ en{ - populationShareF:int{48190000} + populationShareF:int{48180000} } - ms_Arab{ + ms{ officialStatus{"official"} - populationShareF:int{48500000} + populationShareF:int{49930000} } - ms_Latn{ + ms_Arab{ officialStatus{"official"} - populationShareF:int{49930000} + populationShareF:int{48500000} } territoryF:intvector{ - 60329600, + 60337300, 49954000, - 55429646, + 55436620, } zh_Hant{ populationShareF:int{49110000} @@ -25781,9 +26737,9 @@ supplementalData:table(nofallback){ populationShareF:int{49320000} } territoryF:intvector{ - 60702800, + 60783500, 49912000, - 57108009, + 57109696, } } BQ{ @@ -25795,8 +26751,8 @@ supplementalData:table(nofallback){ populationShareF:int{49810000} } territoryF:intvector{ - 58426100, - 49965000, + 58419800, + 49990000, 54200000, } } @@ -25830,9 +26786,9 @@ supplementalData:table(nofallback){ populationShareF:int{49910000} } territoryF:intvector{ - 62327600, + 62313500, 49904000, - 58204260, + 58205824, } xav{ populationShareF:int{45490000} @@ -25847,9 +26803,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59903100, + 59906600, 49956000, - 55324597, + 55327316, } } BT{ @@ -25867,9 +26823,9 @@ supplementalData:table(nofallback){ populationShareF:int{49170000} } territoryF:intvector{ - 59587100, + 59643200, 49528000, - 55741919, + 55750125, } tsj{ populationShareF:int{49150000} @@ -25877,7 +26833,7 @@ supplementalData:table(nofallback){ } BV{ territoryF:intvector{ - 54400900, + 54432700, 49990000, 50100000, } @@ -25894,9 +26850,9 @@ supplementalData:table(nofallback){ populationShareF:int{49810000} } territoryF:intvector{ - 60358700, + 60365100, 49851000, - 56218272, + 56220921, } tn{ officialStatus{"official"} @@ -25913,9 +26869,9 @@ supplementalData:table(nofallback){ populationShareF:int{49120000} } territoryF:intvector{ - 61172800, + 61165400, 49996000, - 56958969, + 56957038, } } BZ{ @@ -25927,9 +26883,9 @@ supplementalData:table(nofallback){ populationShareF:int{49280000} } territoryF:intvector{ - 59297500, + 59308800, 49769000, - 55347369, + 55353858, } } CA{ @@ -25939,7 +26895,7 @@ supplementalData:table(nofallback){ chp{ populationShareF:int{45220000} } - cr_Cans{ + cr{ populationShareF:int{47110000} } crj{ @@ -25961,7 +26917,7 @@ supplementalData:table(nofallback){ populationShareF:int{48190000} } den{ - populationShareF:int{45660000} + populationShareF:int{45650000} } dgr{ populationShareF:int{45750000} @@ -25978,31 +26934,31 @@ supplementalData:table(nofallback){ populationShareF:int{45160000} } ikt{ + literacyShareF:int{49300000} officialStatus{"official_regional"} populationShareF:int{46110000} - writingShareF:int{49300000} } it{ populationShareF:int{48200000} } - iu_Cans{ + iu{ + literacyShareF:int{49300000} officialStatus{"official_regional"} populationShareF:int{46420000} - writingShareF:int{49300000} } iu_Latn{ + literacyShareF:int{49300000} officialStatus{"official_regional"} populationShareF:int{46420000} - writingShareF:int{49300000} } moe{ populationShareF:int{46330000} } moh{ - populationShareF:int{46100000} + populationShareF:int{45990000} } nsk{ - populationShareF:int{45340000} + populationShareF:int{45330000} } pdt{ populationShareF:int{47240000} @@ -26011,9 +26967,9 @@ supplementalData:table(nofallback){ populationShareF:int{45350000} } territoryF:intvector{ - 62159600, + 62167400, 49990000, - 57350998, + 57353629, } yi{ populationShareF:int{46450000} @@ -26028,7 +26984,7 @@ supplementalData:table(nofallback){ populationShareF:int{49830000} } territoryF:intvector{ - 57288200, + 57308200, 49990000, 52596000, } @@ -26064,9 +27020,9 @@ supplementalData:table(nofallback){ populationShareF:int{49500000} } territoryF:intvector{ - 60577800, + 60660100, 49668000, - 57793751, + 57813311, } } CF{ @@ -26082,9 +27038,9 @@ supplementalData:table(nofallback){ populationShareF:int{49490000} } territoryF:intvector{ - 59286500, + 59320600, 49566000, - 56539154, + 56550726, } } CG{ @@ -26096,9 +27052,9 @@ supplementalData:table(nofallback){ populationShareF:int{48240000} } territoryF:intvector{ - 60283600, + 60302700, 49838000, - 56475510, + 56485241, } } CH{ @@ -26137,9 +27093,9 @@ supplementalData:table(nofallback){ populationShareF:int{47290000} } territoryF:intvector{ - 61473300, + 61494300, 49990000, - 56812183, + 56817929, } wae{ populationShareF:int{47120000} @@ -26147,16 +27103,16 @@ supplementalData:table(nofallback){ } CI{ bci{ + literacyShareF:int{49100000} populationShareF:int{49110000} - writingShareF:int{49100000} } bqv{ + literacyShareF:int{49100000} populationShareF:int{47170000} - writingShareF:int{49100000} } dnj{ + literacyShareF:int{48100000} populationShareF:int{48400000} - writingShareF:int{48100000} } fr{ officialStatus{"official"} @@ -26170,20 +27126,20 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 60716700, + 60871200, 49569000, - 57232953, + 57237404, } } CK{ en{ officialStatus{"official"} - populationShareF:int{49980000} + populationShareF:int{49950000} } territoryF:intvector{ - 58183200, + 58244100, 49950000, - 53983800, + 53955600, } } CL{ @@ -26198,60 +27154,60 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } territoryF:intvector{ - 61410900, + 61436100, 49986000, - 57175083, + 57176501, } } CM{ agq{ + literacyShareF:int{49200000} populationShareF:int{47140000} - writingShareF:int{49200000} } ar{ populationShareF:int{47390000} } bas{ + literacyShareF:int{49250000} populationShareF:int{48120000} - writingShareF:int{49250000} } bax{ populationShareF:int{48120000} } bbj{ + literacyShareF:int{49250000} populationShareF:int{48140000} - writingShareF:int{49250000} } bfd{ + literacyShareF:int{49300000} populationShareF:int{47570000} - writingShareF:int{49300000} } bkm{ populationShareF:int{48130000} writingShareF:int{48500000} } bss{ + literacyShareF:int{49300000} populationShareF:int{47540000} - writingShareF:int{49300000} } bum{ populationShareF:int{48460000} } byv{ + literacyShareF:int{49150000} populationShareF:int{48110000} - writingShareF:int{49150000} } dua{ + literacyShareF:int{49250000} populationShareF:int{47480000} - writingShareF:int{49250000} } en{ officialStatus{"official"} populationShareF:int{49380000} } ewo{ + literacyShareF:int{49150000} populationShareF:int{48310000} - writingShareF:int{49150000} } ff{ populationShareF:int{48360000} @@ -26264,8 +27220,8 @@ supplementalData:table(nofallback){ populationShareF:int{47140000} } jgo{ + literacyShareF:int{49300000} populationShareF:int{47340000} - writingShareF:int{49300000} } kkj{ populationShareF:int{47540000} @@ -26284,24 +27240,24 @@ supplementalData:table(nofallback){ populationShareF:int{48100000} } nmg{ - populationShareF:int{46380000} - writingShareF:int{49100000} + literacyShareF:int{49100000} + populationShareF:int{46370000} } nnh{ + literacyShareF:int{48800000} populationShareF:int{48140000} - writingShareF:int{48800000} } territoryF:intvector{ - 60677800, + 60772400, 49713000, - 57237392, + 57243608, } yav{ - populationShareF:int{45970000} + populationShareF:int{45940000} } ybb{ + literacyShareF:int{48200000} populationShareF:int{48160000} - writingShareF:int{48200000} } } CN{ @@ -26322,8 +27278,8 @@ supplementalData:table(nofallback){ populationShareF:int{48290000} } ii{ + literacyShareF:int{49600000} populationShareF:int{47600000} - writingShareF:int{49600000} } khb{ populationShareF:int{46190000} @@ -26364,11 +27320,11 @@ supplementalData:table(nofallback){ populationShareF:int{46190000} } territoryF:intvector{ - 63180900, + 63212700, 49951000, - 59136749, + 59137354, } - ug_Arab{ + ug{ officialStatus{"official_regional"} populationShareF:int{47550000} } @@ -26388,7 +27344,7 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47310000} } - zh_Hans{ + zh{ officialStatus{"official"} populationShareF:int{49900000} } @@ -26402,14 +27358,14 @@ supplementalData:table(nofallback){ populationShareF:int{47270000} } territoryF:intvector{ - 61642500, + 61690400, 49936000, - 57467367, + 57472209, } } CP{ territoryF:intvector{ - 54389300, + 54409500, 49990000, 50100000, } @@ -26423,9 +27379,9 @@ supplementalData:table(nofallback){ populationShareF:int{49950000} } territoryF:intvector{ - 60712300, + 60792600, 49963000, - 56481414, + 56487254, } } CU{ @@ -26436,7 +27392,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 61128500, 49998000, - 57110314, + 57111800, } } CV{ @@ -26448,14 +27404,14 @@ supplementalData:table(nofallback){ populationShareF:int{49760000} } territoryF:intvector{ - 59333000, + 59358300, 49849000, - 55545993, + 55553432, } } CW{ es{ - populationShareF:int{48390000} + populationShareF:int{48380000} } nl{ officialStatus{"official"} @@ -26467,19 +27423,19 @@ supplementalData:table(nofallback){ } territoryF:intvector{ 59312800, - 49965000, - 55146836, + 49990000, + 55149035, } } CX{ en{ officialStatus{"official"} - populationShareF:int{49920000} + populationShareF:int{49630000} } territoryF:intvector{ - 57739700, + 58114000, 49990000, - 53153000, + 53220500, } } CY{ @@ -26488,18 +27444,21 @@ supplementalData:table(nofallback){ } el{ officialStatus{"official"} - populationShareF:int{49750000} + populationShareF:int{49950000} } en{ populationShareF:int{49730000} } + fr{ + populationShareF:int{48700000} + } hy{ populationShareF:int{47230000} } territoryF:intvector{ - 60275200, + 60292600, 49987000, - 56118920, + 56120558, } tr{ officialStatus{"official"} @@ -26512,7 +27471,7 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } de{ - populationShareF:int{47490000} + populationShareF:int{49150000} } en{ populationShareF:int{49270000} @@ -26520,8 +27479,11 @@ supplementalData:table(nofallback){ pl{ populationShareF:int{47490000} } + sk{ + populationShareF:int{49160000} + } territoryF:intvector{ - 61315900, + 61350900, 49990000, 57106448, } @@ -26560,6 +27522,10 @@ supplementalData:table(nofallback){ frs{ populationShareF:int{45250000} } + gsw{ + populationShareF:int{48230000} + writingShareF:int{48500000} + } hr{ populationShareF:int{47790000} } @@ -26573,7 +27539,7 @@ supplementalData:table(nofallback){ ksh{ populationShareF:int{47300000} } - ku_Latn{ + ku{ populationShareF:int{47660000} } nds{ @@ -26600,9 +27566,9 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 62374800, + 62397900, 49990000, - 57808544, + 57807228, } tr{ populationShareF:int{48250000} @@ -26617,7 +27583,7 @@ supplementalData:table(nofallback){ populationShareF:int{49990000} } territoryF:intvector{ - 57200400, + 57216400, 49990000, 52500000, } @@ -26638,9 +27604,9 @@ supplementalData:table(nofallback){ populationShareF:int{49410000} } territoryF:intvector{ - 59287600, + 59334500, 49679000, - 55828324, + 55846687, } } DK{ @@ -26650,7 +27616,7 @@ supplementalData:table(nofallback){ } de{ officialStatus{"official_regional"} - populationShareF:int{47430000} + populationShareF:int{49470000} } en{ populationShareF:int{49860000} @@ -26665,10 +27631,13 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47130000} } + sv{ + populationShareF:int{49130000} + } territoryF:intvector{ - 61250700, + 61264800, 49990000, - 56558150, + 56559379, } } DM{ @@ -26677,23 +27646,23 @@ supplementalData:table(nofallback){ populationShareF:int{49940000} } territoryF:intvector{ - 58790000, + 58812000, 49940000, - 54736070, + 54737570, } } DO{ en{ - populationShareF:int{46760000} + populationShareF:int{46750000} } es{ officialStatus{"official"} populationShareF:int{49780000} } territoryF:intvector{ - 61138500, + 61160900, 49901000, - 57104788, + 57106069, } } DZ{ @@ -26712,13 +27681,13 @@ supplementalData:table(nofallback){ populationShareF:int{49200000} } kab{ + literacyShareF:int{49100000} populationShareF:int{48780000} - writingShareF:int{49100000} } territoryF:intvector{ - 61548600, + 61609400, 49726000, - 57395422, + 57402637, } } EA{ @@ -26727,7 +27696,7 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } territoryF:intvector{ - 59489800, + 59522000, 49977000, 55150000, } @@ -26745,23 +27714,29 @@ supplementalData:table(nofallback){ populationShareF:int{48570000} } territoryF:intvector{ - 61181200, + 61182400, 49916000, - 57158684, + 57160808, } } EE{ + en{ + populationShareF:int{49500000} + } et{ officialStatus{"official"} populationShareF:int{49710000} } + fi{ + populationShareF:int{49210000} + } ru{ - populationShareF:int{49300000} + populationShareF:int{49560000} } territoryF:intvector{ - 60367800, + 60387000, 49998000, - 56126542, + 56125855, } vro{ populationShareF:int{48570000} @@ -26782,9 +27757,9 @@ supplementalData:table(nofallback){ populationShareF:int{49350000} } territoryF:intvector{ - 61946600, + 62110500, 49739000, - 57884874, + 57946670, } } EH{ @@ -26795,7 +27770,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58906500, 49500000, - 55570866, + 55587020, } } ER{ @@ -26818,9 +27793,9 @@ supplementalData:table(nofallback){ populationShareF:int{48360000} } territoryF:intvector{ - 59784200, + 59916900, 49689000, - 56652769, + 56586987, } ti{ officialStatus{"de_facto_official"} @@ -26858,9 +27833,9 @@ supplementalData:table(nofallback){ populationShareF:int{48700000} } territoryF:intvector{ - 62157200, + 62169000, 49977000, - 57481461, + 57485635, } } ET{ @@ -26884,9 +27859,9 @@ supplementalData:table(nofallback){ populationShareF:int{48600000} } territoryF:intvector{ - 61145100, + 61174700, 49390000, - 57994658, + 58102374, } ti{ populationShareF:int{48600000} @@ -26896,6 +27871,9 @@ supplementalData:table(nofallback){ } } FI{ + de{ + populationShareF:int{49180000} + } en{ populationShareF:int{49700000} } @@ -26913,7 +27891,7 @@ supplementalData:table(nofallback){ populationShareF:int{47810000} } se{ - populationShareF:int{46370000} + populationShareF:int{46360000} } smn{ populationShareF:int{46110000} @@ -26923,12 +27901,12 @@ supplementalData:table(nofallback){ } sv{ officialStatus{"official"} - populationShareF:int{48570000} + populationShareF:int{49440000} } territoryF:intvector{ - 61221700, + 61230000, 50100000, - 56547692, + 56549821, } } FJ{ @@ -26943,7 +27921,7 @@ supplementalData:table(nofallback){ hi{ populationShareF:int{49440000} } - hif_Latn{ + hif{ officialStatus{"official"} populationShareF:int{49410000} } @@ -26951,20 +27929,20 @@ supplementalData:table(nofallback){ populationShareF:int{47270000} } territoryF:intvector{ - 59740400, + 59837400, 49937000, - 55909389, + 55915303, } } FK{ en{ officialStatus{"official"} - populationShareF:int{49840000} + populationShareF:int{49960000} } territoryF:intvector{ 58164500, 49990000, - 53336100, + 53293100, } } FM{ @@ -26982,9 +27960,9 @@ supplementalData:table(nofallback){ populationShareF:int{49230000} } territoryF:intvector{ - 58308000, + 58314000, 49890000, - 55105216, + 55104719, } uli{ populationShareF:int{48290000} @@ -26999,26 +27977,32 @@ supplementalData:table(nofallback){ populationShareF:int{49950000} } territoryF:intvector{ - 59147100, + 59183100, 49990000, - 54501960, + 54504560, } } FR{ br{ + literacyShareF:int{48300000} populationShareF:int{47830000} - writingShareF:int{48300000} } ca{ populationShareF:int{47170000} } co{ - populationShareF:int{47570000} + populationShareF:int{47240000} writingShareF:int{48500000} } + de{ + populationShareF:int{48500000} + } en{ populationShareF:int{49390000} } + es{ + populationShareF:int{49130000} + } eu{ populationShareF:int{47130000} } @@ -27053,9 +28037,9 @@ supplementalData:table(nofallback){ populationShareF:int{48130000} } territoryF:intvector{ - 62259100, + 62273700, 49990000, - 57665538, + 57668362, } } GA{ @@ -27067,9 +28051,9 @@ supplementalData:table(nofallback){ populationShareF:int{48900000} } territoryF:intvector{ - 60329100, + 60362200, 49890000, - 56170534, + 56173854, } } GB{ @@ -27080,6 +28064,9 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47770000} } + de{ + populationShareF:int{48600000} + } el{ populationShareF:int{47340000} } @@ -27088,7 +28075,7 @@ supplementalData:table(nofallback){ populationShareF:int{49990000} } fr{ - populationShareF:int{46240000} + populationShareF:int{49190000} } ga{ officialStatus{"official_regional"} @@ -27102,7 +28089,7 @@ supplementalData:table(nofallback){ it{ populationShareF:int{47340000} } - ks_Arab{ + ks{ populationShareF:int{47190000} } kw{ @@ -27111,7 +28098,7 @@ supplementalData:table(nofallback){ ml{ populationShareF:int{46350000} } - pa_Guru{ + pa{ populationShareF:int{47790000} } sco{ @@ -27122,9 +28109,9 @@ supplementalData:table(nofallback){ populationShareF:int{47510000} } territoryF:intvector{ - 62256900, + 62278800, 49990000, - 57640882, + 57644304, } yi{ populationShareF:int{46490000} @@ -27139,9 +28126,9 @@ supplementalData:table(nofallback){ populationShareF:int{49960000} } territoryF:intvector{ - 59132600, + 59151100, 49960000, - 55110694, + 55111219, } } GE{ @@ -27156,7 +28143,7 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49860000} } - ku_Latn{ + ku{ populationShareF:int{47890000} } os{ @@ -27167,9 +28154,9 @@ supplementalData:table(nofallback){ populationShareF:int{48900000} } territoryF:intvector{ - 60343500, + 60373800, 49997000, - 56493123, + 56492805, } xmf{ populationShareF:int{49110000} @@ -27198,9 +28185,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59342000, + 59345100, 50100000, - 54660800, + 54662970, } } GH{ @@ -27229,7 +28216,7 @@ supplementalData:table(nofallback){ gur{ populationShareF:int{48350000} } - ha_Latn{ + ha{ populationShareF:int{47870000} } nzi{ @@ -27239,9 +28226,9 @@ supplementalData:table(nofallback){ populationShareF:int{46150000} } territoryF:intvector{ - 61108500, + 61120800, 49715000, - 57263276, + 57269083, } } GI{ @@ -27255,7 +28242,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59185000, 49800000, - 54292580, + 54293280, } } GL{ @@ -27267,9 +28254,9 @@ supplementalData:table(nofallback){ populationShareF:int{49840000} } territoryF:intvector{ - 59213300, + 59217300, 50100000, - 54577330, + 54577280, } } GM{ @@ -27277,13 +28264,13 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49400000} } - man_Latn{ + man{ populationShareF:int{49290000} } territoryF:intvector{ - 59309300, + 59338700, 49511000, - 56196771, + 56200965, } } GN{ @@ -27307,9 +28294,9 @@ supplementalData:table(nofallback){ populationShareF:int{49110000} } territoryF:intvector{ - 60151300, + 60160800, 49410000, - 57117802, + 57120933, } } GP{ @@ -27343,15 +28330,18 @@ supplementalData:table(nofallback){ populationShareF:int{44100000} } territoryF:intvector{ - 60286200, + 60317700, 49942000, - 55740743, + 55759451, } } GR{ bg{ populationShareF:int{47270000} } + de{ + populationShareF:int{48500000} + } el{ officialStatus{"official"} populationShareF:int{49990000} @@ -27359,19 +28349,22 @@ supplementalData:table(nofallback){ en{ populationShareF:int{49510000} } + fr{ + populationShareF:int{48900000} + } mk{ populationShareF:int{48160000} } - pnt_Grek{ + pnt{ populationShareF:int{48370000} } sq{ populationShareF:int{46930000} } territoryF:intvector{ - 61285300, + 61290500, 49973000, - 57107756, + 57107733, } tr{ populationShareF:int{48120000} @@ -27382,13 +28375,13 @@ supplementalData:table(nofallback){ } GS{ territoryF:intvector{ - 55801700, + 55865400, 49990000, 51200000, } und{ + literacyShareF:int{50100000} populationShareF:int{50100000} - writingShareF:int{50100000} } } GT{ @@ -27401,9 +28394,9 @@ supplementalData:table(nofallback){ populationShareF:int{48700000} } territoryF:intvector{ - 61119800, + 61132300, 49759000, - 57149190, + 57151900, } } GU{ @@ -27418,7 +28411,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59488200, 49990000, - 55161785, + 55162742, } } GW{ @@ -27427,9 +28420,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59253200, + 59285100, 49553000, - 56172617, + 56175916, } } GY{ @@ -27438,9 +28431,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59553400, + 59609300, 49918000, - 55735222, + 55735909, } } HK{ @@ -27449,14 +28442,14 @@ supplementalData:table(nofallback){ populationShareF:int{49510000} } territoryF:intvector{ - 61400400, + 61427400, 49935000, - 56714111, + 56716740, } yue{ - populationShareF:int{49890000} + populationShareF:int{49900000} } - zh_Hans{ + zh{ populationShareF:int{48500000} } zh_Hant{ @@ -27466,13 +28459,13 @@ supplementalData:table(nofallback){ } HM{ territoryF:intvector{ - 54483500, + 54517100, 49990000, 50100000, } und{ + literacyShareF:int{50100000} populationShareF:int{50100000} - writingShareF:int{50100000} } } HN{ @@ -27484,9 +28477,9 @@ supplementalData:table(nofallback){ populationShareF:int{49780000} } territoryF:intvector{ - 60392200, + 60431900, 49851000, - 56874667, + 56889326, } } HR{ @@ -27502,34 +28495,37 @@ supplementalData:table(nofallback){ populationShareF:int{48160000} } territoryF:intvector{ - 60887300, + 60942400, 49989000, - 56446484, + 56431371, } } HT{ fr{ + literacyShareF:int{50100000} officialStatus{"official"} populationShareF:int{48470000} - writingShareF:int{50100000} } ht{ officialStatus{"official"} populationShareF:int{49810000} } territoryF:intvector{ - 60183800, + 60193600, 49487000, - 57101100, + 57104858, } } HU{ de{ - populationShareF:int{48250000} + populationShareF:int{49180000} } en{ populationShareF:int{49200000} } + fr{ + populationShareF:int{48300000} + } hr{ populationShareF:int{47320000} } @@ -27547,9 +28543,9 @@ supplementalData:table(nofallback){ populationShareF:int{46500000} } territoryF:intvector{ - 61247100, + 61267600, 49990000, - 56989754, + 56987478, } } IC{ @@ -27558,7 +28554,7 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } territoryF:intvector{ - 60685200, + 60730300, 49977000, 56209859, } @@ -27571,8 +28567,8 @@ supplementalData:table(nofallback){ populationShareF:int{47270000} } ban{ + literacyShareF:int{49100000} populationShareF:int{48180000} - writingShareF:int{49100000} } bbc{ populationShareF:int{47920000} @@ -27581,12 +28577,12 @@ supplementalData:table(nofallback){ populationShareF:int{48210000} } bjn{ + literacyShareF:int{49100000} populationShareF:int{48150000} - writingShareF:int{49100000} } bug{ + literacyShareF:int{49100000} populationShareF:int{48160000} - writingShareF:int{49100000} } gay{ populationShareF:int{47120000} @@ -27599,8 +28595,8 @@ supplementalData:table(nofallback){ populationShareF:int{49640000} } jv{ + literacyShareF:int{49100000} populationShareF:int{49340000} - writingShareF:int{49100000} } kge{ populationShareF:int{47320000} @@ -27615,8 +28611,8 @@ supplementalData:table(nofallback){ populationShareF:int{47690000} } mad{ + literacyShareF:int{49400000} populationShareF:int{48630000} - writingShareF:int{49400000} } mak{ populationShareF:int{47730000} @@ -27625,8 +28621,8 @@ supplementalData:table(nofallback){ populationShareF:int{46920000} } min{ + literacyShareF:int{49100000} populationShareF:int{48300000} - writingShareF:int{49100000} } ms_Arab{ populationShareF:int{48460000} @@ -27656,9 +28652,9 @@ supplementalData:table(nofallback){ populationShareF:int{46920000} } territoryF:intvector{ - 62268600, + 62302800, 49928000, - 58255994, + 58258316, } zh_Hant{ populationShareF:int{47920000} @@ -27669,14 +28665,17 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49980000} } + fr{ + populationShareF:int{49170000} + } ga{ officialStatus{"official"} - populationShareF:int{49110000} + populationShareF:int{49220000} } territoryF:intvector{ - 61236400, + 61324300, 49990000, - 56489231, + 56495247, } } IL{ @@ -27701,7 +28700,7 @@ supplementalData:table(nofallback){ populationShareF:int{48130000} } ml{ - populationShareF:int{46990000} + populationShareF:int{46980000} } pl{ populationShareF:int{48150000} @@ -27713,9 +28712,9 @@ supplementalData:table(nofallback){ populationShareF:int{49110000} } territoryF:intvector{ - 61272100, + 61297000, 49971000, - 56804931, + 56817453, } ti{ populationShareF:int{47120000} @@ -27736,7 +28735,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59629800, 49990000, - 54875450, + 54881950, } } IN{ @@ -27758,8 +28757,8 @@ supplementalData:table(nofallback){ populationShareF:int{46370000} } bgc{ + literacyShareF:int{49550000} populationShareF:int{48120000} - writingShareF:int{49550000} } bhb{ populationShareF:int{47120000} @@ -27768,12 +28767,12 @@ supplementalData:table(nofallback){ populationShareF:int{46920000} } bho{ + literacyShareF:int{49300000} populationShareF:int{48230000} - writingShareF:int{49300000} } bjj{ + literacyShareF:int{49600000} populationShareF:int{47560000} - writingShareF:int{49600000} } bn{ officialStatus{"official_regional"} @@ -27819,7 +28818,7 @@ supplementalData:table(nofallback){ gom{ populationShareF:int{47320000} } - gon_Telu{ + gon{ populationShareF:int{47240000} } grt{ @@ -27849,9 +28848,9 @@ supplementalData:table(nofallback){ populationShareF:int{47220000} } kha{ + literacyShareF:int{49290000} officialStatus{"official_regional"} populationShareF:int{46800000} - writingShareF:int{49290000} } khn{ populationShareF:int{47150000} @@ -27870,7 +28869,7 @@ supplementalData:table(nofallback){ kru{ populationShareF:int{47190000} } - ks_Arab{ + ks{ officialStatus{"official_regional"} populationShareF:int{47410000} } @@ -27880,15 +28879,15 @@ supplementalData:table(nofallback){ lep{ populationShareF:int{45350000} } - lif_Deva{ + lif{ populationShareF:int{45260000} } lmn{ populationShareF:int{47270000} } mag{ + literacyShareF:int{49300000} populationShareF:int{48120000} - writingShareF:int{49300000} } mai{ officialStatus{"official_regional"} @@ -27925,7 +28924,7 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{48320000} } - pa_Guru{ + pa{ officialStatus{"official_regional"} populationShareF:int{48280000} } @@ -27936,8 +28935,8 @@ supplementalData:table(nofallback){ populationShareF:int{46130000} } rkt{ + literacyShareF:int{49200000} populationShareF:int{47440000} - writingShareF:int{49200000} } sa{ officialStatus{"official_regional"} @@ -27953,7 +28952,7 @@ supplementalData:table(nofallback){ sck{ populationShareF:int{47180000} } - sd_Arab{ + sd{ officialStatus{"official_regional"} populationShareF:int{47260000} } @@ -27979,14 +28978,14 @@ supplementalData:table(nofallback){ populationShareF:int{48720000} } territoryF:intvector{ - 62741100, + 62872100, 49628000, - 59125170, + 59126688, } - unr_Beng{ + unr{ populationShareF:int{46950000} } - unx_Beng{ + unx{ populationShareF:int{46480000} } ur{ @@ -28000,8 +28999,8 @@ supplementalData:table(nofallback){ populationShareF:int{47150000} } wtm{ + literacyShareF:int{49250000} populationShareF:int{47460000} - writingShareF:int{49250000} } xnr{ populationShareF:int{47160000} @@ -28009,12 +29008,12 @@ supplementalData:table(nofallback){ } IO{ en{ + literacyShareF:int{50100000} officialStatus{"official"} populationShareF:int{50100000} - writingShareF:int{50100000} } territoryF:intvector{ - 58140300, + 58151500, 49990000, 53350000, } @@ -28045,9 +29044,9 @@ supplementalData:table(nofallback){ populationShareF:int{47500000} } territoryF:intvector{ - 61526100, + 61596700, 49785000, - 57370562, + 57381460, } } IR{ @@ -28075,7 +29074,7 @@ supplementalData:table(nofallback){ populationShareF:int{49750000} } gbz{ - populationShareF:int{45980000} + populationShareF:int{45970000} } glk{ populationShareF:int{48460000} @@ -28087,14 +29086,14 @@ supplementalData:table(nofallback){ populationShareF:int{46710000} } kk_Arab{ - populationShareF:int{45370000} + populationShareF:int{45360000} } lki{ populationShareF:int{47760000} } lrc{ + literacyShareF:int{49100000} populationShareF:int{48210000} - writingShareF:int{49100000} } luz{ populationShareF:int{48120000} @@ -28109,33 +29108,33 @@ supplementalData:table(nofallback){ populationShareF:int{47160000} } rmt{ + literacyShareF:int{48100000} populationShareF:int{48190000} - writingShareF:int{48100000} } sdh{ populationShareF:int{48370000} } territoryF:intvector{ - 62135700, + 62145900, 49850000, - 57818243, + 57828016, } - tk_Latn{ + tk{ populationShareF:int{48280000} } } IS{ da{ - populationShareF:int{47680000} + populationShareF:int{47670000} } is{ officialStatus{"official"} populationShareF:int{50100000} } territoryF:intvector{ - 60143400, + 60161500, 49990000, - 55331918, + 55335878, } } IT{ @@ -28163,7 +29162,7 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } hr{ - populationShareF:int{45570000} + populationShareF:int{45560000} } it{ officialStatus{"official"} @@ -28180,7 +29179,7 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } pms{ - populationShareF:int{46100000} + populationShareF:int{45990000} } rgn{ populationShareF:int{0} @@ -28199,9 +29198,9 @@ supplementalData:table(nofallback){ populationShareF:int{47170000} } territoryF:intvector{ - 62213500, + 62222100, 49990000, - 57618551, + 57620075, } vec{ populationShareF:int{48130000} @@ -28215,7 +29214,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59577100, 49990000, - 54972940, + 54980690, } } JM{ @@ -28227,9 +29226,9 @@ supplementalData:table(nofallback){ populationShareF:int{49950000} } territoryF:intvector{ - 60241000, + 60253900, 49870000, - 56295021, + 56297034, } } JO{ @@ -28241,9 +29240,9 @@ supplementalData:table(nofallback){ populationShareF:int{49450000} } territoryF:intvector{ - 60799100, + 60861900, 49959000, - 56811756, + 56818538, } } JP{ @@ -28259,9 +29258,9 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 62476700, + 62493200, 49990000, - 58126920, + 58126702, } } KE{ @@ -28273,8 +29272,8 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } ebu{ + literacyShareF:int{48100000} populationShareF:int{48150000} - writingShareF:int{48100000} } en{ officialStatus{"official"} @@ -28302,8 +29301,8 @@ supplementalData:table(nofallback){ populationShareF:int{49110000} } mas{ + literacyShareF:int{49500000} populationShareF:int{48160000} - writingShareF:int{49500000} } mer{ populationShareF:int{48400000} @@ -28311,16 +29310,16 @@ supplementalData:table(nofallback){ om{ populationShareF:int{47470000} } - pa_Guru{ - populationShareF:int{46220000} + pa{ + populationShareF:int{46210000} } pko{ + literacyShareF:int{48100000} populationShareF:int{47700000} - writingShareF:int{48100000} } saq{ + literacyShareF:int{48100000} populationShareF:int{47460000} - writingShareF:int{48100000} } so{ populationShareF:int{48130000} @@ -28333,13 +29332,13 @@ supplementalData:table(nofallback){ populationShareF:int{47740000} } territoryF:intvector{ - 61133000, + 61152700, 49874000, - 57459253, + 57467908, } } KG{ - ky_Cyrl{ + ky{ officialStatus{"official"} populationShareF:int{49480000} } @@ -28348,9 +29347,9 @@ supplementalData:table(nofallback){ populationShareF:int{49360000} } territoryF:intvector{ - 60192300, + 60210100, 49992000, - 56566494, + 56572755, } } KH{ @@ -28365,9 +29364,9 @@ supplementalData:table(nofallback){ populationShareF:int{49890000} } territoryF:intvector{ - 60501600, + 60589400, 49739000, - 57157088, + 57159572, } } KI{ @@ -28380,9 +29379,9 @@ supplementalData:table(nofallback){ populationShareF:int{49600000} } territoryF:intvector{ - 58189000, + 58211000, 49900000, - 55105711, + 55106925, } } KM{ @@ -28395,9 +29394,9 @@ supplementalData:table(nofallback){ populationShareF:int{49560000} } territoryF:intvector{ - 59119000, + 59125900, 49755000, - 55780971, + 55794678, } wni{ officialStatus{"official"} @@ -28414,9 +29413,9 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } territoryF:intvector{ - 59128100, + 59142700, 49978000, - 54519360, + 54523290, } } KP{ @@ -28427,7 +29426,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 60400000, 50100000, - 57249832, + 57251153, } } KR{ @@ -28436,9 +29435,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 62178400, + 62192900, 49979000, - 57491152, + 57509242, } } KW{ @@ -28447,9 +29446,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 61282600, + 61301100, 49939000, - 56278853, + 56283278, } } KY{ @@ -28460,7 +29459,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59250700, 49989000, - 54560920, + 54572680, } } KZ{ @@ -28470,7 +29469,7 @@ supplementalData:table(nofallback){ en{ populationShareF:int{49150000} } - kk_Cyrl{ + kk{ officialStatus{"official"} populationShareF:int{49640000} } @@ -28479,9 +29478,9 @@ supplementalData:table(nofallback){ populationShareF:int{49720000} } territoryF:intvector{ - 61420000, + 61460700, 49997000, - 57181571, + 57183604, } ug_Cyrl{ populationShareF:int{48200000} @@ -28499,9 +29498,9 @@ supplementalData:table(nofallback){ populationShareF:int{49690000} } territoryF:intvector{ - 60345300, + 60409600, 49727000, - 56691154, + 56701907, } } LB{ @@ -28522,9 +29521,9 @@ supplementalData:table(nofallback){ populationShareF:int{48160000} } territoryF:intvector{ - 60814200, + 60851600, 49896000, - 56618470, + 56623774, } } LC{ @@ -28533,9 +29532,9 @@ supplementalData:table(nofallback){ populationShareF:int{49900000} } territoryF:intvector{ - 59197800, + 59208300, 49901000, - 55163922, + 55164464, } } LI{ @@ -28551,10 +29550,10 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59320000, 50100000, - 54376240, + 54379370, } wae{ - populationShareF:int{48350000} + populationShareF:int{48340000} } } LK{ @@ -28570,9 +29569,9 @@ supplementalData:table(nofallback){ populationShareF:int{49150000} } territoryF:intvector{ - 61218200, + 61237800, 49912000, - 57220535, + 57222350, } } LR{ @@ -28587,16 +29586,16 @@ supplementalData:table(nofallback){ populationShareF:int{47480000} } territoryF:intvector{ - 59371100, + 59388100, 49608000, - 56419567, + 56429994, + } + vai{ + populationShareF:int{48260000} } vai_Latn{ populationShareF:int{0} } - vai_Vaii{ - populationShareF:int{48260000} - } } LS{ en{ @@ -28611,9 +29610,9 @@ supplementalData:table(nofallback){ populationShareF:int{49980000} } territoryF:intvector{ - 59557500, + 59601900, 49896000, - 56194770, + 56195307, } xh{ populationShareF:int{47990000} @@ -28623,6 +29622,9 @@ supplementalData:table(nofallback){ } } LT{ + de{ + populationShareF:int{49140000} + } en{ populationShareF:int{49380000} } @@ -28631,15 +29633,15 @@ supplementalData:table(nofallback){ populationShareF:int{49860000} } ru{ - populationShareF:int{48800000} + populationShareF:int{49800000} } sgs{ populationShareF:int{0} } territoryF:intvector{ - 60799300, + 60857900, 49997000, - 56288443, + 56285424, } } LU{ @@ -28647,6 +29649,9 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49630000} } + en{ + populationShareF:int{49560000} + } fr{ officialStatus{"official"} populationShareF:int{49870000} @@ -28660,12 +29665,15 @@ supplementalData:table(nofallback){ populationShareF:int{49160000} } territoryF:intvector{ - 60536700, + 60587400, 50100000, - 55570252, + 55582291, } } LV{ + en{ + populationShareF:int{49460000} + } ltg{ populationShareF:int{48890000} } @@ -28677,9 +29685,9 @@ supplementalData:table(nofallback){ populationShareF:int{49380000} } territoryF:intvector{ - 60483600, + 60508700, 49998000, - 56198671, + 56196569, } } LY{ @@ -28688,9 +29696,9 @@ supplementalData:table(nofallback){ populationShareF:int{49740000} } territoryF:intvector{ - 60979400, + 60908900, 49895000, - 56641178, + 56654195, } } MA{ @@ -28711,29 +29719,29 @@ supplementalData:table(nofallback){ officialStatus{"de_facto_official"} populationShareF:int{49200000} } - rif_Latn{ + rif{ populationShareF:int{48490000} writingShareF:int{48500000} } - rif_Tfng{ + rif_Latn{ populationShareF:int{48490000} writingShareF:int{48500000} } - shi_Latn{ + shi{ populationShareF:int{48870000} } - shi_Tfng{ + shi_Latn{ populationShareF:int{48870000} } territoryF:intvector{ - 61259200, + 61282800, 49671000, - 57333227, + 57336558, } - tzm_Latn{ + tzm{ + literacyShareF:int{49250000} officialStatus{"official"} populationShareF:int{48980000} - writingShareF:int{49250000} } zgh{ populationShareF:int{49220000} @@ -28747,7 +29755,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59679000, 49990000, - 54305350, + 54305810, } } MD{ @@ -28765,9 +29773,9 @@ supplementalData:table(nofallback){ populationShareF:int{48300000} } territoryF:intvector{ - 60177800, + 60185400, 49990000, - 56354685, + 56351049, } uk{ populationShareF:int{49140000} @@ -28777,7 +29785,7 @@ supplementalData:table(nofallback){ sq{ populationShareF:int{48790000} } - sr_Cyrl{ + sr{ populationShareF:int{48500000} } sr_Latn{ @@ -28785,9 +29793,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 59942800, + 60106100, 49985000, - 55647073, + 55644578, } } MF{ @@ -28798,7 +29806,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58561500, 49990000, - 54317540, + 54319490, } } MG{ @@ -28815,9 +29823,9 @@ supplementalData:table(nofallback){ populationShareF:int{49900000} } territoryF:intvector{ - 60340500, + 60374900, 49645000, - 57238127, + 57244303, } } MH{ @@ -28830,9 +29838,9 @@ supplementalData:table(nofallback){ populationShareF:int{49730000} } territoryF:intvector{ - 58182000, + 58180000, 49937000, - 54721910, + 54733760, } } MK{ @@ -28845,9 +29853,9 @@ supplementalData:table(nofallback){ populationShareF:int{49250000} } territoryF:intvector{ - 60277200, + 60301300, 49974000, - 56209602, + 56210003, } tr{ populationShareF:int{48350000} @@ -28857,7 +29865,7 @@ supplementalData:table(nofallback){ ar{ populationShareF:int{47890000} } - bm_Latn{ + bm{ populationShareF:int{49460000} } bm_Nkoo{ @@ -28895,9 +29903,9 @@ supplementalData:table(nofallback){ populationShareF:int{48590000} } territoryF:intvector{ - 60275000, + 60380900, 49334000, - 57169555, + 57174671, } tmh{ populationShareF:int{48210000} @@ -28921,16 +29929,16 @@ supplementalData:table(nofallback){ populationShareF:int{48640000} } territoryF:intvector{ - 61244400, + 61311100, 49927000, - 57563202, + 57568904, } } MN{ kk_Arab{ populationShareF:int{48720000} } - mn_Cyrl{ + mn{ officialStatus{"official"} populationShareF:int{49930000} } @@ -28938,14 +29946,14 @@ supplementalData:table(nofallback){ populationShareF:int{47130000} } territoryF:intvector{ - 60348700, + 60366500, 49974000, - 56299291, + 56303133, } ug_Cyrl{ populationShareF:int{46330000} } - zh_Hans{ + zh{ populationShareF:int{48140000} } } @@ -28958,11 +29966,11 @@ supplementalData:table(nofallback){ populationShareF:int{48500000} } territoryF:intvector{ - 60516800, + 60632200, 49956000, - 55592731, + 55597425, } - zh_Hans{ + zh{ populationShareF:int{48500000} } zh_Hant{ @@ -28972,7 +29980,7 @@ supplementalData:table(nofallback){ } MP{ ch{ - populationShareF:int{49180000} + populationShareF:int{49170000} } en{ officialStatus{"de_facto_official"} @@ -28981,7 +29989,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58682000, 49970000, - 54523440, + 54534670, } } MQ{ @@ -29007,23 +30015,23 @@ supplementalData:table(nofallback){ populationShareF:int{49170000} } territoryF:intvector{ - 60156200, + 60167100, 49586000, - 56359670, + 56367729, } wo{ - populationShareF:int{47280000} + populationShareF:int{47270000} } } MS{ en{ officialStatus{"official"} - populationShareF:int{49670000} + populationShareF:int{49660000} } territoryF:intvector{ 57437800, 49970000, - 53524100, + 53526700, } } MT{ @@ -29031,14 +30039,20 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49880000} } + fr{ + populationShareF:int{49110000} + } + it{ + populationShareF:int{49560000} + } mt{ officialStatus{"official"} populationShareF:int{50100000} } territoryF:intvector{ - 60141200, + 60163200, 49924000, - 55413965, + 55415196, } } MU{ @@ -29060,9 +30074,9 @@ supplementalData:table(nofallback){ populationShareF:int{48250000} } territoryF:intvector{ - 60235300, + 60258500, 49888000, - 56133983, + 56134824, } ur{ populationShareF:int{48520000} @@ -29074,9 +30088,9 @@ supplementalData:table(nofallback){ populationShareF:int{49940000} } territoryF:intvector{ - 59455400, + 59540700, 49984000, - 55393253, + 55392960, } } MW{ @@ -29089,9 +30103,9 @@ supplementalData:table(nofallback){ populationShareF:int{49630000} } territoryF:intvector{ - 60195800, + 60212300, 49748000, - 57179647, + 57185703, } tog{ populationShareF:int{47980000} @@ -29127,9 +30141,9 @@ supplementalData:table(nofallback){ populationShareF:int{44700000} } territoryF:intvector{ - 62214900, + 62230700, 49935000, - 58121737, + 58123167, } yua{ populationShareF:int{47670000} @@ -29157,7 +30171,7 @@ supplementalData:table(nofallback){ ml{ populationShareF:int{47150000} } - ms_Latn{ + ms{ officialStatus{"official"} populationShareF:int{49750000} } @@ -29165,9 +30179,9 @@ supplementalData:table(nofallback){ populationShareF:int{48420000} } territoryF:intvector{ - 61769400, + 61863800, 49931000, - 57305138, + 57309500, } zh_Hant{ populationShareF:int{49170000} @@ -29203,9 +30217,9 @@ supplementalData:table(nofallback){ populationShareF:int{46360000} } territoryF:intvector{ - 60312100, + 60353100, 49561000, - 57253031, + 57259302, } ts{ populationShareF:int{48790000} @@ -29217,7 +30231,7 @@ supplementalData:table(nofallback){ populationShareF:int{48240000} } zu{ - populationShareF:int{45710000} + populationShareF:int{45690000} } } NA{ @@ -29244,9 +30258,9 @@ supplementalData:table(nofallback){ populationShareF:int{49210000} } territoryF:intvector{ - 60234800, + 60270400, 49888000, - 56221231, + 56243647, } tn{ populationShareF:int{47560000} @@ -29260,7 +30274,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 60111000, 49962000, - 55271615, + 55275355, } } NE{ @@ -29277,19 +30291,19 @@ supplementalData:table(nofallback){ fuq{ populationShareF:int{48700000} } - ha_Latn{ + ha{ populationShareF:int{49410000} } territoryF:intvector{ - 60180000, + 60202700, 49287000, - 57180457, + 57186386, } tmh{ populationShareF:int{48600000} } twq{ - populationShareF:int{46440000} + populationShareF:int{46430000} } } NF{ @@ -29298,7 +30312,7 @@ supplementalData:table(nofallback){ populationShareF:int{49760000} } territoryF:intvector{ - 58106900, + 58114300, 49990000, 53221000, } @@ -29324,15 +30338,15 @@ supplementalData:table(nofallback){ populationShareF:int{49530000} } fuv{ + literacyShareF:int{49200000} populationShareF:int{48670000} - writingShareF:int{49200000} + } + ha{ + populationShareF:int{49130000} } ha_Arab{ populationShareF:int{48100000} } - ha_Latn{ - populationShareF:int{49130000} - } ibb{ populationShareF:int{48140000} } @@ -29349,13 +30363,13 @@ supplementalData:table(nofallback){ populationShareF:int{49210000} } territoryF:intvector{ - 62105300, + 62108900, 49613000, - 58181562, + 58186053, } tiv{ + literacyShareF:int{49250000} populationShareF:int{48160000} - writingShareF:int{49250000} } yo{ officialStatus{"official"} @@ -29368,9 +30382,9 @@ supplementalData:table(nofallback){ populationShareF:int{49780000} } territoryF:intvector{ - 60296900, + 60334900, 49780000, - 56590788, + 56596680, } } NL{ @@ -29411,9 +30425,9 @@ supplementalData:table(nofallback){ populationShareF:int{48120000} } territoryF:intvector{ - 61808800, + 61865900, 49990000, - 57169479, + 57170170, } tr{ populationShareF:int{48120000} @@ -29436,9 +30450,9 @@ supplementalData:table(nofallback){ populationShareF:int{48330000} } territoryF:intvector{ - 61346300, + 61364700, 50100000, - 56520769, + 56526516, } } NP{ @@ -29479,9 +30493,9 @@ supplementalData:table(nofallback){ populationShareF:int{48320000} } lep{ - populationShareF:int{45900000} + populationShareF:int{45970000} } - lif_Deva{ + lif{ populationShareF:int{48110000} } mai{ @@ -29501,8 +30515,8 @@ supplementalData:table(nofallback){ populationShareF:int{48330000} } rjs{ + literacyShareF:int{49670000} populationShareF:int{47440000} - writingShareF:int{49670000} } taj{ populationShareF:int{48300000} @@ -29514,9 +30528,9 @@ supplementalData:table(nofallback){ populationShareF:int{47120000} } territoryF:intvector{ - 60671400, + 60715200, 49574000, - 57315513, + 57290339, } thl{ populationShareF:int{48200000} @@ -29534,7 +30548,7 @@ supplementalData:table(nofallback){ populationShareF:int{47430000} } unr_Deva{ - populationShareF:int{46180000} + populationShareF:int{46200000} } xsr{ populationShareF:int{47520000} @@ -29552,7 +30566,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58150800, 49990000, - 53954000, + 53959100, } } NU{ @@ -29577,12 +30591,12 @@ supplementalData:table(nofallback){ } mi{ officialStatus{"official"} - populationShareF:int{48250000} + populationShareF:int{48280000} } territoryF:intvector{ - 61160800, + 61174800, 49990000, - 56443839, + 56447455, } } OM{ @@ -29597,9 +30611,9 @@ supplementalData:table(nofallback){ populationShareF:int{47940000} } territoryF:intvector{ - 61163000, + 61173100, 49869000, - 56328694, + 56335526, } } PA{ @@ -29611,9 +30625,9 @@ supplementalData:table(nofallback){ populationShareF:int{49690000} } territoryF:intvector{ - 60767700, + 60931200, 49941000, - 56365702, + 56370525, } zh_Hant{ populationShareF:int{47160000} @@ -29632,9 +30646,9 @@ supplementalData:table(nofallback){ populationShareF:int{49150000} } territoryF:intvector{ - 61372700, + 61409900, 49896000, - 57304450, + 57307411, } } PF{ @@ -29645,7 +30659,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59715000, 49980000, - 55282703, + 55285321, } ty{ officialStatus{"official"} @@ -29666,14 +30680,14 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 60186000, + 60280200, 49624000, - 56667243, + 56679132, } tpi{ + literacyShareF:int{49450000} officialStatus{"official"} populationShareF:int{49710000} - writingShareF:int{49450000} } } PH{ @@ -29684,15 +30698,15 @@ supplementalData:table(nofallback){ populationShareF:int{48300000} } bku{ - populationShareF:int{45790000} + populationShareF:int{45780000} } bto{ populationShareF:int{47280000} } ceb{ + literacyShareF:int{49130000} officialStatus{"official_regional"} populationShareF:int{49240000} - writingShareF:int{49130000} } cps{ populationShareF:int{47670000} @@ -29709,17 +30723,17 @@ supplementalData:table(nofallback){ populationShareF:int{49600000} } hil{ + literacyShareF:int{48800000} officialStatus{"official_regional"} populationShareF:int{48840000} - writingShareF:int{48800000} } hnn{ populationShareF:int{46160000} } ilo{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{48960000} - writingShareF:int{49100000} } krj{ populationShareF:int{47390000} @@ -29736,13 +30750,13 @@ supplementalData:table(nofallback){ populationShareF:int{48230000} } tbw{ - populationShareF:int{45990000} - writingShareF:int{49360000} + literacyShareF:int{49360000} + populationShareF:int{45970000} } territoryF:intvector{ - 61693400, + 61801900, 49954000, - 58100998, + 58102624, } tsg{ officialStatus{"official_regional"} @@ -29795,7 +30809,7 @@ supplementalData:table(nofallback){ khw{ populationShareF:int{47150000} } - ks_Arab{ + ks{ populationShareF:int{46690000} } kvx{ @@ -29816,17 +30830,17 @@ supplementalData:table(nofallback){ ps{ populationShareF:int{49150000} } - sd_Arab{ + sd{ populationShareF:int{49120000} } skr{ + literacyShareF:int{48100000} populationShareF:int{48910000} - writingShareF:int{48100000} } territoryF:intvector{ - 61884200, + 61988200, 49549000, - 58199086, + 58201996, } tg_Arab{ populationShareF:int{47330000} @@ -29846,7 +30860,7 @@ supplementalData:table(nofallback){ } de{ officialStatus{"official_regional"} - populationShareF:int{46960000} + populationShareF:int{49190000} } en{ populationShareF:int{49330000} @@ -29859,6 +30873,9 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49960000} } + ru{ + populationShareF:int{49180000} + } sli{ populationShareF:int{46310000} } @@ -29866,9 +30883,9 @@ supplementalData:table(nofallback){ populationShareF:int{48130000} } territoryF:intvector{ - 61959800, + 62105200, 49997000, - 57385622, + 57385233, } uk{ populationShareF:int{47390000} @@ -29876,27 +30893,27 @@ supplementalData:table(nofallback){ } PM{ en{ - populationShareF:int{48330000} + populationShareF:int{48340000} } fr{ officialStatus{"official"} - populationShareF:int{49900000} + populationShareF:int{49910000} } territoryF:intvector{ 58215300, 49990000, - 53565700, + 53559500, } } PN{ en{ officialStatus{"official"} - populationShareF:int{49960000} + populationShareF:int{49850000} } territoryF:intvector{ - 56192400, + 56233700, 49990000, - 51480000, + 51540000, } } PR{ @@ -29909,9 +30926,9 @@ supplementalData:table(nofallback){ populationShareF:int{49870000} } territoryF:intvector{ - 60614600, + 61131000, 49903000, - 56359836, + 56357806, } } PS{ @@ -29920,9 +30937,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 60201200, + 60212200, 49953000, - 56465442, + 56445101, } } PT{ @@ -29930,7 +30947,10 @@ supplementalData:table(nofallback){ populationShareF:int{49270000} } es{ - populationShareF:int{46970000} + populationShareF:int{49100000} + } + fr{ + populationShareF:int{49150000} } gl{ populationShareF:int{47140000} @@ -29940,9 +30960,9 @@ supplementalData:table(nofallback){ populationShareF:int{49960000} } territoryF:intvector{ - 61281400, + 61297100, 49954000, - 57108253, + 57108338, } } PW{ @@ -29955,9 +30975,9 @@ supplementalData:table(nofallback){ populationShareF:int{49740000} } territoryF:intvector{ - 58250000, + 58276000, 49920000, - 54212650, + 54213470, } } PY{ @@ -29973,9 +30993,9 @@ supplementalData:table(nofallback){ populationShareF:int{49800000} } territoryF:intvector{ - 60584900, + 60641200, 49939000, - 56678327, + 56686281, } } QA{ @@ -29987,12 +31007,12 @@ supplementalData:table(nofallback){ populationShareF:int{49110000} } ml{ - populationShareF:int{47300000} + populationShareF:int{47290000} } territoryF:intvector{ - 61306600, + 61334500, 49963000, - 56219482, + 56225828, } } RE{ @@ -30025,6 +31045,12 @@ supplementalData:table(nofallback){ en{ populationShareF:int{49310000} } + es{ + populationShareF:int{49100000} + } + fr{ + populationShareF:int{49170000} + } hu{ populationShareF:int{48660000} } @@ -30039,9 +31065,9 @@ supplementalData:table(nofallback){ populationShareF:int{47120000} } territoryF:intvector{ - 61393800, + 61441000, 49977000, - 57216664, + 57215997, } tr{ populationShareF:int{47130000} @@ -30067,7 +31093,7 @@ supplementalData:table(nofallback){ sq{ populationShareF:int{49190000} } - sr_Cyrl{ + sr{ officialStatus{"official"} populationShareF:int{49990000} } @@ -30077,9 +31103,9 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 60958400, + 61101500, 49980000, - 56717679, + 56714392, } uk{ officialStatus{"official_regional"} @@ -30129,8 +31155,8 @@ supplementalData:table(nofallback){ populationShareF:int{46120000} } hy{ + literacyShareF:int{49500000} populationShareF:int{47840000} - writingShareF:int{49500000} } inh{ officialStatus{"official_regional"} @@ -30174,7 +31200,7 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47210000} } - mn_Cyrl{ + mn{ populationShareF:int{45150000} } mrj{ @@ -30199,9 +31225,9 @@ supplementalData:table(nofallback){ populationShareF:int{45350000} } territoryF:intvector{ - 62357700, + 62374500, 49997000, - 58142424, + 58142355, } tt{ officialStatus{"official_regional"} @@ -30236,9 +31262,9 @@ supplementalData:table(nofallback){ populationShareF:int{49770000} } territoryF:intvector{ - 60189000, + 60219700, 49711000, - 57126617, + 57129884, } } SA{ @@ -30247,9 +31273,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 62161000, + 62173100, 49872000, - 57277523, + 57281603, } } SB{ @@ -30261,9 +31287,9 @@ supplementalData:table(nofallback){ populationShareF:int{48160000} } territoryF:intvector{ - 59109400, + 59119800, 49841000, - 55622469, + 55635027, } } SC{ @@ -30279,9 +31305,9 @@ supplementalData:table(nofallback){ populationShareF:int{49600000} } territoryF:intvector{ - 59242400, + 59260800, 49918000, - 54924300, + 54931860, } } SD{ @@ -30309,9 +31335,9 @@ supplementalData:table(nofallback){ populationShareF:int{47990000} } territoryF:intvector{ - 61160200, + 61176300, 49719000, - 57361089, + 57367295, } zag{ populationShareF:int{47510000} @@ -30332,14 +31358,14 @@ supplementalData:table(nofallback){ populationShareF:int{0} } rmu{ - populationShareF:int{46970000} + populationShareF:int{46960000} } se{ populationShareF:int{47330000} } sma{ - populationShareF:int{45310000} - writingShareF:int{49750000} + literacyShareF:int{49750000} + populationShareF:int{45300000} } smj{ populationShareF:int{46150000} @@ -30349,12 +31375,12 @@ supplementalData:table(nofallback){ populationShareF:int{49950000} } territoryF:intvector{ - 61450500, + 61498100, 49990000, - 56980162, + 56988060, } yi{ - populationShareF:int{46310000} + populationShareF:int{46300000} } } SG{ @@ -30363,25 +31389,25 @@ supplementalData:table(nofallback){ populationShareF:int{49930000} } ml{ - populationShareF:int{47180000} + populationShareF:int{47170000} } - ms_Latn{ + ms{ officialStatus{"official"} populationShareF:int{49140000} } - pa_Guru{ - populationShareF:int{47170000} + pa{ + populationShareF:int{47160000} } ta{ officialStatus{"official"} populationShareF:int{48210000} } territoryF:intvector{ - 61454300, + 61486900, 49959000, - 56567447, + 56578173, } - zh_Hans{ + zh{ officialStatus{"official"} populationShareF:int{49770000} } @@ -30398,9 +31424,15 @@ supplementalData:table(nofallback){ } } SI{ + de{ + populationShareF:int{49420000} + } en{ populationShareF:int{49590000} } + hr{ + populationShareF:int{49610000} + } hu{ populationShareF:int{47470000} } @@ -30412,9 +31444,9 @@ supplementalData:table(nofallback){ populationShareF:int{49870000} } territoryF:intvector{ - 60615600, + 60661300, 49997000, - 56198341, + 56197803, } } SJ{ @@ -30426,14 +31458,17 @@ supplementalData:table(nofallback){ populationShareF:int{49640000} } territoryF:intvector{ - 58124500, + 58129700, 50100000, 53187200, } } SK{ + cs{ + populationShareF:int{49470000} + } de{ - populationShareF:int{47280000} + populationShareF:int{49220000} } en{ populationShareF:int{49260000} @@ -30449,9 +31484,9 @@ supplementalData:table(nofallback){ populationShareF:int{49900000} } territoryF:intvector{ - 61153200, + 61169100, 49996000, - 56544503, + 56544580, } uk{ populationShareF:int{48190000} @@ -30469,91 +31504,91 @@ supplementalData:table(nofallback){ populationShareF:int{49270000} } tem{ + literacyShareF:int{48600000} populationShareF:int{49260000} - writingShareF:int{48600000} } territoryF:intvector{ - 60128000, + 60106400, 49433000, - 56587910, + 56601889, } } SM{ eo{ - populationShareF:int{47910000} + populationShareF:int{47900000} } it{ officialStatus{"official"} populationShareF:int{49890000} } territoryF:intvector{ - 59191400, + 59202300, 49960000, - 54330200, + 54332850, } } SN{ bjt{ + literacyShareF:int{50100000} officialStatus{"official_regional"} populationShareF:int{47610000} - writingShareF:int{50100000} } bsc{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{46980000} - writingShareF:int{49100000} } dyo{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{48260000} - writingShareF:int{49100000} } ff{ officialStatus{"official_regional"} populationShareF:int{49210000} } fr{ + literacyShareF:int{50100000} officialStatus{"official"} populationShareF:int{49390000} - writingShareF:int{50100000} } knf{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{47210000} - writingShareF:int{49100000} } mey{ + literacyShareF:int{49100000} officialStatus{"official_regional"} - populationShareF:int{46510000} - writingShareF:int{49100000} + populationShareF:int{46500000} } mfv{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{47770000} - writingShareF:int{49100000} } sav{ officialStatus{"official_regional"} populationShareF:int{48150000} } snf{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{47240000} - writingShareF:int{49100000} } srr{ officialStatus{"official_regional"} populationShareF:int{49110000} } territoryF:intvector{ - 60342000, + 60397200, 49497000, - 57139758, + 57143201, } tnr{ + literacyShareF:int{49100000} officialStatus{"official_regional"} populationShareF:int{46240000} - writingShareF:int{49100000} } wo{ officialStatus{"de_facto_official"} @@ -30562,9 +31597,9 @@ supplementalData:table(nofallback){ } SO{ ar{ + literacyShareF:int{49990000} officialStatus{"official"} populationShareF:int{49340000} - writingShareF:int{49990000} } om{ populationShareF:int{47420000} @@ -30577,9 +31612,9 @@ supplementalData:table(nofallback){ populationShareF:int{48200000} } territoryF:intvector{ - 59589600, + 59443100, 49378000, - 57106164, + 57108174, } } SR{ @@ -30588,13 +31623,13 @@ supplementalData:table(nofallback){ populationShareF:int{49900000} } srn{ + literacyShareF:int{49750000} populationShareF:int{49680000} - writingShareF:int{49750000} } territoryF:intvector{ - 59898700, + 59854700, 49947000, - 55579633, + 55585824, } zh_Hant{ populationShareF:int{48120000} @@ -30612,9 +31647,9 @@ supplementalData:table(nofallback){ populationShareF:int{48560000} } territoryF:intvector{ - 60235000, + 60208800, 49270000, - 57120429, + 57125307, } } ST{ @@ -30623,9 +31658,9 @@ supplementalData:table(nofallback){ populationShareF:int{49850000} } territoryF:intvector{ - 58626000, + 58694000, 49695000, - 55194006, + 55197541, } } SV{ @@ -30634,9 +31669,9 @@ supplementalData:table(nofallback){ populationShareF:int{49890000} } territoryF:intvector{ - 60511900, + 60547900, 49845000, - 56614135, + 56615667, } } SX{ @@ -30649,15 +31684,15 @@ supplementalData:table(nofallback){ } nl{ officialStatus{"official"} - populationShareF:int{48400000} + populationShareF:int{48380000} } territoryF:intvector{ 58365800, 49990000, - 54396890, + 54414860, } vic{ - populationShareF:int{48780000} + populationShareF:int{48750000} } } SY{ @@ -30672,7 +31707,7 @@ supplementalData:table(nofallback){ hy{ populationShareF:int{48180000} } - ku_Latn{ + ku{ populationShareF:int{48800000} } syr{ @@ -30680,9 +31715,9 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 61107600, + 60558000, 49841000, - 57170649, + 57171852, } } SZ{ @@ -30695,9 +31730,9 @@ supplementalData:table(nofallback){ populationShareF:int{49580000} } territoryF:intvector{ - 60105600, + 60110600, 49878000, - 56143561, + 56145143, } ts{ populationShareF:int{48170000} @@ -30711,7 +31746,7 @@ supplementalData:table(nofallback){ populationShareF:int{49990000} } territoryF:intvector{ - 57110200, + 57119000, 49990000, 52275000, } @@ -30724,7 +31759,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58632000, 49980000, - 54502800, + 54514300, } } TD{ @@ -30737,18 +31772,18 @@ supplementalData:table(nofallback){ populationShareF:int{49260000} } territoryF:intvector{ - 60296400, + 60305900, 49354000, - 57116315, + 57118525, } } TF{ fr{ + literacyShareF:int{50100000} populationShareF:int{50100000} - writingShareF:int{50100000} } territoryF:intvector{ - 56545000, + 56573300, 49990000, 52140000, } @@ -30761,10 +31796,14 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49610000} } + ife{ + literacyShareF:int{49150000} + populationShareF:int{48130000} + } territoryF:intvector{ - 60101600, + 60116100, 49604000, - 56755232, + 56775694, } } TH{ @@ -30772,15 +31811,15 @@ supplementalData:table(nofallback){ populationShareF:int{49270000} } kdt{ + literacyShareF:int{49500000} populationShareF:int{47480000} - writingShareF:int{49500000} } kxm{ populationShareF:int{48170000} } lcp{ + literacyShareF:int{49250000} populationShareF:int{46100000} - writingShareF:int{49250000} } lwl{ populationShareF:int{46100000} @@ -30803,14 +31842,14 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 62107000, + 62116100, 49935000, - 57679764, + 57682008, } th{ + literacyShareF:int{49930000} officialStatus{"official"} populationShareF:int{49800000} - writingShareF:int{49930000} } tts{ populationShareF:int{49240000} @@ -30831,11 +31870,11 @@ supplementalData:table(nofallback){ populationShareF:int{49120000} } territoryF:intvector{ - 60224000, + 60258100, 49997000, - 56819196, + 56833095, } - tg_Cyrl{ + tg{ officialStatus{"official"} populationShareF:int{50100000} } @@ -30858,14 +31897,14 @@ supplementalData:table(nofallback){ } TL{ pt{ + literacyShareF:int{50100000} officialStatus{"official"} populationShareF:int{49590000} - writingShareF:int{50100000} } territoryF:intvector{ - 59674500, + 59497500, 49583000, - 56123112, + 56126107, } tet{ officialStatus{"official"} @@ -30873,22 +31912,22 @@ supplementalData:table(nofallback){ } } TM{ - ku_Latn{ + ku{ populationShareF:int{47410000} } ru{ populationShareF:int{49120000} } territoryF:intvector{ - 60824000, + 60947700, 49996000, - 56523142, + 56529132, } - tk_Latn{ + tk{ officialStatus{"official"} populationShareF:int{49700000} } - uz_Latn{ + uz{ populationShareF:int{48900000} } } @@ -30905,9 +31944,9 @@ supplementalData:table(nofallback){ populationShareF:int{49740000} } territoryF:intvector{ - 61124700, + 61130800, 49791000, - 57110372, + 57111346, } } TO{ @@ -30916,9 +31955,9 @@ supplementalData:table(nofallback){ populationShareF:int{49280000} } territoryF:intvector{ - 58502000, + 58557000, 49990000, - 55106501, + 55106513, } to{ officialStatus{"official"} @@ -30935,12 +31974,12 @@ supplementalData:table(nofallback){ ar{ populationShareF:int{47560000} } + az{ + populationShareF:int{47740000} + } az_Arab{ populationShareF:int{47650000} } - az_Latn{ - populationShareF:int{47740000} - } bg{ populationShareF:int{47420000} } @@ -30965,16 +32004,16 @@ supplementalData:table(nofallback){ kiu{ populationShareF:int{47190000} } - kk_Cyrl{ - populationShareF:int{44800000} + kk{ + populationShareF:int{44700000} } - ku_Latn{ + ku{ populationShareF:int{48550000} } ky_Latn{ populationShareF:int{45140000} } - lzz_Latn{ + lzz{ populationShareF:int{46280000} } sq{ @@ -30985,18 +32024,18 @@ supplementalData:table(nofallback){ writingShareF:int{48500000} } territoryF:intvector{ - 62151500, + 62167000, 49941000, - 57794143, + 57802746, } tr{ officialStatus{"official"} populationShareF:int{49930000} } tru{ - populationShareF:int{45380000} + populationShareF:int{45370000} } - uz_Latn{ + uz{ populationShareF:int{45250000} } zza{ @@ -31012,9 +32051,9 @@ supplementalData:table(nofallback){ populationShareF:int{47340000} } territoryF:intvector{ - 60434600, + 60435700, 49988000, - 56122236, + 56122048, } } TV{ @@ -31023,9 +32062,9 @@ supplementalData:table(nofallback){ populationShareF:int{48980000} } territoryF:intvector{ - 57350000, + 57390000, 49950000, - 54108690, + 54109590, } tvl{ officialStatus{"official"} @@ -31034,9 +32073,9 @@ supplementalData:table(nofallback){ } TW{ territoryF:intvector{ - 62107900, + 62112500, 49961000, - 57234151, + 57234648, } trv{ populationShareF:int{46200000} @@ -31070,8 +32109,8 @@ supplementalData:table(nofallback){ populationShareF:int{47870000} } mas{ + literacyShareF:int{49500000} populationShareF:int{48150000} - writingShareF:int{49500000} } mgy{ populationShareF:int{48140000} @@ -31086,8 +32125,8 @@ supplementalData:table(nofallback){ populationShareF:int{47220000} } sbp{ + literacyShareF:int{48100000} populationShareF:int{47200000} - writingShareF:int{48100000} } suk{ populationShareF:int{48870000} @@ -31097,9 +32136,9 @@ supplementalData:table(nofallback){ populationShareF:int{49900000} } territoryF:intvector{ - 61128200, + 61150600, 49678000, - 57510459, + 57524827, } vun{ populationShareF:int{47750000} @@ -31112,6 +32151,9 @@ supplementalData:table(nofallback){ bg{ populationShareF:int{47490000} } + crh{ + populationShareF:int{47560000} + } el{ populationShareF:int{46160000} } @@ -31132,9 +32174,9 @@ supplementalData:table(nofallback){ populationShareF:int{48120000} } territoryF:intvector{ - 61371800, + 61349800, 49997000, - 57444295, + 57442097, } tr{ populationShareF:int{47420000} @@ -31159,7 +32201,7 @@ supplementalData:table(nofallback){ populationShareF:int{48390000} } hi{ - populationShareF:int{45590000} + populationShareF:int{45570000} } laj{ populationShareF:int{48380000} @@ -31184,9 +32226,9 @@ supplementalData:table(nofallback){ populationShareF:int{48390000} } territoryF:intvector{ - 60750800, + 60849300, 49732000, - 57371017, + 57383192, } ttj{ populationShareF:int{48190000} @@ -31201,7 +32243,7 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 57170600, + 57181000, 49990000, 52316000, } @@ -31270,9 +32312,9 @@ supplementalData:table(nofallback){ populationShareF:int{47240000} } territoryF:intvector{ - 63173500, + 63185600, 49990000, - 58321369, + 58323996, } vi{ populationShareF:int{47340000} @@ -31290,9 +32332,9 @@ supplementalData:table(nofallback){ populationShareF:int{49880000} } territoryF:intvector{ - 60716800, + 60739300, 49981000, - 56334189, + 56335102, } } UZ{ @@ -31303,33 +32345,34 @@ supplementalData:table(nofallback){ populationShareF:int{49140000} } territoryF:intvector{ - 61172300, + 61202300, 49994000, - 57291999, + 57294736, } tr{ populationShareF:int{47760000} } - uz_Cyrl{ + uz{ officialStatus{"official"} - populationShareF:int{49150000} + populationShareF:int{49850000} } - uz_Latn{ + uz_Cyrl{ officialStatus{"official"} - populationShareF:int{49850000} + populationShareF:int{49150000} } } VA{ it{ - populationShareF:int{49980000} + officialStatus{"de_facto_official"} + populationShareF:int{49820000} } la{ - populationShareF:int{49980000} + populationShareF:int{49820000} } territoryF:intvector{ - 57290600, + 57358200, 50100000, - 52842000, + 53100000, } } VC{ @@ -31338,9 +32381,9 @@ supplementalData:table(nofallback){ populationShareF:int{49960000} } territoryF:intvector{ - 59117400, + 59124100, 49960000, - 55102627, + 55102350, } } VE{ @@ -31349,9 +32392,9 @@ supplementalData:table(nofallback){ populationShareF:int{49820000} } territoryF:intvector{ - 61540900, + 61468600, 49955000, - 57292755, + 57309123, } } VG{ @@ -31362,7 +32405,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 58500000, 49978000, - 54334540, + 54342320, } } VI{ @@ -31373,18 +32416,18 @@ supplementalData:table(nofallback){ territoryF:intvector{ 59379200, 49990000, - 55103574, + 55102951, } } VN{ cjm{ + literacyShareF:int{49600000} populationShareF:int{46890000} - writingShareF:int{49600000} } territoryF:intvector{ - 61512600, + 61594900, 49934000, - 57943488, + 57952610, } vi{ officialStatus{"official"} @@ -31408,9 +32451,9 @@ supplementalData:table(nofallback){ populationShareF:int{49500000} } territoryF:intvector{ - 58683000, + 58723000, 49832000, - 55272264, + 55277554, } } WF{ @@ -31424,7 +32467,7 @@ supplementalData:table(nofallback){ territoryF:intvector{ 57600000, 49500000, - 54156130, + 54156640, } wls{ populationShareF:int{49600000} @@ -31440,9 +32483,9 @@ supplementalData:table(nofallback){ populationShareF:int{50100000} } territoryF:intvector{ - 58997000, + 59104600, 49988000, - 55197773, + 55198926, } } XK{ @@ -31453,7 +32496,7 @@ supplementalData:table(nofallback){ officialStatus{"official"} populationShareF:int{49920000} } - sr_Cyrl{ + sr{ officialStatus{"official"} populationShareF:int{48500000} } @@ -31462,9 +32505,9 @@ supplementalData:table(nofallback){ populationShareF:int{48500000} } territoryF:intvector{ - 60169200, + 60184900, 49919000, - 56187098, + 56188302, } } YE{ @@ -31476,9 +32519,9 @@ supplementalData:table(nofallback){ populationShareF:int{48900000} } territoryF:intvector{ - 61104000, + 60734500, 49653000, - 57267373, + 57273928, } } YT{ @@ -31503,72 +32546,72 @@ supplementalData:table(nofallback){ } ZA{ af{ + literacyShareF:int{49990000} officialStatus{"official_regional"} populationShareF:int{49130000} - writingShareF:int{49990000} } en{ + literacyShareF:int{49990000} officialStatus{"official"} populationShareF:int{49310000} - writingShareF:int{49990000} } hi{ + literacyShareF:int{49690000} populationShareF:int{48200000} - writingShareF:int{49690000} } nr{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48160000} - writingShareF:int{49500000} } nso{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48940000} - writingShareF:int{49500000} } ss{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48270000} - writingShareF:int{49500000} } st{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48790000} - writingShareF:int{49500000} } sw{ - populationShareF:int{45190000} - writingShareF:int{49500000} + literacyShareF:int{49500000} + populationShareF:int{45180000} } territoryF:intvector{ - 61707100, + 61736300, 49930000, - 57536756, + 57543007, } tn{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48820000} - writingShareF:int{49500000} } ts{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48440000} - writingShareF:int{49500000} } ve{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{48230000} - writingShareF:int{49500000} } xh{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{49180000} - writingShareF:int{49500000} } zu{ + literacyShareF:int{49500000} officialStatus{"official_regional"} populationShareF:int{49240000} - writingShareF:int{49500000} } } ZM{ @@ -31586,9 +32629,9 @@ supplementalData:table(nofallback){ populationShareF:int{49150000} } territoryF:intvector{ - 60613900, + 60651700, 49614000, - 57150663, + 57155107, } } ZW{ @@ -31617,9 +32660,9 @@ supplementalData:table(nofallback){ populationShareF:int{49810000} } territoryF:intvector{ - 60272600, + 60283300, 49836000, - 57142295, + 57145470, } tn{ populationShareF:int{47220000} diff --git a/source/data/misc/timezoneTypes.txt b/source/data/misc/timezoneTypes.txt index af9e67d..c85fd3d 100644 --- a/source/data/misc/timezoneTypes.txt +++ b/source/data/misc/timezoneTypes.txt @@ -80,10 +80,9 @@ timezoneTypes:table(nofallback){ "Etc:GMT-0"{"Etc/GMT"} "Etc:GMT0"{"Etc/GMT"} "Etc:Greenwich"{"Etc/GMT"} - "Etc:UCT"{"Etc/GMT"} - "Etc:UTC"{"Etc/GMT"} - "Etc:Universal"{"Etc/GMT"} - "Etc:Zulu"{"Etc/GMT"} + "Etc:UCT"{"Etc/UTC"} + "Etc:Universal"{"Etc/UTC"} + "Etc:Zulu"{"Etc/UTC"} "Europe:Belfast"{"Europe/London"} "Europe:Nicosia"{"Asia/Nicosia"} "Europe:Tiraspol"{"Europe/Chisinau"} @@ -138,11 +137,11 @@ timezoneTypes:table(nofallback){ ROK{"Asia/Seoul"} Singapore{"Asia/Singapore"} Turkey{"Europe/Istanbul"} - UCT{"Etc/GMT"} - UTC{"Etc/GMT"} - Universal{"Etc/GMT"} + UCT{"Etc/UTC"} + UTC{"Etc/UTC"} + Universal{"Etc/UTC"} W-SU{"Europe/Moscow"} - Zulu{"Etc/GMT"} + Zulu{"Etc/UTC"} } } typeMap{ @@ -316,6 +315,7 @@ timezoneTypes:table(nofallback){ "America:Port_of_Spain"{"ttpos"} "America:Porto_Velho"{"brpvh"} "America:Puerto_Rico"{"prsju"} + "America:Punta_Arenas"{"clpuq"} "America:Rainy_River"{"caffs"} "America:Rankin_Inlet"{"cayek"} "America:Recife"{"brrec"} @@ -463,7 +463,7 @@ timezoneTypes:table(nofallback){ "Australia:Melbourne"{"aumel"} "Australia:Perth"{"auper"} "Australia:Sydney"{"ausyd"} - "Etc:GMT"{"utc"} + "Etc:GMT"{"gmt"} "Etc:GMT+1"{"utcw01"} "Etc:GMT+10"{"utcw10"} "Etc:GMT+11"{"utcw11"} @@ -490,6 +490,7 @@ timezoneTypes:table(nofallback){ "Etc:GMT-7"{"utce07"} "Etc:GMT-8"{"utce08"} "Etc:GMT-9"{"utce09"} + "Etc:UTC"{"utc"} "Etc:Unknown"{"unk"} "Europe:Amsterdam"{"nlams"} "Europe:Andorra"{"adalv"} diff --git a/source/data/misc/windowsZones.txt b/source/data/misc/windowsZones.txt index 12cb9f7..ca49b9e 100644 --- a/source/data/misc/windowsZones.txt +++ b/source/data/misc/windowsZones.txt @@ -457,7 +457,6 @@ windowsZones:table(nofallback){ } "Pacific SA Standard Time"{ 001{"America/Santiago"} - AQ{"Antarctica/Palmer"} CL{"America/Santiago"} } "Pacific Standard Time (Mexico)"{ @@ -504,11 +503,12 @@ windowsZones:table(nofallback){ } "SA Eastern Standard Time"{ 001{"America/Cayenne"} - AQ{"Antarctica/Rothera"} + AQ{"Antarctica/Rothera Antarctica/Palmer"} BR{ "America/Fortaleza America/Belem America/Maceio America/Recife Americ" "a/Santarem" } + CL{"America/Punta_Arenas"} FK{"Atlantic/Stanley"} GF{"America/Cayenne"} SR{"America/Paramaribo"} @@ -648,6 +648,7 @@ windowsZones:table(nofallback){ } "Turkey Standard Time"{ 001{"Europe/Istanbul"} + CY{"Asia/Famagusta"} TR{"Europe/Istanbul"} } "Turks And Caicos Standard Time"{ @@ -668,7 +669,7 @@ windowsZones:table(nofallback){ "UTC"{ 001{"Etc/GMT"} GL{"America/Danmarkshavn"} - ZZ{"Etc/GMT"} + ZZ{"Etc/GMT Etc/UTC"} } "UTC+12"{ 001{"Etc/GMT-12"} diff --git a/source/data/misc/zoneinfo64.txt b/source/data/misc/zoneinfo64.txt index c7d846b..41aa2ad 100644 --- a/source/data/misc/zoneinfo64.txt +++ b/source/data/misc/zoneinfo64.txt @@ -3,20 +3,20 @@ // License & terms of use: http://www.unicode.org/copyright.html#License //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Tue Nov 29 01:50:23 2016 +// Build date: Mon Mar 20 17:49:58 2017 // tz database: ftp://ftp.iana.org/tz/ -// tz version: 2016j -// ICU version: 58.1 +// tz version: 2017b +// ICU version: 59.1 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << // >> !!! >>> DO NOT EDIT <<< !!! << //--------------------------------------------------------- zoneinfo64:table(nofallback) { - TZVersion { "2016j" } + TZVersion { "2017b" } Zones:array { - /* ACT */ :int { 353 } //Z#0 - /* AET */ :int { 365 } //Z#1 + /* ACT */ :int { 354 } //Z#0 + /* AET */ :int { 366 } //Z#1 /* AGT */ :int { 64 } //Z#2 /* ART */ :int { 18 } //Z#3 /* AST */ :int { 60 } //Z#4 @@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1830383032 } typeOffsets:intvector { -968, 0, 0, 0 } typeMap:bin { "01" } - links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 345 } + links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 346 } } //Z#5 /* Africa/Accra */ :table { trans:intvector { -1640995148, -1556841600, -1546388400, -1525305600, -1514852400, -1493769600, -1483316400, -1462233600, -1451780400, -1430611200, -1420158000, -1399075200, -1388622000, -1367539200, -1357086000, -1336003200, -1325550000, -1304380800, -1293927600, -1272844800, -1262391600, -1241308800, -1230855600, -1209772800, -1199319600, -1178150400, -1167697200, -1146614400, -1136161200, -1115078400, -1104625200, -1083542400, -1073089200, -1051920000, -1041466800, -1020384000, -1009930800, -988848000, -978394800, -957312000, -946858800, -925689600, -915236400, -894153600, -883700400, -862617600, -852164400 } @@ -56,7 +56,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400, 1209074400, 1219957200, 1240524000, 1250802000, 1272578400, 1281474000, 1284069600, 1285880400, 1400191200, 1403816400, 1406844000, 1411678800 } typeOffsets:intvector { 7509, 0, 7200, 0, 7200, 3600 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 3, 18, 399 } + links:intvector { 3, 18, 400 } } //Z#18 /* Africa/Casablanca */ :table { trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 } @@ -68,8 +68,8 @@ zoneinfo64:table(nofallback) { finalYear:int { 2039 } } //Z#19 /* Africa/Ceuta */ :table { - transPre32:intvector { -1, 2117515772 } - trans:intvector { -1630112400, -1616810400, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } + transPre32:intvector { -1, 2117514496 } + trans:intvector { -1630112400, -1616810400, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -1276, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010304030403040304030403040304030403040304030403" } finalRule { "EU" } @@ -126,13 +126,13 @@ zoneinfo64:table(nofallback) { trans:intvector { -2109291020 } typeOffsets:intvector { 7820, 0, 7200, 0 } typeMap:bin { "01" } - links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 376 } + links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 377 } } //Z#43 /* Africa/Maseru */ :int { 30 } //Z#44 /* Africa/Mbabane */ :int { 30 } //Z#45 /* Africa/Mogadishu */ :int { 48 } //Z#46 /* Africa/Monrovia */ :table { - trans:intvector { -1604359012, 73529070 } + trans:intvector { -1604359012, 63593070 } typeOffsets:intvector { -2588, 0, -2670, 0, 0, 0 } typeMap:bin { "0102" } } //Z#47 @@ -140,7 +140,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1309746436, -1262314800, -946780200, -315629100 } typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 } typeMap:bin { "03010203" } - links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 394, 513, 517, 522 } + links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 395, 514, 518, 523 } } //Z#48 /* Africa/Ndjamena */ :table { trans:intvector { -1830387612, 308703600, 321314400 } @@ -157,7 +157,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 } typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 } typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" } - links:intvector { 56, 530 } + links:intvector { 56, 531 } } //Z#56 /* Africa/Tunis */ :table { transPre32:intvector { -1, 1497764852 } @@ -182,7 +182,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -36000 } finalYear:int { 2008 } - links:intvector { 59, 80, 614 } + links:intvector { 59, 80, 615 } } //Z#59 /* America/Anchorage */ :table { transPre32:intvector { -1, 1069604872, -1, 2106016072 } @@ -192,7 +192,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - links:intvector { 4, 60, 613 } + links:intvector { 4, 60, 614 } } //Z#60 /* America/Anguilla */ :int { 186 } //Z#61 /* America/Antigua */ :int { 186 } //Z#62 @@ -220,7 +220,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200, 1237082400 } typeOffsets:intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040104030403020304030403" } - links:intvector { 67, 101, 196 } + links:intvector { 67, 101, 197 } } //Z#67 /* America/Argentina/Jujuy */ :table { transPre32:intvector { -1, 1922870968 } @@ -392,7 +392,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 98, 379, 616 } + links:intvector { 98, 380, 617 } } //Z#98 /* America/Chihuahua */ :table { trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 } @@ -458,7 +458,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - links:intvector { 109, 203, 542, 622 } + links:intvector { 109, 204, 543, 623 } } //Z#109 /* America/Detroit */ :table { trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -467,7 +467,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 110, 621 } + links:intvector { 110, 622 } } //Z#110 /* America/Dominica */ :int { 186 } //Z#111 /* America/Edmonton */ :table { @@ -477,7 +477,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -25200 } finalYear:int { 2008 } - links:intvector { 112, 386 } + links:intvector { 112, 387 } } //Z#112 /* America/Eirunepe */ :table { trans:intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600, 1384056000 } @@ -489,7 +489,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { -21408, 0, -21600, 0, -21600, 3600 } typeMap:bin { "0102010201" } } //Z#114 - /* America/Ensenada */ :int { 215 } //Z#115 + /* America/Ensenada */ :int { 216 } //Z#115 /* America/Fort_Nelson */ :table { transPre32:intvector { -1, 1581086343 } trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800 } @@ -542,9 +542,9 @@ zoneinfo64:table(nofallback) { } //Z#125 /* America/Guayaquil */ :table { transPre32:intvector { -1, 1770464856 } - trans:intvector { -1230749160 } - typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0 } - typeMap:bin { "0102" } + trans:intvector { -1230749160, 722926800, 728884800 } + typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0, -18000, 3600 } + typeMap:bin { "01020302" } } //Z#126 /* America/Guyana */ :table { trans:intvector { -1730578040, 176010300, 662698800 } @@ -558,7 +558,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -14400 } finalYear:int { 2008 } - links:intvector { 128, 382 } + links:intvector { 128, 383 } } //Z#128 /* America/Havana */ :table { transPre32:intvector { -1, 1770465464 } @@ -568,7 +568,7 @@ zoneinfo64:table(nofallback) { finalRule { "Cuba" } finalRaw:int { -18000 } finalYear:int { 2014 } - links:intvector { 129, 393 } + links:intvector { 129, 394 } } //Z#129 /* America/Hermosillo */ :table { trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 } @@ -583,7 +583,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 117, 131, 139, 510, 617 } + links:intvector { 117, 131, 139, 511, 618 } } //Z#131 /* America/Indiana/Knox */ :table { transPre32:intvector { -1, 1577320096 } @@ -593,7 +593,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 132, 147, 620 } + links:intvector { 132, 147, 621 } } //Z#132 /* America/Indiana/Marengo */ :table { transPre32:intvector { -1, 1577320096 } @@ -670,7 +670,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1827687169, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 } typeOffsets:intvector { -18431, 0, -18000, 0, -18000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - links:intvector { 142, 527 } + links:intvector { 142, 528 } } //Z#142 /* America/Jujuy */ :int { 68 } //Z#143 /* America/Juneau */ :table { @@ -722,7 +722,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 151, 547, 623, 624 } + links:intvector { 151, 548, 624, 625 } } //Z#151 /* America/Louisville */ :int { 145 } //Z#152 /* America/Lower_Princes */ :int { 105 } //Z#153 @@ -741,7 +741,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 } typeOffsets:intvector { -14404, 0, -14400, 0, -14400, 3600 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 156, 375 } + links:intvector { 156, 376 } } //Z#156 /* America/Marigot */ :int { 186 } //Z#157 /* America/Martinique */ :table { @@ -764,7 +764,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -25200 } finalYear:int { 2003 } - links:intvector { 160, 536 } + links:intvector { 160, 537 } } //Z#160 /* America/Mendoza */ :int { 70 } //Z#161 /* America/Menominee */ :table { @@ -800,7 +800,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -21600 } finalYear:int { 2003 } - links:intvector { 165, 537 } + links:intvector { 165, 538 } } //Z#165 /* America/Miquelon */ :table { trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 } @@ -832,7 +832,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { -13484, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201020105030503050305030503050304030403040305030405030503050305030503050305030503050305030503050305030503050305030503050305030503" } } //Z#169 - /* America/Montreal */ :int { 216 } //Z#170 + /* America/Montreal */ :int { 217 } //Z#170 /* America/Montserrat */ :int { 186 } //Z#171 /* America/Nassau */ :table { trans:intvector { -1825095030, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -850,7 +850,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 173, 618 } + links:intvector { 173, 619 } } //Z#173 /* America/Nipigon */ :table { transPre32:intvector { -1, 1928233280 } @@ -874,7 +874,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 } typeOffsets:intvector { -7780, 0, -7200, 0, -7200, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 176, 373 } + links:intvector { 176, 374 } } //Z#176 /* America/North_Dakota/Beulah */ :table { transPre32:intvector { -1, 1577323696 } @@ -936,21 +936,24 @@ zoneinfo64:table(nofallback) { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 } typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 } typeMap:bin { "0102010201020102010201" } - links:intvector { 184, 544, 615 } + links:intvector { 184, 545, 616 } } //Z#184 /* America/Port-au-Prince */ :table { transPre32:intvector { -1, 1770463056 } - trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 } + trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1489302000, 1509861600 } typeOffsets:intvector { -17360, 0, -18000, 0, -18000, 3600, -17340, 0 } - typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + finalRule { "Haiti" } + finalRaw:int { -18000 } + finalYear:int { 2018 } } //Z#185 /* America/Port_of_Spain */ :table { trans:intvector { -1825098836 } typeOffsets:intvector { -14764, 0, -14400, 0 } typeMap:bin { "01" } - links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 205, 207, 208, 209, 210, 217, 219 } + links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 206, 208, 209, 210, 211, 218, 220 } } //Z#186 - /* America/Porto_Acre */ :int { 195 } //Z#187 + /* America/Porto_Acre */ :int { 196 } //Z#187 /* America/Porto_Velho */ :table { trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 } typeOffsets:intvector { -15336, 0, -14400, 0, -14400, 3600 } @@ -961,8 +964,14 @@ zoneinfo64:table(nofallback) { trans:intvector { -873057600, -765399600 } typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 } typeMap:bin { "010201" } - links:intvector { 189, 546 } + links:intvector { 189, 547 } } //Z#189 + /* America/Punta_Arenas */ :table { + transPre32:intvector { -1, 1770462716 } + trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 } + typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 } + typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" } + } //Z#190 /* America/Rainy_River */ :table { transPre32:intvector { -1, 1928234792 } trans:intvector { -1632067200, -1615136400, -923248800, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } @@ -971,7 +980,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#190 + } //Z#191 /* America/Rankin_Inlet */ :table { trans:intvector { -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } @@ -979,18 +988,18 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#191 + } //Z#192 /* America/Recife */ :table { trans:intvector { -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 } typeOffsets:intvector { -8376, 0, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" } - } //Z#192 + } //Z#193 /* America/Regina */ :table { trans:intvector { -2030202084, -1632063600, -1615132800, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 } typeOffsets:intvector { -25116, 0, -25200, 0, -25200, 3600, -21600, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - links:intvector { 193, 384, 389 } - } //Z#193 + links:intvector { 194, 385, 390 } + } //Z#194 /* America/Resolute */ :table { trans:intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } @@ -998,20 +1007,20 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#194 + } //Z#195 /* America/Rio_Branco */ :table { trans:intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600, 1384056000 } typeOffsets:intvector { -16272, 0, -18000, 0, -18000, 3600, -14400, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010301" } - links:intvector { 187, 195, 372 } - } //Z#195 - /* America/Rosario */ :int { 67 } //Z#196 - /* America/Santa_Isabel */ :int { 215 } //Z#197 + links:intvector { 187, 196, 373 } + } //Z#196 + /* America/Rosario */ :int { 67 } //Z#197 + /* America/Santa_Isabel */ :int { 216 } //Z#198 /* America/Santarem */ :table { trans:intvector { -1767212472, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 1214280000 } typeOffsets:intvector { -13128, 0, -14400, 0, -14400, 3600, -10800, 0 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" } - } //Z#198 + } //Z#199 /* America/Santiago */ :table { trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 } @@ -1019,14 +1028,14 @@ zoneinfo64:table(nofallback) { finalRule { "Chile" } finalRaw:int { -14400 } finalYear:int { 2017 } - links:intvector { 199, 391 } - } //Z#199 + links:intvector { 200, 392 } + } //Z#200 /* America/Santo_Domingo */ :table { transPre32:intvector { -1, 1770462472 } trans:intvector { -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 } typeOffsets:intvector { -16776, 0, -18000, 0, -18000, 1800, -18000, 3600, -16800, 0, -14400, 0 } typeMap:bin { "0401030102010201020102010201050105" } - } //Z#200 + } //Z#201 /* America/Sao_Paulo */ :table { trans:intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1540090800, 1550368800, 1571540400, 1581818400, 1602990000, 1613872800, 1634439600, 1645322400, 1665889200, 1677376800, 1697338800, 1708221600, 1729393200, 1739671200, 1760842800, 1771725600, 1792292400, 1803175200, 1823742000, 1834624800, 1855191600, 1866074400, 1887246000, 1897524000, 1918695600, 1928973600, 1950145200, 1960423200, 1981594800, 1992477600, 2013044400, 2024532000, 2044494000, 2055376800, 2076548400, 2086826400, 2107998000, 2118880800, 2139447600 } transPost32:intvector { 0, -2144636896, 0, -2124070096 } @@ -1035,8 +1044,8 @@ zoneinfo64:table(nofallback) { finalRule { "Brazil" } finalRaw:int { -10800 } finalYear:int { 2039 } - links:intvector { 201, 370, 374 } - } //Z#201 + links:intvector { 202, 371, 375 } + } //Z#202 /* America/Scoresbysund */ :table { trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -5272, 0, -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 } @@ -1044,8 +1053,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { -3600 } finalYear:int { 1997 } - } //Z#202 - /* America/Shiprock */ :int { 109 } //Z#203 + } //Z#203 + /* America/Shiprock */ :int { 109 } //Z#204 /* America/Sitka */ :table { transPre32:intvector { -1, 1069601369, -1, 2106012569 } trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 } @@ -1054,8 +1063,8 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - } //Z#204 - /* America/St_Barthelemy */ :int { 186 } //Z#205 + } //Z#205 + /* America/St_Barthelemy */ :int { 186 } //Z#206 /* America/St_Johns */ :table { trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 } typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 } @@ -1063,22 +1072,22 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -12600 } finalYear:int { 2013 } - links:intvector { 206, 378, 387 } - } //Z#206 - /* America/St_Kitts */ :int { 186 } //Z#207 - /* America/St_Lucia */ :int { 186 } //Z#208 - /* America/St_Thomas */ :int { 186 } //Z#209 - /* America/St_Vincent */ :int { 186 } //Z#210 + links:intvector { 207, 379, 388 } + } //Z#207 + /* America/St_Kitts */ :int { 186 } //Z#208 + /* America/St_Lucia */ :int { 186 } //Z#209 + /* America/St_Thomas */ :int { 186 } //Z#210 + /* America/St_Vincent */ :int { 186 } //Z#211 /* America/Swift_Current */ :table { trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 } typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 } typeMap:bin { "01020102010201020102010201020102010201020103" } - } //Z#211 + } //Z#212 /* America/Tegucigalpa */ :table { trans:intvector { -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 } typeOffsets:intvector { -20932, 0, -21600, 0, -21600, 3600 } typeMap:bin { "01020102010201" } - } //Z#212 + } //Z#213 /* America/Thule */ :table { trans:intvector { -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 } typeOffsets:intvector { -16508, 0, -14400, 0, -14400, 3600 } @@ -1086,7 +1095,7 @@ zoneinfo64:table(nofallback) { finalRule { "Thule" } finalRaw:int { -14400 } finalYear:int { 2008 } - } //Z#213 + } //Z#214 /* America/Thunder_Bay */ :table { transPre32:intvector { -1, 1928233516 } trans:intvector { -1893434400, -880218000, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -1095,7 +1104,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -18000 } finalYear:int { 2008 } - } //Z#214 + } //Z#215 /* America/Tijuana */ :table { trans:intvector { -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -761677200, -686073600, -661539600, -495039600, -481734000, -463590000, -450284400, -431535600, -418230000, -400086000, -386780400, -368636400, -355330800, -337186800, -323881200, -305737200, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1175421600, 1193562000, 1207476000, 1225011600, 1238925600, 1256461200, 1268560800, 1289120400 } typeOffsets:intvector { -28084, 0, -28800, 0, -28800, 3600, -25200, 0 } @@ -1103,8 +1112,8 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2011 } - links:intvector { 115, 197, 215, 535 } - } //Z#215 + links:intvector { 115, 198, 216, 536 } + } //Z#216 /* America/Toronto */ :table { transPre32:intvector { -1, 1928231148 } trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -1113,9 +1122,9 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 170, 216, 385 } - } //Z#216 - /* America/Tortola */ :int { 186 } //Z#217 + links:intvector { 170, 217, 386 } + } //Z#217 + /* America/Tortola */ :int { 186 } //Z#218 /* America/Vancouver */ :table { transPre32:intvector { -1, 1581086444 } trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } @@ -1124,9 +1133,9 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 218, 388 } - } //Z#218 - /* America/Virgin */ :int { 186 } //Z#219 + links:intvector { 219, 389 } + } //Z#219 + /* America/Virgin */ :int { 186 } //Z#220 /* America/Whitehorse */ :table { transPre32:intvector { -1, 2105969308 } trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } @@ -1135,8 +1144,8 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 220, 390 } - } //Z#220 + links:intvector { 221, 391 } + } //Z#221 /* America/Winnipeg */ :table { transPre32:intvector { -1, 1692709012 } trans:intvector { -1694368800, -1681671600, -1632067200, -1615136400, -1029686400, -1018198800, -880214400, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1143964800, 1162105200, 1173600000, 1194159600 } @@ -1145,8 +1154,8 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 221, 383 } - } //Z#221 + links:intvector { 222, 384 } + } //Z#222 /* America/Yakutat */ :table { transPre32:intvector { -1, 1069602431, -1, 2106013631 } trans:intvector { -880203600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 } @@ -1155,7 +1164,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - } //Z#222 + } //Z#223 /* America/Yellowknife */ :table { trans:intvector { -1104537600, -880210800, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 } typeOffsets:intvector { 0, 0, -25200, 0, -25200, 3600, -25200, 7200 } @@ -1163,53 +1172,50 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -25200 } finalYear:int { 2008 } - } //Z#223 + } //Z#224 /* Antarctica/Casey */ :table { trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600 } typeOffsets:intvector { 0, 0, 28800, 0, 39600, 0 } typeMap:bin { "010201020102" } - } //Z#224 + } //Z#225 /* Antarctica/Davis */ :table { trans:intvector { -409190400, -163062000, -28857600, 1255806000, 1268251200, 1319742000, 1329854400 } typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 } typeMap:bin { "02000201020102" } - } //Z#225 + } //Z#226 /* Antarctica/DumontDUrville */ :table { trans:intvector { -725846400, -566992800, -415497600 } typeOffsets:intvector { 0, 0, 36000, 0 } typeMap:bin { "010001" } - } //Z#226 + } //Z#227 /* Antarctica/Macquarie */ :table { transPre32:intvector { -1, 2080708096 } trans:intvector { -1680508800, -1665392400, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1270310400 } typeOffsets:intvector { 0, 0, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "01020100010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } - } //Z#227 + } //Z#228 /* Antarctica/Mawson */ :table { trans:intvector { -501206400, 1255809600 } typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 } typeMap:bin { "0201" } - } //Z#228 - /* Antarctica/McMurdo */ :int { 550 } //Z#229 + } //Z#229 + /* Antarctica/McMurdo */ :int { 551 } //Z#230 /* Antarctica/Palmer */ :table { - trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } + trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 } typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } - typeMap:bin { "020102010201020102010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" } - finalRule { "Chile" } - finalRaw:int { -14400 } - finalYear:int { 2017 } - } //Z#230 + typeMap:bin { "02010201020102010201030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } + } //Z#231 /* Antarctica/Rothera */ :table { trans:intvector { 218246400 } typeOffsets:intvector { 0, 0, -10800, 0 } typeMap:bin { "01" } - } //Z#231 - /* Antarctica/South_Pole */ :int { 550 } //Z#232 + } //Z#232 + /* Antarctica/South_Pole */ :int { 551 } //Z#233 /* Antarctica/Syowa */ :table { trans:intvector { -407808000 } typeOffsets:intvector { 0, 0, 10800, 0 } typeMap:bin { "01" } - } //Z#233 + } //Z#234 /* Antarctica/Troll */ :table { trans:intvector { 1111885200, 1130634000 } typeOffsets:intvector { 0, 0, 0, 7200 } @@ -1217,19 +1223,19 @@ zoneinfo64:table(nofallback) { finalRule { "Troll" } finalRaw:int { 0 } finalYear:int { 2006 } - } //Z#234 + } //Z#235 /* Antarctica/Vostok */ :table { trans:intvector { -380073600 } typeOffsets:intvector { 0, 0, 21600, 0 } typeMap:bin { "01" } - } //Z#235 - /* Arctic/Longyearbyen */ :int { 472 } //Z#236 - /* Asia/Aden */ :int { 307 } //Z#237 + } //Z#236 + /* Arctic/Longyearbyen */ :int { 473 } //Z#237 + /* Asia/Aden */ :int { 308 } //Z#238 /* Asia/Almaty */ :table { trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 } typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" } - } //Z#238 + } //Z#239 /* Asia/Amman */ :table { trans:intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938124000, 954367200, 970178400, 985816800, 1001628000, 1017352800, 1033077600, 1048802400, 1066946400, 1080252000, 1097791200, 1112306400, 1128031200, 1143756000, 1161900000, 1175205600, 1193349600, 1206655200, 1225404000, 1238104800, 1256853600, 1269554400, 1288303200, 1301608800, 1319752800, 1333058400, 1387486800, 1395957600, 1414706400 } typeOffsets:intvector { 8624, 0, 7200, 0, 7200, 3600 } @@ -1237,57 +1243,57 @@ zoneinfo64:table(nofallback) { finalRule { "Jordan" } finalRaw:int { 7200 } finalYear:int { 2015 } - } //Z#239 + } //Z#240 /* Asia/Anadyr */ :table { trans:intvector { -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 } typeOffsets:intvector { 42596, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 } typeMap:bin { "03050605040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#240 + } //Z#241 /* Asia/Aqtau */ :table { trans:intvector { -1441164064, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } typeOffsets:intvector { 12064, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "0103050403040304030403040304030403040304030201030403040304010201020102010201020102010201020102010203" } - } //Z#241 + } //Z#242 /* Asia/Aqtobe */ :table { trans:intvector { -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 } typeOffsets:intvector { 13720, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" } - } //Z#242 + } //Z#243 /* Asia/Ashgabat */ :table { trans:intvector { -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000 } typeOffsets:intvector { 14012, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103" } - links:intvector { 243, 244 } - } //Z#243 - /* Asia/Ashkhabad */ :int { 243 } //Z#244 + links:intvector { 244, 245 } + } //Z#244 + /* Asia/Ashkhabad */ :int { 244 } //Z#245 /* Asia/Atyrau */ :table { - trans:intvector { -1441164464, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } - typeOffsets:intvector { 12464, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } - typeMap:bin { "0103050403040304030403040304030403040304030201030403040304030403040304030403020102010201020102010203" } - } //Z#245 + trans:intvector { -1441164464, -1247540400, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } + typeOffsets:intvector { 12464, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } + typeMap:bin { "0104060504050405040504050405040504050405040302040504050405040504050405040504030203020302030203020304" } + } //Z#246 /* Asia/Baghdad */ :table { transPre32:intvector { -1, 1770435036 } trans:intvector { -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670464000, 686275200, 702086400, 717897600, 733622400, 749433600, 765158400, 780969600, 796694400, 812505600, 828316800, 844128000, 859852800, 875664000, 891388800, 907200000, 922924800, 938736000, 954547200, 970358400, 986083200, 1001894400, 1017619200, 1033430400, 1049155200, 1064966400, 1080777600, 1096588800, 1112313600, 1128124800, 1143849600, 1159660800, 1175385600, 1191196800 } typeOffsets:intvector { 10660, 0, 10656, 0, 10800, 0, 10800, 3600 } typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - } //Z#246 - /* Asia/Bahrain */ :int { 304 } //Z#247 + } //Z#247 + /* Asia/Bahrain */ :int { 305 } //Z#248 /* Asia/Baku */ :table { trans:intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 828234000, 846378000, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1319932800, 1332633600, 1351382400, 1364688000, 1382832000, 1396137600, 1414281600, 1427587200, 1445731200 } typeOffsets:intvector { 11964, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" } - } //Z#248 + } //Z#249 /* Asia/Bangkok */ :table { trans:intvector { -1570084924 } typeOffsets:intvector { 24124, 0, 25200, 0 } typeMap:bin { "01" } - links:intvector { 249, 301, 329 } - } //Z#249 + links:intvector { 250, 302, 330 } + } //Z#250 /* Asia/Barnaul */ :table { trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 } typeOffsets:intvector { 20100, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#250 + } //Z#251 /* Asia/Beirut */ :table { transPre32:intvector { -1, 1454817976 } trans:intvector { -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600, 922572000, 941317200 } @@ -1296,40 +1302,37 @@ zoneinfo64:table(nofallback) { finalRule { "Lebanon" } finalRaw:int { 7200 } finalYear:int { 2000 } - } //Z#251 + } //Z#252 /* Asia/Bishkek */ :table { trans:intvector { -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 } typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" } - } //Z#252 + } //Z#253 /* Asia/Brunei */ :table { trans:intvector { -1383464380, -1167636600 } typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 } typeMap:bin { "0102" } - } //Z#253 - /* Asia/Calcutta */ :int { 285 } //Z#254 + } //Z#254 + /* Asia/Calcutta */ :int { 286 } //Z#255 /* Asia/Chita */ :table { trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800, 1459015200 } typeOffsets:intvector { 27232, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" } - } //Z#255 + } //Z#256 /* Asia/Choibalsan */ :table { - trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200 } + trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200, 1458928800, 1474642800 } typeOffsets:intvector { 27480, 0, 25200, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 } - typeMap:bin { "01020504050405040504050405040504050405040504050405040504050405040504050405040504050405040504020302" } - finalRule { "Mongol" } - finalRaw:int { 28800 } - finalYear:int { 2016 } - } //Z#256 - /* Asia/Chongqing */ :int { 312 } //Z#257 - /* Asia/Chungking */ :int { 312 } //Z#258 + typeMap:bin { "010205040504050405040504050405040504050405040504050405040504050405040504050405040504050405040203020302" } + } //Z#257 + /* Asia/Chongqing */ :int { 313 } //Z#258 + /* Asia/Chungking */ :int { 313 } //Z#259 /* Asia/Colombo */ :table { transPre32:intvector { -1, 1454807332 } trans:intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 } typeOffsets:intvector { 19164, 0, 19172, 0, 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 } typeMap:bin { "0102030402060502" } - } //Z#259 - /* Asia/Dacca */ :int { 262 } //Z#260 + } //Z#260 + /* Asia/Dacca */ :int { 263 } //Z#261 /* Asia/Damascus */ :table { trans:intvector { -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1225486800, 1238104800, 1256850000, 1270159200, 1288299600, 1301608800, 1319749200, 1333058400, 1351198800 } typeOffsets:intvector { 8712, 0, 7200, 0, 7200, 3600 } @@ -1337,35 +1340,35 @@ zoneinfo64:table(nofallback) { finalRule { "Syria" } finalRaw:int { 7200 } finalYear:int { 2013 } - } //Z#261 + } //Z#262 /* Asia/Dhaka */ :table { transPre32:intvector { -1, 1770423996 } trans:intvector { -891582800, -872058600, -862637400, -576138600, 1245430800, 1262278800 } typeOffsets:intvector { 21700, 0, 19800, 0, 21200, 0, 21600, 0, 21600, 3600, 23400, 0 } typeMap:bin { "02050105030403" } - links:intvector { 260, 262, 371 } - } //Z#262 + links:intvector { 261, 263, 372 } + } //Z#263 /* Asia/Dili */ :table { trans:intvector { -1830414140, -879152400, 199897200, 969120000 } typeOffsets:intvector { 30140, 0, 28800, 0, 32400, 0 } typeMap:bin { "01020102" } - } //Z#263 + } //Z#264 /* Asia/Dubai */ :table { trans:intvector { -1577936472 } typeOffsets:intvector { 13272, 0, 14400, 0 } typeMap:bin { "01" } - links:intvector { 264, 295 } - } //Z#264 + links:intvector { 265, 296 } + } //Z#265 /* Asia/Dushanbe */ :table { trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 } typeOffsets:intvector { 16512, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201" } - } //Z#265 + } //Z#266 /* Asia/Famagusta */ :table { trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000 } typeOffsets:intvector { 8148, 0, 7200, 0, 7200, 3600, 10800, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } - } //Z#266 + } //Z#267 /* Asia/Gaza */ :table { transPre32:intvector { -1, 2109557424 } trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 } @@ -1374,8 +1377,8 @@ zoneinfo64:table(nofallback) { finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2017 } - } //Z#267 - /* Asia/Harbin */ :int { 312 } //Z#268 + } //Z#268 + /* Asia/Harbin */ :int { 313 } //Z#269 /* Asia/Hebron */ :table { transPre32:intvector { -1, 2109557273 } trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 } @@ -1384,43 +1387,40 @@ zoneinfo64:table(nofallback) { finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2017 } - } //Z#269 + } //Z#270 /* Asia/Ho_Chi_Minh */ :table { trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 } typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 } typeMap:bin { "020103040103010301" } - links:intvector { 270, 308, 628 } - } //Z#270 + links:intvector { 271, 309, 629 } + } //Z#271 /* Asia/Hong_Kong */ :table { trans:intvector { -2056693002, -907389000, -891667800, -884246400, -766746000, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542352600, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 } typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 271, 509 } - } //Z#271 + links:intvector { 272, 510 } + } //Z#272 /* Asia/Hovd */ :table { - trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800 } + trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 } typeOffsets:intvector { 21996, 0, 21600, 0, 25200, 0, 25200, 3600 } - typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - finalRule { "Mongol" } - finalRaw:int { 25200 } - finalYear:int { 2016 } - } //Z#272 + typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } + } //Z#273 /* Asia/Irkutsk */ :table { trans:intvector { -1575874625, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701805600, 717530400, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200, 828208800, 846352800, 859658400, 877802400, 891108000, 909252000, 922557600, 941306400, 954007200, 972756000, 985456800, 1004205600, 1017511200, 1035655200, 1048960800, 1067104800, 1080410400, 1099159200, 1111860000, 1130608800, 1143309600, 1162058400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200, 1256407200, 1269712800, 1288461600, 1301162400, 1414256400 } typeOffsets:intvector { 25025, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#273 - /* Asia/Istanbul */ :int { 456 } //Z#274 + } //Z#274 + /* Asia/Istanbul */ :int { 457 } //Z#275 /* Asia/Jakarta */ :table { trans:intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 } typeOffsets:intvector { 25632, 0, 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "02030503040301" } - } //Z#275 + } //Z#276 /* Asia/Jayapura */ :table { trans:intvector { -1172913768, -799491600, -189423000 } typeOffsets:intvector { 33768, 0, 32400, 0, 34200, 0 } typeMap:bin { "010201" } - } //Z#276 + } //Z#277 /* Asia/Jerusalem */ :table { transPre32:intvector { -1, 1454818042 } trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 } @@ -1429,87 +1429,87 @@ zoneinfo64:table(nofallback) { finalRule { "Zion" } finalRaw:int { 7200 } finalYear:int { 2014 } - links:intvector { 277, 319, 525 } - } //Z#277 + links:intvector { 278, 320, 526 } + } //Z#278 /* Asia/Kabul */ :table { transPre32:intvector { -1, 1770429088 } trans:intvector { -788932800 } typeOffsets:intvector { 16608, 0, 14400, 0, 16200, 0 } typeMap:bin { "0102" } - } //Z#278 + } //Z#279 /* Asia/Kamchatka */ :table { trans:intvector { -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 } typeOffsets:intvector { 38076, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#279 + } //Z#280 /* Asia/Karachi */ :table { trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 } typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 } typeMap:bin { "03040301020102010201" } - links:intvector { 280, 543 } - } //Z#280 - /* Asia/Kashgar */ :int { 327 } //Z#281 + links:intvector { 281, 544 } + } //Z#281 + /* Asia/Kashgar */ :int { 328 } //Z#282 /* Asia/Kathmandu */ :table { trans:intvector { -1577943676, 504901800 } typeOffsets:intvector { 20476, 0, 19800, 0, 20700, 0 } typeMap:bin { "0102" } - links:intvector { 282, 283 } - } //Z#282 - /* Asia/Katmandu */ :int { 282 } //Z#283 + links:intvector { 283, 284 } + } //Z#283 + /* Asia/Katmandu */ :int { 283 } //Z#284 /* Asia/Khandyga */ :table { trans:intvector { -1579424533, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1072882800, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1315832400, 1414252800 } typeOffsets:intvector { 32533, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403050605060506050605060506050605070503" } - } //Z#284 + } //Z#285 /* Asia/Kolkata */ :table { transPre32:intvector { -1, 1454805288 } trans:intvector { -891582800, -872058600, -862637400, -764145000 } typeOffsets:intvector { 21208, 0, 19800, 0, 19800, 3600, 21200, 0, 23400, 0 } typeMap:bin { "0304010201" } - links:intvector { 254, 285, 511 } - } //Z#285 + links:intvector { 255, 286, 512 } + } //Z#286 /* Asia/Krasnoyarsk */ :table { trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 } typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#286 + } //Z#287 /* Asia/Kuala_Lumpur */ :table { transPre32:intvector { -1, 2117490090 } trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "0102030405070506" } - } //Z#287 + } //Z#288 /* Asia/Kuching */ :table { trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 } typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 } typeMap:bin { "010203020302030203020302030203020402" } - } //Z#288 - /* Asia/Kuwait */ :int { 307 } //Z#289 - /* Asia/Macao */ :int { 291 } //Z#290 + } //Z#289 + /* Asia/Kuwait */ :int { 308 } //Z#290 + /* Asia/Macao */ :int { 292 } //Z#291 /* Asia/Macau */ :table { trans:intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 } typeOffsets:intvector { 27260, 0, 28800, 0, 28800, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 290, 291 } - } //Z#291 + links:intvector { 291, 292 } + } //Z#292 /* Asia/Magadan */ :table { trans:intvector { -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600, 1461427200 } typeOffsets:intvector { 36192, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" } - } //Z#292 + } //Z#293 /* Asia/Makassar */ :table { trans:intvector { -1172908656, -880272000, -766054800 } typeOffsets:intvector { 28656, 0, 28800, 0, 32400, 0 } typeMap:bin { "010201" } - links:intvector { 293, 324 } - } //Z#293 + links:intvector { 294, 325 } + } //Z#294 /* Asia/Manila */ :table { transPre32:intvector { -1, 350346256, -1, 2065645456 } trans:intvector { -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 } typeOffsets:intvector { -57360, 0, 28800, 0, 28800, 3600, 29040, 0, 32400, 0 } typeMap:bin { "03010201040102010201" } - } //Z#294 - /* Asia/Muscat */ :int { 264 } //Z#295 + } //Z#295 + /* Asia/Muscat */ :int { 265 } //Z#296 /* Asia/Nicosia */ :table { trans:intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 } typeOffsets:intvector { 8008, 0, 7200, 0, 7200, 3600 } @@ -1517,109 +1517,109 @@ zoneinfo64:table(nofallback) { finalRule { "EUAsia" } finalRaw:int { 7200 } finalYear:int { 2000 } - links:intvector { 296, 471 } - } //Z#296 + links:intvector { 297, 472 } + } //Z#297 /* Asia/Novokuznetsk */ :table { trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 } typeOffsets:intvector { 20928, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#297 + } //Z#298 /* Asia/Novosibirsk */ :table { trans:intvector { -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1469304000 } typeOffsets:intvector { 19900, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#298 + } //Z#299 /* Asia/Omsk */ :table { trans:intvector { -1582088010, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600 } typeOffsets:intvector { 17610, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600, 25200, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#299 - /* Asia/Oral */ :table { - trans:intvector { -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } - typeOffsets:intvector { 12324, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } - typeMap:bin { "010304050403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010203" } } //Z#300 - /* Asia/Phnom_Penh */ :int { 249 } //Z#301 + /* Asia/Oral */ :table { + trans:intvector { -1441164324, -1247540400, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } + typeOffsets:intvector { 12324, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } + typeMap:bin { "010405060504050405040504050405040504030203020302040302030203020302030203020302030203020302030203020304" } + } //Z#301 + /* Asia/Phnom_Penh */ :int { 250 } //Z#302 /* Asia/Pontianak */ :table { trans:intvector { -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 } typeOffsets:intvector { 26240, 0, 25200, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "02040203020301" } - } //Z#302 + } //Z#303 /* Asia/Pyongyang */ :table { trans:intvector { -1948782180, -1830414600, 1439564400 } typeOffsets:intvector { 30180, 0, 30600, 0, 32400, 0 } typeMap:bin { "010201" } - } //Z#303 + } //Z#304 /* Asia/Qatar */ :table { trans:intvector { -1577935568, 76190400 } typeOffsets:intvector { 12368, 0, 10800, 0, 14400, 0 } typeMap:bin { "0201" } - links:intvector { 247, 304 } - } //Z#304 + links:intvector { 248, 305 } + } //Z#305 /* Asia/Qyzylorda */ :table { trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 } typeOffsets:intvector { 15712, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010304050403040304030403040304030403040304030203050403040304030403040304030403040304030403040304030405" } - } //Z#305 - /* Asia/Rangoon */ :int { 332 } //Z#306 + } //Z#306 + /* Asia/Rangoon */ :int { 333 } //Z#307 /* Asia/Riyadh */ :table { trans:intvector { -719636812 } typeOffsets:intvector { 11212, 0, 10800, 0 } typeMap:bin { "01" } - links:intvector { 237, 289, 307 } - } //Z#307 - /* Asia/Saigon */ :int { 270 } //Z#308 + links:intvector { 238, 290, 308 } + } //Z#308 + /* Asia/Saigon */ :int { 271 } //Z#309 /* Asia/Sakhalin */ :table { trans:intvector { -2031039048, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200, 1459008000 } typeOffsets:intvector { 34248, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 } typeMap:bin { "010405040504050405040504050405040504050405040302040504050405040504050403020302030203020302030203020302030203020302030203020302040204" } - } //Z#309 + } //Z#310 /* Asia/Samarkand */ :table { trans:intvector { -1441168073, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686091600 } typeOffsets:intvector { 16073, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010203040302030203020302030203020302030203020302" } - } //Z#310 + } //Z#311 /* Asia/Seoul */ :table { trans:intvector { -1948782472, -1830414600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 } typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 } typeMap:bin { "0103010201020102010201020102010304030403" } - links:intvector { 311, 595 } - } //Z#311 + links:intvector { 312, 596 } + } //Z#312 /* Asia/Shanghai */ :table { transPre32:intvector { -1, 2117485353 } trans:intvector { -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 } typeMap:bin { "0102010201020102010201020102010201" } - links:intvector { 257, 258, 268, 312, 381, 545 } - } //Z#312 + links:intvector { 258, 259, 269, 313, 382, 546 } + } //Z#313 /* Asia/Singapore */ :table { trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "01020304060405" } - links:intvector { 313, 597 } - } //Z#313 + links:intvector { 314, 598 } + } //Z#314 /* Asia/Srednekolymsk */ :table { trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 } typeOffsets:intvector { 36892, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#314 + } //Z#315 /* Asia/Taipei */ :table { transPre32:intvector { -1, 1959718936 } trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 } typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 315, 594 } - } //Z#315 + links:intvector { 316, 595 } + } //Z#316 /* Asia/Tashkent */ :table { trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 } typeOffsets:intvector { 16631, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201" } - } //Z#316 + } //Z#317 /* Asia/Tbilisi */ :table { trans:intvector { -1441162751, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 } typeOffsets:intvector { 10751, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" } - } //Z#317 + } //Z#318 /* Asia/Tehran */ :table { trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800 } typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 } @@ -1627,78 +1627,75 @@ zoneinfo64:table(nofallback) { finalRule { "Iran" } finalRaw:int { 12600 } finalYear:int { 2037 } - links:intvector { 318, 524 } - } //Z#318 - /* Asia/Tel_Aviv */ :int { 277 } //Z#319 - /* Asia/Thimbu */ :int { 321 } //Z#320 + links:intvector { 319, 525 } + } //Z#319 + /* Asia/Tel_Aviv */ :int { 278 } //Z#320 + /* Asia/Thimbu */ :int { 322 } //Z#321 /* Asia/Thimphu */ :table { trans:intvector { -706341516, 560025000 } typeOffsets:intvector { 21516, 0, 19800, 0, 21600, 0 } typeMap:bin { "0102" } - links:intvector { 320, 321 } - } //Z#321 + links:intvector { 321, 322 } + } //Z#322 /* Asia/Tokyo */ :table { transPre32:intvector { -1, 1707254896 } trans:intvector { -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 } typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 } typeMap:bin { "010201020102010201" } - links:intvector { 322, 526, 528 } - } //Z#322 + links:intvector { 323, 527, 529 } + } //Z#323 /* Asia/Tomsk */ :table { trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 } typeOffsets:intvector { 20391, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304020102010201020102010201020102010201030103" } - } //Z#323 - /* Asia/Ujung_Pandang */ :int { 293 } //Z#324 + } //Z#324 + /* Asia/Ujung_Pandang */ :int { 294 } //Z#325 /* Asia/Ulaanbaatar */ :table { - trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200 } + trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200, 1458928800, 1474642800 } typeOffsets:intvector { 25652, 0, 25200, 0, 28800, 0, 28800, 3600 } - typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - finalRule { "Mongol" } - finalRaw:int { 28800 } - finalYear:int { 2016 } - links:intvector { 325, 326 } - } //Z#325 - /* Asia/Ulan_Bator */ :int { 325 } //Z#326 + typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } + links:intvector { 326, 327 } + } //Z#326 + /* Asia/Ulan_Bator */ :int { 326 } //Z#327 /* Asia/Urumqi */ :table { trans:intvector { -1325483420 } typeOffsets:intvector { 21020, 0, 21600, 0 } typeMap:bin { "01" } - links:intvector { 281, 327 } - } //Z#327 + links:intvector { 282, 328 } + } //Z#328 /* Asia/Ust-Nera */ :table { trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 } typeOffsets:intvector { 34374, 0, 28800, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "010206050605060506050605060506050605060506050403050605060506050605060506050605060506050605060506050605060506050605060506050605070503" } - } //Z#328 - /* Asia/Vientiane */ :int { 249 } //Z#329 + } //Z#329 + /* Asia/Vientiane */ :int { 250 } //Z#330 /* Asia/Vladivostok */ :table { trans:intvector { -1487321251, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701798400, 717523200, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200 } typeOffsets:intvector { 31651, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#330 + } //Z#331 /* Asia/Yakutsk */ :table { trans:intvector { -1579423138, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800 } typeOffsets:intvector { 31138, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#331 + } //Z#332 /* Asia/Yangon */ :table { trans:intvector { -1577946280, -873268200, -778410000 } typeOffsets:intvector { 23080, 0, 23400, 0, 32400, 0 } typeMap:bin { "010201" } - links:intvector { 306, 332 } - } //Z#332 + links:intvector { 307, 333 } + } //Z#333 /* Asia/Yekaterinburg */ :table { trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 } typeOffsets:intvector { 14553, 0, 13505, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010204050405040504050405040504050405040504050403020405040504050405040504050405040504050405040504050405040504050405040504050405040604" } - } //Z#333 + } //Z#334 /* Asia/Yerevan */ :table { trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 } typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" } - links:intvector { 334, 538 } - } //Z#334 + links:intvector { 335, 539 } + } //Z#335 /* Atlantic/Azores */ :table { transPre32:intvector { -1, 1581063056 } trans:intvector { -1830377128, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -1707,7 +1704,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { -3600 } finalYear:int { 1997 } - } //Z#335 + } //Z#336 /* Atlantic/Bermuda */ :table { trans:intvector { -1262281242, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 } typeOffsets:intvector { -15558, 0, -14400, 0, -14400, 3600 } @@ -1715,7 +1712,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -14400 } finalYear:int { 2008 } - } //Z#336 + } //Z#337 /* Atlantic/Canary */ :table { trans:intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 } @@ -1723,13 +1720,13 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#337 + } //Z#338 /* Atlantic/Cape_Verde */ :table { trans:intvector { -1988144756, -862610400, -764118000, 186120000 } typeOffsets:intvector { -5644, 0, -7200, 0, -7200, 3600, -3600, 0 } typeMap:bin { "01020103" } - } //Z#338 - /* Atlantic/Faeroe */ :int { 340 } //Z#339 + } //Z#339 + /* Atlantic/Faeroe */ :int { 341 } //Z#340 /* Atlantic/Faroe */ :table { trans:intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -1624, 0, 0, 0, 0, 3600 } @@ -1737,9 +1734,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 339, 340 } - } //Z#340 - /* Atlantic/Jan_Mayen */ :int { 472 } //Z#341 + links:intvector { 340, 341 } + } //Z#341 + /* Atlantic/Jan_Mayen */ :int { 473 } //Z#342 /* Atlantic/Madeira */ :table { trans:intvector { -1830379944, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 } @@ -1747,25 +1744,25 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#342 + } //Z#343 /* Atlantic/Reykjavik */ :table { trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 } typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 } typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - links:intvector { 343, 512 } - } //Z#343 + links:intvector { 344, 513 } + } //Z#344 /* Atlantic/South_Georgia */ :table { transPre32:intvector { -1, 1770454464 } typeOffsets:intvector { -8768, 0, -7200, 0 } typeMap:bin { "01" } - } //Z#344 - /* Atlantic/St_Helena */ :int { 5 } //Z#345 + } //Z#345 + /* Atlantic/St_Helena */ :int { 5 } //Z#346 /* Atlantic/Stanley */ :table { trans:intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400, 1019365200, 1030860000, 1050814800, 1062914400, 1082264400, 1094364000, 1113714000, 1125813600, 1145163600, 1157263200, 1176613200, 1188712800, 1208667600, 1220767200, 1240117200, 1252216800, 1271566800, 1283666400 } typeOffsets:intvector { -13884, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010304030403020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - } //Z#346 - /* Australia/ACT */ :int { 365 } //Z#347 + } //Z#347 + /* Australia/ACT */ :int { 366 } //Z#348 /* Australia/Adelaide */ :table { transPre32:intvector { -1, 1930857236, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 } @@ -1774,15 +1771,15 @@ zoneinfo64:table(nofallback) { finalRule { "AS" } finalRaw:int { 34200 } finalYear:int { 2009 } - links:intvector { 348, 364 } - } //Z#348 + links:intvector { 349, 365 } + } //Z#349 /* Australia/Brisbane */ :table { transPre32:intvector { -1, 1928175368 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 } typeOffsets:intvector { 36728, 0, 36000, 0, 36000, 3600 } typeMap:bin { "0102010201020102010201020102010201" } - links:intvector { 349, 363 } - } //Z#349 + links:intvector { 350, 364 } + } //Z#350 /* Australia/Broken_Hill */ :table { transPre32:intvector { -1, 1930856548, -1, 1980016096, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 } @@ -1791,9 +1788,9 @@ zoneinfo64:table(nofallback) { finalRule { "AS" } finalRaw:int { 34200 } finalYear:int { 2009 } - links:intvector { 350, 369 } - } //Z#350 - /* Australia/Canberra */ :int { 365 } //Z#351 + links:intvector { 351, 370 } + } //Z#351 + /* Australia/Canberra */ :int { 366 } //Z#352 /* Australia/Currie */ :table { transPre32:intvector { -1, 1949172768 } trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 } @@ -1802,20 +1799,20 @@ zoneinfo64:table(nofallback) { finalRule { "AT" } finalRaw:int { 36000 } finalYear:int { 2009 } - } //Z#352 + } //Z#353 /* Australia/Darwin */ :table { transPre32:intvector { -1, 1930859096, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 } typeOffsets:intvector { 31400, 0, 32400, 0, 34200, 0, 34200, 3600 } typeMap:bin { "01020302030203020302" } - links:intvector { 0, 353, 361 } - } //Z#353 + links:intvector { 0, 354, 362 } + } //Z#354 /* Australia/Eucla */ :table { transPre32:intvector { -1, 1957038768 } trans:intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 } typeOffsets:intvector { 30928, 0, 31500, 0, 31500, 3600 } typeMap:bin { "01020102010201020102010201020102010201" } - } //Z#354 + } //Z#355 /* Australia/Hobart */ :table { transPre32:intvector { -1, 1949171940 } trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 } @@ -1824,15 +1821,15 @@ zoneinfo64:table(nofallback) { finalRule { "AT" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 355, 366 } - } //Z#355 - /* Australia/LHI */ :int { 358 } //Z#356 + links:intvector { 356, 367 } + } //Z#356 + /* Australia/LHI */ :int { 359 } //Z#357 /* Australia/Lindeman */ :table { transPre32:intvector { -1, 1928176340 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200 } typeOffsets:intvector { 35756, 0, 36000, 0, 36000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - } //Z#357 + } //Z#358 /* Australia/Lord_Howe */ :table { transPre32:intvector { -1, 1930852316 } trans:intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 } @@ -1841,8 +1838,8 @@ zoneinfo64:table(nofallback) { finalRule { "LH" } finalRaw:int { 37800 } finalYear:int { 2009 } - links:intvector { 356, 358 } - } //Z#358 + links:intvector { 357, 359 } + } //Z#359 /* Australia/Melbourne */ :table { transPre32:intvector { -1, 1930855704 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 } @@ -1851,19 +1848,19 @@ zoneinfo64:table(nofallback) { finalRule { "AV" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 359, 367 } - } //Z#359 - /* Australia/NSW */ :int { 365 } //Z#360 - /* Australia/North */ :int { 353 } //Z#361 + links:intvector { 360, 368 } + } //Z#360 + /* Australia/NSW */ :int { 366 } //Z#361 + /* Australia/North */ :int { 354 } //Z#362 /* Australia/Perth */ :table { transPre32:intvector { -1, 1957041892 } trans:intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 } typeOffsets:intvector { 27804, 0, 28800, 0, 28800, 3600 } typeMap:bin { "01020102010201020102010201020102010201" } - links:intvector { 362, 368 } - } //Z#362 - /* Australia/Queensland */ :int { 349 } //Z#363 - /* Australia/South */ :int { 348 } //Z#364 + links:intvector { 363, 369 } + } //Z#363 + /* Australia/Queensland */ :int { 350 } //Z#364 + /* Australia/South */ :int { 349 } //Z#365 /* Australia/Sydney */ :table { transPre32:intvector { -1, 1930854204 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 } @@ -1872,19 +1869,19 @@ zoneinfo64:table(nofallback) { finalRule { "AN" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 1, 347, 351, 360, 365 } - } //Z#365 - /* Australia/Tasmania */ :int { 355 } //Z#366 - /* Australia/Victoria */ :int { 359 } //Z#367 - /* Australia/West */ :int { 362 } //Z#368 - /* Australia/Yancowinna */ :int { 350 } //Z#369 - /* BET */ :int { 201 } //Z#370 - /* BST */ :int { 262 } //Z#371 - /* Brazil/Acre */ :int { 195 } //Z#372 - /* Brazil/DeNoronha */ :int { 176 } //Z#373 - /* Brazil/East */ :int { 201 } //Z#374 - /* Brazil/West */ :int { 156 } //Z#375 - /* CAT */ :int { 43 } //Z#376 + links:intvector { 1, 348, 352, 361, 366 } + } //Z#366 + /* Australia/Tasmania */ :int { 356 } //Z#367 + /* Australia/Victoria */ :int { 360 } //Z#368 + /* Australia/West */ :int { 363 } //Z#369 + /* Australia/Yancowinna */ :int { 351 } //Z#370 + /* BET */ :int { 202 } //Z#371 + /* BST */ :int { 263 } //Z#372 + /* Brazil/Acre */ :int { 196 } //Z#373 + /* Brazil/DeNoronha */ :int { 176 } //Z#374 + /* Brazil/East */ :int { 202 } //Z#375 + /* Brazil/West */ :int { 156 } //Z#376 + /* CAT */ :int { 43 } //Z#377 /* CET */ :table { trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 3600, 0, 3600, 3600 } @@ -1892,9 +1889,9 @@ zoneinfo64:table(nofallback) { finalRule { "C-Eur" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#377 - /* CNT */ :int { 206 } //Z#378 - /* CST */ :int { 98 } //Z#379 + } //Z#378 + /* CNT */ :int { 207 } //Z#379 + /* CST */ :int { 98 } //Z#380 /* CST6CDT */ :table { trans:intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { -21600, 0, -21600, 3600 } @@ -1902,22 +1899,22 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#380 - /* CTT */ :int { 312 } //Z#381 - /* Canada/Atlantic */ :int { 128 } //Z#382 - /* Canada/Central */ :int { 221 } //Z#383 - /* Canada/East-Saskatchewan */ :int { 193 } //Z#384 - /* Canada/Eastern */ :int { 216 } //Z#385 - /* Canada/Mountain */ :int { 112 } //Z#386 - /* Canada/Newfoundland */ :int { 206 } //Z#387 - /* Canada/Pacific */ :int { 218 } //Z#388 - /* Canada/Saskatchewan */ :int { 193 } //Z#389 - /* Canada/Yukon */ :int { 220 } //Z#390 - /* Chile/Continental */ :int { 199 } //Z#391 - /* Chile/EasterIsland */ :int { 554 } //Z#392 - /* Cuba */ :int { 129 } //Z#393 - /* EAT */ :int { 48 } //Z#394 - /* ECT */ :int { 473 } //Z#395 + } //Z#381 + /* CTT */ :int { 313 } //Z#382 + /* Canada/Atlantic */ :int { 128 } //Z#383 + /* Canada/Central */ :int { 222 } //Z#384 + /* Canada/East-Saskatchewan */ :int { 194 } //Z#385 + /* Canada/Eastern */ :int { 217 } //Z#386 + /* Canada/Mountain */ :int { 112 } //Z#387 + /* Canada/Newfoundland */ :int { 207 } //Z#388 + /* Canada/Pacific */ :int { 219 } //Z#389 + /* Canada/Saskatchewan */ :int { 194 } //Z#390 + /* Canada/Yukon */ :int { 221 } //Z#391 + /* Chile/Continental */ :int { 200 } //Z#392 + /* Chile/EasterIsland */ :int { 555 } //Z#393 + /* Cuba */ :int { 129 } //Z#394 + /* EAT */ :int { 48 } //Z#395 + /* ECT */ :int { 474 } //Z#396 /* EET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 7200, 0, 7200, 3600 } @@ -1925,10 +1922,10 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#396 + } //Z#397 /* EST */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#397 + } //Z#398 /* EST5EDT */ :table { trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } typeOffsets:intvector { -18000, 0, -18000, 3600 } @@ -1936,108 +1933,108 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - } //Z#398 - /* Egypt */ :int { 18 } //Z#399 - /* Eire */ :int { 451 } //Z#400 + } //Z#399 + /* Egypt */ :int { 18 } //Z#400 + /* Eire */ :int { 452 } //Z#401 /* Etc/GMT */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 401, 402, 415, 430, 431, 503, 504, 505, 506, 507 } - } //Z#401 - /* Etc/GMT+0 */ :int { 401 } //Z#402 + links:intvector { 402, 403, 416, 431, 432, 504, 505, 506, 507, 508 } + } //Z#402 + /* Etc/GMT+0 */ :int { 402 } //Z#403 /* Etc/GMT+1 */ :table { typeOffsets:intvector { -3600, 0 } - } //Z#403 + } //Z#404 /* Etc/GMT+10 */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#404 + } //Z#405 /* Etc/GMT+11 */ :table { typeOffsets:intvector { -39600, 0 } - } //Z#405 + } //Z#406 /* Etc/GMT+12 */ :table { typeOffsets:intvector { -43200, 0 } - } //Z#406 + } //Z#407 /* Etc/GMT+2 */ :table { typeOffsets:intvector { -7200, 0 } - } //Z#407 + } //Z#408 /* Etc/GMT+3 */ :table { typeOffsets:intvector { -10800, 0 } - } //Z#408 + } //Z#409 /* Etc/GMT+4 */ :table { typeOffsets:intvector { -14400, 0 } - } //Z#409 + } //Z#410 /* Etc/GMT+5 */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#410 + } //Z#411 /* Etc/GMT+6 */ :table { typeOffsets:intvector { -21600, 0 } - } //Z#411 + } //Z#412 /* Etc/GMT+7 */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#412 + } //Z#413 /* Etc/GMT+8 */ :table { typeOffsets:intvector { -28800, 0 } - } //Z#413 + } //Z#414 /* Etc/GMT+9 */ :table { typeOffsets:intvector { -32400, 0 } - } //Z#414 - /* Etc/GMT-0 */ :int { 401 } //Z#415 + } //Z#415 + /* Etc/GMT-0 */ :int { 402 } //Z#416 /* Etc/GMT-1 */ :table { typeOffsets:intvector { 3600, 0 } - } //Z#416 + } //Z#417 /* Etc/GMT-10 */ :table { typeOffsets:intvector { 36000, 0 } - } //Z#417 + } //Z#418 /* Etc/GMT-11 */ :table { typeOffsets:intvector { 39600, 0 } - } //Z#418 + } //Z#419 /* Etc/GMT-12 */ :table { typeOffsets:intvector { 43200, 0 } - } //Z#419 + } //Z#420 /* Etc/GMT-13 */ :table { typeOffsets:intvector { 46800, 0 } - } //Z#420 + } //Z#421 /* Etc/GMT-14 */ :table { typeOffsets:intvector { 50400, 0 } - } //Z#421 + } //Z#422 /* Etc/GMT-2 */ :table { typeOffsets:intvector { 7200, 0 } - } //Z#422 + } //Z#423 /* Etc/GMT-3 */ :table { typeOffsets:intvector { 10800, 0 } - } //Z#423 + } //Z#424 /* Etc/GMT-4 */ :table { typeOffsets:intvector { 14400, 0 } - } //Z#424 + } //Z#425 /* Etc/GMT-5 */ :table { typeOffsets:intvector { 18000, 0 } - } //Z#425 + } //Z#426 /* Etc/GMT-6 */ :table { typeOffsets:intvector { 21600, 0 } - } //Z#426 + } //Z#427 /* Etc/GMT-7 */ :table { typeOffsets:intvector { 25200, 0 } - } //Z#427 + } //Z#428 /* Etc/GMT-8 */ :table { typeOffsets:intvector { 28800, 0 } - } //Z#428 + } //Z#429 /* Etc/GMT-9 */ :table { typeOffsets:intvector { 32400, 0 } - } //Z#429 - /* Etc/GMT0 */ :int { 401 } //Z#430 - /* Etc/Greenwich */ :int { 401 } //Z#431 + } //Z#430 + /* Etc/GMT0 */ :int { 402 } //Z#431 + /* Etc/Greenwich */ :int { 402 } //Z#432 /* Etc/UCT */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 432, 612 } - } //Z#432 + links:intvector { 433, 613 } + } //Z#433 /* Etc/UTC */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 433, 434, 436, 626, 627, 631 } - } //Z#433 - /* Etc/Universal */ :int { 433 } //Z#434 + links:intvector { 434, 435, 437, 627, 628, 632 } + } //Z#434 + /* Etc/Universal */ :int { 434 } //Z#435 /* Etc/Unknown */ :table { typeOffsets:intvector { 0, 0 } - } //Z#435 - /* Etc/Zulu */ :int { 433 } //Z#436 + } //Z#436 + /* Etc/Zulu */ :int { 434 } //Z#437 /* Europe/Amsterdam */ :table { trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 } @@ -2045,7 +2042,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#437 + } //Z#438 /* Europe/Andorra */ :table { transPre32:intvector { -1, 2117514132 } trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2054,12 +2051,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#438 + } //Z#439 /* Europe/Astrakhan */ :table { trans:intvector { -1441249932, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 } typeOffsets:intvector { 11532, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "01030403040304030403040304030403040302010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#439 + } //Z#440 /* Europe/Athens */ :table { trans:intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5692, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } @@ -2067,8 +2064,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#440 - /* Europe/Belfast */ :int { 463 } //Z#441 + } //Z#441 + /* Europe/Belfast */ :int { 464 } //Z#442 /* Europe/Belgrade */ :table { transPre32:intvector { -1, 1581051976 } trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2077,8 +2074,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 442, 462, 474, 480, 483, 497 } - } //Z#442 + links:intvector { 443, 463, 475, 481, 484, 498 } + } //Z#443 /* Europe/Berlin */ :table { transPre32:intvector { -1, 1872912888 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2087,8 +2084,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#443 - /* Europe/Bratislava */ :int { 475 } //Z#444 + } //Z#444 + /* Europe/Bratislava */ :int { 476 } //Z#445 /* Europe/Brussels */ :table { transPre32:intvector { -1, 1844014246 } trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2097,7 +2094,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#445 + } //Z#446 /* Europe/Bucharest */ :table { trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 } typeOffsets:intvector { 6264, 0, 7200, 0, 7200, 3600 } @@ -2105,7 +2102,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#446 + } //Z#447 /* Europe/Budapest */ :table { transPre32:intvector { -1, 1794028316 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1633212000, -1618700400, -1600466400, -1581202800, -906771600, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762660000, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2114,8 +2111,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#447 - /* Europe/Busingen */ :int { 499 } //Z#448 + } //Z#448 + /* Europe/Busingen */ :int { 500 } //Z#449 /* Europe/Chisinau */ :table { transPre32:intvector { -1, 1454819576 } trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 } @@ -2124,8 +2121,8 @@ zoneinfo64:table(nofallback) { finalRule { "Moldova" } finalRaw:int { 7200 } finalYear:int { 1998 } - links:intvector { 449, 488 } - } //Z#449 + links:intvector { 450, 489 } + } //Z#450 /* Europe/Copenhagen */ :table { transPre32:intvector { -1, 1896673076 } trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2134,7 +2131,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#450 + } //Z#451 /* Europe/Dublin */ :table { transPre32:intvector { -1, 1473317596 } trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 } @@ -2143,8 +2140,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 400, 451 } - } //Z#451 + links:intvector { 401, 452 } + } //Z#452 /* Europe/Gibraltar */ :table { transPre32:intvector { -1, 1473317380 } trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2153,8 +2150,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#452 - /* Europe/Guernsey */ :int { 463 } //Z#453 + } //Z#453 + /* Europe/Guernsey */ :int { 464 } //Z#454 /* Europe/Helsinki */ :table { trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 } @@ -2162,23 +2159,23 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - links:intvector { 454, 467 } - } //Z#454 - /* Europe/Isle_of_Man */ :int { 463 } //Z#455 + links:intvector { 455, 468 } + } //Z#455 + /* Europe/Isle_of_Man */ :int { 464 } //Z#456 /* Europe/Istanbul */ :table { transPre32:intvector { -1, 1454819544 } trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 } typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030504050405040504050403020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" } - links:intvector { 274, 456, 611 } - } //Z#456 - /* Europe/Jersey */ :int { 463 } //Z#457 + links:intvector { 275, 457, 612 } + } //Z#457 + /* Europe/Jersey */ :int { 464 } //Z#458 /* Europe/Kaliningrad */ :table { transPre32:intvector { -1, 1872911176 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 } typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "01020102010201020102010201030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#458 + } //Z#459 /* Europe/Kiev */ :table { trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2186,12 +2183,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#459 + } //Z#460 /* Europe/Kirov */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } - } //Z#460 + } //Z#461 /* Europe/Lisbon */ :table { trans:intvector { -1830381795, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2199,9 +2196,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 461, 593 } - } //Z#461 - /* Europe/Ljubljana */ :int { 442 } //Z#462 + links:intvector { 462, 594 } + } //Z#462 + /* Europe/Ljubljana */ :int { 443 } //Z#463 /* Europe/London */ :table { transPre32:intvector { -1, 442304971 } trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 } @@ -2210,8 +2207,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 441, 453, 455, 457, 463, 501, 502 } - } //Z#463 + links:intvector { 442, 454, 456, 458, 464, 502, 503 } + } //Z#464 /* Europe/Luxembourg */ :table { trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 } @@ -2219,16 +2216,16 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#464 + } //Z#465 /* Europe/Madrid */ :table { - transPre32:intvector { -1, 2117515380 } - trans:intvector { -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } + transPre32:intvector { -1, 2117514496 } + trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -884, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } - typeMap:bin { "01020102010201020102010201020102010201020102010203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" } + typeMap:bin { "0102010201020102010201020102010201020302010405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" } finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#465 + } //Z#466 /* Europe/Malta */ :table { transPre32:intvector { -1, 1891488612 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2237,14 +2234,14 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#466 - /* Europe/Mariehamn */ :int { 454 } //Z#467 + } //Z#467 + /* Europe/Mariehamn */ :int { 455 } //Z#468 /* Europe/Minsk */ :table { transPre32:intvector { -1, 1454819880 } trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 } typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" } - } //Z#468 + } //Z#469 /* Europe/Monaco */ :table { transPre32:intvector { -1, 1808287124 } trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2253,14 +2250,14 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#469 + } //Z#470 /* Europe/Moscow */ :table { trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 } typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" } - links:intvector { 470, 629 } - } //Z#470 - /* Europe/Nicosia */ :int { 296 } //Z#471 + links:intvector { 471, 630 } + } //Z#471 + /* Europe/Nicosia */ :int { 297 } //Z#472 /* Europe/Oslo */ :table { transPre32:intvector { -1, 1928209516 } trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2269,8 +2266,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 236, 341, 472 } - } //Z#472 + links:intvector { 237, 342, 473 } + } //Z#473 /* Europe/Paris */ :table { trans:intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2278,9 +2275,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 395, 473 } - } //Z#473 - /* Europe/Podgorica */ :int { 442 } //Z#474 + links:intvector { 396, 474 } + } //Z#474 + /* Europe/Podgorica */ :int { 443 } //Z#475 /* Europe/Prague */ :table { transPre32:intvector { -1, 1825565432 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2289,8 +2286,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 444, 475 } - } //Z#475 + links:intvector { 445, 476 } + } //Z#476 /* Europe/Riga */ :table { trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 } typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2298,7 +2295,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2002 } - } //Z#476 + } //Z#477 /* Europe/Rome */ :table { transPre32:intvector { -1, 1891402096 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2307,27 +2304,27 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 477, 479, 492 } - } //Z#477 + links:intvector { 478, 480, 493 } + } //Z#478 /* Europe/Samara */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 } typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" } - } //Z#478 - /* Europe/San_Marino */ :int { 477 } //Z#479 - /* Europe/Sarajevo */ :int { 442 } //Z#480 + } //Z#479 + /* Europe/San_Marino */ :int { 478 } //Z#480 + /* Europe/Sarajevo */ :int { 443 } //Z#481 /* Europe/Saratov */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 } typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#481 + } //Z#482 /* Europe/Simferopol */ :table { transPre32:intvector { -1, 1454818312 } trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 } typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 } typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" } - } //Z#482 - /* Europe/Skopje */ :int { 442 } //Z#483 + } //Z#483 + /* Europe/Skopje */ :int { 443 } //Z#484 /* Europe/Sofia */ :table { transPre32:intvector { -1, 1454820900, -1, 1925440280 } trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 } @@ -2336,7 +2333,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#484 + } //Z#485 /* Europe/Stockholm */ :table { transPre32:intvector { -1, 1423286164, -1, 2085974882 } trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2345,7 +2342,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#485 + } //Z#486 /* Europe/Tallinn */ :table { trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 } typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2353,7 +2350,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2003 } - } //Z#486 + } //Z#487 /* Europe/Tirane */ :table { trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 } @@ -2361,13 +2358,13 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#487 - /* Europe/Tiraspol */ :int { 449 } //Z#488 + } //Z#488 + /* Europe/Tiraspol */ :int { 450 } //Z#489 /* Europe/Ulyanovsk */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 } typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" } - } //Z#489 + } //Z#490 /* Europe/Uzhgorod */ :table { transPre32:intvector { -1, 1794027544 } trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } @@ -2376,9 +2373,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#490 - /* Europe/Vaduz */ :int { 499 } //Z#491 - /* Europe/Vatican */ :int { 477 } //Z#492 + } //Z#491 + /* Europe/Vaduz */ :int { 500 } //Z#492 + /* Europe/Vatican */ :int { 478 } //Z#493 /* Europe/Vienna */ :table { transPre32:intvector { -1, 1872912175 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2387,7 +2384,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#493 + } //Z#494 /* Europe/Vilnius */ :table { transPre32:intvector { -1, 1454820420 } trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 } @@ -2396,12 +2393,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2004 } - } //Z#494 + } //Z#495 /* Europe/Volgograd */ :table { trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } - } //Z#495 + } //Z#496 /* Europe/Warsaw */ :table { trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } @@ -2409,9 +2406,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 496, 592 } - } //Z#496 - /* Europe/Zagreb */ :int { 442 } //Z#497 + links:intvector { 497, 593 } + } //Z#497 + /* Europe/Zagreb */ :int { 443 } //Z#498 /* Europe/Zaporozhye */ :table { transPre32:intvector { -1, 1454818056 } trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } @@ -2420,7 +2417,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#498 + } //Z#499 /* Europe/Zurich */ :table { transPre32:intvector { -1, 619768448, -1, 1909720710 } trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2429,75 +2426,75 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 448, 491, 499 } - } //Z#499 + links:intvector { 449, 492, 500 } + } //Z#500 /* Factory */ :table { typeOffsets:intvector { 0, 0 } - } //Z#500 - /* GB */ :int { 463 } //Z#501 - /* GB-Eire */ :int { 463 } //Z#502 - /* GMT */ :int { 401 } //Z#503 - /* GMT+0 */ :int { 401 } //Z#504 - /* GMT-0 */ :int { 401 } //Z#505 - /* GMT0 */ :int { 401 } //Z#506 - /* Greenwich */ :int { 401 } //Z#507 + } //Z#501 + /* GB */ :int { 464 } //Z#502 + /* GB-Eire */ :int { 464 } //Z#503 + /* GMT */ :int { 402 } //Z#504 + /* GMT+0 */ :int { 402 } //Z#505 + /* GMT-0 */ :int { 402 } //Z#506 + /* GMT0 */ :int { 402 } //Z#507 + /* Greenwich */ :int { 402 } //Z#508 /* HST */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#508 - /* Hongkong */ :int { 271 } //Z#509 - /* IET */ :int { 131 } //Z#510 - /* IST */ :int { 285 } //Z#511 - /* Iceland */ :int { 343 } //Z#512 - /* Indian/Antananarivo */ :int { 48 } //Z#513 + } //Z#509 + /* Hongkong */ :int { 272 } //Z#510 + /* IET */ :int { 131 } //Z#511 + /* IST */ :int { 286 } //Z#512 + /* Iceland */ :int { 344 } //Z#513 + /* Indian/Antananarivo */ :int { 48 } //Z#514 /* Indian/Chagos */ :table { trans:intvector { -1988167780, 820436400 } typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 } typeMap:bin { "0102" } - } //Z#514 + } //Z#515 /* Indian/Christmas */ :table { transPre32:intvector { -1, 1930865124 } typeOffsets:intvector { 25372, 0, 25200, 0 } typeMap:bin { "01" } - } //Z#515 + } //Z#516 /* Indian/Cocos */ :table { transPre32:intvector { -1, 2085955236 } typeOffsets:intvector { 23260, 0, 23400, 0 } typeMap:bin { "01" } - } //Z#516 - /* Indian/Comoro */ :int { 48 } //Z#517 + } //Z#517 + /* Indian/Comoro */ :int { 48 } //Z#518 /* Indian/Kerguelen */ :table { trans:intvector { -631152000 } typeOffsets:intvector { 0, 0, 18000, 0 } typeMap:bin { "01" } - } //Z#518 + } //Z#519 /* Indian/Mahe */ :table { trans:intvector { -2006653308 } typeOffsets:intvector { 13308, 0, 14400, 0 } typeMap:bin { "01" } - } //Z#519 + } //Z#520 /* Indian/Maldives */ :table { trans:intvector { -315636840 } typeOffsets:intvector { 17640, 0, 18000, 0 } typeMap:bin { "01" } - } //Z#520 + } //Z#521 /* Indian/Mauritius */ :table { trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 } typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 } typeMap:bin { "0102010201" } - } //Z#521 - /* Indian/Mayotte */ :int { 48 } //Z#522 + } //Z#522 + /* Indian/Mayotte */ :int { 48 } //Z#523 /* Indian/Reunion */ :table { trans:intvector { -1848886912 } typeOffsets:intvector { 13312, 0, 14400, 0 } typeMap:bin { "01" } - } //Z#523 - /* Iran */ :int { 318 } //Z#524 - /* Israel */ :int { 277 } //Z#525 - /* JST */ :int { 322 } //Z#526 - /* Jamaica */ :int { 142 } //Z#527 - /* Japan */ :int { 322 } //Z#528 - /* Kwajalein */ :int { 568 } //Z#529 - /* Libya */ :int { 56 } //Z#530 + } //Z#524 + /* Iran */ :int { 319 } //Z#525 + /* Israel */ :int { 278 } //Z#526 + /* JST */ :int { 323 } //Z#527 + /* Jamaica */ :int { 142 } //Z#528 + /* Japan */ :int { 323 } //Z#529 + /* Kwajalein */ :int { 569 } //Z#530 + /* Libya */ :int { 56 } //Z#531 /* MET */ :table { trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 3600, 0, 3600, 3600 } @@ -2505,11 +2502,11 @@ zoneinfo64:table(nofallback) { finalRule { "C-Eur" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#531 - /* MIT */ :int { 549 } //Z#532 + } //Z#532 + /* MIT */ :int { 550 } //Z#533 /* MST */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#533 + } //Z#534 /* MST7MDT */ :table { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 } typeOffsets:intvector { -25200, 0, -25200, 3600 } @@ -2517,20 +2514,20 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - } //Z#534 - /* Mexico/BajaNorte */ :int { 215 } //Z#535 - /* Mexico/BajaSur */ :int { 160 } //Z#536 - /* Mexico/General */ :int { 165 } //Z#537 - /* NET */ :int { 334 } //Z#538 - /* NST */ :int { 550 } //Z#539 - /* NZ */ :int { 550 } //Z#540 - /* NZ-CHAT */ :int { 552 } //Z#541 - /* Navajo */ :int { 109 } //Z#542 - /* PLT */ :int { 280 } //Z#543 - /* PNT */ :int { 184 } //Z#544 - /* PRC */ :int { 312 } //Z#545 - /* PRT */ :int { 189 } //Z#546 - /* PST */ :int { 151 } //Z#547 + } //Z#535 + /* Mexico/BajaNorte */ :int { 216 } //Z#536 + /* Mexico/BajaSur */ :int { 160 } //Z#537 + /* Mexico/General */ :int { 165 } //Z#538 + /* NET */ :int { 335 } //Z#539 + /* NST */ :int { 551 } //Z#540 + /* NZ */ :int { 551 } //Z#541 + /* NZ-CHAT */ :int { 553 } //Z#542 + /* Navajo */ :int { 109 } //Z#543 + /* PLT */ :int { 281 } //Z#544 + /* PNT */ :int { 184 } //Z#545 + /* PRC */ :int { 313 } //Z#546 + /* PRT */ :int { 189 } //Z#547 + /* PST */ :int { 151 } //Z#548 /* PST8PDT */ :table { trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } typeOffsets:intvector { -28800, 0, -28800, 3600 } @@ -2538,7 +2535,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - } //Z#548 + } //Z#549 /* Pacific/Apia */ :table { transPre32:intvector { -1, 1439229312 } trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 } @@ -2547,8 +2544,8 @@ zoneinfo64:table(nofallback) { finalRule { "WS" } finalRaw:int { 46800 } finalYear:int { 2013 } - links:intvector { 532, 549 } - } //Z#549 + links:intvector { 533, 550 } + } //Z#550 /* Pacific/Auckland */ :table { transPre32:intvector { -1, 1102531752 } trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 } @@ -2557,14 +2554,14 @@ zoneinfo64:table(nofallback) { finalRule { "NZ" } finalRaw:int { 43200 } finalYear:int { 2009 } - links:intvector { 229, 232, 539, 540, 550 } - } //Z#550 + links:intvector { 230, 233, 540, 541, 551 } + } //Z#551 /* Pacific/Bougainville */ :table { transPre32:intvector { -1, 1454789160, -1, 1928176784 } trans:intvector { -868010400, -768906000, 1419696000 } typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 } typeMap:bin { "0203010304" } - } //Z#551 + } //Z#552 /* Pacific/Chatham */ :table { transPre32:intvector { -1, 1102529668 } trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 } @@ -2573,14 +2570,14 @@ zoneinfo64:table(nofallback) { finalRule { "Chatham" } finalRaw:int { 45900 } finalYear:int { 2009 } - links:intvector { 541, 552 } - } //Z#552 + links:intvector { 542, 553 } + } //Z#553 /* Pacific/Chuuk */ :table { transPre32:intvector { -1, 2117478068 } typeOffsets:intvector { 36428, 0, 36000, 0 } typeMap:bin { "01" } - links:intvector { 553, 588, 591 } - } //Z#553 + links:intvector { 554, 589, 592 } + } //Z#554 /* Pacific/Easter */ :table { trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } @@ -2588,25 +2585,25 @@ zoneinfo64:table(nofallback) { finalRule { "Chile" } finalRaw:int { -21600 } finalYear:int { 2017 } - links:intvector { 392, 554 } - } //Z#554 + links:intvector { 393, 555 } + } //Z#555 /* Pacific/Efate */ :table { trans:intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 } typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - } //Z#555 + } //Z#556 /* Pacific/Enderbury */ :table { transPre32:intvector { -1, 2117555556 } trans:intvector { 307627200, 788958000 } typeOffsets:intvector { -41060, 0, -43200, 0, -39600, 0, 46800, 0 } typeMap:bin { "010203" } - } //Z#556 + } //Z#557 /* Pacific/Fakaofo */ :table { transPre32:intvector { -1, 2117555592 } trans:intvector { 1325242800 } typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 } typeMap:bin { "0102" } - } //Z#557 + } //Z#558 /* Pacific/Fiji */ :table { trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000 } typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 } @@ -2614,143 +2611,143 @@ zoneinfo64:table(nofallback) { finalRule { "Fiji" } finalRaw:int { 43200 } finalYear:int { 2016 } - } //Z#558 + } //Z#559 /* Pacific/Funafuti */ :table { transPre32:intvector { -1, 2117471484 } typeOffsets:intvector { 43012, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#559 - /* Pacific/Galapagos */ :table { - trans:intvector { -1230746496, 504939600 } - typeOffsets:intvector { -21504, 0, -21600, 0, -18000, 0 } - typeMap:bin { "0201" } } //Z#560 + /* Pacific/Galapagos */ :table { + trans:intvector { -1230746496, 504939600, 722930400, 728888400 } + typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 } + typeMap:bin { "03010201" } + } //Z#561 /* Pacific/Gambier */ :table { trans:intvector { -1806678012 } typeOffsets:intvector { -32388, 0, -32400, 0 } typeMap:bin { "01" } - } //Z#561 + } //Z#562 /* Pacific/Guadalcanal */ :table { trans:intvector { -1806748788 } typeOffsets:intvector { 38388, 0, 39600, 0 } typeMap:bin { "01" } - links:intvector { 562, 596 } - } //Z#562 + links:intvector { 563, 597 } + } //Z#563 /* Pacific/Guam */ :table { transPre32:intvector { -1, 350340556, -1, 2117479756 } typeOffsets:intvector { -51660, 0, 34740, 0, 36000, 0 } typeMap:bin { "0102" } - links:intvector { 563, 583 } - } //Z#563 + links:intvector { 564, 584 } + } //Z#564 /* Pacific/Honolulu */ :table { transPre32:intvector { -1, 1960865982 } trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 } typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 } typeMap:bin { "010201020103" } - links:intvector { 564, 565, 619 } - } //Z#564 - /* Pacific/Johnston */ :int { 564 } //Z#565 + links:intvector { 565, 566, 620 } + } //Z#565 + /* Pacific/Johnston */ :int { 565 } //Z#566 /* Pacific/Kiritimati */ :table { transPre32:intvector { -1, 2117552256 } trans:intvector { 307622400, 788954400 } typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 } typeMap:bin { "010203" } - } //Z#566 + } //Z#567 /* Pacific/Kosrae */ :table { transPre32:intvector { -1, 2117475380 } trans:intvector { -7988400, 915105600 } typeOffsets:intvector { 39116, 0, 39600, 0, 43200, 0 } typeMap:bin { "010201" } - } //Z#567 + } //Z#568 /* Pacific/Kwajalein */ :table { transPre32:intvector { -1, 2117474336 } trans:intvector { -7988400, 745848000 } typeOffsets:intvector { 40160, 0, -43200, 0, 39600, 0, 43200, 0 } typeMap:bin { "020103" } - links:intvector { 529, 568 } - } //Z#568 + links:intvector { 530, 569 } + } //Z#569 /* Pacific/Majuro */ :table { transPre32:intvector { -1, 2117473408 } trans:intvector { -7988400 } typeOffsets:intvector { 41088, 0, 39600, 0, 43200, 0 } typeMap:bin { "0102" } - } //Z#569 + } //Z#570 /* Pacific/Marquesas */ :table { trans:intvector { -1806676920 } typeOffsets:intvector { -33480, 0, -34200, 0 } typeMap:bin { "01" } - } //Z#570 - /* Pacific/Midway */ :int { 576 } //Z#571 + } //Z#571 + /* Pacific/Midway */ :int { 577 } //Z#572 /* Pacific/Nauru */ :table { trans:intvector { -1545131260, -877347000, -800960400, 294323400 } typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 } typeMap:bin { "02010203" } - } //Z#572 + } //Z#573 /* Pacific/Niue */ :table { transPre32:intvector { -1, 2117555276 } trans:intvector { -599575200, 276089400 } typeOffsets:intvector { -40780, 0, -41400, 0, -40800, 0, -39600, 0 } typeMap:bin { "020103" } - } //Z#573 + } //Z#574 /* Pacific/Norfolk */ :table { transPre32:intvector { -1, 2117474184 } trans:intvector { -599656320, 152029800, 162912600, 1443882600 } typeOffsets:intvector { 40312, 0, 39600, 0, 40320, 0, 41400, 0, 41400, 3600 } typeMap:bin { "0203040301" } - } //Z#574 + } //Z#575 /* Pacific/Noumea */ :table { trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 } typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 } typeMap:bin { "01020102010201" } - } //Z#575 + } //Z#576 /* Pacific/Pago_Pago */ :table { transPre32:intvector { -1, 1439229064 } trans:intvector { -1861879032 } typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 } typeMap:bin { "0102" } - links:intvector { 571, 576, 584, 625 } - } //Z#576 + links:intvector { 572, 577, 585, 626 } + } //Z#577 /* Pacific/Palau */ :table { transPre32:intvector { -1, 2117482220 } typeOffsets:intvector { 32276, 0, 32400, 0 } typeMap:bin { "01" } - } //Z#577 + } //Z#578 /* Pacific/Pitcairn */ :table { transPre32:intvector { -1, 2117545716 } trans:intvector { 893665800 } typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 } typeMap:bin { "0102" } - } //Z#578 + } //Z#579 /* Pacific/Pohnpei */ :table { transPre32:intvector { -1, 2117476524 } typeOffsets:intvector { 37972, 0, 39600, 0 } typeMap:bin { "01" } - links:intvector { 579, 580 } - } //Z#579 - /* Pacific/Ponape */ :int { 579 } //Z#580 + links:intvector { 580, 581 } + } //Z#580 + /* Pacific/Ponape */ :int { 580 } //Z#581 /* Pacific/Port_Moresby */ :table { transPre32:intvector { -1, 1454791176, -1, 1928176784 } typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 } typeMap:bin { "0102" } - } //Z#581 + } //Z#582 /* Pacific/Rarotonga */ :table { transPre32:intvector { -1, 2117552840 } trans:intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 } typeOffsets:intvector { -38344, 0, -37800, 0, -36000, 0, -36000, 1800 } typeMap:bin { "010302030203020302030203020302030203020302030203020302" } - } //Z#582 - /* Pacific/Saipan */ :int { 563 } //Z#583 - /* Pacific/Samoa */ :int { 576 } //Z#584 + } //Z#583 + /* Pacific/Saipan */ :int { 564 } //Z#584 + /* Pacific/Samoa */ :int { 577 } //Z#585 /* Pacific/Tahiti */ :table { trans:intvector { -1806674504 } typeOffsets:intvector { -35896, 0, -36000, 0 } typeMap:bin { "01" } - } //Z#585 + } //Z#586 /* Pacific/Tarawa */ :table { transPre32:intvector { -1, 2117472972 } typeOffsets:intvector { 41524, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#586 + } //Z#587 /* Pacific/Tongatapu */ :table { transPre32:intvector { -1, 2117470136 } trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800, 1509800400 } @@ -2759,28 +2756,28 @@ zoneinfo64:table(nofallback) { finalRule { "Tonga" } finalRaw:int { 46800 } finalYear:int { 2018 } - } //Z#587 - /* Pacific/Truk */ :int { 553 } //Z#588 + } //Z#588 + /* Pacific/Truk */ :int { 554 } //Z#589 /* Pacific/Wake */ :table { transPre32:intvector { -1, 2117474508 } typeOffsets:intvector { 39988, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#589 + } //Z#590 /* Pacific/Wallis */ :table { transPre32:intvector { -1, 2117470376 } typeOffsets:intvector { 44120, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#590 - /* Pacific/Yap */ :int { 553 } //Z#591 - /* Poland */ :int { 496 } //Z#592 - /* Portugal */ :int { 461 } //Z#593 - /* ROC */ :int { 315 } //Z#594 - /* ROK */ :int { 311 } //Z#595 - /* SST */ :int { 562 } //Z#596 - /* Singapore */ :int { 313 } //Z#597 + } //Z#591 + /* Pacific/Yap */ :int { 554 } //Z#592 + /* Poland */ :int { 497 } //Z#593 + /* Portugal */ :int { 462 } //Z#594 + /* ROC */ :int { 316 } //Z#595 + /* ROK */ :int { 312 } //Z#596 + /* SST */ :int { 563 } //Z#597 + /* Singapore */ :int { 314 } //Z#598 /* SystemV/AST4 */ :table { typeOffsets:intvector { -14400, 0 } - } //Z#598 + } //Z#599 /* SystemV/AST4ADT */ :table { transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 } trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 } @@ -2789,10 +2786,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -14400 } finalYear:int { 1977 } - } //Z#599 + } //Z#600 /* SystemV/CST6 */ :table { typeOffsets:intvector { -21600, 0 } - } //Z#600 + } //Z#601 /* SystemV/CST6CDT */ :table { transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 } trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 } @@ -2801,10 +2798,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -21600 } finalYear:int { 1977 } - } //Z#601 + } //Z#602 /* SystemV/EST5 */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#602 + } //Z#603 /* SystemV/EST5EDT */ :table { transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 } trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 } @@ -2813,13 +2810,13 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -18000 } finalYear:int { 1977 } - } //Z#603 + } //Z#604 /* SystemV/HST10 */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#604 + } //Z#605 /* SystemV/MST7 */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#605 + } //Z#606 /* SystemV/MST7MDT */ :table { transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 } trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 } @@ -2828,10 +2825,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -25200 } finalYear:int { 1977 } - } //Z#606 + } //Z#607 /* SystemV/PST8 */ :table { typeOffsets:intvector { -28800, 0 } - } //Z#607 + } //Z#608 /* SystemV/PST8PDT */ :table { transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 } trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 } @@ -2840,10 +2837,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -28800 } finalYear:int { 1977 } - } //Z#608 + } //Z#609 /* SystemV/YST9 */ :table { typeOffsets:intvector { -32400, 0 } - } //Z#609 + } //Z#610 /* SystemV/YST9YDT */ :table { transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 } trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 } @@ -2852,26 +2849,26 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -32400 } finalYear:int { 1977 } - } //Z#610 - /* Turkey */ :int { 456 } //Z#611 - /* UCT */ :int { 432 } //Z#612 - /* US/Alaska */ :int { 60 } //Z#613 - /* US/Aleutian */ :int { 59 } //Z#614 - /* US/Arizona */ :int { 184 } //Z#615 - /* US/Central */ :int { 98 } //Z#616 - /* US/East-Indiana */ :int { 131 } //Z#617 - /* US/Eastern */ :int { 173 } //Z#618 - /* US/Hawaii */ :int { 564 } //Z#619 - /* US/Indiana-Starke */ :int { 132 } //Z#620 - /* US/Michigan */ :int { 110 } //Z#621 - /* US/Mountain */ :int { 109 } //Z#622 - /* US/Pacific */ :int { 151 } //Z#623 - /* US/Pacific-New */ :int { 151 } //Z#624 - /* US/Samoa */ :int { 576 } //Z#625 - /* UTC */ :int { 433 } //Z#626 - /* Universal */ :int { 433 } //Z#627 - /* VST */ :int { 270 } //Z#628 - /* W-SU */ :int { 470 } //Z#629 + } //Z#611 + /* Turkey */ :int { 457 } //Z#612 + /* UCT */ :int { 433 } //Z#613 + /* US/Alaska */ :int { 60 } //Z#614 + /* US/Aleutian */ :int { 59 } //Z#615 + /* US/Arizona */ :int { 184 } //Z#616 + /* US/Central */ :int { 98 } //Z#617 + /* US/East-Indiana */ :int { 131 } //Z#618 + /* US/Eastern */ :int { 173 } //Z#619 + /* US/Hawaii */ :int { 565 } //Z#620 + /* US/Indiana-Starke */ :int { 132 } //Z#621 + /* US/Michigan */ :int { 110 } //Z#622 + /* US/Mountain */ :int { 109 } //Z#623 + /* US/Pacific */ :int { 151 } //Z#624 + /* US/Pacific-New */ :int { 151 } //Z#625 + /* US/Samoa */ :int { 577 } //Z#626 + /* UTC */ :int { 434 } //Z#627 + /* Universal */ :int { 434 } //Z#628 + /* VST */ :int { 271 } //Z#629 + /* W-SU */ :int { 471 } //Z#630 /* WET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 0, 0, 0, 3600 } @@ -2879,8 +2876,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#630 - /* Zulu */ :int { 433 } //Z#631 + } //Z#631 + /* Zulu */ :int { 434 } //Z#632 } Names { "ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6 @@ -2948,126 +2945,126 @@ zoneinfo64:table(nofallback) { ,"America/Panama","America/Pangnirtung","America/Paramaribo" // 183 ,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 186 ,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 189 - ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 192 - ,"America/Regina","America/Resolute","America/Rio_Branco" // 195 - ,"America/Rosario","America/Santa_Isabel","America/Santarem" // 198 - ,"America/Santiago","America/Santo_Domingo","America/Sao_Paulo" // 201 - ,"America/Scoresbysund","America/Shiprock","America/Sitka" // 204 - ,"America/St_Barthelemy","America/St_Johns","America/St_Kitts" // 207 - ,"America/St_Lucia","America/St_Thomas","America/St_Vincent" // 210 - ,"America/Swift_Current","America/Tegucigalpa","America/Thule" // 213 - ,"America/Thunder_Bay","America/Tijuana","America/Toronto" // 216 - ,"America/Tortola","America/Vancouver","America/Virgin" // 219 - ,"America/Whitehorse","America/Winnipeg","America/Yakutat" // 222 - ,"America/Yellowknife","Antarctica/Casey","Antarctica/Davis" // 225 - ,"Antarctica/DumontDUrville","Antarctica/Macquarie" // 227 - ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 230 - ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 233 - ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 236 - ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 240 - ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 244 - ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 248 - ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 252 - ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 256 - ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 260 - ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 264 - ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 268 - ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 271 - ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 275 - ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 279 - ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 283 - ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 286 - ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 290 - ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 294 - ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 298 - ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 302 - ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 306 - ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 310 - ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 314 - ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 318 - ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 322 - ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 325 - ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 329 - ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 333 - ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 336 - ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 339 - ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 342 - ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 345 - ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 348 - ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 351 - ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 354 - ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 357 - ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 360 - ,"Australia/North","Australia/Perth","Australia/Queensland" // 363 - ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 366 - ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 369 - ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 374 - ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 381 - ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 384 - ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 387 - ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 390 - ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 394 - ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 401 - ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 405 - ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 410 - ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 415 - ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 419 - ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 423 - ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 428 - ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 433 - ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 437 - ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 440 - ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 443 - ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 446 - ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 449 - ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 452 - ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 455 - ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 458 - ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 462 - ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 465 - ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 469 - ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 473 - ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 477 - ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 480 - ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 483 - ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 486 - ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 489 - ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 492 - ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 495 - ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 498 - ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 504 - ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 510 - ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 514 - ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 517 - ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 520 - ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 523 - ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 529 - ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 535 - ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 540 - ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 548 - ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 551 - ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 554 - ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 557 - ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 560 - ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 563 - ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 566 - ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 569 - ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 572 - ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 575 - ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 578 - ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 581 - ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 584 - ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 587 - ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 591 - ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 597 - ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 601 - ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 605 - ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 608 - ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 613 - ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 617 - ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 621 - ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 625 - ,"UTC","Universal","VST","W-SU","WET","Zulu" // 631 + ,"America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet" // 192 + ,"America/Recife","America/Regina","America/Resolute" // 195 + ,"America/Rio_Branco","America/Rosario","America/Santa_Isabel" // 198 + ,"America/Santarem","America/Santiago","America/Santo_Domingo" // 201 + ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 204 + ,"America/Sitka","America/St_Barthelemy","America/St_Johns" // 207 + ,"America/St_Kitts","America/St_Lucia","America/St_Thomas" // 210 + ,"America/St_Vincent","America/Swift_Current","America/Tegucigalpa" // 213 + ,"America/Thule","America/Thunder_Bay","America/Tijuana" // 216 + ,"America/Toronto","America/Tortola","America/Vancouver" // 219 + ,"America/Virgin","America/Whitehorse","America/Winnipeg" // 222 + ,"America/Yakutat","America/Yellowknife","Antarctica/Casey" // 225 + ,"Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie" // 228 + ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 231 + ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 234 + ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 237 + ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 241 + ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 245 + ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 249 + ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 253 + ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 257 + ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 261 + ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 265 + ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 269 + ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 272 + ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 276 + ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 280 + ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 284 + ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 287 + ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 291 + ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 295 + ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 299 + ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 303 + ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 307 + ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 311 + ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 315 + ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 319 + ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 323 + ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 326 + ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 330 + ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 334 + ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 337 + ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 340 + ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 343 + ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 346 + ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 349 + ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 352 + ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 355 + ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 358 + ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 361 + ,"Australia/North","Australia/Perth","Australia/Queensland" // 364 + ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 367 + ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 370 + ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 375 + ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 382 + ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 385 + ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 388 + ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 391 + ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 395 + ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 402 + ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 406 + ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 411 + ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 416 + ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 420 + ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 424 + ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 429 + ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 434 + ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 438 + ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 441 + ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 444 + ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 447 + ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 450 + ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 453 + ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 456 + ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 459 + ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 463 + ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 466 + ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 470 + ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 474 + ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 478 + ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 481 + ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 484 + ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 487 + ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 490 + ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 493 + ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 496 + ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 499 + ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 505 + ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 511 + ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 515 + ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 518 + ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 521 + ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 524 + ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 530 + ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 536 + ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 541 + ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 549 + ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 552 + ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 555 + ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 558 + ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 561 + ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 564 + ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 567 + ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 570 + ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 573 + ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 576 + ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 579 + ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 582 + ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 585 + ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 588 + ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 592 + ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 598 + ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 602 + ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 606 + ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 609 + ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 614 + ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 618 + ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 622 + ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 626 + ,"UTC","Universal","VST","W-SU","WET","Zulu" // 632 } Rules { AN:intvector { @@ -3109,26 +3106,26 @@ zoneinfo64:table(nofallback) { Fiji:intvector { 10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600 } //_#12 + Haiti:intvector { + 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 + } //_#13 Iran:intvector { 2, 21, 0, 0, 0, 8, 21, 0, 0, 0, 3600 - } //_#13 + } //_#14 Jordan:intvector { 2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600 - } //_#14 + } //_#15 LH:intvector { 9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800 - } //_#15 + } //_#16 Lebanon:intvector { 2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600 - } //_#16 + } //_#17 Mexico:intvector { 3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#17 + } //_#18 Moldova:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 - } //_#18 - Mongol:intvector { - 2, -31, -7, 7200, 0, 8, -30, -7, 0, 0, 3600 } //_#19 Morocco:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 @@ -3361,447 +3358,448 @@ zoneinfo64:table(nofallback) { "BR", //Z#187 America/Porto_Acre "BR", //Z#188 America/Porto_Velho "PR", //Z#189 America/Puerto_Rico - "CA", //Z#190 America/Rainy_River - "CA", //Z#191 America/Rankin_Inlet - "BR", //Z#192 America/Recife - "CA", //Z#193 America/Regina - "CA", //Z#194 America/Resolute - "BR", //Z#195 America/Rio_Branco - "AR", //Z#196 America/Rosario - "MX", //Z#197 America/Santa_Isabel - "BR", //Z#198 America/Santarem - "CL", //Z#199 America/Santiago - "DO", //Z#200 America/Santo_Domingo - "BR", //Z#201 America/Sao_Paulo - "GL", //Z#202 America/Scoresbysund - "US", //Z#203 America/Shiprock - "US", //Z#204 America/Sitka - "BL", //Z#205 America/St_Barthelemy - "CA", //Z#206 America/St_Johns - "KN", //Z#207 America/St_Kitts - "LC", //Z#208 America/St_Lucia - "VI", //Z#209 America/St_Thomas - "VC", //Z#210 America/St_Vincent - "CA", //Z#211 America/Swift_Current - "HN", //Z#212 America/Tegucigalpa - "GL", //Z#213 America/Thule - "CA", //Z#214 America/Thunder_Bay - "MX", //Z#215 America/Tijuana - "CA", //Z#216 America/Toronto - "VG", //Z#217 America/Tortola - "CA", //Z#218 America/Vancouver - "TT", //Z#219 America/Virgin - "CA", //Z#220 America/Whitehorse - "CA", //Z#221 America/Winnipeg - "US", //Z#222 America/Yakutat - "CA", //Z#223 America/Yellowknife - "AQ", //Z#224 Antarctica/Casey - "AQ", //Z#225 Antarctica/Davis - "AQ", //Z#226 Antarctica/DumontDUrville - "AU", //Z#227 Antarctica/Macquarie - "AQ", //Z#228 Antarctica/Mawson - "AQ", //Z#229 Antarctica/McMurdo - "AQ", //Z#230 Antarctica/Palmer - "AQ", //Z#231 Antarctica/Rothera - "NZ", //Z#232 Antarctica/South_Pole - "AQ", //Z#233 Antarctica/Syowa - "AQ", //Z#234 Antarctica/Troll - "AQ", //Z#235 Antarctica/Vostok - "SJ", //Z#236 Arctic/Longyearbyen - "YE", //Z#237 Asia/Aden - "KZ", //Z#238 Asia/Almaty - "JO", //Z#239 Asia/Amman - "RU", //Z#240 Asia/Anadyr - "KZ", //Z#241 Asia/Aqtau - "KZ", //Z#242 Asia/Aqtobe - "TM", //Z#243 Asia/Ashgabat - "TM", //Z#244 Asia/Ashkhabad - "KZ", //Z#245 Asia/Atyrau - "IQ", //Z#246 Asia/Baghdad - "BH", //Z#247 Asia/Bahrain - "AZ", //Z#248 Asia/Baku - "TH", //Z#249 Asia/Bangkok - "RU", //Z#250 Asia/Barnaul - "LB", //Z#251 Asia/Beirut - "KG", //Z#252 Asia/Bishkek - "BN", //Z#253 Asia/Brunei - "IN", //Z#254 Asia/Calcutta - "RU", //Z#255 Asia/Chita - "MN", //Z#256 Asia/Choibalsan - "CN", //Z#257 Asia/Chongqing - "CN", //Z#258 Asia/Chungking - "LK", //Z#259 Asia/Colombo - "BD", //Z#260 Asia/Dacca - "SY", //Z#261 Asia/Damascus - "BD", //Z#262 Asia/Dhaka - "TL", //Z#263 Asia/Dili - "AE", //Z#264 Asia/Dubai - "TJ", //Z#265 Asia/Dushanbe - "CY", //Z#266 Asia/Famagusta - "PS", //Z#267 Asia/Gaza - "CN", //Z#268 Asia/Harbin - "PS", //Z#269 Asia/Hebron - "VN", //Z#270 Asia/Ho_Chi_Minh - "HK", //Z#271 Asia/Hong_Kong - "MN", //Z#272 Asia/Hovd - "RU", //Z#273 Asia/Irkutsk - "TR", //Z#274 Asia/Istanbul - "ID", //Z#275 Asia/Jakarta - "ID", //Z#276 Asia/Jayapura - "IL", //Z#277 Asia/Jerusalem - "AF", //Z#278 Asia/Kabul - "RU", //Z#279 Asia/Kamchatka - "PK", //Z#280 Asia/Karachi - "CN", //Z#281 Asia/Kashgar - "NP", //Z#282 Asia/Kathmandu - "NP", //Z#283 Asia/Katmandu - "RU", //Z#284 Asia/Khandyga - "IN", //Z#285 Asia/Kolkata - "RU", //Z#286 Asia/Krasnoyarsk - "MY", //Z#287 Asia/Kuala_Lumpur - "MY", //Z#288 Asia/Kuching - "KW", //Z#289 Asia/Kuwait - "MO", //Z#290 Asia/Macao - "MO", //Z#291 Asia/Macau - "RU", //Z#292 Asia/Magadan - "ID", //Z#293 Asia/Makassar - "PH", //Z#294 Asia/Manila - "OM", //Z#295 Asia/Muscat - "CY", //Z#296 Asia/Nicosia - "RU", //Z#297 Asia/Novokuznetsk - "RU", //Z#298 Asia/Novosibirsk - "RU", //Z#299 Asia/Omsk - "KZ", //Z#300 Asia/Oral - "KH", //Z#301 Asia/Phnom_Penh - "ID", //Z#302 Asia/Pontianak - "KP", //Z#303 Asia/Pyongyang - "QA", //Z#304 Asia/Qatar - "KZ", //Z#305 Asia/Qyzylorda - "MM", //Z#306 Asia/Rangoon - "SA", //Z#307 Asia/Riyadh - "VN", //Z#308 Asia/Saigon - "RU", //Z#309 Asia/Sakhalin - "UZ", //Z#310 Asia/Samarkand - "KR", //Z#311 Asia/Seoul - "CN", //Z#312 Asia/Shanghai - "SG", //Z#313 Asia/Singapore - "RU", //Z#314 Asia/Srednekolymsk - "TW", //Z#315 Asia/Taipei - "UZ", //Z#316 Asia/Tashkent - "GE", //Z#317 Asia/Tbilisi - "IR", //Z#318 Asia/Tehran - "IL", //Z#319 Asia/Tel_Aviv - "BT", //Z#320 Asia/Thimbu - "BT", //Z#321 Asia/Thimphu - "JP", //Z#322 Asia/Tokyo - "RU", //Z#323 Asia/Tomsk - "ID", //Z#324 Asia/Ujung_Pandang - "MN", //Z#325 Asia/Ulaanbaatar - "MN", //Z#326 Asia/Ulan_Bator - "CN", //Z#327 Asia/Urumqi - "RU", //Z#328 Asia/Ust-Nera - "LA", //Z#329 Asia/Vientiane - "RU", //Z#330 Asia/Vladivostok - "RU", //Z#331 Asia/Yakutsk - "MM", //Z#332 Asia/Yangon - "RU", //Z#333 Asia/Yekaterinburg - "AM", //Z#334 Asia/Yerevan - "PT", //Z#335 Atlantic/Azores - "BM", //Z#336 Atlantic/Bermuda - "ES", //Z#337 Atlantic/Canary - "CV", //Z#338 Atlantic/Cape_Verde - "FO", //Z#339 Atlantic/Faeroe - "FO", //Z#340 Atlantic/Faroe - "NO", //Z#341 Atlantic/Jan_Mayen - "PT", //Z#342 Atlantic/Madeira - "IS", //Z#343 Atlantic/Reykjavik - "GS", //Z#344 Atlantic/South_Georgia - "SH", //Z#345 Atlantic/St_Helena - "FK", //Z#346 Atlantic/Stanley - "AU", //Z#347 Australia/ACT - "AU", //Z#348 Australia/Adelaide - "AU", //Z#349 Australia/Brisbane - "AU", //Z#350 Australia/Broken_Hill - "AU", //Z#351 Australia/Canberra - "AU", //Z#352 Australia/Currie - "AU", //Z#353 Australia/Darwin - "AU", //Z#354 Australia/Eucla - "AU", //Z#355 Australia/Hobart - "AU", //Z#356 Australia/LHI - "AU", //Z#357 Australia/Lindeman - "AU", //Z#358 Australia/Lord_Howe - "AU", //Z#359 Australia/Melbourne - "AU", //Z#360 Australia/NSW - "AU", //Z#361 Australia/North - "AU", //Z#362 Australia/Perth - "AU", //Z#363 Australia/Queensland - "AU", //Z#364 Australia/South - "AU", //Z#365 Australia/Sydney - "AU", //Z#366 Australia/Tasmania - "AU", //Z#367 Australia/Victoria - "AU", //Z#368 Australia/West - "AU", //Z#369 Australia/Yancowinna - "BR", //Z#370 BET - "BD", //Z#371 BST - "BR", //Z#372 Brazil/Acre - "BR", //Z#373 Brazil/DeNoronha - "BR", //Z#374 Brazil/East - "BR", //Z#375 Brazil/West - "MZ", //Z#376 CAT - "001",//Z#377 CET - "CA", //Z#378 CNT - "US", //Z#379 CST - "001",//Z#380 CST6CDT - "CN", //Z#381 CTT - "CA", //Z#382 Canada/Atlantic - "CA", //Z#383 Canada/Central - "CA", //Z#384 Canada/East-Saskatchewan - "CA", //Z#385 Canada/Eastern - "CA", //Z#386 Canada/Mountain - "CA", //Z#387 Canada/Newfoundland - "CA", //Z#388 Canada/Pacific - "CA", //Z#389 Canada/Saskatchewan - "CA", //Z#390 Canada/Yukon - "CL", //Z#391 Chile/Continental - "CL", //Z#392 Chile/EasterIsland - "CU", //Z#393 Cuba - "KE", //Z#394 EAT - "FR", //Z#395 ECT - "001",//Z#396 EET - "001",//Z#397 EST - "001",//Z#398 EST5EDT - "EG", //Z#399 Egypt - "IE", //Z#400 Eire - "001",//Z#401 Etc/GMT - "001",//Z#402 Etc/GMT+0 - "001",//Z#403 Etc/GMT+1 - "001",//Z#404 Etc/GMT+10 - "001",//Z#405 Etc/GMT+11 - "001",//Z#406 Etc/GMT+12 - "001",//Z#407 Etc/GMT+2 - "001",//Z#408 Etc/GMT+3 - "001",//Z#409 Etc/GMT+4 - "001",//Z#410 Etc/GMT+5 - "001",//Z#411 Etc/GMT+6 - "001",//Z#412 Etc/GMT+7 - "001",//Z#413 Etc/GMT+8 - "001",//Z#414 Etc/GMT+9 - "001",//Z#415 Etc/GMT-0 - "001",//Z#416 Etc/GMT-1 - "001",//Z#417 Etc/GMT-10 - "001",//Z#418 Etc/GMT-11 - "001",//Z#419 Etc/GMT-12 - "001",//Z#420 Etc/GMT-13 - "001",//Z#421 Etc/GMT-14 - "001",//Z#422 Etc/GMT-2 - "001",//Z#423 Etc/GMT-3 - "001",//Z#424 Etc/GMT-4 - "001",//Z#425 Etc/GMT-5 - "001",//Z#426 Etc/GMT-6 - "001",//Z#427 Etc/GMT-7 - "001",//Z#428 Etc/GMT-8 - "001",//Z#429 Etc/GMT-9 - "001",//Z#430 Etc/GMT0 - "001",//Z#431 Etc/Greenwich - "001",//Z#432 Etc/UCT - "001",//Z#433 Etc/UTC - "001",//Z#434 Etc/Universal - "001",//Z#435 Etc/Unknown - "001",//Z#436 Etc/Zulu - "NL", //Z#437 Europe/Amsterdam - "AD", //Z#438 Europe/Andorra - "RU", //Z#439 Europe/Astrakhan - "GR", //Z#440 Europe/Athens - "GB", //Z#441 Europe/Belfast - "RS", //Z#442 Europe/Belgrade - "DE", //Z#443 Europe/Berlin - "SK", //Z#444 Europe/Bratislava - "BE", //Z#445 Europe/Brussels - "RO", //Z#446 Europe/Bucharest - "HU", //Z#447 Europe/Budapest - "DE", //Z#448 Europe/Busingen - "MD", //Z#449 Europe/Chisinau - "DK", //Z#450 Europe/Copenhagen - "IE", //Z#451 Europe/Dublin - "GI", //Z#452 Europe/Gibraltar - "GG", //Z#453 Europe/Guernsey - "FI", //Z#454 Europe/Helsinki - "IM", //Z#455 Europe/Isle_of_Man - "TR", //Z#456 Europe/Istanbul - "JE", //Z#457 Europe/Jersey - "RU", //Z#458 Europe/Kaliningrad - "UA", //Z#459 Europe/Kiev - "RU", //Z#460 Europe/Kirov - "PT", //Z#461 Europe/Lisbon - "SI", //Z#462 Europe/Ljubljana - "GB", //Z#463 Europe/London - "LU", //Z#464 Europe/Luxembourg - "ES", //Z#465 Europe/Madrid - "MT", //Z#466 Europe/Malta - "AX", //Z#467 Europe/Mariehamn - "BY", //Z#468 Europe/Minsk - "MC", //Z#469 Europe/Monaco - "RU", //Z#470 Europe/Moscow - "CY", //Z#471 Europe/Nicosia - "NO", //Z#472 Europe/Oslo - "FR", //Z#473 Europe/Paris - "ME", //Z#474 Europe/Podgorica - "CZ", //Z#475 Europe/Prague - "LV", //Z#476 Europe/Riga - "IT", //Z#477 Europe/Rome - "RU", //Z#478 Europe/Samara - "SM", //Z#479 Europe/San_Marino - "BA", //Z#480 Europe/Sarajevo - "RU", //Z#481 Europe/Saratov - "UA", //Z#482 Europe/Simferopol - "MK", //Z#483 Europe/Skopje - "BG", //Z#484 Europe/Sofia - "SE", //Z#485 Europe/Stockholm - "EE", //Z#486 Europe/Tallinn - "AL", //Z#487 Europe/Tirane - "MD", //Z#488 Europe/Tiraspol - "RU", //Z#489 Europe/Ulyanovsk - "UA", //Z#490 Europe/Uzhgorod - "LI", //Z#491 Europe/Vaduz - "VA", //Z#492 Europe/Vatican - "AT", //Z#493 Europe/Vienna - "LT", //Z#494 Europe/Vilnius - "RU", //Z#495 Europe/Volgograd - "PL", //Z#496 Europe/Warsaw - "HR", //Z#497 Europe/Zagreb - "UA", //Z#498 Europe/Zaporozhye - "CH", //Z#499 Europe/Zurich - "001",//Z#500 Factory - "GB", //Z#501 GB - "GB", //Z#502 GB-Eire - "001",//Z#503 GMT - "001",//Z#504 GMT+0 - "001",//Z#505 GMT-0 - "001",//Z#506 GMT0 - "001",//Z#507 Greenwich - "001",//Z#508 HST - "HK", //Z#509 Hongkong - "US", //Z#510 IET - "IN", //Z#511 IST - "IS", //Z#512 Iceland - "MG", //Z#513 Indian/Antananarivo - "IO", //Z#514 Indian/Chagos - "CX", //Z#515 Indian/Christmas - "CC", //Z#516 Indian/Cocos - "KM", //Z#517 Indian/Comoro - "TF", //Z#518 Indian/Kerguelen - "SC", //Z#519 Indian/Mahe - "MV", //Z#520 Indian/Maldives - "MU", //Z#521 Indian/Mauritius - "YT", //Z#522 Indian/Mayotte - "RE", //Z#523 Indian/Reunion - "IR", //Z#524 Iran - "IL", //Z#525 Israel - "JP", //Z#526 JST - "JM", //Z#527 Jamaica - "JP", //Z#528 Japan - "MH", //Z#529 Kwajalein - "LY", //Z#530 Libya - "001",//Z#531 MET - "WS", //Z#532 MIT - "001",//Z#533 MST - "001",//Z#534 MST7MDT - "MX", //Z#535 Mexico/BajaNorte - "MX", //Z#536 Mexico/BajaSur - "MX", //Z#537 Mexico/General - "AM", //Z#538 NET - "NZ", //Z#539 NST - "NZ", //Z#540 NZ - "NZ", //Z#541 NZ-CHAT - "US", //Z#542 Navajo - "PK", //Z#543 PLT - "US", //Z#544 PNT - "CN", //Z#545 PRC - "PR", //Z#546 PRT - "US", //Z#547 PST - "001",//Z#548 PST8PDT - "WS", //Z#549 Pacific/Apia - "NZ", //Z#550 Pacific/Auckland - "PG", //Z#551 Pacific/Bougainville - "NZ", //Z#552 Pacific/Chatham - "FM", //Z#553 Pacific/Chuuk - "CL", //Z#554 Pacific/Easter - "VU", //Z#555 Pacific/Efate - "KI", //Z#556 Pacific/Enderbury - "TK", //Z#557 Pacific/Fakaofo - "FJ", //Z#558 Pacific/Fiji - "TV", //Z#559 Pacific/Funafuti - "EC", //Z#560 Pacific/Galapagos - "PF", //Z#561 Pacific/Gambier - "SB", //Z#562 Pacific/Guadalcanal - "GU", //Z#563 Pacific/Guam - "US", //Z#564 Pacific/Honolulu - "UM", //Z#565 Pacific/Johnston - "KI", //Z#566 Pacific/Kiritimati - "FM", //Z#567 Pacific/Kosrae - "MH", //Z#568 Pacific/Kwajalein - "MH", //Z#569 Pacific/Majuro - "PF", //Z#570 Pacific/Marquesas - "UM", //Z#571 Pacific/Midway - "NR", //Z#572 Pacific/Nauru - "NU", //Z#573 Pacific/Niue - "NF", //Z#574 Pacific/Norfolk - "NC", //Z#575 Pacific/Noumea - "AS", //Z#576 Pacific/Pago_Pago - "PW", //Z#577 Pacific/Palau - "PN", //Z#578 Pacific/Pitcairn - "FM", //Z#579 Pacific/Pohnpei - "FM", //Z#580 Pacific/Ponape - "PG", //Z#581 Pacific/Port_Moresby - "CK", //Z#582 Pacific/Rarotonga - "MP", //Z#583 Pacific/Saipan - "AS", //Z#584 Pacific/Samoa - "PF", //Z#585 Pacific/Tahiti - "KI", //Z#586 Pacific/Tarawa - "TO", //Z#587 Pacific/Tongatapu - "FM", //Z#588 Pacific/Truk - "UM", //Z#589 Pacific/Wake - "WF", //Z#590 Pacific/Wallis - "FM", //Z#591 Pacific/Yap - "PL", //Z#592 Poland - "PT", //Z#593 Portugal - "TW", //Z#594 ROC - "KR", //Z#595 ROK - "SB", //Z#596 SST - "SG", //Z#597 Singapore - "001",//Z#598 SystemV/AST4 - "001",//Z#599 SystemV/AST4ADT - "001",//Z#600 SystemV/CST6 - "001",//Z#601 SystemV/CST6CDT - "001",//Z#602 SystemV/EST5 - "001",//Z#603 SystemV/EST5EDT - "001",//Z#604 SystemV/HST10 - "001",//Z#605 SystemV/MST7 - "001",//Z#606 SystemV/MST7MDT - "001",//Z#607 SystemV/PST8 - "001",//Z#608 SystemV/PST8PDT - "001",//Z#609 SystemV/YST9 - "001",//Z#610 SystemV/YST9YDT - "TR", //Z#611 Turkey - "001",//Z#612 UCT - "US", //Z#613 US/Alaska - "US", //Z#614 US/Aleutian - "US", //Z#615 US/Arizona - "US", //Z#616 US/Central - "US", //Z#617 US/East-Indiana - "US", //Z#618 US/Eastern - "US", //Z#619 US/Hawaii - "US", //Z#620 US/Indiana-Starke - "US", //Z#621 US/Michigan - "US", //Z#622 US/Mountain - "US", //Z#623 US/Pacific - "US", //Z#624 US/Pacific-New - "AS", //Z#625 US/Samoa - "001",//Z#626 UTC - "001",//Z#627 Universal - "VN", //Z#628 VST - "RU", //Z#629 W-SU - "001",//Z#630 WET - "001",//Z#631 Zulu + "CL", //Z#190 America/Punta_Arenas + "CA", //Z#191 America/Rainy_River + "CA", //Z#192 America/Rankin_Inlet + "BR", //Z#193 America/Recife + "CA", //Z#194 America/Regina + "CA", //Z#195 America/Resolute + "BR", //Z#196 America/Rio_Branco + "AR", //Z#197 America/Rosario + "MX", //Z#198 America/Santa_Isabel + "BR", //Z#199 America/Santarem + "CL", //Z#200 America/Santiago + "DO", //Z#201 America/Santo_Domingo + "BR", //Z#202 America/Sao_Paulo + "GL", //Z#203 America/Scoresbysund + "US", //Z#204 America/Shiprock + "US", //Z#205 America/Sitka + "BL", //Z#206 America/St_Barthelemy + "CA", //Z#207 America/St_Johns + "KN", //Z#208 America/St_Kitts + "LC", //Z#209 America/St_Lucia + "VI", //Z#210 America/St_Thomas + "VC", //Z#211 America/St_Vincent + "CA", //Z#212 America/Swift_Current + "HN", //Z#213 America/Tegucigalpa + "GL", //Z#214 America/Thule + "CA", //Z#215 America/Thunder_Bay + "MX", //Z#216 America/Tijuana + "CA", //Z#217 America/Toronto + "VG", //Z#218 America/Tortola + "CA", //Z#219 America/Vancouver + "TT", //Z#220 America/Virgin + "CA", //Z#221 America/Whitehorse + "CA", //Z#222 America/Winnipeg + "US", //Z#223 America/Yakutat + "CA", //Z#224 America/Yellowknife + "AQ", //Z#225 Antarctica/Casey + "AQ", //Z#226 Antarctica/Davis + "AQ", //Z#227 Antarctica/DumontDUrville + "AU", //Z#228 Antarctica/Macquarie + "AQ", //Z#229 Antarctica/Mawson + "AQ", //Z#230 Antarctica/McMurdo + "AQ", //Z#231 Antarctica/Palmer + "AQ", //Z#232 Antarctica/Rothera + "NZ", //Z#233 Antarctica/South_Pole + "AQ", //Z#234 Antarctica/Syowa + "AQ", //Z#235 Antarctica/Troll + "AQ", //Z#236 Antarctica/Vostok + "SJ", //Z#237 Arctic/Longyearbyen + "YE", //Z#238 Asia/Aden + "KZ", //Z#239 Asia/Almaty + "JO", //Z#240 Asia/Amman + "RU", //Z#241 Asia/Anadyr + "KZ", //Z#242 Asia/Aqtau + "KZ", //Z#243 Asia/Aqtobe + "TM", //Z#244 Asia/Ashgabat + "TM", //Z#245 Asia/Ashkhabad + "KZ", //Z#246 Asia/Atyrau + "IQ", //Z#247 Asia/Baghdad + "BH", //Z#248 Asia/Bahrain + "AZ", //Z#249 Asia/Baku + "TH", //Z#250 Asia/Bangkok + "RU", //Z#251 Asia/Barnaul + "LB", //Z#252 Asia/Beirut + "KG", //Z#253 Asia/Bishkek + "BN", //Z#254 Asia/Brunei + "IN", //Z#255 Asia/Calcutta + "RU", //Z#256 Asia/Chita + "MN", //Z#257 Asia/Choibalsan + "CN", //Z#258 Asia/Chongqing + "CN", //Z#259 Asia/Chungking + "LK", //Z#260 Asia/Colombo + "BD", //Z#261 Asia/Dacca + "SY", //Z#262 Asia/Damascus + "BD", //Z#263 Asia/Dhaka + "TL", //Z#264 Asia/Dili + "AE", //Z#265 Asia/Dubai + "TJ", //Z#266 Asia/Dushanbe + "CY", //Z#267 Asia/Famagusta + "PS", //Z#268 Asia/Gaza + "CN", //Z#269 Asia/Harbin + "PS", //Z#270 Asia/Hebron + "VN", //Z#271 Asia/Ho_Chi_Minh + "HK", //Z#272 Asia/Hong_Kong + "MN", //Z#273 Asia/Hovd + "RU", //Z#274 Asia/Irkutsk + "TR", //Z#275 Asia/Istanbul + "ID", //Z#276 Asia/Jakarta + "ID", //Z#277 Asia/Jayapura + "IL", //Z#278 Asia/Jerusalem + "AF", //Z#279 Asia/Kabul + "RU", //Z#280 Asia/Kamchatka + "PK", //Z#281 Asia/Karachi + "CN", //Z#282 Asia/Kashgar + "NP", //Z#283 Asia/Kathmandu + "NP", //Z#284 Asia/Katmandu + "RU", //Z#285 Asia/Khandyga + "IN", //Z#286 Asia/Kolkata + "RU", //Z#287 Asia/Krasnoyarsk + "MY", //Z#288 Asia/Kuala_Lumpur + "MY", //Z#289 Asia/Kuching + "KW", //Z#290 Asia/Kuwait + "MO", //Z#291 Asia/Macao + "MO", //Z#292 Asia/Macau + "RU", //Z#293 Asia/Magadan + "ID", //Z#294 Asia/Makassar + "PH", //Z#295 Asia/Manila + "OM", //Z#296 Asia/Muscat + "CY", //Z#297 Asia/Nicosia + "RU", //Z#298 Asia/Novokuznetsk + "RU", //Z#299 Asia/Novosibirsk + "RU", //Z#300 Asia/Omsk + "KZ", //Z#301 Asia/Oral + "KH", //Z#302 Asia/Phnom_Penh + "ID", //Z#303 Asia/Pontianak + "KP", //Z#304 Asia/Pyongyang + "QA", //Z#305 Asia/Qatar + "KZ", //Z#306 Asia/Qyzylorda + "MM", //Z#307 Asia/Rangoon + "SA", //Z#308 Asia/Riyadh + "VN", //Z#309 Asia/Saigon + "RU", //Z#310 Asia/Sakhalin + "UZ", //Z#311 Asia/Samarkand + "KR", //Z#312 Asia/Seoul + "CN", //Z#313 Asia/Shanghai + "SG", //Z#314 Asia/Singapore + "RU", //Z#315 Asia/Srednekolymsk + "TW", //Z#316 Asia/Taipei + "UZ", //Z#317 Asia/Tashkent + "GE", //Z#318 Asia/Tbilisi + "IR", //Z#319 Asia/Tehran + "IL", //Z#320 Asia/Tel_Aviv + "BT", //Z#321 Asia/Thimbu + "BT", //Z#322 Asia/Thimphu + "JP", //Z#323 Asia/Tokyo + "RU", //Z#324 Asia/Tomsk + "ID", //Z#325 Asia/Ujung_Pandang + "MN", //Z#326 Asia/Ulaanbaatar + "MN", //Z#327 Asia/Ulan_Bator + "CN", //Z#328 Asia/Urumqi + "RU", //Z#329 Asia/Ust-Nera + "LA", //Z#330 Asia/Vientiane + "RU", //Z#331 Asia/Vladivostok + "RU", //Z#332 Asia/Yakutsk + "MM", //Z#333 Asia/Yangon + "RU", //Z#334 Asia/Yekaterinburg + "AM", //Z#335 Asia/Yerevan + "PT", //Z#336 Atlantic/Azores + "BM", //Z#337 Atlantic/Bermuda + "ES", //Z#338 Atlantic/Canary + "CV", //Z#339 Atlantic/Cape_Verde + "FO", //Z#340 Atlantic/Faeroe + "FO", //Z#341 Atlantic/Faroe + "NO", //Z#342 Atlantic/Jan_Mayen + "PT", //Z#343 Atlantic/Madeira + "IS", //Z#344 Atlantic/Reykjavik + "GS", //Z#345 Atlantic/South_Georgia + "SH", //Z#346 Atlantic/St_Helena + "FK", //Z#347 Atlantic/Stanley + "AU", //Z#348 Australia/ACT + "AU", //Z#349 Australia/Adelaide + "AU", //Z#350 Australia/Brisbane + "AU", //Z#351 Australia/Broken_Hill + "AU", //Z#352 Australia/Canberra + "AU", //Z#353 Australia/Currie + "AU", //Z#354 Australia/Darwin + "AU", //Z#355 Australia/Eucla + "AU", //Z#356 Australia/Hobart + "AU", //Z#357 Australia/LHI + "AU", //Z#358 Australia/Lindeman + "AU", //Z#359 Australia/Lord_Howe + "AU", //Z#360 Australia/Melbourne + "AU", //Z#361 Australia/NSW + "AU", //Z#362 Australia/North + "AU", //Z#363 Australia/Perth + "AU", //Z#364 Australia/Queensland + "AU", //Z#365 Australia/South + "AU", //Z#366 Australia/Sydney + "AU", //Z#367 Australia/Tasmania + "AU", //Z#368 Australia/Victoria + "AU", //Z#369 Australia/West + "AU", //Z#370 Australia/Yancowinna + "BR", //Z#371 BET + "BD", //Z#372 BST + "BR", //Z#373 Brazil/Acre + "BR", //Z#374 Brazil/DeNoronha + "BR", //Z#375 Brazil/East + "BR", //Z#376 Brazil/West + "MZ", //Z#377 CAT + "001",//Z#378 CET + "CA", //Z#379 CNT + "US", //Z#380 CST + "001",//Z#381 CST6CDT + "CN", //Z#382 CTT + "CA", //Z#383 Canada/Atlantic + "CA", //Z#384 Canada/Central + "CA", //Z#385 Canada/East-Saskatchewan + "CA", //Z#386 Canada/Eastern + "CA", //Z#387 Canada/Mountain + "CA", //Z#388 Canada/Newfoundland + "CA", //Z#389 Canada/Pacific + "CA", //Z#390 Canada/Saskatchewan + "CA", //Z#391 Canada/Yukon + "CL", //Z#392 Chile/Continental + "CL", //Z#393 Chile/EasterIsland + "CU", //Z#394 Cuba + "KE", //Z#395 EAT + "FR", //Z#396 ECT + "001",//Z#397 EET + "001",//Z#398 EST + "001",//Z#399 EST5EDT + "EG", //Z#400 Egypt + "IE", //Z#401 Eire + "001",//Z#402 Etc/GMT + "001",//Z#403 Etc/GMT+0 + "001",//Z#404 Etc/GMT+1 + "001",//Z#405 Etc/GMT+10 + "001",//Z#406 Etc/GMT+11 + "001",//Z#407 Etc/GMT+12 + "001",//Z#408 Etc/GMT+2 + "001",//Z#409 Etc/GMT+3 + "001",//Z#410 Etc/GMT+4 + "001",//Z#411 Etc/GMT+5 + "001",//Z#412 Etc/GMT+6 + "001",//Z#413 Etc/GMT+7 + "001",//Z#414 Etc/GMT+8 + "001",//Z#415 Etc/GMT+9 + "001",//Z#416 Etc/GMT-0 + "001",//Z#417 Etc/GMT-1 + "001",//Z#418 Etc/GMT-10 + "001",//Z#419 Etc/GMT-11 + "001",//Z#420 Etc/GMT-12 + "001",//Z#421 Etc/GMT-13 + "001",//Z#422 Etc/GMT-14 + "001",//Z#423 Etc/GMT-2 + "001",//Z#424 Etc/GMT-3 + "001",//Z#425 Etc/GMT-4 + "001",//Z#426 Etc/GMT-5 + "001",//Z#427 Etc/GMT-6 + "001",//Z#428 Etc/GMT-7 + "001",//Z#429 Etc/GMT-8 + "001",//Z#430 Etc/GMT-9 + "001",//Z#431 Etc/GMT0 + "001",//Z#432 Etc/Greenwich + "001",//Z#433 Etc/UCT + "001",//Z#434 Etc/UTC + "001",//Z#435 Etc/Universal + "001",//Z#436 Etc/Unknown + "001",//Z#437 Etc/Zulu + "NL", //Z#438 Europe/Amsterdam + "AD", //Z#439 Europe/Andorra + "RU", //Z#440 Europe/Astrakhan + "GR", //Z#441 Europe/Athens + "GB", //Z#442 Europe/Belfast + "RS", //Z#443 Europe/Belgrade + "DE", //Z#444 Europe/Berlin + "SK", //Z#445 Europe/Bratislava + "BE", //Z#446 Europe/Brussels + "RO", //Z#447 Europe/Bucharest + "HU", //Z#448 Europe/Budapest + "DE", //Z#449 Europe/Busingen + "MD", //Z#450 Europe/Chisinau + "DK", //Z#451 Europe/Copenhagen + "IE", //Z#452 Europe/Dublin + "GI", //Z#453 Europe/Gibraltar + "GG", //Z#454 Europe/Guernsey + "FI", //Z#455 Europe/Helsinki + "IM", //Z#456 Europe/Isle_of_Man + "TR", //Z#457 Europe/Istanbul + "JE", //Z#458 Europe/Jersey + "RU", //Z#459 Europe/Kaliningrad + "UA", //Z#460 Europe/Kiev + "RU", //Z#461 Europe/Kirov + "PT", //Z#462 Europe/Lisbon + "SI", //Z#463 Europe/Ljubljana + "GB", //Z#464 Europe/London + "LU", //Z#465 Europe/Luxembourg + "ES", //Z#466 Europe/Madrid + "MT", //Z#467 Europe/Malta + "AX", //Z#468 Europe/Mariehamn + "BY", //Z#469 Europe/Minsk + "MC", //Z#470 Europe/Monaco + "RU", //Z#471 Europe/Moscow + "CY", //Z#472 Europe/Nicosia + "NO", //Z#473 Europe/Oslo + "FR", //Z#474 Europe/Paris + "ME", //Z#475 Europe/Podgorica + "CZ", //Z#476 Europe/Prague + "LV", //Z#477 Europe/Riga + "IT", //Z#478 Europe/Rome + "RU", //Z#479 Europe/Samara + "SM", //Z#480 Europe/San_Marino + "BA", //Z#481 Europe/Sarajevo + "RU", //Z#482 Europe/Saratov + "UA", //Z#483 Europe/Simferopol + "MK", //Z#484 Europe/Skopje + "BG", //Z#485 Europe/Sofia + "SE", //Z#486 Europe/Stockholm + "EE", //Z#487 Europe/Tallinn + "AL", //Z#488 Europe/Tirane + "MD", //Z#489 Europe/Tiraspol + "RU", //Z#490 Europe/Ulyanovsk + "UA", //Z#491 Europe/Uzhgorod + "LI", //Z#492 Europe/Vaduz + "VA", //Z#493 Europe/Vatican + "AT", //Z#494 Europe/Vienna + "LT", //Z#495 Europe/Vilnius + "RU", //Z#496 Europe/Volgograd + "PL", //Z#497 Europe/Warsaw + "HR", //Z#498 Europe/Zagreb + "UA", //Z#499 Europe/Zaporozhye + "CH", //Z#500 Europe/Zurich + "001",//Z#501 Factory + "GB", //Z#502 GB + "GB", //Z#503 GB-Eire + "001",//Z#504 GMT + "001",//Z#505 GMT+0 + "001",//Z#506 GMT-0 + "001",//Z#507 GMT0 + "001",//Z#508 Greenwich + "001",//Z#509 HST + "HK", //Z#510 Hongkong + "US", //Z#511 IET + "IN", //Z#512 IST + "IS", //Z#513 Iceland + "MG", //Z#514 Indian/Antananarivo + "IO", //Z#515 Indian/Chagos + "CX", //Z#516 Indian/Christmas + "CC", //Z#517 Indian/Cocos + "KM", //Z#518 Indian/Comoro + "TF", //Z#519 Indian/Kerguelen + "SC", //Z#520 Indian/Mahe + "MV", //Z#521 Indian/Maldives + "MU", //Z#522 Indian/Mauritius + "YT", //Z#523 Indian/Mayotte + "RE", //Z#524 Indian/Reunion + "IR", //Z#525 Iran + "IL", //Z#526 Israel + "JP", //Z#527 JST + "JM", //Z#528 Jamaica + "JP", //Z#529 Japan + "MH", //Z#530 Kwajalein + "LY", //Z#531 Libya + "001",//Z#532 MET + "WS", //Z#533 MIT + "001",//Z#534 MST + "001",//Z#535 MST7MDT + "MX", //Z#536 Mexico/BajaNorte + "MX", //Z#537 Mexico/BajaSur + "MX", //Z#538 Mexico/General + "AM", //Z#539 NET + "NZ", //Z#540 NST + "NZ", //Z#541 NZ + "NZ", //Z#542 NZ-CHAT + "US", //Z#543 Navajo + "PK", //Z#544 PLT + "US", //Z#545 PNT + "CN", //Z#546 PRC + "PR", //Z#547 PRT + "US", //Z#548 PST + "001",//Z#549 PST8PDT + "WS", //Z#550 Pacific/Apia + "NZ", //Z#551 Pacific/Auckland + "PG", //Z#552 Pacific/Bougainville + "NZ", //Z#553 Pacific/Chatham + "FM", //Z#554 Pacific/Chuuk + "CL", //Z#555 Pacific/Easter + "VU", //Z#556 Pacific/Efate + "KI", //Z#557 Pacific/Enderbury + "TK", //Z#558 Pacific/Fakaofo + "FJ", //Z#559 Pacific/Fiji + "TV", //Z#560 Pacific/Funafuti + "EC", //Z#561 Pacific/Galapagos + "PF", //Z#562 Pacific/Gambier + "SB", //Z#563 Pacific/Guadalcanal + "GU", //Z#564 Pacific/Guam + "US", //Z#565 Pacific/Honolulu + "UM", //Z#566 Pacific/Johnston + "KI", //Z#567 Pacific/Kiritimati + "FM", //Z#568 Pacific/Kosrae + "MH", //Z#569 Pacific/Kwajalein + "MH", //Z#570 Pacific/Majuro + "PF", //Z#571 Pacific/Marquesas + "UM", //Z#572 Pacific/Midway + "NR", //Z#573 Pacific/Nauru + "NU", //Z#574 Pacific/Niue + "NF", //Z#575 Pacific/Norfolk + "NC", //Z#576 Pacific/Noumea + "AS", //Z#577 Pacific/Pago_Pago + "PW", //Z#578 Pacific/Palau + "PN", //Z#579 Pacific/Pitcairn + "FM", //Z#580 Pacific/Pohnpei + "FM", //Z#581 Pacific/Ponape + "PG", //Z#582 Pacific/Port_Moresby + "CK", //Z#583 Pacific/Rarotonga + "MP", //Z#584 Pacific/Saipan + "AS", //Z#585 Pacific/Samoa + "PF", //Z#586 Pacific/Tahiti + "KI", //Z#587 Pacific/Tarawa + "TO", //Z#588 Pacific/Tongatapu + "FM", //Z#589 Pacific/Truk + "UM", //Z#590 Pacific/Wake + "WF", //Z#591 Pacific/Wallis + "FM", //Z#592 Pacific/Yap + "PL", //Z#593 Poland + "PT", //Z#594 Portugal + "TW", //Z#595 ROC + "KR", //Z#596 ROK + "SB", //Z#597 SST + "SG", //Z#598 Singapore + "001",//Z#599 SystemV/AST4 + "001",//Z#600 SystemV/AST4ADT + "001",//Z#601 SystemV/CST6 + "001",//Z#602 SystemV/CST6CDT + "001",//Z#603 SystemV/EST5 + "001",//Z#604 SystemV/EST5EDT + "001",//Z#605 SystemV/HST10 + "001",//Z#606 SystemV/MST7 + "001",//Z#607 SystemV/MST7MDT + "001",//Z#608 SystemV/PST8 + "001",//Z#609 SystemV/PST8PDT + "001",//Z#610 SystemV/YST9 + "001",//Z#611 SystemV/YST9YDT + "TR", //Z#612 Turkey + "001",//Z#613 UCT + "US", //Z#614 US/Alaska + "US", //Z#615 US/Aleutian + "US", //Z#616 US/Arizona + "US", //Z#617 US/Central + "US", //Z#618 US/East-Indiana + "US", //Z#619 US/Eastern + "US", //Z#620 US/Hawaii + "US", //Z#621 US/Indiana-Starke + "US", //Z#622 US/Michigan + "US", //Z#623 US/Mountain + "US", //Z#624 US/Pacific + "US", //Z#625 US/Pacific-New + "AS", //Z#626 US/Samoa + "001",//Z#627 UTC + "001",//Z#628 Universal + "VN", //Z#629 VST + "RU", //Z#630 W-SU + "001",//Z#631 WET + "001",//Z#632 Zulu } } diff --git a/source/data/rbnf/ars.txt b/source/data/rbnf/ars.txt new file mode 100644 index 0000000..8de1f41 --- /dev/null +++ b/source/data/rbnf/ars.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +ars{ + "%%ALIAS"{"ar"} +} diff --git a/source/data/rbnf/id.txt b/source/data/rbnf/id.txt index 44b49fa..0215fe6 100644 --- a/source/data/rbnf/id.txt +++ b/source/data/rbnf/id.txt @@ -4,8 +4,8 @@ id{ RBNFRules{ OrdinalRules{ "%digits-ordinal:", - "-x: ke\u2212>#,##0>;", - "0: ke=#,##0=;", + "-x: \u2212ke->#,##0>;", + "0: ke-=#,##0=;", } SpelloutRules{ "%spellout-numbering-year:", @@ -45,5 +45,5 @@ id{ "0: ke=%spellout-cardinal=;", } } - Version{"2.1.27.22"} + Version{"2.1.32.38"} } diff --git a/source/data/rbnf/ms.txt b/source/data/rbnf/ms.txt index 35a5711..3c40cba 100644 --- a/source/data/rbnf/ms.txt +++ b/source/data/rbnf/ms.txt @@ -4,8 +4,8 @@ ms{ RBNFRules{ OrdinalRules{ "%digits-ordinal:", - "-x: ke\u2212>#,##0>;", - "0: ke=#,##0=;", + "-x: \u2212ke->#,##0>;", + "0: ke-=#,##0=;", } SpelloutRules{ "%spellout-numbering-year:", @@ -47,5 +47,5 @@ ms{ "2: ke=%spellout-cardinal=;", } } - Version{"2.1.27.22"} + Version{"2.1.31.40"} } diff --git a/source/data/rbnf/rbnffiles.mk b/source/data/rbnf/rbnffiles.mk index 730707a..db913a0 100644 --- a/source/data/rbnf/rbnffiles.mk +++ b/source/data/rbnf/rbnffiles.mk @@ -1,17 +1,17 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -RBNF_CLDR_VERSION = %version% +RBNF_CLDR_VERSION = 31.0.1 # A list of txt's to build # Note: # # If you are thinking of modifying this file, READ THIS. # # Instead of changing this file [unless you want to check it back in], -# you should consider creating a '%local%' file in this same directory. +# you should consider creating a 'rbnflocal.mk' file in this same directory. # Then, you can have your local changes remain even if you upgrade or # reconfigure ICU. # -# Example '%local%' files: +# Example 'rbnflocal.mk' files: # # * To add an additional locale to the list: # _____________________________________________________ @@ -26,10 +26,10 @@ RBNF_CLDR_VERSION = %version% # Generated by LDML2ICUConverter, from LDML source files. # Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml) -RBNF_SYNTHETIC_ALIAS = es_DO.txt es_GT.txt es_HN.txt es_MX.txt\ - es_NI.txt es_PA.txt es_PR.txt es_SV.txt es_US.txt\ - in.txt iw.txt no.txt sh.txt zh_HK.txt\ - zh_Hant_HK.txt zh_MO.txt zh_TW.txt +RBNF_SYNTHETIC_ALIAS = ars.txt es_DO.txt es_GT.txt es_HN.txt\ + es_MX.txt es_NI.txt es_PA.txt es_PR.txt es_SV.txt\ + es_US.txt in.txt iw.txt no.txt sh.txt\ + zh_HK.txt zh_Hant_HK.txt zh_MO.txt zh_TW.txt # All aliases (to not be included under 'installed'), but not including root. diff --git a/source/data/rbnf/uk.txt b/source/data/rbnf/uk.txt index 5a85cbd..3df423e 100644 --- a/source/data/rbnf/uk.txt +++ b/source/data/rbnf/uk.txt @@ -53,21 +53,11 @@ uk{ "700: \u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "800: \u0432\u0456\u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "900: \u0434\u0435\u0432\u02BC\u044F\u0442\u0441\u043E\u0442[ >>];", - "1000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0430[ >>];", - "2000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0456[ >>];", - "5000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447[ >>];", - "1000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", - "1000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", + "1000: <%spellout-cardinal-feminine< $(cardinal,one{\u0442\u0438\u0441\u044F\u0447\u0430}few{\u0442\u0438\u0441\u044F\u0447\u0456}other{\u0442\u0438\u0441\u044F\u0447})$[ >>];", + "1000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u0439\u043E\u043D}few{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u044F\u0440\u0434}few{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", + "1000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u0439\u043E\u043D}few{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u044F\u0440\u0434}few{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", "1000000000000000000: =#,##0=;", "%spellout-cardinal-neuter:", "-x: \u043C\u0456\u043D\u0443\u0441 >>;", @@ -93,21 +83,11 @@ uk{ "700: \u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "800: \u0432\u0456\u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "900: \u0434\u0435\u0432\u02BC\u044F\u0442\u0441\u043E\u0442[ >>];", - "1000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0430[ >>];", - "2000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0456[ >>];", - "5000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447[ >>];", - "1000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", - "1000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", + "1000: <%spellout-cardinal-feminine< $(cardinal,one{\u0442\u0438\u0441\u044F\u0447\u0430}few{\u0442\u0438\u0441\u044F\u0447\u0456}other{\u0442\u0438\u0441\u044F\u0447})$[ >>];", + "1000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u0439\u043E\u043D}few{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u044F\u0440\u0434}few{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", + "1000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u0439\u043E\u043D}few{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u044F\u0440\u0434}few{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", "1000000000000000000: =#,##0=;", "%spellout-cardinal-feminine:", "-x: \u043C\u0456\u043D\u0443\u0441 >>;", @@ -133,23 +113,13 @@ uk{ "700: \u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "800: \u0432\u0456\u0441\u0456\u043C\u0441\u043E\u0442[ >>];", "900: \u0434\u0435\u0432\u02BC\u044F\u0442\u0441\u043E\u0442[ >>];", - "1000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0430[ >>];", - "2000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447\u0456[ >>];", - "5000: <%spellout-cardinal-feminine< \u0442\u0438\u0441\u044F\u0447[ >>];", - "1000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000: <%spellout-cardinal-masculine< \u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", - "1000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D[ >>];", - "2000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];", - "5000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];", - "1000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434[ >>];", - "2000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438[ >>];", - "5000000000000000: <%spellout-cardinal-masculine< \u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432[ >>];", + "1000: <%spellout-cardinal-feminine< $(cardinal,one{\u0442\u0438\u0441\u044F\u0447\u0430}few{\u0442\u0438\u0441\u044F\u0447\u0456}other{\u0442\u0438\u0441\u044F\u0447})$[ >>];", + "1000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u0439\u043E\u043D}few{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u043C\u0456\u043B\u044C\u044F\u0440\u0434}few{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u043C\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", + "1000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u0439\u043E\u043D}few{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0438}other{\u0431\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432})$[ >>];", + "1000000000000000: <%spellout-cardinal-masculine< $(cardinal,one{\u0431\u0456\u043B\u044C\u044F\u0440\u0434}few{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0438}other{\u0431\u0456\u043B\u044C\u044F\u0440\u0434\u0456\u0432})$[ >>];", "1000000000000000000: =#,##0=;", } } - Version{"2.1.27.22"} + Version{"2.1.30.62"} } diff --git a/source/data/region/af.txt b/source/data/region/af.txt index 60fd2ea..d830ebd 100644 --- a/source/data/region/af.txt +++ b/source/data/region/af.txt @@ -89,7 +89,7 @@ af{ CW{"Curaçao"} CX{"Kerseiland"} CY{"Siprus"} - CZ{"Tjeggiese Republiek"} + CZ{"Tjeggië"} DE{"Duitsland"} DG{"Diego Garcia"} DJ{"Djiboeti"} @@ -304,9 +304,9 @@ af{ Countries%variant{ CD{"Kongo (DRK)"} CG{"Kongo (Republiek die)"} - CZ{"Tjeggië"} + CZ{"Tjeggiese Republiek"} FK{"Falklandeilande (Malvinas)"} MK{"Macedonië (VJRM)"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} } diff --git a/source/data/region/agq.txt b/source/data/region/agq.txt index 621d854..0d92238 100644 --- a/source/data/region/agq.txt +++ b/source/data/region/agq.txt @@ -227,5 +227,5 @@ agq{ ZM{"Zambìa"} ZW{"Zìmbagbɛ̀"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ak.txt b/source/data/region/ak.txt index 672bb38..4410df3 100644 --- a/source/data/region/ak.txt +++ b/source/data/region/ak.txt @@ -227,5 +227,5 @@ ak{ ZM{"Zambia"} ZW{"Zembabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/am.txt b/source/data/region/am.txt index 340f19b..7932595 100644 --- a/source/data/region/am.txt +++ b/source/data/region/am.txt @@ -89,7 +89,7 @@ am{ CW{"ኩራሳዎ"} CX{"የገና ደሴት"} CY{"ሳይፕረስ"} - CZ{"ቼክ ሪፑብሊክ"} + CZ{"ቼቺያ"} DE{"ጀርመን"} DG{"ዲዬጎ ጋርሺያ"} DJ{"ጂቡቲ"} @@ -305,10 +305,10 @@ am{ CD{"ኮንጎ (የዲሞክራቲክ ሪፐብሊክ ኮንጎ)"} CG{"ኮንጎ (ሪፐብሊክ)"} CI{"አይቮሪኮስት"} - CZ{"ቼቺያ"} + CZ{"ቼክ ሪፑብሊክ"} FK{"ፎክላንድ ደሴቶች (ኢስላስ ማልቪናስ)"} MK{"መቄዶንያ (የቀድሞ የዩጎስላቭ መቄዶንያ ሪፐብሊክ)"} TL{"ምስራቅ ቲሞር"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ar.txt b/source/data/region/ar.txt index b43ea03..4f90ee9 100644 --- a/source/data/region/ar.txt +++ b/source/data/region/ar.txt @@ -89,7 +89,7 @@ ar{ CW{"كوراساو"} CX{"جزيرة الكريسماس"} CY{"قبرص"} - CZ{"جمهورية التشيك"} + CZ{"التشيك"} DE{"ألمانيا"} DG{"دييغو غارسيا"} DJ{"جيبوتي"} @@ -304,10 +304,10 @@ ar{ Countries%variant{ CD{"جمهورية الكونغو الديمقراطية"} CG{"جمهورية الكونغو"} - CZ{"التشيك"} + CZ{"جمهورية التشيك"} FK{"جزر فوكلاند - جزر مالفيناس"} MK{"مقدونيا- جمهورية مقدونيا اليوغسلافية السابقة"} TL{"تيمور الشرقية"} } - Version{"2.1.28.79"} + Version{"2.1.32.86"} } diff --git a/source/data/region/ar_AE.txt b/source/data/region/ar_AE.txt index 6b21071..176ea9f 100644 --- a/source/data/region/ar_AE.txt +++ b/source/data/region/ar_AE.txt @@ -5,5 +5,5 @@ ar_AE{ CI{"ساحل العاج"} TL{"التيمور الشرقية"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ar_LY.txt b/source/data/region/ar_LY.txt index 4a6ffeb..5b710fc 100644 --- a/source/data/region/ar_LY.txt +++ b/source/data/region/ar_LY.txt @@ -6,5 +6,5 @@ ar_LY{ MS{"مونتيسيرات"} UY{"أوروغواي"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ar_SA.txt b/source/data/region/ar_SA.txt index 7cebbac..667126e 100644 --- a/source/data/region/ar_SA.txt +++ b/source/data/region/ar_SA.txt @@ -8,5 +8,5 @@ ar_SA{ PM{"سان بيير وميكولون"} UY{"أوروغواي"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ars.txt b/source/data/region/ars.txt new file mode 100644 index 0000000..9bb22b9 --- /dev/null +++ b/source/data/region/ars.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +ars{ + "%%ALIAS"{"ar_SA"} +} diff --git a/source/data/region/as.txt b/source/data/region/as.txt index 5be0362..7219b1d 100644 --- a/source/data/region/as.txt +++ b/source/data/region/as.txt @@ -20,5 +20,5 @@ as{ US{"যুক্তৰাষ্ট্ৰ"} ZZ{"অজ্ঞাত বা অবৈধ অঞ্চল"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/asa.txt b/source/data/region/asa.txt index 133ddbe..cd52694 100644 --- a/source/data/region/asa.txt +++ b/source/data/region/asa.txt @@ -225,5 +225,5 @@ asa{ ZM{"Dhambia"} ZW{"Dhimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ast.txt b/source/data/region/ast.txt index 2a8b465..98f82fe 100644 --- a/source/data/region/ast.txt +++ b/source/data/region/ast.txt @@ -307,5 +307,5 @@ ast{ MK{"Macedonia (ARYDM)"} TL{"Timor Este"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/az.txt b/source/data/region/az.txt index 3971f01..596e885 100644 --- a/source/data/region/az.txt +++ b/source/data/region/az.txt @@ -89,7 +89,7 @@ az{ CW{"Kurasao"} CX{"Milad adası"} CY{"Kipr"} - CZ{"Çex Respublikası"} + CZ{"Çexiya"} DE{"Almaniya"} DG{"Dieqo Qarsiya"} DJ{"Cibuti"} @@ -305,10 +305,10 @@ az{ CD{"Konqo (KDR)"} CG{"Konqo (Respublika)"} CI{"Fil Dişi Sahili"} - CZ{"Çexiya"} + CZ{"Çex Respublikası"} FK{"Folklend adaları (Malvin adaları)"} MK{"Makedoniya (KYRM)"} TL{"Doğu Timor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/az_Cyrl.txt b/source/data/region/az_Cyrl.txt index d9c81b8..7b1151d 100644 --- a/source/data/region/az_Cyrl.txt +++ b/source/data/region/az_Cyrl.txt @@ -89,7 +89,7 @@ az_Cyrl{ CW{"Курасао"} CX{"Милад адасы"} CY{"Кипр"} - CZ{"Чех Республикасы"} + CZ{"Чехија"} DE{"Алманија"} DG{"Диего Гарсија"} DJ{"Ҹибути"} @@ -298,9 +298,9 @@ az_Cyrl{ Countries%variant{ CD{"Конго (КДР)"} CG{"Конго (Республика)"} - CZ{"Чехија"} + CZ{"Чех Республикасы"} FK{"Фолкленд адалары (Малвин адалары)"} MK{"Македонија (КЈРМ)"} } - Version{"2.1.27.40"} + Version{"2.1.31.74"} } diff --git a/source/data/region/az_Latn.txt b/source/data/region/az_Latn.txt index 4ce2adb..4c0b75a 100644 --- a/source/data/region/az_Latn.txt +++ b/source/data/region/az_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License az_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bas.txt b/source/data/region/bas.txt index 511a656..2f25c0f 100644 --- a/source/data/region/bas.txt +++ b/source/data/region/bas.txt @@ -224,5 +224,5 @@ bas{ ZM{"Zàmbià"} ZW{"Zìmbàbwê"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/be.txt b/source/data/region/be.txt index 731660f..f40a05e 100644 --- a/source/data/region/be.txt +++ b/source/data/region/be.txt @@ -307,5 +307,5 @@ be{ MK{"Македонія (БЮРМ)"} TL{"Усходні Тымор"} } - Version{"2.1.29.66"} + Version{"2.1.31.86"} } diff --git a/source/data/region/bem.txt b/source/data/region/bem.txt index f3b3946..f8a8172 100644 --- a/source/data/region/bem.txt +++ b/source/data/region/bem.txt @@ -4,5 +4,5 @@ bem{ Countries{ ZM{"Zambia"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bez.txt b/source/data/region/bez.txt index bdf1864..cdf822f 100644 --- a/source/data/region/bez.txt +++ b/source/data/region/bez.txt @@ -227,5 +227,5 @@ bez{ ZM{"Huzambia"} ZW{"Huzimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bg.txt b/source/data/region/bg.txt index 3f7ee9c..d3deeee 100644 --- a/source/data/region/bg.txt +++ b/source/data/region/bg.txt @@ -89,7 +89,7 @@ bg{ CW{"Кюрасао"} CX{"остров Рождество"} CY{"Кипър"} - CZ{"Чешка република"} + CZ{"Чехия"} DE{"Германия"} DG{"Диего Гарсия"} DJ{"Джибути"} @@ -304,9 +304,9 @@ bg{ CD{"Конго (ДРК)"} CG{"Конго (Република)"} CI{"Бряг на слоновата кост"} - CZ{"Чехия"} + CZ{"Чешка република"} FK{"Фолклендски острови (Малвински острови)"} MK{"Бивша югославска република Македония"} } - Version{"2.1.30.6"} + Version{"2.1.33.75"} } diff --git a/source/data/region/bm.txt b/source/data/region/bm.txt index 6fa71d9..4ae88f5 100644 --- a/source/data/region/bm.txt +++ b/source/data/region/bm.txt @@ -227,5 +227,5 @@ bm{ ZM{"Zanbi"} ZW{"Zimbabuwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bn.txt b/source/data/region/bn.txt index 112221f..dc0c411 100644 --- a/source/data/region/bn.txt +++ b/source/data/region/bn.txt @@ -89,7 +89,7 @@ bn{ CW{"কিউরাসাও"} CX{"ক্রিসমাস দ্বীপ"} CY{"সাইপ্রাস"} - CZ{"চেক প্রজাতন্ত্র"} + CZ{"চেচিয়া"} DE{"জার্মানি"} DG{"দিয়েগো গার্সিয়া"} DJ{"জিবুতি"} @@ -305,10 +305,10 @@ bn{ CD{"কঙ্গো(DRC)"} CG{"কঙ্গো (প্রজাতন্ত্র)"} CI{"আই ভরি"} - CZ{"চেচিয়া"} + CZ{"চেক প্রজাতন্ত্র"} FK{"ফকল্যান্ড আইল্যান্ড ( ইসল্যাস মাসভেনিস)"} MK{"মেসিডোনিয়া(FYROM)"} TL{"পূর্ব তিমুর"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} } diff --git a/source/data/region/bn_IN.txt b/source/data/region/bn_IN.txt index af9e16d..f2de4fe 100644 --- a/source/data/region/bn_IN.txt +++ b/source/data/region/bn_IN.txt @@ -9,5 +9,5 @@ bn_IN{ Countries%variant{ CD{"কঙ্গো (DRC)"} } - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bo.txt b/source/data/region/bo.txt index 25a58e2..164bb5b 100644 --- a/source/data/region/bo.txt +++ b/source/data/region/bo.txt @@ -15,5 +15,5 @@ bo{ US{"ཨ་མེ་རི་ཀ།"} ZZ{"མིའི་ཤེས་རྟོགས་མ་བྱུང་བའི་ཁོར་ཡུག"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/bo_IN.txt b/source/data/region/bo_IN.txt index 2e8b7d5..c031e66 100644 --- a/source/data/region/bo_IN.txt +++ b/source/data/region/bo_IN.txt @@ -4,5 +4,5 @@ bo_IN{ Countries{ 009{"ཨོཤི་ཡཱན་ན།"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/br.txt b/source/data/region/br.txt index 623adb3..393d593 100644 --- a/source/data/region/br.txt +++ b/source/data/region/br.txt @@ -307,5 +307,5 @@ br{ MK{"Makedonia (RYKM)"} TL{"Timor ar Reter"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/brx.txt b/source/data/region/brx.txt index 9582e55..0727e4f 100644 --- a/source/data/region/brx.txt +++ b/source/data/region/brx.txt @@ -281,5 +281,5 @@ brx{ ZW{"ज़ीम्बाब्वे"} ZZ{"अज्ञात या अवैध प्रदेश"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/bs.txt b/source/data/region/bs.txt index 4f220a2..ac00271 100644 --- a/source/data/region/bs.txt +++ b/source/data/region/bs.txt @@ -89,7 +89,7 @@ bs{ CW{"Kurasao"} CX{"Božićna Ostrva"} CY{"Kipar"} - CZ{"Češka Republika"} + CZ{"Češka"} DE{"Njemačka"} DG{"Dijego Garsija"} DJ{"Džibuti"} @@ -305,9 +305,9 @@ bs{ CD{"Kongo (DRC)"} CG{"Republika Kongo"} CI{"Obala Bjelokosti"} - CZ{"Češka"} + CZ{"Češka Republika"} FK{"Folklandska Ostrva (Malvinska Ostrva)"} MK{"Makedonija (BJR)"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/bs_Cyrl.txt b/source/data/region/bs_Cyrl.txt index e10e5b1..3f2548c 100644 --- a/source/data/region/bs_Cyrl.txt +++ b/source/data/region/bs_Cyrl.txt @@ -297,5 +297,5 @@ bs_Cyrl{ CG{"Конго (Република)"} FK{"Фокландска (Малвинска) острва"} } - Version{"2.1.28.76"} + Version{"2.1.32.72"} } diff --git a/source/data/region/bs_Latn.txt b/source/data/region/bs_Latn.txt index 20b4126..972dc01 100644 --- a/source/data/region/bs_Latn.txt +++ b/source/data/region/bs_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License bs_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ca.txt b/source/data/region/ca.txt index 54a27eb..c97fd69 100644 --- a/source/data/region/ca.txt +++ b/source/data/region/ca.txt @@ -89,7 +89,7 @@ ca{ CW{"Curaçao"} CX{"Illa Christmas"} CY{"Xipre"} - CZ{"República Txeca"} + CZ{"Txèquia"} DE{"Alemanya"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -304,9 +304,9 @@ ca{ Countries%variant{ CD{"Congo (República Democràtica del Congo)"} CG{"Congo (República del Congo)"} - CZ{"Txèquia"} + CZ{"República Txeca"} FK{"Illes Malvines (Illes Falkland)"} MK{"Macedònia (Antiga República Iugoslava de Macedònia)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ce.txt b/source/data/region/ce.txt index ade7c2e..36f9ef1 100644 --- a/source/data/region/ce.txt +++ b/source/data/region/ce.txt @@ -303,5 +303,5 @@ ce{ CD{"Конго (ДРК)"} FK{"Фолклендан гӀайренаш (Мальвинаш)"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/cgg.txt b/source/data/region/cgg.txt index a10602f..a0a7352 100644 --- a/source/data/region/cgg.txt +++ b/source/data/region/cgg.txt @@ -225,5 +225,5 @@ cgg{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/chr.txt b/source/data/region/chr.txt index c942b3f..26a3384 100644 --- a/source/data/region/chr.txt +++ b/source/data/region/chr.txt @@ -89,7 +89,7 @@ chr{ CW{"ᎫᎳᎨᎣ"} CX{"ᏓᏂᏍᏓᏲᎯᎲ ᎤᎦᏚᏛᎢ"} CY{"ᏌᎢᏆᏍ"} - CZ{"ᏤᎩ ᏍᎦᏚᎩ"} + CZ{"ᏤᎩᎠ"} DE{"ᎠᏂᏛᏥ"} DG{"ᏗᏰᎪ ᎦᏏᏯ"} DJ{"ᏥᏊᏗ"} @@ -302,10 +302,10 @@ chr{ Countries%variant{ CD{"ᎧᏂᎪ (DRC)"} CG{"ᎧᏂᎪ (ᏍᎦᏚᎩ)"} - CZ{"ᏤᎩᎠ"} + CZ{"ᏤᎩ ᏍᎦᏚᎩ"} FK{"ᏩᎩ ᏚᎦᏚᏛᎢ (ᎢᏍᎳᏍ ᎹᎸᏫᎾᏍ)"} MK{"ᎹᏎᏙᏂᏯ (FYROM)"} TL{"ᏗᎧᎸᎬᎢ ᏘᎼᎵ"} } - Version{"2.1.28.76"} + Version{"2.1.31.74"} } diff --git a/source/data/region/ckb.txt b/source/data/region/ckb.txt index 43e9803..1be8c06 100644 --- a/source/data/region/ckb.txt +++ b/source/data/region/ckb.txt @@ -196,5 +196,5 @@ ckb{ CD{"کۆماری دیموکراتیکی کۆنگۆ"} CG{"کۆماری کۆنگۆ"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} } diff --git a/source/data/region/cs.txt b/source/data/region/cs.txt index d1c9af1..18e61df 100644 --- a/source/data/region/cs.txt +++ b/source/data/region/cs.txt @@ -89,7 +89,7 @@ cs{ CW{"Curaçao"} CX{"Vánoční ostrov"} CY{"Kypr"} - CZ{"Česká republika"} + CZ{"Česko"} DE{"Německo"} DG{"Diego García"} DJ{"Džibutsko"} @@ -305,9 +305,9 @@ cs{ CD{"Kongo (DRK)"} CG{"Kongo (republika)"} CI{"Côte d’Ivoire"} - CZ{"Česko"} + CZ{"Česká republika"} FK{"Falklandské ostrovy (Malvíny)"} MK{"Makedonie (FYROM)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/cy.txt b/source/data/region/cy.txt index b4d26c2..617e23e 100644 --- a/source/data/region/cy.txt +++ b/source/data/region/cy.txt @@ -89,7 +89,7 @@ cy{ CW{"Curaçao"} CX{"Ynys y Nadolig"} CY{"Cyprus"} - CZ{"Gweriniaeth Tsiec"} + CZ{"Tsiecia"} DE{"Yr Almaen"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ cy{ CD{"Y Congo (G.Dd.C.)"} CG{"Y Congo (Gweriniaeth)"} CI{"Arfordir Ifori"} - CZ{"Tsiecia"} + CZ{"Gweriniaeth Tsiec"} FK{"Ynysoedd y Falkland (Ynysoedd y Malfinas)"} MK{"Macedonia (CWIM)"} TL{"Dwyrain Timor"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} } diff --git a/source/data/region/da.txt b/source/data/region/da.txt index 9e84d7c..bb6c165 100644 --- a/source/data/region/da.txt +++ b/source/data/region/da.txt @@ -308,5 +308,5 @@ da{ MK{"Den tidligere jugoslaviske republik Makedonien"} TL{"Østtimor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/dav.txt b/source/data/region/dav.txt index b45564d..678345d 100644 --- a/source/data/region/dav.txt +++ b/source/data/region/dav.txt @@ -227,5 +227,5 @@ dav{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/de.txt b/source/data/region/de.txt index 053e660..e96c3b8 100644 --- a/source/data/region/de.txt +++ b/source/data/region/de.txt @@ -89,7 +89,7 @@ de{ CW{"Curaçao"} CX{"Weihnachtsinsel"} CY{"Zypern"} - CZ{"Tschechische Republik"} + CZ{"Tschechien"} DE{"Deutschland"} DG{"Diego Garcia"} DJ{"Dschibuti"} @@ -305,9 +305,9 @@ de{ CD{"Kongo (Demokratische Republik)"} CG{"Kongo (Republik)"} CI{"Elfenbeinküste"} - CZ{"Tschechien"} + CZ{"Tschechische Republik"} FK{"Falklandinseln (Malwinen)"} MK{"Mazedonien (EJR)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/de_AT.txt b/source/data/region/de_AT.txt index d66970e..32a6e2e 100644 --- a/source/data/region/de_AT.txt +++ b/source/data/region/de_AT.txt @@ -4,5 +4,5 @@ de_AT{ Countries{ SJ{"Svalbard und Jan Mayen"} } - Version{"2.1.28.73"} + Version{"2.1.31.33"} } diff --git a/source/data/region/de_CH.txt b/source/data/region/de_CH.txt index fb84a03..8b9f599 100644 --- a/source/data/region/de_CH.txt +++ b/source/data/region/de_CH.txt @@ -11,5 +11,5 @@ de_CH{ SB{"Salomon-Inseln"} ZW{"Zimbabwe"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/region/dje.txt b/source/data/region/dje.txt index e902bed..efc132c 100644 --- a/source/data/region/dje.txt +++ b/source/data/region/dje.txt @@ -226,5 +226,5 @@ dje{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/dsb.txt b/source/data/region/dsb.txt index 7e546ed..fda82f0 100644 --- a/source/data/region/dsb.txt +++ b/source/data/region/dsb.txt @@ -307,5 +307,5 @@ dsb{ MK{"Makedońska (PRJ)"} TL{"Pódzajtšny Timor"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/dua.txt b/source/data/region/dua.txt index 4f53263..4b08de6 100644 --- a/source/data/region/dua.txt +++ b/source/data/region/dua.txt @@ -4,5 +4,5 @@ dua{ Countries{ CM{"Cameroun"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/dyo.txt b/source/data/region/dyo.txt index 0036f6b..2e29c8e 100644 --- a/source/data/region/dyo.txt +++ b/source/data/region/dyo.txt @@ -111,5 +111,5 @@ dyo{ TG{"Togo"} TH{"Tailand"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/dz.txt b/source/data/region/dz.txt index 5650543..f4fd909 100644 --- a/source/data/region/dz.txt +++ b/source/data/region/dz.txt @@ -303,5 +303,5 @@ dz{ MK{"མ་སེ་ཌོ་ནི་ཡ་ (ཡུ་གོ་སླཱ་བི་ཡ)"} TL{"ཤར་ཕྱོགས་ཏི་་མོར"} } - Version{"2.1.29.61"} + Version{"2.1.31.34"} } diff --git a/source/data/region/ebu.txt b/source/data/region/ebu.txt index 1833461..655d40f 100644 --- a/source/data/region/ebu.txt +++ b/source/data/region/ebu.txt @@ -227,5 +227,5 @@ ebu{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ee.txt b/source/data/region/ee.txt index 86b92f4..c1f772f 100644 --- a/source/data/region/ee.txt +++ b/source/data/region/ee.txt @@ -298,5 +298,5 @@ ee{ MK{"Makedonia (FYROM) nutome"} TL{"Ɣedzeƒe Timɔ nutome"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/el.txt b/source/data/region/el.txt index a824069..d8a886a 100644 --- a/source/data/region/el.txt +++ b/source/data/region/el.txt @@ -89,7 +89,7 @@ el{ CW{"Κουρασάο"} CX{"Νήσος των Χριστουγέννων"} CY{"Κύπρος"} - CZ{"Τσεχική Δημοκρατία"} + CZ{"Τσεχία"} DE{"Γερμανία"} DG{"Ντιέγκο Γκαρσία"} DJ{"Τζιμπουτί"} @@ -304,10 +304,10 @@ el{ Countries%variant{ CD{"Κονγκό"} CG{"Κονγκό (Δημοκρατία)"} - CZ{"Τσεχία"} + CZ{"Τσεχική Δημοκρατία"} FK{"Νήσοι Φόκλαντ (Νήσοι Μαλβίνας)"} MK{"Πρώην Γιουγκοσλαβική Δημοκρατία της Μακεδονίας (ΠΓΔΜ)"} TL{"Ανατολικό Τιμόρ"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/en.txt b/source/data/region/en.txt index 5e36c04..9caa96d 100644 --- a/source/data/region/en.txt +++ b/source/data/region/en.txt @@ -89,7 +89,7 @@ en{ CW{"Curaçao"} CX{"Christmas Island"} CY{"Cyprus"} - CZ{"Czech Republic"} + CZ{"Czechia"} DE{"Germany"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -308,10 +308,10 @@ en{ CD{"Congo (DRC)"} CG{"Congo (Republic)"} CI{"Ivory Coast"} - CZ{"Czechia"} + CZ{"Czech Republic"} FK{"Falkland Islands (Islas Malvinas)"} MK{"Macedonia (FYROM)"} TL{"East Timor"} } - Version{"2.1.30.50"} + Version{"2.1.32.59"} } diff --git a/source/data/region/en_150.txt b/source/data/region/en_150.txt index 249596a..78561e0 100644 --- a/source/data/region/en_150.txt +++ b/source/data/region/en_150.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_150{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_AG.txt b/source/data/region/en_AG.txt index 93d0c87..8a0d454 100644 --- a/source/data/region/en_AG.txt +++ b/source/data/region/en_AG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_AI.txt b/source/data/region/en_AI.txt index d55549d..07cb4ef 100644 --- a/source/data/region/en_AI.txt +++ b/source/data/region/en_AI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_AT.txt b/source/data/region/en_AT.txt index b4edb3f..09171c4 100644 --- a/source/data/region/en_AT.txt +++ b/source/data/region/en_AT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AT{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_AU.txt b/source/data/region/en_AU.txt index 1bfc3f0..8dff34f 100644 --- a/source/data/region/en_AU.txt +++ b/source/data/region/en_AU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_AU{ %%Parent{"en_001"} - Version{"2.1.30.50"} + Version{"2.1.32.62"} } diff --git a/source/data/region/en_BB.txt b/source/data/region/en_BB.txt index 7083244..84a0efd 100644 --- a/source/data/region/en_BB.txt +++ b/source/data/region/en_BB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_BE.txt b/source/data/region/en_BE.txt index c967ad1..7065545 100644 --- a/source/data/region/en_BE.txt +++ b/source/data/region/en_BE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_BM.txt b/source/data/region/en_BM.txt index 17ad945..a3b9186 100644 --- a/source/data/region/en_BM.txt +++ b/source/data/region/en_BM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_BS.txt b/source/data/region/en_BS.txt index 03e7849..95e82b5 100644 --- a/source/data/region/en_BS.txt +++ b/source/data/region/en_BS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_BW.txt b/source/data/region/en_BW.txt index d4c98cf..a73b7bc 100644 --- a/source/data/region/en_BW.txt +++ b/source/data/region/en_BW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_BZ.txt b/source/data/region/en_BZ.txt index 13545f6..5891076 100644 --- a/source/data/region/en_BZ.txt +++ b/source/data/region/en_BZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_BZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CA.txt b/source/data/region/en_CA.txt index 095353c..2fe08f5 100644 --- a/source/data/region/en_CA.txt +++ b/source/data/region/en_CA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CA{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CC.txt b/source/data/region/en_CC.txt index a2871e2..a54c911 100644 --- a/source/data/region/en_CC.txt +++ b/source/data/region/en_CC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CH.txt b/source/data/region/en_CH.txt index d055587..4f2d948 100644 --- a/source/data/region/en_CH.txt +++ b/source/data/region/en_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CH{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CK.txt b/source/data/region/en_CK.txt index 8bd2eba..f59d92a 100644 --- a/source/data/region/en_CK.txt +++ b/source/data/region/en_CK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CM.txt b/source/data/region/en_CM.txt index e0ae421..5aacc7b 100644 --- a/source/data/region/en_CM.txt +++ b/source/data/region/en_CM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CX.txt b/source/data/region/en_CX.txt index a5c8744..8c9c483 100644 --- a/source/data/region/en_CX.txt +++ b/source/data/region/en_CX.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_CY.txt b/source/data/region/en_CY.txt index 81d8657..46da087 100644 --- a/source/data/region/en_CY.txt +++ b/source/data/region/en_CY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_CY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_DE.txt b/source/data/region/en_DE.txt index a91a9c4..5d2d71a 100644 --- a/source/data/region/en_DE.txt +++ b/source/data/region/en_DE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DE{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_DG.txt b/source/data/region/en_DG.txt index af3ee11..3d758dd 100644 --- a/source/data/region/en_DG.txt +++ b/source/data/region/en_DG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_DK.txt b/source/data/region/en_DK.txt index 55574ee..5a92d6b 100644 --- a/source/data/region/en_DK.txt +++ b/source/data/region/en_DK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DK{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_DM.txt b/source/data/region/en_DM.txt index 4eaa7dc..b548583 100644 --- a/source/data/region/en_DM.txt +++ b/source/data/region/en_DM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_DM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_ER.txt b/source/data/region/en_ER.txt index 228a8a8..7fd2c9a 100644 --- a/source/data/region/en_ER.txt +++ b/source/data/region/en_ER.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ER{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_FI.txt b/source/data/region/en_FI.txt index 12aebe3..f699cc1 100644 --- a/source/data/region/en_FI.txt +++ b/source/data/region/en_FI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FI{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_FJ.txt b/source/data/region/en_FJ.txt index c439098..86f8e9d 100644 --- a/source/data/region/en_FJ.txt +++ b/source/data/region/en_FJ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FJ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_FK.txt b/source/data/region/en_FK.txt index 21a12bc..5df30b2 100644 --- a/source/data/region/en_FK.txt +++ b/source/data/region/en_FK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_FM.txt b/source/data/region/en_FM.txt index 78ffc47..eab91ca 100644 --- a/source/data/region/en_FM.txt +++ b/source/data/region/en_FM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_FM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GB.txt b/source/data/region/en_GB.txt index d57d893..6a57c80 100644 --- a/source/data/region/en_GB.txt +++ b/source/data/region/en_GB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GB{ %%Parent{"en_001"} - Version{"2.1.29.24"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GD.txt b/source/data/region/en_GD.txt index ab0594c..7921b24 100644 --- a/source/data/region/en_GD.txt +++ b/source/data/region/en_GD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GG.txt b/source/data/region/en_GG.txt index 8474cce..c0d3839 100644 --- a/source/data/region/en_GG.txt +++ b/source/data/region/en_GG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GH.txt b/source/data/region/en_GH.txt index 33fc5d4..b66f585 100644 --- a/source/data/region/en_GH.txt +++ b/source/data/region/en_GH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GI.txt b/source/data/region/en_GI.txt index 46d28cd..5fe0d68 100644 --- a/source/data/region/en_GI.txt +++ b/source/data/region/en_GI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GM.txt b/source/data/region/en_GM.txt index e0d4e60..1a05f40 100644 --- a/source/data/region/en_GM.txt +++ b/source/data/region/en_GM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_GY.txt b/source/data/region/en_GY.txt index dec9373..f7397d6 100644 --- a/source/data/region/en_GY.txt +++ b/source/data/region/en_GY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_GY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_HK.txt b/source/data/region/en_HK.txt index 7c42f22..4a04a10 100644 --- a/source/data/region/en_HK.txt +++ b/source/data/region/en_HK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_HK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_IE.txt b/source/data/region/en_IE.txt index acfab3f..18bb2f3 100644 --- a/source/data/region/en_IE.txt +++ b/source/data/region/en_IE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IE{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_IL.txt b/source/data/region/en_IL.txt index 1500279..76bee45 100644 --- a/source/data/region/en_IL.txt +++ b/source/data/region/en_IL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_IM.txt b/source/data/region/en_IM.txt index b5e5329..e66ecc0 100644 --- a/source/data/region/en_IM.txt +++ b/source/data/region/en_IM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_IN.txt b/source/data/region/en_IN.txt index 1c73a40..0ae302f 100644 --- a/source/data/region/en_IN.txt +++ b/source/data/region/en_IN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IN{ %%Parent{"en_001"} - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_IO.txt b/source/data/region/en_IO.txt index 73736a0..2b8ba3f 100644 --- a/source/data/region/en_IO.txt +++ b/source/data/region/en_IO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_IO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_JE.txt b/source/data/region/en_JE.txt index f31e9bf..c47ce4e 100644 --- a/source/data/region/en_JE.txt +++ b/source/data/region/en_JE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_JM.txt b/source/data/region/en_JM.txt index 67edbc7..d812c18 100644 --- a/source/data/region/en_JM.txt +++ b/source/data/region/en_JM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_JM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_KE.txt b/source/data/region/en_KE.txt index 26213f7..b11b581 100644 --- a/source/data/region/en_KE.txt +++ b/source/data/region/en_KE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KE{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_KI.txt b/source/data/region/en_KI.txt index 3f8c7e1..899b1ea 100644 --- a/source/data/region/en_KI.txt +++ b/source/data/region/en_KI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KI{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_KN.txt b/source/data/region/en_KN.txt index f755a2f..35fb03c 100644 --- a/source/data/region/en_KN.txt +++ b/source/data/region/en_KN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_KY.txt b/source/data/region/en_KY.txt index e26f444..bd356e9 100644 --- a/source/data/region/en_KY.txt +++ b/source/data/region/en_KY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_KY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_LC.txt b/source/data/region/en_LC.txt index 7abb21b..bfd0689 100644 --- a/source/data/region/en_LC.txt +++ b/source/data/region/en_LC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_LR.txt b/source/data/region/en_LR.txt index 07b6a83..3fc63c0 100644 --- a/source/data/region/en_LR.txt +++ b/source/data/region/en_LR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_LS.txt b/source/data/region/en_LS.txt index b5123bd..b723857 100644 --- a/source/data/region/en_LS.txt +++ b/source/data/region/en_LS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_LS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MG.txt b/source/data/region/en_MG.txt index 9eafad7..f967e69 100644 --- a/source/data/region/en_MG.txt +++ b/source/data/region/en_MG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MO.txt b/source/data/region/en_MO.txt index 0b1b6a5..f6dfb6a 100644 --- a/source/data/region/en_MO.txt +++ b/source/data/region/en_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MS.txt b/source/data/region/en_MS.txt index df8f657..a027fc6 100644 --- a/source/data/region/en_MS.txt +++ b/source/data/region/en_MS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MT.txt b/source/data/region/en_MT.txt index 23b6896..8464a2e 100644 --- a/source/data/region/en_MT.txt +++ b/source/data/region/en_MT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MU.txt b/source/data/region/en_MU.txt index bb0cc54..890b025 100644 --- a/source/data/region/en_MU.txt +++ b/source/data/region/en_MU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MW.txt b/source/data/region/en_MW.txt index 58ee57a..873b8e1 100644 --- a/source/data/region/en_MW.txt +++ b/source/data/region/en_MW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_MY.txt b/source/data/region/en_MY.txt index 064aa6e..b36d9ba 100644 --- a/source/data/region/en_MY.txt +++ b/source/data/region/en_MY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_MY{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NA.txt b/source/data/region/en_NA.txt index 26854fe..5f0af42 100644 --- a/source/data/region/en_NA.txt +++ b/source/data/region/en_NA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NA{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NF.txt b/source/data/region/en_NF.txt index 0a360ca..358d626 100644 --- a/source/data/region/en_NF.txt +++ b/source/data/region/en_NF.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NF{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NG.txt b/source/data/region/en_NG.txt index 5038494..745a114 100644 --- a/source/data/region/en_NG.txt +++ b/source/data/region/en_NG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NL.txt b/source/data/region/en_NL.txt index 21bbdc9..9d0d0cd 100644 --- a/source/data/region/en_NL.txt +++ b/source/data/region/en_NL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NL{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NR.txt b/source/data/region/en_NR.txt index 039e457..165856c 100644 --- a/source/data/region/en_NR.txt +++ b/source/data/region/en_NR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NR{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NU.txt b/source/data/region/en_NU.txt index eb82604..266914a 100644 --- a/source/data/region/en_NU.txt +++ b/source/data/region/en_NU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_NZ.txt b/source/data/region/en_NZ.txt index 0dd2106..c56ed84 100644 --- a/source/data/region/en_NZ.txt +++ b/source/data/region/en_NZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_NZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_PG.txt b/source/data/region/en_PG.txt index c1792a4..6aa4d92 100644 --- a/source/data/region/en_PG.txt +++ b/source/data/region/en_PG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_PH.txt b/source/data/region/en_PH.txt index 0ca66f9..080d0e6 100644 --- a/source/data/region/en_PH.txt +++ b/source/data/region/en_PH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_PK.txt b/source/data/region/en_PK.txt index ccbdf7f..fef2013 100644 --- a/source/data/region/en_PK.txt +++ b/source/data/region/en_PK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_PN.txt b/source/data/region/en_PN.txt index 5bf94f0..4094568 100644 --- a/source/data/region/en_PN.txt +++ b/source/data/region/en_PN.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PN{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_PW.txt b/source/data/region/en_PW.txt index 0af3d13..30541dc 100644 --- a/source/data/region/en_PW.txt +++ b/source/data/region/en_PW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_PW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_RW.txt b/source/data/region/en_RW.txt index 7bb21c0..76b4d89 100644 --- a/source/data/region/en_RW.txt +++ b/source/data/region/en_RW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_RW{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SB.txt b/source/data/region/en_SB.txt index cb507b5..e2de69a 100644 --- a/source/data/region/en_SB.txt +++ b/source/data/region/en_SB.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SB{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SC.txt b/source/data/region/en_SC.txt index 699d679..77c65fa 100644 --- a/source/data/region/en_SC.txt +++ b/source/data/region/en_SC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SD.txt b/source/data/region/en_SD.txt index 6206b27..87a33e2 100644 --- a/source/data/region/en_SD.txt +++ b/source/data/region/en_SD.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SD{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SE.txt b/source/data/region/en_SE.txt index d7fa572..31f586b 100644 --- a/source/data/region/en_SE.txt +++ b/source/data/region/en_SE.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SE{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SG.txt b/source/data/region/en_SG.txt index 66e6ec7..5250ec4 100644 --- a/source/data/region/en_SG.txt +++ b/source/data/region/en_SG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SG{ %%Parent{"en_001"} - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SH.txt b/source/data/region/en_SH.txt index 968da99..cf6ab49 100644 --- a/source/data/region/en_SH.txt +++ b/source/data/region/en_SH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SH{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SI.txt b/source/data/region/en_SI.txt index fedf1c0..a259492 100644 --- a/source/data/region/en_SI.txt +++ b/source/data/region/en_SI.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SI{ %%Parent{"en_150"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SL.txt b/source/data/region/en_SL.txt index 4005802..3e61485 100644 --- a/source/data/region/en_SL.txt +++ b/source/data/region/en_SL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SL{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SS.txt b/source/data/region/en_SS.txt index 002988b..2b3a430 100644 --- a/source/data/region/en_SS.txt +++ b/source/data/region/en_SS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SX.txt b/source/data/region/en_SX.txt index 9862443..ec1778f 100644 --- a/source/data/region/en_SX.txt +++ b/source/data/region/en_SX.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SX{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_SZ.txt b/source/data/region/en_SZ.txt index 47c792d..cc8b6f1 100644 --- a/source/data/region/en_SZ.txt +++ b/source/data/region/en_SZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_SZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TC.txt b/source/data/region/en_TC.txt index eaabbe1..852eb0f 100644 --- a/source/data/region/en_TC.txt +++ b/source/data/region/en_TC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TK.txt b/source/data/region/en_TK.txt index 797d773..020c31b 100644 --- a/source/data/region/en_TK.txt +++ b/source/data/region/en_TK.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TK{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TO.txt b/source/data/region/en_TO.txt index f1697f5..d27b6ec 100644 --- a/source/data/region/en_TO.txt +++ b/source/data/region/en_TO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TO{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TT.txt b/source/data/region/en_TT.txt index 599a8fe..21b8b30 100644 --- a/source/data/region/en_TT.txt +++ b/source/data/region/en_TT.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TT{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TV.txt b/source/data/region/en_TV.txt index a2c5021..4ebd07d 100644 --- a/source/data/region/en_TV.txt +++ b/source/data/region/en_TV.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TV{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_TZ.txt b/source/data/region/en_TZ.txt index c0c2960..5e30f2b 100644 --- a/source/data/region/en_TZ.txt +++ b/source/data/region/en_TZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_TZ{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_UG.txt b/source/data/region/en_UG.txt index 3b6c1e4..eaac010 100644 --- a/source/data/region/en_UG.txt +++ b/source/data/region/en_UG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_UG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_VC.txt b/source/data/region/en_VC.txt index de17869..12317cf 100644 --- a/source/data/region/en_VC.txt +++ b/source/data/region/en_VC.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VC{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_VG.txt b/source/data/region/en_VG.txt index e6a295b..ba6619b 100644 --- a/source/data/region/en_VG.txt +++ b/source/data/region/en_VG.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VG{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_VU.txt b/source/data/region/en_VU.txt index 2cecbf4..12b8824 100644 --- a/source/data/region/en_VU.txt +++ b/source/data/region/en_VU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_VU{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_WS.txt b/source/data/region/en_WS.txt index a3f70e3..8c90fd7 100644 --- a/source/data/region/en_WS.txt +++ b/source/data/region/en_WS.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_WS{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_ZA.txt b/source/data/region/en_ZA.txt index d528625..0461373 100644 --- a/source/data/region/en_ZA.txt +++ b/source/data/region/en_ZA.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZA{ %%Parent{"en_001"} - Version{"2.1.27.64"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_ZM.txt b/source/data/region/en_ZM.txt index 05bb346..19ed0d0 100644 --- a/source/data/region/en_ZM.txt +++ b/source/data/region/en_ZM.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZM{ %%Parent{"en_001"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/en_ZW.txt b/source/data/region/en_ZW.txt index e725848..bb5dbed 100644 --- a/source/data/region/en_ZW.txt +++ b/source/data/region/en_ZW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License en_ZW{ %%Parent{"en_001"} - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/region/eo.txt b/source/data/region/eo.txt index 582d65f..2f32876 100644 --- a/source/data/region/eo.txt +++ b/source/data/region/eo.txt @@ -226,5 +226,5 @@ eo{ ZM{"Zambio"} ZW{"Zimbabvo"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es.txt b/source/data/region/es.txt index c924983..52f9575 100644 --- a/source/data/region/es.txt +++ b/source/data/region/es.txt @@ -89,7 +89,7 @@ es{ CW{"Curazao"} CX{"Isla de Navidad"} CY{"Chipre"} - CZ{"República Checa"} + CZ{"Chequia"} DE{"Alemania"} DG{"Diego García"} DJ{"Yibuti"} @@ -303,10 +303,10 @@ es{ CD{"Congo (República Democrática del Congo)"} CG{"Congo (República)"} CI{"Costa de Marfil"} - CZ{"Chequia"} + CZ{"República Checa"} FK{"Islas Malvinas (Islas Falkland)"} MK{"Macedonia (ERYM)"} TL{"Timor Oriental"} } - Version{"2.1.28.80"} + Version{"2.1.32.59"} } diff --git a/source/data/region/es_419.txt b/source/data/region/es_419.txt index 7dfefa4..aa63c34 100644 --- a/source/data/region/es_419.txt +++ b/source/data/region/es_419.txt @@ -14,5 +14,5 @@ es_419{ GB{"R. U."} US{"EE.UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_AR.txt b/source/data/region/es_AR.txt index e3c763f..293c27f 100644 --- a/source/data/region/es_AR.txt +++ b/source/data/region/es_AR.txt @@ -12,5 +12,5 @@ es_AR{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_BO.txt b/source/data/region/es_BO.txt index 7eb5ebe..24baf97 100644 --- a/source/data/region/es_BO.txt +++ b/source/data/region/es_BO.txt @@ -12,5 +12,5 @@ es_BO{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_BR.txt b/source/data/region/es_BR.txt index 2f5e37a..e68498b 100644 --- a/source/data/region/es_BR.txt +++ b/source/data/region/es_BR.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_BR{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_BZ.txt b/source/data/region/es_BZ.txt new file mode 100644 index 0000000..aa10911 --- /dev/null +++ b/source/data/region/es_BZ.txt @@ -0,0 +1,6 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +es_BZ{ + %%Parent{"es_419"} + Version{"2.1.32.37"} +} diff --git a/source/data/region/es_CL.txt b/source/data/region/es_CL.txt index 3c62984..9104a11 100644 --- a/source/data/region/es_CL.txt +++ b/source/data/region/es_CL.txt @@ -13,5 +13,5 @@ es_CL{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_CO.txt b/source/data/region/es_CO.txt index 2ea330a..64bcdd0 100644 --- a/source/data/region/es_CO.txt +++ b/source/data/region/es_CO.txt @@ -12,5 +12,5 @@ es_CO{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_CR.txt b/source/data/region/es_CR.txt index 8247d05..e73da32 100644 --- a/source/data/region/es_CR.txt +++ b/source/data/region/es_CR.txt @@ -12,5 +12,5 @@ es_CR{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_CU.txt b/source/data/region/es_CU.txt index 791d7f5..66f010e 100644 --- a/source/data/region/es_CU.txt +++ b/source/data/region/es_CU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_CU{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_DO.txt b/source/data/region/es_DO.txt index a11127d..45336fb 100644 --- a/source/data/region/es_DO.txt +++ b/source/data/region/es_DO.txt @@ -12,5 +12,5 @@ es_DO{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_EC.txt b/source/data/region/es_EC.txt index 4028cf1..2d3caa0 100644 --- a/source/data/region/es_EC.txt +++ b/source/data/region/es_EC.txt @@ -12,5 +12,5 @@ es_EC{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_GT.txt b/source/data/region/es_GT.txt index b61e070..daafd97 100644 --- a/source/data/region/es_GT.txt +++ b/source/data/region/es_GT.txt @@ -12,5 +12,5 @@ es_GT{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_HN.txt b/source/data/region/es_HN.txt index 4ba6c66..dd708f6 100644 --- a/source/data/region/es_HN.txt +++ b/source/data/region/es_HN.txt @@ -12,5 +12,5 @@ es_HN{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_MX.txt b/source/data/region/es_MX.txt index 93cf5a3..588ce58 100644 --- a/source/data/region/es_MX.txt +++ b/source/data/region/es_MX.txt @@ -26,5 +26,5 @@ es_MX{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.28.76"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_NI.txt b/source/data/region/es_NI.txt index e7fc82c..6e0a645 100644 --- a/source/data/region/es_NI.txt +++ b/source/data/region/es_NI.txt @@ -12,5 +12,5 @@ es_NI{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_PA.txt b/source/data/region/es_PA.txt index 1bfc637..c249131 100644 --- a/source/data/region/es_PA.txt +++ b/source/data/region/es_PA.txt @@ -12,5 +12,5 @@ es_PA{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_PE.txt b/source/data/region/es_PE.txt index c896ee0..b548efb 100644 --- a/source/data/region/es_PE.txt +++ b/source/data/region/es_PE.txt @@ -12,5 +12,5 @@ es_PE{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_PR.txt b/source/data/region/es_PR.txt index 73516e3..3ffe260 100644 --- a/source/data/region/es_PR.txt +++ b/source/data/region/es_PR.txt @@ -8,5 +8,5 @@ es_PR{ Countries%short{ US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_PY.txt b/source/data/region/es_PY.txt index 461674c..07b7357 100644 --- a/source/data/region/es_PY.txt +++ b/source/data/region/es_PY.txt @@ -12,5 +12,5 @@ es_PY{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_SV.txt b/source/data/region/es_SV.txt index 1ebef4b..18fdab9 100644 --- a/source/data/region/es_SV.txt +++ b/source/data/region/es_SV.txt @@ -8,5 +8,5 @@ es_SV{ Countries%short{ US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_US.txt b/source/data/region/es_US.txt index 16019af..3fe422f 100644 --- a/source/data/region/es_US.txt +++ b/source/data/region/es_US.txt @@ -10,8 +10,7 @@ es_US{ } Countries%variant{ CI{"CI"} - CZ{"CZ"} TL{"TL"} } - Version{"2.1.27.99"} + Version{"2.1.31.74"} } diff --git a/source/data/region/es_UY.txt b/source/data/region/es_UY.txt index 2344e94..38b881e 100644 --- a/source/data/region/es_UY.txt +++ b/source/data/region/es_UY.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License es_UY{ %%Parent{"es_419"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/es_VE.txt b/source/data/region/es_VE.txt index eb0b019..5c8f409 100644 --- a/source/data/region/es_VE.txt +++ b/source/data/region/es_VE.txt @@ -12,5 +12,5 @@ es_VE{ GB{"RU"} US{"EE. UU."} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/et.txt b/source/data/region/et.txt index 453e35a..9c6bfa5 100644 --- a/source/data/region/et.txt +++ b/source/data/region/et.txt @@ -89,7 +89,7 @@ et{ CW{"Curaçao"} CX{"Jõulusaar"} CY{"Küpros"} - CZ{"Tšehhi"} + CZ{"Tšehhia"} DE{"Saksamaa"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ et{ CD{"Kongo-Kinshasa"} CG{"Kongo-Brazzaville"} CI{"Elevandiluurannik"} - CZ{"Tšehhia"} + CZ{"Tšehhi"} FK{"Malviini saared"} MK{"Makedoonia Vabariik"} TL{"Timor-Leste"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/eu.txt b/source/data/region/eu.txt index d156698..8e9040f 100644 --- a/source/data/region/eu.txt +++ b/source/data/region/eu.txt @@ -89,7 +89,7 @@ eu{ CW{"Curaçao"} CX{"Christmas uhartea"} CY{"Zipre"} - CZ{"Txekiar Errepublika"} + CZ{"Txekia"} DE{"Alemania"} DG{"Diego Garcia"} DJ{"Djibuti"} @@ -302,10 +302,10 @@ eu{ Countries%variant{ CD{"Kongo (KED)"} CG{"Kongo (errepublika)"} - CZ{"Txekia"} + CZ{"Txekiar Errepublika"} FK{"Falkland uharteak (Malvina uharteak)"} MK{"Mazedonia (Mazedoniako Yugoslaviar Errepublika ohia)"} TL{"Timor ekialdea"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ewo.txt b/source/data/region/ewo.txt index 17aec91..b56eb02 100644 --- a/source/data/region/ewo.txt +++ b/source/data/region/ewo.txt @@ -227,5 +227,5 @@ ewo{ ZM{"Zambí"} ZW{"Zimbabwé"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/fa.txt b/source/data/region/fa.txt index 1c5a4ff..8623b37 100644 --- a/source/data/region/fa.txt +++ b/source/data/region/fa.txt @@ -305,10 +305,9 @@ fa{ Countries%variant{ CD{"کنگو (جمهوری دموکراتیک)"} CG{"کنگو (جمهوری)"} - CZ{"CZ"} FK{"جزایر فالکلند (ایسلاس مالویناس)"} MK{"مقدونیه (جمهوری سابقاً یوگسلاو)"} TL{"تیمور شرقی"} } - Version{"2.1.29.44"} + Version{"2.1.32.59"} } diff --git a/source/data/region/fa_AF.txt b/source/data/region/fa_AF.txt index 142a46a..b621eae 100644 --- a/source/data/region/fa_AF.txt +++ b/source/data/region/fa_AF.txt @@ -95,5 +95,5 @@ fa_AF{ XK{"کوسوا"} ZW{"زیمبابوی"} } - Version{"2.1.29.44"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ff.txt b/source/data/region/ff.txt index 5e712ac..a7a6e74 100644 --- a/source/data/region/ff.txt +++ b/source/data/region/ff.txt @@ -227,5 +227,5 @@ ff{ ZM{"Sammbi"} ZW{"Simbaabuwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/fi.txt b/source/data/region/fi.txt index 24824c2..51e642f 100644 --- a/source/data/region/fi.txt +++ b/source/data/region/fi.txt @@ -89,7 +89,7 @@ fi{ CW{"Curaçao"} CX{"Joulusaari"} CY{"Kypros"} - CZ{"Tšekki"} + CZ{"Tšekinmaa"} DE{"Saksa"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ fi{ CD{"Kongo-Kinshasa"} CG{"Kongo-Brazzaville"} CI{"Côte d’Ivoire"} - CZ{"Tšekinmaa"} + CZ{"Tšekki"} FK{"Falklandinsaaret (Malvinassaaret)"} MK{"EJT Makedonia"} TL{"Timor-Leste"} } - Version{"2.1.29.88"} + Version{"2.1.32.59"} } diff --git a/source/data/region/fil.txt b/source/data/region/fil.txt index d442b36..6cdf951 100644 --- a/source/data/region/fil.txt +++ b/source/data/region/fil.txt @@ -89,7 +89,7 @@ fil{ CW{"Curaçao"} CX{"Christmas Island"} CY{"Cyprus"} - CZ{"Czech Republic"} + CZ{"Czechia"} DE{"Germany"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ fil{ CD{"Congo (DRC)"} CG{"Congo (Republika)"} CI{"Ivory Coast"} - CZ{"Czechia"} + CZ{"Czech Republic"} FK{"Falkland Islands (Islas Malvinas)"} MK{"Macedonia (FYROM)"} TL{"East Timor"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/fo.txt b/source/data/region/fo.txt index 0c99fc4..3263714 100644 --- a/source/data/region/fo.txt +++ b/source/data/region/fo.txt @@ -302,5 +302,5 @@ fo{ Countries%variant{ MK{"Makedónia (FJM)"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/fr.txt b/source/data/region/fr.txt index 3089740..448e823 100644 --- a/source/data/region/fr.txt +++ b/source/data/region/fr.txt @@ -89,7 +89,7 @@ fr{ CW{"Curaçao"} CX{"Île Christmas"} CY{"Chypre"} - CZ{"République tchèque"} + CZ{"Tchéquie"} DE{"Allemagne"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -304,10 +304,10 @@ fr{ Countries%variant{ CD{"Congo (RDC)"} CG{"République du Congo"} - CZ{"Tchéquie"} + CZ{"République tchèque"} FK{"Îles Falkland"} MK{"Macédoine (ARYM)"} TL{"Timor-Oriental"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/fr_BE.txt b/source/data/region/fr_BE.txt index e3f61ce..b8a4a42 100644 --- a/source/data/region/fr_BE.txt +++ b/source/data/region/fr_BE.txt @@ -5,5 +5,5 @@ fr_BE{ BN{"Brunei"} GS{"Îles Géorgie du Sud et Sandwich du Sud"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/fr_CA.txt b/source/data/region/fr_CA.txt index 073680c..932bea5 100644 --- a/source/data/region/fr_CA.txt +++ b/source/data/region/fr_CA.txt @@ -38,5 +38,5 @@ fr_CA{ FK{"îles Falkland (Malouines)"} TL{"Timor oriental"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/fur.txt b/source/data/region/fur.txt index 9719858..9b5b763 100644 --- a/source/data/region/fur.txt +++ b/source/data/region/fur.txt @@ -296,5 +296,5 @@ fur{ FK{"Isulis Falkland (Isulis Malvinas)"} MK{"Macedonie (FYROM)"} } - Version{"2.1.28.76"} + Version{"2.1.31.33"} } diff --git a/source/data/region/fy.txt b/source/data/region/fy.txt index e0b871e..c1ce596 100644 --- a/source/data/region/fy.txt +++ b/source/data/region/fy.txt @@ -305,5 +305,5 @@ fy{ FK{"Falklâneilannen (Islas Malvinas)"} MK{"Macedonië (FYROM)"} } - Version{"2.1.29.44"} + Version{"2.1.31.86"} } diff --git a/source/data/region/ga.txt b/source/data/region/ga.txt index 49210b7..a2c9478 100644 --- a/source/data/region/ga.txt +++ b/source/data/region/ga.txt @@ -307,5 +307,5 @@ ga{ FK{"Oileáin Fháclainne (Islas Malvinas)"} MK{"An Mhacadóin (PIIM)"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/gd.txt b/source/data/region/gd.txt index a56add5..494f06a 100644 --- a/source/data/region/gd.txt +++ b/source/data/region/gd.txt @@ -89,7 +89,7 @@ gd{ CW{"Curaçao"} CX{"Eilean na Nollaig"} CY{"Cìopras"} - CZ{"Poblachd na Seice"} + CZ{"An t-Seic"} DE{"A’ Ghearmailt"} DG{"Diego Garcia"} DJ{"Diobùtaidh"} @@ -303,10 +303,10 @@ gd{ CD{"A’ Chongo (PDC)"} CG{"A’ Chongo"} CI{"An Costa Ìbhri"} - CZ{"An t-Seic"} + CZ{"Poblachd na Seice"} FK{"Na h-Eileanan Fàclannach (Islas Malvinas)"} MK{"A’ Mhasadon (FYROM)"} TL{"Tìomor an Ear"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/gl.txt b/source/data/region/gl.txt index ecec12e..473ce43 100644 --- a/source/data/region/gl.txt +++ b/source/data/region/gl.txt @@ -89,7 +89,7 @@ gl{ CW{"Curaçao"} CX{"Illa de Nadal"} CY{"Chipre"} - CZ{"República Checa"} + CZ{"Chequia"} DE{"Alemaña"} DG{"Diego García"} DJ{"Djibuti"} @@ -304,9 +304,9 @@ gl{ Countries%variant{ CD{"Congo (RDC)"} CG{"Congo (RC)"} - CZ{"Chequia"} + CZ{"República Checa"} FK{"Illas Malvinas (Falkland)"} MK{"Macedonia (ARIM)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/gsw.txt b/source/data/region/gsw.txt index 6fb0ce2..b48b3ac 100644 --- a/source/data/region/gsw.txt +++ b/source/data/region/gsw.txt @@ -288,5 +288,5 @@ gsw{ Countries%variant{ MK{"Mazedoonie (EJRM)"} } - Version{"2.1.28.76"} + Version{"2.1.32.59"} } diff --git a/source/data/region/gu.txt b/source/data/region/gu.txt index 755be95..3f55fea 100644 --- a/source/data/region/gu.txt +++ b/source/data/region/gu.txt @@ -89,7 +89,7 @@ gu{ CW{"ક્યુરાસાઓ"} CX{"ક્રિસમસ આઇલેન્ડ"} CY{"સાયપ્રસ"} - CZ{"ચેક રીપબ્લિક"} + CZ{"ચેકીયા"} DE{"જર્મની"} DG{"ડિએગો ગારસિઆ"} DJ{"જીબૌટી"} @@ -305,10 +305,10 @@ gu{ CD{"કોંગો (ડીઆરસી)"} CG{"કોંગો (પ્રજાસત્તાક)"} CI{"આઇવરી કોસ્ટ"} - CZ{"ચેકીયા"} + CZ{"ચેક રીપબ્લિક"} FK{"ફૉકલેન્ડ ટાપુઓ (ઇસ્લાસ માલવિનસ)"} MK{"મેસેડોનિયા (FYROM)"} TL{"પૂર્વ તિમોર"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/guz.txt b/source/data/region/guz.txt index 1d78bc0..2b2155c 100644 --- a/source/data/region/guz.txt +++ b/source/data/region/guz.txt @@ -227,5 +227,5 @@ guz{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/gv.txt b/source/data/region/gv.txt index 9cbf1f6..bdc266c 100644 --- a/source/data/region/gv.txt +++ b/source/data/region/gv.txt @@ -5,5 +5,5 @@ gv{ GB{"Rywvaneth Unys"} IM{"Ellan Vannin"} } - Version{"2.1.27.40"} + Version{"2.1.31.34"} } diff --git a/source/data/region/ha.txt b/source/data/region/ha.txt index 7c69a2c..418c438 100644 --- a/source/data/region/ha.txt +++ b/source/data/region/ha.txt @@ -227,5 +227,5 @@ ha{ ZM{"Zambiya"} ZW{"Zimbabuwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/haw.txt b/source/data/region/haw.txt index 0f75608..bcd00e6 100644 --- a/source/data/region/haw.txt +++ b/source/data/region/haw.txt @@ -23,5 +23,5 @@ haw{ RU{"Lūkia"} US{"ʻAmelika Hui Pū ʻIa"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/he.txt b/source/data/region/he.txt index 2c68a73..3d51601 100644 --- a/source/data/region/he.txt +++ b/source/data/region/he.txt @@ -89,7 +89,7 @@ he{ CW{"קוראסאו"} CX{"האי כריסטמס"} CY{"קפריסין"} - CZ{"הרפובליקה הצ׳כית"} + CZ{"צ׳כיה"} DE{"גרמניה"} DG{"דייגו גרסיה"} DJ{"ג׳יבוטי"} @@ -303,10 +303,10 @@ he{ Countries%variant{ CD{"קונגו (הרפובליקה הדמוקרטית של קונגו)"} CG{"קונגו (רפובליקה)"} - CZ{"צ׳כיה"} + CZ{"הרפובליקה הצ׳כית"} FK{"איי פוקלנד (איי מלווינס)"} MK{"מקדוניה (הרפובליקה היוגוסלבית לשעבר מקדוניה)"} TL{"מזרח טימור"} } - Version{"2.1.29.27"} + Version{"2.1.32.59"} } diff --git a/source/data/region/hi.txt b/source/data/region/hi.txt index 35b405d..8c3c620 100644 --- a/source/data/region/hi.txt +++ b/source/data/region/hi.txt @@ -89,7 +89,7 @@ hi{ CW{"क्यूरासाओ"} CX{"क्रिसमस द्वीप"} CY{"साइप्रस"} - CZ{"चेक गणराज्य"} + CZ{"चेकिया"} DE{"जर्मनी"} DG{"डिएगो गार्सिया"} DJ{"जिबूती"} @@ -305,10 +305,10 @@ hi{ CD{"कांगो (डीआरसी)"} CG{"कांगो (गणराज्य)"} CI{"आइवरी कोस्ट"} - CZ{"चेकिया"} + CZ{"चेक गणराज्य"} FK{"फ़ॉकलैंड द्वीपसमूह (इज़्लास माल्विनास)"} MK{"मैसिडोनिया (FYROM)"} TL{"पूर्वी तिमोर"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/hr.txt b/source/data/region/hr.txt index fcdf380..c775f73 100644 --- a/source/data/region/hr.txt +++ b/source/data/region/hr.txt @@ -89,7 +89,7 @@ hr{ CW{"Curaçao"} CX{"Božićni otok"} CY{"Cipar"} - CZ{"Češka Republika"} + CZ{"Češka"} DE{"Njemačka"} DG{"Diego Garcia"} DJ{"Džibuti"} @@ -305,10 +305,10 @@ hr{ CD{"Kongo (DRK)"} CG{"Kongo (RK)"} CI{"Bjelokosna Obala"} - CZ{"Češka"} + CZ{"Češka Republika"} FK{"Falklandski otoci (Malvini)"} MK{"Makedonija (BJRM)"} TL{"Istočni Timor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/hsb.txt b/source/data/region/hsb.txt index c627b2e..0843b57 100644 --- a/source/data/region/hsb.txt +++ b/source/data/region/hsb.txt @@ -307,5 +307,5 @@ hsb{ MK{"Makedonska (FYROM)"} TL{"Wuchodny Timor"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/hu.txt b/source/data/region/hu.txt index cc3c23b..fe01bfe 100644 --- a/source/data/region/hu.txt +++ b/source/data/region/hu.txt @@ -307,5 +307,5 @@ hu{ FK{"Falkland-szigetek (Malvin-szigetek)"} MK{"Macedónia (MVJK)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/hy.txt b/source/data/region/hy.txt index da7b507..ff562e3 100644 --- a/source/data/region/hy.txt +++ b/source/data/region/hy.txt @@ -309,5 +309,5 @@ hy{ MK{"Մակեդոնիա (ՄՆՀՀ)"} TL{"Արևելյան Թիմոր"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/id.txt b/source/data/region/id.txt index 2477fa4..50e78f2 100644 --- a/source/data/region/id.txt +++ b/source/data/region/id.txt @@ -89,7 +89,7 @@ id{ CW{"Curaçao"} CX{"Pulau Christmas"} CY{"Siprus"} - CZ{"Republik Cheska"} + CZ{"Cheska"} DE{"Jerman"} DG{"Diego Garcia"} DJ{"Jibuti"} @@ -305,10 +305,10 @@ id{ CD{"Kongo (RDK)"} CG{"Kongo (Republik)"} CI{"Ivory Coast"} - CZ{"Cheska"} + CZ{"Republik Cheska"} FK{"Kepulauan Malvinas (Falkland)"} MK{"Makedonia (BRY)"} TL{"Timor Timur"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ig.txt b/source/data/region/ig.txt index 3d50137..4bbba32 100644 --- a/source/data/region/ig.txt +++ b/source/data/region/ig.txt @@ -11,5 +11,5 @@ ig{ MV{"Maldivesa"} NG{"Nigeria"} } - Version{"2.1.27.84"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ii.txt b/source/data/region/ii.txt index 0811ac4..76b95fc 100644 --- a/source/data/region/ii.txt +++ b/source/data/region/ii.txt @@ -14,5 +14,5 @@ ii{ US{"ꂰꇩ"} ZZ{"ꃅꄷꅉꀋꐚꌠ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/is.txt b/source/data/region/is.txt index 38b18b4..7dcb596 100644 --- a/source/data/region/is.txt +++ b/source/data/region/is.txt @@ -308,5 +308,5 @@ is{ MK{"Makedónía (Fyrrverandi lýðveldi Júgóslavíu)"} TL{"Austur-Tímor"} } - Version{"2.1.29.65"} + Version{"2.1.32.59"} } diff --git a/source/data/region/it.txt b/source/data/region/it.txt index 0157280..ab3a845 100644 --- a/source/data/region/it.txt +++ b/source/data/region/it.txt @@ -89,7 +89,7 @@ it{ CW{"Curaçao"} CX{"Isola Christmas"} CY{"Cipro"} - CZ{"Repubblica Ceca"} + CZ{"Cèchia"} DE{"Germania"} DG{"Diego Garcia"} DJ{"Gibuti"} @@ -260,7 +260,7 @@ it{ TH{"Thailandia"} TJ{"Tagikistan"} TK{"Tokelau"} - TL{"Timor Leste"} + TL{"Timor Est"} TM{"Turkmenistan"} TN{"Tunisia"} TO{"Tonga"} @@ -305,10 +305,10 @@ it{ CD{"Congo (RDC)"} CG{"Congo (Repubblica)"} CI{"Côte d’Ivoire"} - CZ{"Cèchia"} + CZ{"Repubblica Ceca"} FK{"Isole Falkland (Isole Malvine)"} MK{"Ex Repubblica Jugoslava di Macedonia"} - TL{"Timor Est"} + TL{"Timor Leste"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} } diff --git a/source/data/region/ja.txt b/source/data/region/ja.txt index dd775e8..ee9aa5c 100644 --- a/source/data/region/ja.txt +++ b/source/data/region/ja.txt @@ -89,7 +89,7 @@ ja{ CW{"キュラソー"} CX{"クリスマス島"} CY{"キプロス"} - CZ{"チェコ共和国"} + CZ{"チェコ"} DE{"ドイツ"} DG{"ディエゴガルシア島"} DJ{"ジブチ"} @@ -305,10 +305,10 @@ ja{ CD{"コンゴ民主共和国"} CG{"コンゴ共和国"} CI{"象牙海岸"} - CZ{"チェコ"} + CZ{"チェコ共和国"} FK{"フォークランド諸島 (マルビーナス諸島)"} MK{"マケドニア(旧ユーゴスラビア共和国)"} TL{"東チモール"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/jgo.txt b/source/data/region/jgo.txt index 6ba5569..4548daa 100644 --- a/source/data/region/jgo.txt +++ b/source/data/region/jgo.txt @@ -85,5 +85,5 @@ jgo{ ZW{"Zimbámbwɛ"} ZZ{"ŋgɔŋ yi pɛ́ ká kɛ́ jʉɔ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/jmc.txt b/source/data/region/jmc.txt index 9e38105..29f4ac5 100644 --- a/source/data/region/jmc.txt +++ b/source/data/region/jmc.txt @@ -227,5 +227,5 @@ jmc{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ka.txt b/source/data/region/ka.txt index c6fea5a..ddd2fe6 100644 --- a/source/data/region/ka.txt +++ b/source/data/region/ka.txt @@ -89,7 +89,7 @@ ka{ CW{"კიურასაო"} CX{"შობის კუნძული"} CY{"კვიპროსი"} - CZ{"ჩეხეთის რესპუბლიკა"} + CZ{"ჩეხეთი"} DE{"გერმანია"} DG{"დიეგო-გარსია"} DJ{"ჯიბუტი"} @@ -305,9 +305,9 @@ ka{ CD{"კონგო (კონგოს დემოკრატიული რესპუბლიკა)"} CG{"კონგო (რესპუბლიკა)"} CI{"სპილოს ძვლის სანაპირო"} - CZ{"ჩეხეთი"} + CZ{"ჩეხეთის რესპუბლიკა"} FK{"ფოლკლენდის კუნძულები (მალვინის კუნძულები)"} MK{"მაკედონია (ყოფილი იუგოსლავიის რესპუბლიკა მაკედონია)"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} } diff --git a/source/data/region/kab.txt b/source/data/region/kab.txt index e2c1404..c15dca7 100644 --- a/source/data/region/kab.txt +++ b/source/data/region/kab.txt @@ -227,5 +227,5 @@ kab{ ZM{"Zambya"} ZW{"Zimbabwi"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kam.txt b/source/data/region/kam.txt index 87b0391..8f6f695 100644 --- a/source/data/region/kam.txt +++ b/source/data/region/kam.txt @@ -227,5 +227,5 @@ kam{ ZM{"Nzambia"} ZW{"Nzimbambwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kde.txt b/source/data/region/kde.txt index 40d56d8..7bf80a0 100644 --- a/source/data/region/kde.txt +++ b/source/data/region/kde.txt @@ -227,5 +227,5 @@ kde{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kea.txt b/source/data/region/kea.txt index c8d5483..0d9f6da 100644 --- a/source/data/region/kea.txt +++ b/source/data/region/kea.txt @@ -89,7 +89,7 @@ kea{ CW{"Kurasau"} CX{"Ilha di Natal"} CY{"Xipri"} - CZ{"Repúblika Txeka"} + CZ{"Txékia"} DE{"Alimanha"} DG{"Diegu Garsia"} DJ{"Djibuti"} @@ -302,9 +302,9 @@ kea{ CD{"Repúblika Dimokrátika di Kongu"} CG{"Repúblika di Kongu"} CI{"Kosta di Marfin (Côte d’Ivoire)"} - CZ{"Txékia"} + CZ{"Repúblika Txeka"} FK{"Ilhas Falkland (Ilhas Malvinas)"} MK{"Masidónia (FYROM)"} } - Version{"2.1.27.46"} + Version{"2.1.31.74"} } diff --git a/source/data/region/khq.txt b/source/data/region/khq.txt index 40397f3..21f940e 100644 --- a/source/data/region/khq.txt +++ b/source/data/region/khq.txt @@ -227,5 +227,5 @@ khq{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ki.txt b/source/data/region/ki.txt index 99bb8f2..8f3c350 100644 --- a/source/data/region/ki.txt +++ b/source/data/region/ki.txt @@ -227,5 +227,5 @@ ki{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kk.txt b/source/data/region/kk.txt index 2e1f7a2..70d0713 100644 --- a/source/data/region/kk.txt +++ b/source/data/region/kk.txt @@ -89,7 +89,7 @@ kk{ CW{"Кюрасао"} CX{"Рождество аралы"} CY{"Кипр"} - CZ{"Чех Республикасы"} + CZ{"Чехия"} DE{"Германия"} DG{"Диего-Гарсия"} DJ{"Джибути"} @@ -305,10 +305,10 @@ kk{ CD{"Конго Демократиялық Республикасы"} CG{"Конго Республикасы"} CI{"Піл Сүйегі Жағалауы"} - CZ{"Чехия"} + CZ{"Чех Республикасы"} FK{"Фолкленд аралдары (Мальвин аралдары)"} MK{"Македония Республикасы"} TL{"Шығыс Тимор"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/kkj.txt b/source/data/region/kkj.txt index fbc4635..ad3242f 100644 --- a/source/data/region/kkj.txt +++ b/source/data/region/kkj.txt @@ -4,5 +4,5 @@ kkj{ Countries{ CM{"Kamɛrun"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kl.txt b/source/data/region/kl.txt index acee845..b75bd6f 100644 --- a/source/data/region/kl.txt +++ b/source/data/region/kl.txt @@ -4,5 +4,5 @@ kl{ Countries{ GL{"Kalaallit Nunaat"} } - Version{"2.1.27.40"} + Version{"2.1.31.34"} } diff --git a/source/data/region/kln.txt b/source/data/region/kln.txt index 3177d51..6086e4f 100644 --- a/source/data/region/kln.txt +++ b/source/data/region/kln.txt @@ -227,5 +227,5 @@ kln{ ZM{"Emetab Zambia"} ZW{"Emetab Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/km.txt b/source/data/region/km.txt index be968fc..59a31f3 100644 --- a/source/data/region/km.txt +++ b/source/data/region/km.txt @@ -89,7 +89,7 @@ km{ CW{"កូរ៉ាកៅ"} CX{"កោះ​គ្រីស្មាស"} CY{"ស៊ីប"} - CZ{"សាធារណរដ្ឋឆេក"} + CZ{"ឆេគា"} DE{"អាល្លឺម៉ង់"} DG{"ឌៀហ្គោហ្គាស៊ី"} DJ{"ជីប៊ូទី"} @@ -305,10 +305,10 @@ km{ CD{"កុងហ្គោ (សាធារណរដ្ឋ​ប្រជាធិបតេយ្យ)"} CG{"កុងហ្គោ (សធារណៈរដ្ឋ)"} CI{"កូតឌីវ័រ"} - CZ{"ឆេគា"} + CZ{"សាធារណរដ្ឋឆេក"} FK{"កោះ​ហ្វក់ឡែន (Islas Malvinas)"} MK{"ម៉ាសេដូនា (FYROM)"} TL{"ទីម័រ​ខាង​កើត"} } - Version{"2.1.28.79"} + Version{"2.1.31.74"} } diff --git a/source/data/region/kn.txt b/source/data/region/kn.txt index 2889b65..8d363d3 100644 --- a/source/data/region/kn.txt +++ b/source/data/region/kn.txt @@ -89,7 +89,7 @@ kn{ CW{"ಕುರಾಕಾವ್"} CX{"ಕ್ರಿಸ್ಮಸ್ ದ್ವೀಪ"} CY{"ಸೈಪ್ರಸ್"} - CZ{"ಝೆಕ್ ರಿಪಬ್ಲಿಕ್"} + CZ{"ಝೆಕಿಯಾ"} DE{"ಜರ್ಮನಿ"} DG{"ಡೈಗೋ ಗಾರ್ಸಿಯ"} DJ{"ಜಿಬೋಟಿ"} @@ -305,10 +305,10 @@ kn{ CD{"ಕಾಂಗೋ (DRC)"} CG{"ಕಾಂಗೋ (ಗಣರಾಜ್ಯ)"} CI{"ಐವರಿ ಕೋಸ್ಟ್"} - CZ{"ಝೆಕಿಯಾ"} + CZ{"ಝೆಕ್ ರಿಪಬ್ಲಿಕ್"} FK{"ಫಾಲ್ಕ್‌ಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳು (ಇಸ್ಲಾಸ್ ಮಾಲ್ವಿನಸ್)"} MK{"ಮ್ಯಾಸಿಡೋನಿಯ (FYROM)"} TL{"ಪೂರ್ವ ಟಿಮೋರ್"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/ko.txt b/source/data/region/ko.txt index db4d589..754db1c 100644 --- a/source/data/region/ko.txt +++ b/source/data/region/ko.txt @@ -308,5 +308,5 @@ ko{ FK{"포클랜드 제도(말비나스 군도)"} MK{"마케도니아(FYROM)"} } - Version{"2.1.29.22"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ko_KP.txt b/source/data/region/ko_KP.txt index 235fed5..2a4e3e2 100644 --- a/source/data/region/ko_KP.txt +++ b/source/data/region/ko_KP.txt @@ -4,5 +4,5 @@ ko_KP{ Countries{ KP{"조선민주주의인민공화국"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/kok.txt b/source/data/region/kok.txt index eb74e2d..9dc1337 100644 --- a/source/data/region/kok.txt +++ b/source/data/region/kok.txt @@ -4,5 +4,5 @@ kok{ Countries{ IN{"भारत"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ks.txt b/source/data/region/ks.txt index 3712f0c..2a9b9ff 100644 --- a/source/data/region/ks.txt +++ b/source/data/region/ks.txt @@ -278,5 +278,5 @@ ks{ ZW{"زِمبابے"} ZZ{"نامعلوٗم تہٕ نالَگہار عَلاقہٕ"} } - Version{"2.1.30.6"} + Version{"2.1.31.86"} } diff --git a/source/data/region/ksb.txt b/source/data/region/ksb.txt index 436ada1..d4bbdf9 100644 --- a/source/data/region/ksb.txt +++ b/source/data/region/ksb.txt @@ -226,5 +226,5 @@ ksb{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ksf.txt b/source/data/region/ksf.txt index 367bbd6..9c923cb 100644 --- a/source/data/region/ksf.txt +++ b/source/data/region/ksf.txt @@ -227,5 +227,5 @@ ksf{ ZM{"zambí"} ZW{"zimbabwɛ́"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ksh.txt b/source/data/region/ksh.txt index 1b1c501..b95d923 100644 --- a/source/data/region/ksh.txt +++ b/source/data/region/ksh.txt @@ -305,5 +305,5 @@ ksh{ FK{"de malleviinesche Enselle"} MK{"de vörmaals ens jugoßlaawesch jewääse Republik Mazedoonije"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/kw.txt b/source/data/region/kw.txt index 87fa5b3..104e225 100644 --- a/source/data/region/kw.txt +++ b/source/data/region/kw.txt @@ -4,5 +4,5 @@ kw{ Countries{ GB{"Rywvaneth Unys"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ky.txt b/source/data/region/ky.txt index 114bea4..303c3d9 100644 --- a/source/data/region/ky.txt +++ b/source/data/region/ky.txt @@ -89,7 +89,7 @@ ky{ CW{"Кюрасао"} CX{"Крисмас аралы"} CY{"Кипр"} - CZ{"Чех Республикасы"} + CZ{"Чехия"} DE{"Германия"} DG{"Диего Гарсия"} DJ{"Джибути"} @@ -304,10 +304,10 @@ ky{ CD{"Конго (КДР)"} CG{"Конго (Республикасы)"} CI{"Кот-д’Ивуар (вариант)"} - CZ{"Чехия"} + CZ{"Чех Республикасы"} FK{"Фолклэнд (Малвина) аралдары"} MK{"Македония (Мур. Югосл.)"} TL{"Чыгыш Тимор"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/lag.txt b/source/data/region/lag.txt index b49b249..ca0120e 100644 --- a/source/data/region/lag.txt +++ b/source/data/region/lag.txt @@ -227,5 +227,5 @@ lag{ ZM{"Sámbia"} ZW{"Simbáabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/lb.txt b/source/data/region/lb.txt index c14e795..4c86abe 100644 --- a/source/data/region/lb.txt +++ b/source/data/region/lb.txt @@ -305,5 +305,5 @@ lb{ CI{"Elfebeeküst"} MK{"Mazedonien (EJR)"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/lg.txt b/source/data/region/lg.txt index 7d15b65..8788c88 100644 --- a/source/data/region/lg.txt +++ b/source/data/region/lg.txt @@ -227,5 +227,5 @@ lg{ ZM{"Zambya"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/lkt.txt b/source/data/region/lkt.txt index f72d558..ffcfe48 100644 --- a/source/data/region/lkt.txt +++ b/source/data/region/lkt.txt @@ -15,5 +15,5 @@ lkt{ MX{"Spayóla Makȟóčhe"} US{"Mílahaŋska Tȟamákȟočhe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ln.txt b/source/data/region/ln.txt index 9c7243a..a5c4c5f 100644 --- a/source/data/region/ln.txt +++ b/source/data/region/ln.txt @@ -50,7 +50,7 @@ ln{ CU{"Kiba"} CV{"Bisanga bya Kapevɛrɛ"} CY{"Sípɛlɛ"} - CZ{"Repibiki Tsekɛ"} + CZ{"Shekia"} DE{"Alemani"} DJ{"Dzibuti"} DK{"Danɛmarike"} @@ -234,5 +234,8 @@ ln{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.28.76"} + Countries%variant{ + CZ{"Repibiki Tsekɛ"} + } + Version{"2.1.31.74"} } diff --git a/source/data/region/lo.txt b/source/data/region/lo.txt index 30566d6..ba59577 100644 --- a/source/data/region/lo.txt +++ b/source/data/region/lo.txt @@ -88,7 +88,7 @@ lo{ CW{"ຄູຣາຊາວ"} CX{"ເກາະຄຣິສມາດ"} CY{"ໄຊປຣັສ"} - CZ{"ສາທາລະນະລັດເຊັກ"} + CZ{"ເຊັກເຊຍ"} DE{"ເຢຍລະມັນ"} DG{"ດິເອໂກ ກາເຊຍ"} DJ{"ຈິບູຕິ"} @@ -304,10 +304,10 @@ lo{ CD{"ຄອງໂກ (ສາທາລະນະລັດປະຊາທິປະໄຕ)"} CG{"ສາທາລະນະລັດຄອງໂກ"} CI{"ໄອໂວຣີ ໂຄທ"} - CZ{"ເຊັກເຊຍ"} + CZ{"ສາທາລະນະລັດເຊັກ"} FK{"ໝູ່ເກາະຟອກແລນ (ອິສລາສ ມາວິນນາສ)"} MK{"ແມຊິໂດເນຍ (FYROM)"} TL{"ທິມໍ ຕາເວັນອອກ"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/lrc.txt b/source/data/region/lrc.txt index c5efdaf..efdf119 100644 --- a/source/data/region/lrc.txt +++ b/source/data/region/lrc.txt @@ -26,5 +26,5 @@ lrc{ US{"ڤولاتیا یأکاگئرتە"} ZZ{"راساگە نادیار"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/lt.txt b/source/data/region/lt.txt index f3465cb..5831ae4 100644 --- a/source/data/region/lt.txt +++ b/source/data/region/lt.txt @@ -308,5 +308,5 @@ lt{ FK{"Folklando (Malvinų) Salos"} MK{"Makedonijos Respublika"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/lu.txt b/source/data/region/lu.txt index 494f69c..2ab71e0 100644 --- a/source/data/region/lu.txt +++ b/source/data/region/lu.txt @@ -227,5 +227,5 @@ lu{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/luo.txt b/source/data/region/luo.txt index fd5e769..19593a0 100644 --- a/source/data/region/luo.txt +++ b/source/data/region/luo.txt @@ -227,5 +227,5 @@ luo{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/luy.txt b/source/data/region/luy.txt index 6c0db0d..90a1c00 100644 --- a/source/data/region/luy.txt +++ b/source/data/region/luy.txt @@ -227,5 +227,5 @@ luy{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/lv.txt b/source/data/region/lv.txt index 58f1536..40715cf 100644 --- a/source/data/region/lv.txt +++ b/source/data/region/lv.txt @@ -89,7 +89,7 @@ lv{ CW{"Kirasao"} CX{"Ziemsvētku sala"} CY{"Kipra"} - CZ{"Čehijas Republika"} + CZ{"Čehija"} DE{"Vācija"} DG{"Djego Garsijas atols"} DJ{"Džibutija"} @@ -146,7 +146,7 @@ lv{ IO{"Indijas okeāna Britu teritorija"} IQ{"Irāka"} IR{"Irāna"} - IS{"Īslande"} + IS{"Islande"} IT{"Itālija"} JE{"Džērsija"} JM{"Jamaika"} @@ -305,9 +305,9 @@ lv{ CD{"Kongo Demokrātiskā Republika"} CG{"Kongo (Republika)"} CI{"Ziloņkaula krasts"} - CZ{"Čehija"} + CZ{"Čehijas Republika"} FK{"Folklenda (Malvinu) salas"} MK{"bijusī Dienvidslāvijas Maķedonijas Republika"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/mas.txt b/source/data/region/mas.txt index dda125a..13da70a 100644 --- a/source/data/region/mas.txt +++ b/source/data/region/mas.txt @@ -227,5 +227,5 @@ mas{ ZM{"Sambia"} ZW{"Simbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mer.txt b/source/data/region/mer.txt index b473154..d633b53 100644 --- a/source/data/region/mer.txt +++ b/source/data/region/mer.txt @@ -227,5 +227,5 @@ mer{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mfe.txt b/source/data/region/mfe.txt index 5fab51d..e41c0a5 100644 --- a/source/data/region/mfe.txt +++ b/source/data/region/mfe.txt @@ -227,5 +227,5 @@ mfe{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mg.txt b/source/data/region/mg.txt index 9ddf37d..c8119ff 100644 --- a/source/data/region/mg.txt +++ b/source/data/region/mg.txt @@ -227,5 +227,5 @@ mg{ ZM{"Zambia"} ZW{"Zimbaboe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mgh.txt b/source/data/region/mgh.txt index 06f3139..a53b753 100644 --- a/source/data/region/mgh.txt +++ b/source/data/region/mgh.txt @@ -140,5 +140,5 @@ mgh{ ZM{"Uzambia"} ZW{"Uzimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mgo.txt b/source/data/region/mgo.txt index 9c4aef4..0405209 100644 --- a/source/data/region/mgo.txt +++ b/source/data/region/mgo.txt @@ -5,5 +5,5 @@ mgo{ CM{"Kamalun"} ZZ{"aba aben tisɔ̀"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/mk.txt b/source/data/region/mk.txt index a72800e..a67e6c5 100644 --- a/source/data/region/mk.txt +++ b/source/data/region/mk.txt @@ -89,7 +89,7 @@ mk{ CW{"Курасао"} CX{"Божиќен Остров"} CY{"Кипар"} - CZ{"Република Чешка"} + CZ{"Чешка"} DE{"Германија"} DG{"Диего Гарсија"} DJ{"Џибути"} @@ -305,10 +305,10 @@ mk{ CD{"Конго (Демократска Република Конго)"} CG{"Конго (Република)"} CI{"Брег на Слоновата Коска"} - CZ{"Чешка"} + CZ{"Република Чешка"} FK{"Фолкландски Острови (Малвински Острови)"} MK{"Република Македонија"} TL{"Источен Тимор"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ml.txt b/source/data/region/ml.txt index a4b5000..0bbbb98 100644 --- a/source/data/region/ml.txt +++ b/source/data/region/ml.txt @@ -89,7 +89,7 @@ ml{ CW{"കുറാകാവോ"} CX{"ക്രിസ്മസ് ദ്വീപ്"} CY{"സൈപ്രസ്"} - CZ{"ചെക്ക് റിപ്പബ്ലിക്"} + CZ{"ചെക്കിയ"} DE{"ജർമനി"} DG{"ഡീഗോ ഗ്രാഷ്യ"} DJ{"ദിജിബൗട്ടി"} @@ -305,10 +305,10 @@ ml{ CD{"കോംഗോ (DRC)"} CG{"കോംഗോ (റിപ്പബ്ലിക്ക്)"} CI{"ഐവറി കോസ്റ്റ്"} - CZ{"ചെക്കിയ"} + CZ{"ചെക്ക് റിപ്പബ്ലിക്"} FK{"ഫോക്ക്‌ലാൻഡ് ദ്വീപുകൾ (ഐലാസ് മാൽവിനാസ്)"} MK{"മാസിഡോണിയ (FYROM)"} TL{"കിഴക്കൻ തിമോർ"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/mn.txt b/source/data/region/mn.txt index 0eb1d83..a708952 100644 --- a/source/data/region/mn.txt +++ b/source/data/region/mn.txt @@ -89,7 +89,7 @@ mn{ CW{"Куракао"} CX{"Зул сарын арал"} CY{"Кипр"} - CZ{"Бүгд Найрамдах Чех Улс"} + CZ{"Чех"} DE{"Герман"} DG{"Диего Гарсиа"} DJ{"Джибути"} @@ -305,10 +305,10 @@ mn{ CD{"Конго (БНУ)"} CG{"Конго (Бүгд Найрамдах улс)"} CI{"Зааны ясан эрэг"} - CZ{"Чех"} + CZ{"Бүгд Найрамдах Чех Улс"} FK{"Фолькландын Арлууд (Ислас Мальвинас)"} MK{"Македон (Хуучин Югославын бүрэлдэхүүний Македон)"} TL{"Зүүн Тимор"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/mr.txt b/source/data/region/mr.txt index 1cbb82a..2860f05 100644 --- a/source/data/region/mr.txt +++ b/source/data/region/mr.txt @@ -89,7 +89,7 @@ mr{ CW{"क्युरासाओ"} CX{"ख्रिसमस बेट"} CY{"सायप्रस"} - CZ{"झेक प्रजासत्ताक"} + CZ{"झेकिया"} DE{"जर्मनी"} DG{"दिएगो गार्सिया"} DJ{"जिबौटी"} @@ -304,10 +304,10 @@ mr{ Countries%variant{ CD{"काँगो (डीआरसी)"} CG{"काँगो (प्रजासत्ताक)"} - CZ{"झेकिया"} + CZ{"झेक प्रजासत्ताक"} FK{"फॉकलंड बेटे (इस्लास मालविनास)"} MK{"मॅसेडोनिया (FYROM)"} TL{"पूर्व तिमोर"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/ms.txt b/source/data/region/ms.txt index bc53159..08cfaaf 100644 --- a/source/data/region/ms.txt +++ b/source/data/region/ms.txt @@ -89,7 +89,7 @@ ms{ CW{"Curacao"} CX{"Pulau Krismas"} CY{"Cyprus"} - CZ{"Republik Czech"} + CZ{"Czechia"} DE{"Jerman"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ ms{ CD{"Congo (DRC)"} CG{"Congo (Republik)"} CI{"Ivory Coast"} - CZ{"Czechia"} + CZ{"Republik Czech"} FK{"Kepulauan Falkland (Islas Malvinas)"} MK{"Macedonia (FYROM)"} TL{"Timor Timur"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/mt.txt b/source/data/region/mt.txt index 09ed472..8d8c388 100644 --- a/source/data/region/mt.txt +++ b/source/data/region/mt.txt @@ -308,5 +308,5 @@ mt{ FK{"Il-Gżejjer Falkland (il-Gżejjer Malvinas)"} TL{"Timor tal-Lvant"} } - Version{"2.1.28.76"} + Version{"2.1.32.59"} } diff --git a/source/data/region/mua.txt b/source/data/region/mua.txt index a934d6d..86de11b 100644 --- a/source/data/region/mua.txt +++ b/source/data/region/mua.txt @@ -227,5 +227,5 @@ mua{ ZM{"Zambiya"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/my.txt b/source/data/region/my.txt index 8f47eca..cbef743 100644 --- a/source/data/region/my.txt +++ b/source/data/region/my.txt @@ -89,7 +89,7 @@ my{ CW{"ကျူရေးကိုးစ်"} CX{"ခရစ်စမတ် ကျွန်း"} CY{"ဆိုက်ပရပ်စ်"} - CZ{"ချက် ပြည်ထောင်စု"} + CZ{"ချက်ကီယား"} DE{"ဂျာမဏီ"} DG{"ဒီအဲဂိုဂါစီရာ"} DJ{"ဂျီဘူတီ"} @@ -305,9 +305,9 @@ my{ CD{"ကွန်ဂို ဒီမိုကရက်တစ် သမ္မတနိုင်ငံ"} CG{"ကွန်ဂို သမ္မတနိုင်ငံ"} CI{"အိုင်ဗရီကို့စ်"} - CZ{"ချက်ကီယား"} + CZ{"ချက် ပြည်ထောင်စု"} FK{"ဖော့ကလန် ကျွန်းစု (အီလားစ် မောလ်ဗီနာစ်)"} MK{"မက်စီဒိုးနီးယား (ယခင် ယူဂိုစလားဗီးယား မက်စီဒိုးနီးယားပြည်ထောင်စု)"} } - Version{"2.1.30.50"} + Version{"2.1.33.28"} } diff --git a/source/data/region/mzn.txt b/source/data/region/mzn.txt index 84ca385..feb2ae1 100644 --- a/source/data/region/mzn.txt +++ b/source/data/region/mzn.txt @@ -307,5 +307,5 @@ mzn{ MK{"مقدونیه جمهوری"} TL{"شرقی تیمور"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/naq.txt b/source/data/region/naq.txt index 4e8b9f1..b10bacf 100644 --- a/source/data/region/naq.txt +++ b/source/data/region/naq.txt @@ -227,5 +227,5 @@ naq{ ZM{"Zambiab"} ZW{"Zimbabweb"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/nb.txt b/source/data/region/nb.txt index 107fb07..4143d29 100644 --- a/source/data/region/nb.txt +++ b/source/data/region/nb.txt @@ -89,7 +89,7 @@ nb{ CW{"Curaçao"} CX{"Christmasøya"} CY{"Kypros"} - CZ{"Den tsjekkiske republikk"} + CZ{"Tsjekkia"} DE{"Tyskland"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -304,9 +304,9 @@ nb{ Countries%variant{ CD{"Den demokratiske republikken Kongo"} CG{"Republikken Kongo"} - CZ{"Tsjekkia"} + CZ{"Den tsjekkiske republikk"} FK{"Falklandsøyene (Islas Malvinas)"} MK{"Den tidligere jugoslaviske republikk Makedonia"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} } diff --git a/source/data/region/nd.txt b/source/data/region/nd.txt index c09f54b..e13b891 100644 --- a/source/data/region/nd.txt +++ b/source/data/region/nd.txt @@ -227,5 +227,5 @@ nd{ ZM{"Zambiya"} ZW{"Zimbabwe"} } - Version{"2.1.27.65"} + Version{"2.1.31.33"} } diff --git a/source/data/region/nds.txt b/source/data/region/nds.txt index e395563..7874b05 100644 --- a/source/data/region/nds.txt +++ b/source/data/region/nds.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License nds{ - Version{"2.1.28.71"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ne.txt b/source/data/region/ne.txt index 181521d..8a080b4 100644 --- a/source/data/region/ne.txt +++ b/source/data/region/ne.txt @@ -89,7 +89,7 @@ ne{ CW{"कुराकाओ"} CX{"क्रिष्टमस टापु"} CY{"साइप्रस"} - CZ{"चेक गणतन्त्र"} + CZ{"चेचिया"} DE{"जर्मनी"} DG{"डियगो गार्सिया"} DJ{"डिजिबुटी"} @@ -304,10 +304,10 @@ ne{ Countries%variant{ CD{"कङ्गो (डीआर्‌सी)"} CG{"कङ्गो (गणतन्त्र)"} - CZ{"चेचिया"} + CZ{"चेक गणतन्त्र"} FK{"फक्ल्याण्ड टापुहरू (इज्लास माल्भिनास)"} MK{"म्याकेडोनिया (फाइरम)"} TL{"पृर्वी टीमोर"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} } diff --git a/source/data/region/nl.txt b/source/data/region/nl.txt index fa6b4d7..4e051df 100644 --- a/source/data/region/nl.txt +++ b/source/data/region/nl.txt @@ -89,7 +89,7 @@ nl{ CW{"Curaçao"} CX{"Christmaseiland"} CY{"Cyprus"} - CZ{"Tsjechië"} + CZ{"Tsjechische Republiek"} DE{"Duitsland"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -304,9 +304,9 @@ nl{ Countries%variant{ CD{"Congo (DRC)"} CG{"Congo (Republiek)"} - CZ{"Tsjechische Republiek"} + CZ{"Tsjechië"} FK{"Falklandeilanden (Islas Malvinas)"} MK{"Macedonië (FYROM)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/nmg.txt b/source/data/region/nmg.txt index 27dfb05..d17cb3f 100644 --- a/source/data/region/nmg.txt +++ b/source/data/region/nmg.txt @@ -227,5 +227,5 @@ nmg{ ZM{"Zambia"} ZW{"Zimbabwǝ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/nn.txt b/source/data/region/nn.txt index 12ab053..594c600 100644 --- a/source/data/region/nn.txt +++ b/source/data/region/nn.txt @@ -303,5 +303,5 @@ nn{ FK{"Falklandsøyane (Islas Malvinas)"} MK{"Den tidlegare jugoslaviske republikken Makedonia"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/nnh.txt b/source/data/region/nnh.txt index 67f3c16..09de8e4 100644 --- a/source/data/region/nnh.txt +++ b/source/data/region/nnh.txt @@ -4,5 +4,5 @@ nnh{ Countries{ CM{"Kàmalûm"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/nus.txt b/source/data/region/nus.txt index 13a60f2..a1b69e1 100644 --- a/source/data/region/nus.txt +++ b/source/data/region/nus.txt @@ -54,5 +54,5 @@ nus{ TD{"Ca̱d"} VG{"Burutic dhuɔ̱ɔ̱l be̱rgin"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/nyn.txt b/source/data/region/nyn.txt index 66c7f81..57dd8cf 100644 --- a/source/data/region/nyn.txt +++ b/source/data/region/nyn.txt @@ -227,5 +227,5 @@ nyn{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/om.txt b/source/data/region/om.txt index 2cc7259..e320f58 100644 --- a/source/data/region/om.txt +++ b/source/data/region/om.txt @@ -15,5 +15,5 @@ om{ RU{"Russia"} US{"United States"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/or.txt b/source/data/region/or.txt index ace7789..d1cba97 100644 --- a/source/data/region/or.txt +++ b/source/data/region/or.txt @@ -281,5 +281,5 @@ or{ ZW{"ଜିମ୍ବାୱେ"} ZZ{"ଅଜଣା କିମ୍ବା ଅବୈଧ ପ୍ରଦେଶ"} } - Version{"2.1.27.78"} + Version{"2.1.31.33"} } diff --git a/source/data/region/os.txt b/source/data/region/os.txt index 33fc895..cdc2071 100644 --- a/source/data/region/os.txt +++ b/source/data/region/os.txt @@ -21,5 +21,5 @@ os{ US{"АИШ"} ZZ{"Нӕзонгӕ бӕстӕ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pa.txt b/source/data/region/pa.txt index 14c20c0..c39c690 100644 --- a/source/data/region/pa.txt +++ b/source/data/region/pa.txt @@ -89,7 +89,7 @@ pa{ CW{"ਕੁਰਾਕਾਓ"} CX{"ਕ੍ਰਿਸਮਿਸ ਟਾਪੂ"} CY{"ਸਾਇਪ੍ਰਸ"} - CZ{"ਚੈੱਕ ਗਣਰਾਜ"} + CZ{"ਚੈਕੀਆ"} DE{"ਜਰਮਨੀ"} DG{"ਡੀਇਗੋ ਗਾਰਸੀਆ"} DJ{"ਜ਼ੀਬੂਤੀ"} @@ -305,10 +305,10 @@ pa{ CD{"ਕਾਂਗੋ ਲੋਕਤੰਤਰੀ ਗਣਰਾਜ"} CG{"ਕਾਂਗੋ ਗਣਰਾਜ"} CI{"ਆਇਵਰੀ ਕੋਸਟ"} - CZ{"ਚੈਕੀਆ"} + CZ{"ਚੈੱਕ ਗਣਰਾਜ"} FK{"ਫ਼ਾਕਲੈਂਡ ਟਾਪੂ (ਆਈਲਾਸ ਮਾਲਵਿਨਾਸ)"} MK{"ਮੈਕਡੋਨੀਆ (ਪੂਰਵ ਯੂਗੋਸਲਾਵ ਮੈਕਡੋਨੀਆਈ ਗਣਰਾਜ)"} TL{"ਪੂਰਬ ਤਿਮੋਰ"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/pa_Arab.txt b/source/data/region/pa_Arab.txt index 4ce5008..07d1daf 100644 --- a/source/data/region/pa_Arab.txt +++ b/source/data/region/pa_Arab.txt @@ -5,5 +5,5 @@ pa_Arab{ Countries{ PK{"پاکستان"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pa_Guru.txt b/source/data/region/pa_Guru.txt index dca680f..dc1602d 100644 --- a/source/data/region/pa_Guru.txt +++ b/source/data/region/pa_Guru.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License pa_Guru{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pl.txt b/source/data/region/pl.txt index c9537a9..896832d 100644 --- a/source/data/region/pl.txt +++ b/source/data/region/pl.txt @@ -309,5 +309,5 @@ pl{ MK{"Była Jugosłowiańska Republika Macedonii"} TL{"Timor-Leste"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/pool.res b/source/data/region/pool.res index c7df177..567ea80 100644 Binary files a/source/data/region/pool.res and b/source/data/region/pool.res differ diff --git a/source/data/region/ps.txt b/source/data/region/ps.txt index 2f08a77..f7d7825 100644 --- a/source/data/region/ps.txt +++ b/source/data/region/ps.txt @@ -66,5 +66,5 @@ ps{ UY{"یوروګوای"} YE{"یمن"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt.txt b/source/data/region/pt.txt index a51f3c6..2acac45 100644 --- a/source/data/region/pt.txt +++ b/source/data/region/pt.txt @@ -89,7 +89,7 @@ pt{ CW{"Curaçao"} CX{"Ilha Christmas"} CY{"Chipre"} - CZ{"República Tcheca"} + CZ{"Tchéquia"} DE{"Alemanha"} DG{"Diego Garcia"} DJ{"Djibuti"} @@ -304,10 +304,10 @@ pt{ Countries%variant{ CD{"República Democrática do Congo"} CG{"Congo"} - CZ{"Tchéquia"} + CZ{"República Tcheca"} FK{"Ilhas Falkland (Ilhas Malvinas)"} MK{"Macedônia (ARIM)"} TL{"República Democrática de Timor-Leste"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/pt_AO.txt b/source/data/region/pt_AO.txt index 2e783ef..a385088 100644 --- a/source/data/region/pt_AO.txt +++ b/source/data/region/pt_AO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_AO{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_CH.txt b/source/data/region/pt_CH.txt index a4226b1..4ee7339 100644 --- a/source/data/region/pt_CH.txt +++ b/source/data/region/pt_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CH{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_CV.txt b/source/data/region/pt_CV.txt index 829f400..ed8f313 100644 --- a/source/data/region/pt_CV.txt +++ b/source/data/region/pt_CV.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CV{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_GQ.txt b/source/data/region/pt_GQ.txt index fd432f9..0f6e235 100644 --- a/source/data/region/pt_GQ.txt +++ b/source/data/region/pt_GQ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GQ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_GW.txt b/source/data/region/pt_GW.txt index 75c5d9d..f4cd124 100644 --- a/source/data/region/pt_GW.txt +++ b/source/data/region/pt_GW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GW{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_LU.txt b/source/data/region/pt_LU.txt index b5eca2f..b5a1669 100644 --- a/source/data/region/pt_LU.txt +++ b/source/data/region/pt_LU.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_LU{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_MO.txt b/source/data/region/pt_MO.txt index c47efaa..d30b2ff 100644 --- a/source/data/region/pt_MO.txt +++ b/source/data/region/pt_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MO{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_MZ.txt b/source/data/region/pt_MZ.txt index 9878c5a..060a5fc 100644 --- a/source/data/region/pt_MZ.txt +++ b/source/data/region/pt_MZ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_MZ{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_PT.txt b/source/data/region/pt_PT.txt index c7e0396..fc59731 100644 --- a/source/data/region/pt_PT.txt +++ b/source/data/region/pt_PT.txt @@ -74,5 +74,5 @@ pt_PT{ FK{"Ilhas Malvinas"} MK{"Macedónia (ARJM)"} } - Version{"2.1.29.54"} + Version{"2.1.31.86"} } diff --git a/source/data/region/pt_ST.txt b/source/data/region/pt_ST.txt index fcc981b..e3f0965 100644 --- a/source/data/region/pt_ST.txt +++ b/source/data/region/pt_ST.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_ST{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/pt_TL.txt b/source/data/region/pt_TL.txt index 8bbbc3d..b8cb201 100644 --- a/source/data/region/pt_TL.txt +++ b/source/data/region/pt_TL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_TL{ %%Parent{"pt_PT"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/qu.txt b/source/data/region/qu.txt index b874ea4..0dcd5d0 100644 --- a/source/data/region/qu.txt +++ b/source/data/region/qu.txt @@ -193,5 +193,5 @@ qu{ ZM{"Zambia"} ZW{"Zimbabue"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/resfiles.mk b/source/data/region/resfiles.mk index e4eb147..f61eb66 100644 --- a/source/data/region/resfiles.mk +++ b/source/data/region/resfiles.mk @@ -1,17 +1,17 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -REGION_CLDR_VERSION = %version% +REGION_CLDR_VERSION = 31.0.1 # A list of txt's to build # Note: # # If you are thinking of modifying this file, READ THIS. # # Instead of changing this file [unless you want to check it back in], -# you should consider creating a '%local%' file in this same directory. +# you should consider creating a 'reslocal.mk' file in this same directory. # Then, you can have your local changes remain even if you upgrade or # reconfigure ICU. # -# Example '%local%' files: +# Example 'reslocal.mk' files: # # * To add an additional locale to the list: # _____________________________________________________ @@ -26,19 +26,19 @@ REGION_CLDR_VERSION = %version% # Generated by LDML2ICUConverter, from LDML source files. # Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml) -REGION_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\ - en_NH.txt en_RH.txt fil_PH.txt he_IL.txt id_ID.txt\ - in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\ - ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt no.txt\ - no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\ - pa_PK.txt sh.txt sh_BA.txt sh_CS.txt sh_YU.txt\ - shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt\ - sr_Cyrl_RS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_RS.txt sr_Latn_YU.txt\ - sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\ - th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt uz_Arab_AF.txt\ - uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt\ - zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt zh_MO.txt\ - zh_SG.txt zh_TW.txt +REGION_SYNTHETIC_ALIAS = ars.txt az_AZ.txt az_Latn_AZ.txt bs_BA.txt\ + bs_Latn_BA.txt en_NH.txt en_RH.txt fil_PH.txt he_IL.txt\ + id_ID.txt in.txt in_ID.txt iw.txt iw_IL.txt\ + ja_JP.txt ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt\ + no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt\ + pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\ + sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\ + sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_RS.txt\ + sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt\ + th_TH.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt\ + uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt\ + zh_CN.txt zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt\ + zh_MO.txt zh_SG.txt zh_TW.txt # All aliases (to not be included under 'installed'), but not including root. @@ -76,47 +76,47 @@ REGION_SOURCE = af.txt agq.txt ak.txt am.txt\ en_TV.txt en_TZ.txt en_UG.txt en_VC.txt en_VG.txt\ en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\ eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\ - es_BR.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\ - es_DO.txt es_EC.txt es_GT.txt es_HN.txt es_MX.txt\ - es_NI.txt es_PA.txt es_PE.txt es_PR.txt es_PY.txt\ - es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\ - eu.txt ewo.txt fa.txt fa_AF.txt ff.txt\ - fi.txt fil.txt fo.txt fr.txt fr_BE.txt\ - fr_CA.txt fur.txt fy.txt ga.txt gd.txt\ - gl.txt gsw.txt gu.txt guz.txt gv.txt\ - ha.txt haw.txt he.txt hi.txt hr.txt\ - hsb.txt hu.txt hy.txt id.txt ig.txt\ - ii.txt is.txt it.txt ja.txt jgo.txt\ - jmc.txt ka.txt kab.txt kam.txt kde.txt\ - kea.txt khq.txt ki.txt kk.txt kkj.txt\ - kl.txt kln.txt km.txt kn.txt ko.txt\ - ko_KP.txt kok.txt ks.txt ksb.txt ksf.txt\ - ksh.txt kw.txt ky.txt lag.txt lb.txt\ - lg.txt lkt.txt ln.txt lo.txt lrc.txt\ - lt.txt lu.txt luo.txt luy.txt lv.txt\ - mas.txt mer.txt mfe.txt mg.txt mgh.txt\ - mgo.txt mk.txt ml.txt mn.txt mr.txt\ - ms.txt mt.txt mua.txt my.txt mzn.txt\ - naq.txt nb.txt nd.txt nds.txt ne.txt\ - nl.txt nmg.txt nn.txt nnh.txt nus.txt\ - nyn.txt om.txt or.txt os.txt pa.txt\ - pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\ - pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\ - pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\ - pt_TL.txt qu.txt rm.txt rn.txt ro.txt\ - ro_MD.txt rof.txt ru.txt ru_UA.txt rw.txt\ - rwk.txt sah.txt saq.txt sbp.txt se.txt\ - se_FI.txt seh.txt ses.txt sg.txt shi.txt\ - shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\ - smn.txt sn.txt so.txt sq.txt sr.txt\ - sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt sr_Latn.txt\ - sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt sw.txt\ - sw_CD.txt sw_KE.txt ta.txt te.txt teo.txt\ - th.txt ti.txt to.txt tr.txt twq.txt\ - tzm.txt ug.txt uk.txt ur.txt ur_IN.txt\ - uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt\ - vai_Latn.txt vai_Vaii.txt vi.txt vun.txt wae.txt\ - xog.txt yav.txt yi.txt yo.txt yo_BJ.txt\ - yue.txt zgh.txt zh.txt zh_Hans.txt zh_Hant.txt\ - zh_Hant_HK.txt zh_Hant_MO.txt zu.txt + es_BR.txt es_BZ.txt es_CL.txt es_CO.txt es_CR.txt\ + es_CU.txt es_DO.txt es_EC.txt es_GT.txt es_HN.txt\ + es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt\ + es_PY.txt es_SV.txt es_US.txt es_UY.txt es_VE.txt\ + et.txt eu.txt ewo.txt fa.txt fa_AF.txt\ + ff.txt fi.txt fil.txt fo.txt fr.txt\ + fr_BE.txt fr_CA.txt fur.txt fy.txt ga.txt\ + gd.txt gl.txt gsw.txt gu.txt guz.txt\ + gv.txt ha.txt haw.txt he.txt hi.txt\ + hr.txt hsb.txt hu.txt hy.txt id.txt\ + ig.txt ii.txt is.txt it.txt ja.txt\ + jgo.txt jmc.txt ka.txt kab.txt kam.txt\ + kde.txt kea.txt khq.txt ki.txt kk.txt\ + kkj.txt kl.txt kln.txt km.txt kn.txt\ + ko.txt ko_KP.txt kok.txt ks.txt ksb.txt\ + ksf.txt ksh.txt kw.txt ky.txt lag.txt\ + lb.txt lg.txt lkt.txt ln.txt lo.txt\ + lrc.txt lt.txt lu.txt luo.txt luy.txt\ + lv.txt mas.txt mer.txt mfe.txt mg.txt\ + mgh.txt mgo.txt mk.txt ml.txt mn.txt\ + mr.txt ms.txt mt.txt mua.txt my.txt\ + mzn.txt naq.txt nb.txt nd.txt nds.txt\ + ne.txt nl.txt nmg.txt nn.txt nnh.txt\ + nus.txt nyn.txt om.txt or.txt os.txt\ + pa.txt pa_Arab.txt pa_Guru.txt pl.txt ps.txt\ + pt.txt pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt\ + pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt\ + pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\ + ro.txt ro_MD.txt rof.txt ru.txt ru_UA.txt\ + rw.txt rwk.txt sah.txt saq.txt sbp.txt\ + se.txt se_FI.txt seh.txt ses.txt sg.txt\ + shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\ + sl.txt smn.txt sn.txt so.txt sq.txt\ + sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt\ + sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt\ + sw.txt sw_CD.txt sw_KE.txt ta.txt te.txt\ + teo.txt th.txt ti.txt to.txt tr.txt\ + twq.txt tzm.txt ug.txt uk.txt ur.txt\ + ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\ + vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\ + wae.txt xog.txt yav.txt yi.txt yo.txt\ + yo_BJ.txt yue.txt zgh.txt zh.txt zh_Hans.txt\ + zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt diff --git a/source/data/region/rm.txt b/source/data/region/rm.txt index f964379..9656f93 100644 --- a/source/data/region/rm.txt +++ b/source/data/region/rm.txt @@ -280,5 +280,5 @@ rm{ ZW{"Simbabwe"} ZZ{"Regiun betg encouschenta u nunvalaivla"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/rn.txt b/source/data/region/rn.txt index dfe849f..e088dbe 100644 --- a/source/data/region/rn.txt +++ b/source/data/region/rn.txt @@ -227,5 +227,5 @@ rn{ ZM{"Zambiya"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ro.txt b/source/data/region/ro.txt index 420f4b5..18430c5 100644 --- a/source/data/region/ro.txt +++ b/source/data/region/ro.txt @@ -89,7 +89,7 @@ ro{ CW{"Curaçao"} CX{"Insula Christmas"} CY{"Cipru"} - CZ{"Republica Cehă"} + CZ{"Cehia"} DE{"Germania"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,9 +305,9 @@ ro{ CD{"Congo (Republica Democrată Congo)"} CG{"Congo (Republica)"} CI{"Coasta de Fildeș"} - CZ{"Cehia"} + CZ{"Republica Cehă"} FK{"Insulele Falkland (Insulele Malvine)"} MK{"Republica Macedonia (FRIM)"} } - Version{"2.1.28.79"} + Version{"2.1.32.60"} } diff --git a/source/data/region/ro_MD.txt b/source/data/region/ro_MD.txt index d6c40c4..08cade9 100644 --- a/source/data/region/ro_MD.txt +++ b/source/data/region/ro_MD.txt @@ -4,5 +4,5 @@ ro_MD{ Countries{ MM{"Myanmar"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/rof.txt b/source/data/region/rof.txt index 9a6795a..4d4dfbc 100644 --- a/source/data/region/rof.txt +++ b/source/data/region/rof.txt @@ -227,5 +227,5 @@ rof{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/root.txt b/source/data/region/root.txt index a22c443..664b849 100644 --- a/source/data/region/root.txt +++ b/source/data/region/root.txt @@ -4,5 +4,5 @@ * ICU source: /common/main/root.xml */ root{ - Version{"2.1.30.58"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ru.txt b/source/data/region/ru.txt index 79ad48d..aa987c5 100644 --- a/source/data/region/ru.txt +++ b/source/data/region/ru.txt @@ -309,5 +309,5 @@ ru{ MK{"Македония (БЮРМ)"} TL{"Тимор-Лесте"} } - Version{"2.1.29.20"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ru_UA.txt b/source/data/region/ru_UA.txt index e4f26ab..95bb3bf 100644 --- a/source/data/region/ru_UA.txt +++ b/source/data/region/ru_UA.txt @@ -14,5 +14,5 @@ ru_UA{ TL{"Тимор-Лесте"} UM{"Малые Тихоокеанские Отдаленные Острова США"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/rw.txt b/source/data/region/rw.txt index 44b0454..6b0b17a 100644 --- a/source/data/region/rw.txt +++ b/source/data/region/rw.txt @@ -5,5 +5,5 @@ rw{ RW{"Rwanda"} TO{"Igitonga"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/rwk.txt b/source/data/region/rwk.txt index db5b3f3..6d11a9c 100644 --- a/source/data/region/rwk.txt +++ b/source/data/region/rwk.txt @@ -227,5 +227,5 @@ rwk{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sah.txt b/source/data/region/sah.txt index ca79d30..09987ba 100644 --- a/source/data/region/sah.txt +++ b/source/data/region/sah.txt @@ -31,5 +31,5 @@ sah{ Countries%short{ US{"АХШ"} } - Version{"2.1.27.87"} + Version{"2.1.31.33"} } diff --git a/source/data/region/saq.txt b/source/data/region/saq.txt index f9c5dfc..49d1cd3 100644 --- a/source/data/region/saq.txt +++ b/source/data/region/saq.txt @@ -227,5 +227,5 @@ saq{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sbp.txt b/source/data/region/sbp.txt index 8456202..85d9b2b 100644 --- a/source/data/region/sbp.txt +++ b/source/data/region/sbp.txt @@ -227,5 +227,5 @@ sbp{ ZM{"Sambiya"} ZW{"Simbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/se.txt b/source/data/region/se.txt index b1d294f..ed7cb4d 100644 --- a/source/data/region/se.txt +++ b/source/data/region/se.txt @@ -294,5 +294,5 @@ se{ PS{"Palestina"} US{"USA"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/se_FI.txt b/source/data/region/se_FI.txt index e26dc36..d5b8ba6 100644 --- a/source/data/region/se_FI.txt +++ b/source/data/region/se_FI.txt @@ -15,5 +15,5 @@ se_FI{ Countries%variant{ CI{"Côte d’Ivoire"} } - Version{"2.1.27.78"} + Version{"2.1.31.33"} } diff --git a/source/data/region/seh.txt b/source/data/region/seh.txt index 4a816be..2571e4b 100644 --- a/source/data/region/seh.txt +++ b/source/data/region/seh.txt @@ -226,5 +226,5 @@ seh{ ZM{"Zâmbia"} ZW{"Zimbábue"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ses.txt b/source/data/region/ses.txt index ea6e373..be8d987 100644 --- a/source/data/region/ses.txt +++ b/source/data/region/ses.txt @@ -227,5 +227,5 @@ ses{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sg.txt b/source/data/region/sg.txt index bc9052b..e811e61 100644 --- a/source/data/region/sg.txt +++ b/source/data/region/sg.txt @@ -227,5 +227,5 @@ sg{ ZM{"Zambïi"} ZW{"Zimbäbwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/shi.txt b/source/data/region/shi.txt index a343151..0f09cac 100644 --- a/source/data/region/shi.txt +++ b/source/data/region/shi.txt @@ -227,5 +227,5 @@ shi{ ZM{"ⵣⴰⵎⴱⵢⴰ"} ZW{"ⵣⵉⵎⴱⴰⴱⵡⵉ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/shi_Latn.txt b/source/data/region/shi_Latn.txt index b885e77..352696d 100644 --- a/source/data/region/shi_Latn.txt +++ b/source/data/region/shi_Latn.txt @@ -228,5 +228,5 @@ shi_Latn{ ZM{"zambya"} ZW{"zimbabwi"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/shi_Tfng.txt b/source/data/region/shi_Tfng.txt index 22785f4..2db194b 100644 --- a/source/data/region/shi_Tfng.txt +++ b/source/data/region/shi_Tfng.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Tfng{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/si.txt b/source/data/region/si.txt index 8cf9132..50724e5 100644 --- a/source/data/region/si.txt +++ b/source/data/region/si.txt @@ -89,7 +89,7 @@ si{ CW{"කුරකාවෝ"} CX{"ක්‍රිස්මස් දූපත"} CY{"සයිප්‍රසය"} - CZ{"චෙක් ජනරජය"} + CZ{"චෙක්"} DE{"ජර්මනිය"} DG{"දියාගෝ ගාර්සියා"} DJ{"ජිබුටි"} @@ -305,10 +305,10 @@ si{ CD{"කොංගෝව"} CG{"කොංගෝ (ජනරජය)"} CI{"අයිවරි කෝස්ට්"} - CZ{"චෙක්"} + CZ{"චෙක් ජනරජය"} FK{"ෆෝක්ලන්ත දූපත් (අයිලස් මල්වියනාස්)"} MK{"මැසිඩෝනියාව (FYROM)"} TL{"නැගෙනහිර ටිමෝරය"} } - Version{"2.1.28.79"} + Version{"2.1.33.28"} } diff --git a/source/data/region/sk.txt b/source/data/region/sk.txt index 5f80df1..bb653b9 100644 --- a/source/data/region/sk.txt +++ b/source/data/region/sk.txt @@ -89,7 +89,7 @@ sk{ CW{"Curaçao"} CX{"Vianočný ostrov"} CY{"Cyprus"} - CZ{"Česká republika"} + CZ{"Česko"} DE{"Nemecko"} DG{"Diego Garcia"} DJ{"Džibutsko"} @@ -302,8 +302,8 @@ sk{ US{"USA"} } Countries%variant{ - CZ{"Česko"} + CZ{"Česká republika"} MK{"Macedónsko (BJRM)"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/sl.txt b/source/data/region/sl.txt index 6a0e963..6c61c8d 100644 --- a/source/data/region/sl.txt +++ b/source/data/region/sl.txt @@ -309,5 +309,5 @@ sl{ MK{"Makedonija (FYROM)"} TL{"Vzhodni Timor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/smn.txt b/source/data/region/smn.txt index a6da9ca..c0e6222 100644 --- a/source/data/region/smn.txt +++ b/source/data/region/smn.txt @@ -265,5 +265,5 @@ smn{ FK{"Falklandsuolluuh (Malvinassuolluuh)"} MK{"OJT Makedonia"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sn.txt b/source/data/region/sn.txt index 8e56c5a..4f23f91 100644 --- a/source/data/region/sn.txt +++ b/source/data/region/sn.txt @@ -226,5 +226,5 @@ sn{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.98"} + Version{"2.1.31.33"} } diff --git a/source/data/region/so.txt b/source/data/region/so.txt index 67f1499..19345c9 100644 --- a/source/data/region/so.txt +++ b/source/data/region/so.txt @@ -228,5 +228,5 @@ so{ ZW{"Simbaabwe"} ZZ{"Far aan la aqoon amase aan saxnayn"} } - Version{"2.1.27.78"} + Version{"2.1.33.76"} } diff --git a/source/data/region/sq.txt b/source/data/region/sq.txt index f12c87f..c697d9d 100644 --- a/source/data/region/sq.txt +++ b/source/data/region/sq.txt @@ -89,7 +89,7 @@ sq{ CW{"Kuraçao"} CX{"Ishulli i Krishtlindjes"} CY{"Qipro"} - CZ{"Republika Çeke"} + CZ{"Çeki"} DE{"Gjermani"} DG{"Diego-Garsia"} DJ{"Xhibuti"} @@ -305,10 +305,10 @@ sq{ CD{"Kongo (RDK)"} CG{"Kongo (Republika)"} CI{"Bregu i Fildishtë"} - CZ{"Çeki"} + CZ{"Republika Çeke"} FK{"Ishujt Falkland (Malvine)"} MK{"Maqedoni (IRJM)"} TL{"Timori Lindor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/sr.txt b/source/data/region/sr.txt index 4a24a3d..ce02908 100644 --- a/source/data/region/sr.txt +++ b/source/data/region/sr.txt @@ -304,9 +304,8 @@ sr{ Countries%variant{ CD{"Конго (ДРК)"} CG{"Конго (Република)"} - CZ{"CZ"} FK{"Фокландска (Малвинска) острва"} MK{"Македонија (БЈРМ)"} } - Version{"2.1.28.79"} + Version{"2.1.32.73"} } diff --git a/source/data/region/sr_Cyrl.txt b/source/data/region/sr_Cyrl.txt index 0b50a55..2e18268 100644 --- a/source/data/region/sr_Cyrl.txt +++ b/source/data/region/sr_Cyrl.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Cyrl_BA.txt b/source/data/region/sr_Cyrl_BA.txt index 2cab989..0c1f5c3 100644 --- a/source/data/region/sr_Cyrl_BA.txt +++ b/source/data/region/sr_Cyrl_BA.txt @@ -21,5 +21,5 @@ sr_Cyrl_BA{ Countries%variant{ MK{"БЈР Македонија"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Cyrl_ME.txt b/source/data/region/sr_Cyrl_ME.txt index d7f09a4..5ff5187 100644 --- a/source/data/region/sr_Cyrl_ME.txt +++ b/source/data/region/sr_Cyrl_ME.txt @@ -19,5 +19,5 @@ sr_Cyrl_ME{ Countries%variant{ MK{"БЈР Македонија"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Cyrl_XK.txt b/source/data/region/sr_Cyrl_XK.txt index e577b1b..ef2159b 100644 --- a/source/data/region/sr_Cyrl_XK.txt +++ b/source/data/region/sr_Cyrl_XK.txt @@ -18,5 +18,5 @@ sr_Cyrl_XK{ Countries%variant{ MK{"БЈР Македонија"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Latn.txt b/source/data/region/sr_Latn.txt index 27ef48f..faf7f1e 100644 --- a/source/data/region/sr_Latn.txt +++ b/source/data/region/sr_Latn.txt @@ -305,9 +305,8 @@ sr_Latn{ Countries%variant{ CD{"Kongo (DRK)"} CG{"Kongo (Republika)"} - CZ{"CZ"} FK{"Foklandska (Malvinska) ostrva"} MK{"Makedonija (BJRM)"} } - Version{"2.1.29.33"} + Version{"2.1.32.73"} } diff --git a/source/data/region/sr_Latn_BA.txt b/source/data/region/sr_Latn_BA.txt index 26e8724..175bee9 100644 --- a/source/data/region/sr_Latn_BA.txt +++ b/source/data/region/sr_Latn_BA.txt @@ -21,5 +21,5 @@ sr_Latn_BA{ Countries%variant{ MK{"BJR Makedonija"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Latn_ME.txt b/source/data/region/sr_Latn_ME.txt index f268278..7077d34 100644 --- a/source/data/region/sr_Latn_ME.txt +++ b/source/data/region/sr_Latn_ME.txt @@ -19,5 +19,5 @@ sr_Latn_ME{ Countries%variant{ MK{"BJR Makedonija"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sr_Latn_XK.txt b/source/data/region/sr_Latn_XK.txt index 6a0d253..aed66be 100644 --- a/source/data/region/sr_Latn_XK.txt +++ b/source/data/region/sr_Latn_XK.txt @@ -18,5 +18,5 @@ sr_Latn_XK{ Countries%variant{ MK{"BJR Makedonija"} } - Version{"2.1.29.33"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sv.txt b/source/data/region/sv.txt index f87afd5..d9a621b 100644 --- a/source/data/region/sv.txt +++ b/source/data/region/sv.txt @@ -306,5 +306,5 @@ sv{ CG{"Republiken Kongo"} MK{"f.d. jugoslaviska republiken Makedonien"} } - Version{"2.1.30.7"} + Version{"2.1.32.59"} } diff --git a/source/data/region/sw.txt b/source/data/region/sw.txt index 16eb7c1..5b39892 100644 --- a/source/data/region/sw.txt +++ b/source/data/region/sw.txt @@ -89,7 +89,7 @@ sw{ CW{"Kurakao"} CX{"Kisiwa cha Krismasi"} CY{"Cyprus"} - CZ{"Jamhuri ya Cheki"} + CZ{"Chechia"} DE{"Ujerumani"} DG{"Diego Garcia"} DJ{"Jibuti"} @@ -305,9 +305,10 @@ sw{ CD{"Kongo (DRC)"} CG{"Jamhuri ya Kongo"} CI{"Ivory Coast"} + CZ{"Jamhuri ya Cheki"} FK{"Visiwa vya Falkland (Islas Malvinas)"} MK{"Masedonia (FYROM)"} TL{"Timor ya Mashariki"} } - Version{"2.1.28.79"} + Version{"2.1.33.73"} } diff --git a/source/data/region/sw_CD.txt b/source/data/region/sw_CD.txt index 90b12ae..1d22fb9 100644 --- a/source/data/region/sw_CD.txt +++ b/source/data/region/sw_CD.txt @@ -32,5 +32,5 @@ sw_CD{ TL{"Timori ya Mashariki"} VN{"Vietnamu"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/sw_KE.txt b/source/data/region/sw_KE.txt index c652d75..7a3f62b 100644 --- a/source/data/region/sw_KE.txt +++ b/source/data/region/sw_KE.txt @@ -26,5 +26,5 @@ sw_KE{ TD{"Chadi"} VN{"Vietnamu"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ta.txt b/source/data/region/ta.txt index 76a4fff..ca9b654 100644 --- a/source/data/region/ta.txt +++ b/source/data/region/ta.txt @@ -89,7 +89,7 @@ ta{ CW{"குராகவ்"} CX{"கிறிஸ்துமஸ் தீவு"} CY{"சைப்ரஸ்"} - CZ{"செக் குடியரசு"} + CZ{"செசியா"} DE{"ஜெர்மனி"} DG{"டியகோ கார்ஷியா"} DJ{"ஜிபௌட்டி"} @@ -305,10 +305,10 @@ ta{ CD{"காங்கோ (டிஆர்சி)"} CG{"காங்கோ (குடியரசு)"} CI{"ஐவரி கோஸ்ட்"} - CZ{"செசியா"} + CZ{"செக் குடியரசு"} FK{"ஃபாக்லாந்து தீவுகள் (இஸ்லாஸ் மால்வினஸ்)"} MK{"மாசிடோனியா (ஃபைரோம்)"} TL{"கிழக்கு தைமூர்"} } - Version{"2.1.28.79"} + Version{"2.1.32.4"} } diff --git a/source/data/region/te.txt b/source/data/region/te.txt index b995ea5..5800a07 100644 --- a/source/data/region/te.txt +++ b/source/data/region/te.txt @@ -89,7 +89,7 @@ te{ CW{"కురాకవో"} CX{"క్రిస్మస్ దీవి"} CY{"సైప్రస్"} - CZ{"చెక్ రిపబ్లిక్"} + CZ{"చెక్‌చియ"} DE{"జర్మనీ"} DG{"డియాగో గార్సియా"} DJ{"జిబౌటి"} @@ -305,10 +305,10 @@ te{ CD{"కాంగో (DRC)"} CG{"కాంగో (రిపబ్లిక్)"} CI{"ఐవరీ కోస్ట్"} - CZ{"చెక్‌చియ"} + CZ{"చెక్ రిపబ్లిక్"} FK{"ఫాక్‌ల్యాండ్ దీవులు (ఇస్లాస్ మాల్వినాస్)"} MK{"మేసిడోనియా (FYROM)"} TL{"తూర్పు తైమూర్"} } - Version{"2.1.28.79"} + Version{"2.1.31.86"} } diff --git a/source/data/region/teo.txt b/source/data/region/teo.txt index 038c6ad..afed4dd 100644 --- a/source/data/region/teo.txt +++ b/source/data/region/teo.txt @@ -227,5 +227,5 @@ teo{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/th.txt b/source/data/region/th.txt index e6af07b..a605496 100644 --- a/source/data/region/th.txt +++ b/source/data/region/th.txt @@ -89,7 +89,7 @@ th{ CW{"คูราเซา"} CX{"เกาะคริสต์มาส"} CY{"ไซปรัส"} - CZ{"สาธารณรัฐเช็ก"} + CZ{"เช็ก"} DE{"เยอรมนี"} DG{"ดิเอโกการ์เซีย"} DJ{"จิบูตี"} @@ -305,10 +305,10 @@ th{ CD{"คองโก (สาธารณรัฐประชาธิปไตย)"} CG{"คองโก (สาธารณรัฐ)"} CI{"ไอวอรี่โคสต์"} - CZ{"เช็ก"} + CZ{"สาธารณรัฐเช็ก"} FK{"หมู่เกาะฟอล์กแลนด์ (อิสลาส มาลวินาส)"} MK{"มาซิโดเนีย (FYROM)"} TL{"ติมอร์ตะวันออก"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ti.txt b/source/data/region/ti.txt index 5a0d407..1b95d45 100644 --- a/source/data/region/ti.txt +++ b/source/data/region/ti.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ti{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/to.txt b/source/data/region/to.txt index b43db7a..924db5a 100644 --- a/source/data/region/to.txt +++ b/source/data/region/to.txt @@ -89,7 +89,7 @@ to{ CW{"Kulasao"} CX{"Motu Kilisimasi"} CY{"Saipalesi"} - CZ{"Lipapilika Seki"} + CZ{"Sēkia"} DE{"Siamane"} DG{"Tieko Kāsia"} DJ{"Siputi"} @@ -302,8 +302,8 @@ to{ Countries%variant{ CD{"Kongo (LTK)"} CG{"Kongo (Lipapilika)"} - CZ{"Sēkia"} + CZ{"Lipapilika Seki"} MK{"Masetōnia (FYROM)"} } - Version{"2.1.27.98"} + Version{"2.1.31.74"} } diff --git a/source/data/region/tr.txt b/source/data/region/tr.txt index 91386a7..eb428da 100644 --- a/source/data/region/tr.txt +++ b/source/data/region/tr.txt @@ -89,7 +89,7 @@ tr{ CW{"Curaçao"} CX{"Christmas Adası"} CY{"Kıbrıs"} - CZ{"Çek Cumhuriyeti"} + CZ{"Çekya"} DE{"Almanya"} DG{"Diego Garcia"} DJ{"Cibuti"} @@ -304,9 +304,9 @@ tr{ Countries%variant{ CD{"Kongo Demokratik Cumhuriyeti"} CG{"Kongo Cumhuriyeti"} - CZ{"Çekya"} + CZ{"Çek Cumhuriyeti"} FK{"Falkland Adaları (Malvinas Adaları)"} TL{"Doğu Timor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/twq.txt b/source/data/region/twq.txt index d711daa..63c3e54 100644 --- a/source/data/region/twq.txt +++ b/source/data/region/twq.txt @@ -227,5 +227,5 @@ twq{ ZM{"Zambi"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/tzm.txt b/source/data/region/tzm.txt index 71ca926..4a8b619 100644 --- a/source/data/region/tzm.txt +++ b/source/data/region/tzm.txt @@ -227,5 +227,5 @@ tzm{ ZM{"Zambya"} ZW{"Zimbabwi"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/ug.txt b/source/data/region/ug.txt index 35b38c8..bc1ef6d 100644 --- a/source/data/region/ug.txt +++ b/source/data/region/ug.txt @@ -306,5 +306,5 @@ ug{ FK{"فالكلاند ئاراللىرى (ئىسلاس مالۋىناس)"} MK{"ماكېدونىيە (س ي م ج)"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/uk.txt b/source/data/region/uk.txt index c399979..117af0d 100644 --- a/source/data/region/uk.txt +++ b/source/data/region/uk.txt @@ -89,7 +89,7 @@ uk{ CW{"Кюрасао"} CX{"Острів Різдва"} CY{"Кіпр"} - CZ{"Чеська Республіка"} + CZ{"Чехія"} DE{"Німеччина"} DG{"Дієго-Гарсія"} DJ{"Джибуті"} @@ -305,11 +305,11 @@ uk{ CD{"Конго (ДРК)"} CG{"Конго (Республіка)"} CI{"Берег Слонової Кістки"} - CZ{"Чехія"} + CZ{"Чеська Республіка"} FK{"Фолклендські (Мальвінські) острови"} FM{"Федеративні Штати Мікронезії"} MK{"Македонія (КЮРМ)"} TL{"Східний Тимор"} } - Version{"2.1.29.38"} + Version{"2.1.32.60"} } diff --git a/source/data/region/ur.txt b/source/data/region/ur.txt index 571f4af..b2b5968 100644 --- a/source/data/region/ur.txt +++ b/source/data/region/ur.txt @@ -89,7 +89,7 @@ ur{ CW{"کیوراکاؤ"} CX{"جزیرہ کرسمس"} CY{"قبرص"} - CZ{"چیک جمہوریہ"} + CZ{"زکھیا"} DE{"جرمنی"} DG{"ڈائجو گارسیا"} DJ{"جبوتی"} @@ -305,10 +305,10 @@ ur{ CD{"کانگو (DRC)"} CG{"کانگو (جمہوریہ)"} CI{"آئیوری کوسٹ"} - CZ{"زکھیا"} + CZ{"چیک جمہوریہ"} FK{"فاکلینڈ جزائر (مالویناس)"} MK{"مقدونیہ (FYROM)"} TL{"مشرقی تیمور"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/ur_IN.txt b/source/data/region/ur_IN.txt index c8cd231..c52086c 100644 --- a/source/data/region/ur_IN.txt +++ b/source/data/region/ur_IN.txt @@ -29,5 +29,5 @@ ur_IN{ Countries%variant{ FK{"جزائر فاکلینڈ (اسلاس مالویناس)"} } - Version{"2.1.27.79"} + Version{"2.1.31.33"} } diff --git a/source/data/region/uz.txt b/source/data/region/uz.txt index d28b8df..0bb95ac 100644 --- a/source/data/region/uz.txt +++ b/source/data/region/uz.txt @@ -89,7 +89,7 @@ uz{ CW{"Kyurasao"} CX{"Rojdestvo oroli"} CY{"Kipr"} - CZ{"Chexiya Respublikasi"} + CZ{"Chexiya"} DE{"Germaniya"} DG{"Diyego-Garsiya"} DJ{"Jibuti"} @@ -305,10 +305,10 @@ uz{ CD{"Kongo (KDR)"} CG{"Kongo (Respublika)"} CI{"Fil suyagi qirg‘og‘i"} - CZ{"Chexiya"} + CZ{"Chexiya Respublikasi"} FK{"Folklend (Malvin) orollari"} MK{"Makedoniya (SYRM)"} TL{"Sharqiy Timor"} } - Version{"2.1.29.44"} + Version{"2.1.32.60"} } diff --git a/source/data/region/uz_Arab.txt b/source/data/region/uz_Arab.txt index 22724ba..8d431e7 100644 --- a/source/data/region/uz_Arab.txt +++ b/source/data/region/uz_Arab.txt @@ -5,5 +5,5 @@ uz_Arab{ Countries{ AF{"افغانستان"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/uz_Cyrl.txt b/source/data/region/uz_Cyrl.txt index 4cb47f2..c38677c 100644 --- a/source/data/region/uz_Cyrl.txt +++ b/source/data/region/uz_Cyrl.txt @@ -90,7 +90,7 @@ uz_Cyrl{ CW{"Кюрасао"} CX{"Рождество ороли"} CY{"Кипр"} - CZ{"Чехия Республикаси"} + CZ{"Чехия"} DE{"Германия"} DG{"Диего-Гарсия"} DJ{"Жибути"} @@ -304,10 +304,10 @@ uz_Cyrl{ CD{"Конго (КДР)"} CG{"Конго (Республика)"} CI{"Фил Суяги Қирғоғи"} - CZ{"Чехия"} + CZ{"Чехия Республикаси"} FK{"Фолкленд (Малвин) ороллари"} MK{"Македония (СЮРМ)"} TL{"Шарқий Тимор"} } - Version{"2.1.27.98"} + Version{"2.1.31.86"} } diff --git a/source/data/region/uz_Latn.txt b/source/data/region/uz_Latn.txt index bdf99c4..fdd810c 100644 --- a/source/data/region/uz_Latn.txt +++ b/source/data/region/uz_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Latn{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/vai.txt b/source/data/region/vai.txt index c0223a1..0eac451 100644 --- a/source/data/region/vai.txt +++ b/source/data/region/vai.txt @@ -226,5 +226,5 @@ vai{ ZM{"ꕤꔭꕩ"} ZW{"ꔽꕓꖜꔃ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/vai_Latn.txt b/source/data/region/vai_Latn.txt index 2998b34..80b4d72 100644 --- a/source/data/region/vai_Latn.txt +++ b/source/data/region/vai_Latn.txt @@ -227,5 +227,5 @@ vai_Latn{ ZM{"Zambiya"} ZW{"Zimbabhuwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/vai_Vaii.txt b/source/data/region/vai_Vaii.txt index 38872b5..e66f0f3 100644 --- a/source/data/region/vai_Vaii.txt +++ b/source/data/region/vai_Vaii.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Vaii{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/vi.txt b/source/data/region/vi.txt index 2b1c358..6cb4bb0 100644 --- a/source/data/region/vi.txt +++ b/source/data/region/vi.txt @@ -89,7 +89,7 @@ vi{ CW{"Curaçao"} CX{"Đảo Giáng Sinh"} CY{"Síp"} - CZ{"Cộng hòa Séc"} + CZ{"Czechia"} DE{"Đức"} DG{"Diego Garcia"} DJ{"Djibouti"} @@ -305,10 +305,10 @@ vi{ CD{"Cộng hòa Dân chủ Congo"} CG{"Cộng hòa Congo"} CI{"Bờ Biển Ngà"} - CZ{"Czechia"} + CZ{"Cộng hòa Séc"} FK{"Quần đảo Falkland (Islas Malvinas)"} MK{"Macedonia (FYROM)"} TL{"Đông Timor"} } - Version{"2.1.28.79"} + Version{"2.1.32.59"} } diff --git a/source/data/region/vun.txt b/source/data/region/vun.txt index 2621321..9b7e2d7 100644 --- a/source/data/region/vun.txt +++ b/source/data/region/vun.txt @@ -227,5 +227,5 @@ vun{ ZM{"Zambia"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/wae.txt b/source/data/region/wae.txt index 518c4f5..e1b1568 100644 --- a/source/data/region/wae.txt +++ b/source/data/region/wae.txt @@ -299,5 +299,5 @@ wae{ MK{"Mazedonie (EJR)"} TL{"Wešttimor"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/xog.txt b/source/data/region/xog.txt index 5b3802d..3fcc097 100644 --- a/source/data/region/xog.txt +++ b/source/data/region/xog.txt @@ -226,5 +226,5 @@ xog{ ZM{"Zambya"} ZW{"Zimbabwe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/yav.txt b/source/data/region/yav.txt index a812a40..baa2caf 100644 --- a/source/data/region/yav.txt +++ b/source/data/region/yav.txt @@ -226,5 +226,5 @@ yav{ ZM{"saambíi"} ZW{"simbapuwé"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/yi.txt b/source/data/region/yi.txt index 7960510..6c066b4 100644 --- a/source/data/region/yi.txt +++ b/source/data/region/yi.txt @@ -231,5 +231,5 @@ yi{ Countries%variant{ TL{"מזרח טימאר"} } - Version{"2.1.27.97"} + Version{"2.1.31.33"} } diff --git a/source/data/region/yo.txt b/source/data/region/yo.txt index 30becb9..92f3145 100644 --- a/source/data/region/yo.txt +++ b/source/data/region/yo.txt @@ -227,5 +227,5 @@ yo{ ZM{"Orílẹ́ède ṣamibia"} ZW{"Orílẹ́ède ṣimibabe"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/yo_BJ.txt b/source/data/region/yo_BJ.txt index dcbd1a2..0d5a057 100644 --- a/source/data/region/yo_BJ.txt +++ b/source/data/region/yo_BJ.txt @@ -227,5 +227,5 @@ yo_BJ{ ZM{"Orílɛ́ède shamibia"} ZW{"Orílɛ́ède shimibabe"} } - Version{"2.1.29.54"} + Version{"2.1.31.33"} } diff --git a/source/data/region/yue.txt b/source/data/region/yue.txt index 8cf68bb..3aae584 100644 --- a/source/data/region/yue.txt +++ b/source/data/region/yue.txt @@ -89,7 +89,7 @@ yue{ CW{"庫拉索"} CX{"聖誕島"} CY{"賽普勒斯"} - CZ{"捷克共和國"} + CZ{"捷克"} DE{"德國"} DG{"迪亞哥加西亞島"} DJ{"吉布地"} @@ -302,9 +302,9 @@ yue{ Countries%variant{ CD{"剛果民主共和國"} CG{"剛果共和國"} - CZ{"捷克"} + CZ{"捷克共和國"} FK{"福克蘭群島 (馬爾維納斯群島)"} MK{"前南斯拉夫馬其頓共和國"} } - Version{"2.1.28.76"} + Version{"2.1.31.86"} } diff --git a/source/data/region/zgh.txt b/source/data/region/zgh.txt index bcb2b3b..3ee7ed3 100644 --- a/source/data/region/zgh.txt +++ b/source/data/region/zgh.txt @@ -230,5 +230,5 @@ zgh{ ZM{"ⵣⴰⵎⴱⵢⴰ"} ZW{"ⵣⵉⵎⴱⴰⴱⵡⵉ"} } - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/zh.txt b/source/data/region/zh.txt index f40e343..cfc9710 100644 --- a/source/data/region/zh.txt +++ b/source/data/region/zh.txt @@ -89,7 +89,7 @@ zh{ CW{"库拉索"} CX{"圣诞岛"} CY{"塞浦路斯"} - CZ{"捷克共和国"} + CZ{"捷克"} DE{"德国"} DG{"迪戈加西亚岛"} DJ{"吉布提"} @@ -305,9 +305,9 @@ zh{ CD{"刚果民主共和国"} CG{"刚果共和国"} CI{"象牙海岸"} - CZ{"捷克"} + CZ{"捷克共和国"} FK{"福克兰群岛(马尔维纳斯群岛)"} MK{"马其顿(前南斯拉夫马其顿共和国)"} } - Version{"2.1.29.84"} + Version{"2.1.33.94"} } diff --git a/source/data/region/zh_Hans.txt b/source/data/region/zh_Hans.txt index c64cac5..1e311fc 100644 --- a/source/data/region/zh_Hans.txt +++ b/source/data/region/zh_Hans.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans{ - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/zh_Hant.txt b/source/data/region/zh_Hant.txt index bc270d8..668d07f 100644 --- a/source/data/region/zh_Hant.txt +++ b/source/data/region/zh_Hant.txt @@ -90,7 +90,7 @@ zh_Hant{ CW{"庫拉索"} CX{"聖誕島"} CY{"賽普勒斯"} - CZ{"捷克共和國"} + CZ{"捷克"} DE{"德國"} DG{"迪亞哥加西亞島"} DJ{"吉布地"} @@ -305,9 +305,9 @@ zh_Hant{ Countries%variant{ CD{"剛果民主共和國"} CG{"剛果共和國"} - CZ{"捷克"} + CZ{"捷克共和國"} FK{"福克蘭群島(馬爾維納斯群島)"} MK{"前南斯拉夫馬其頓共和國"} } - Version{"2.1.28.79"} + Version{"2.1.33.94"} } diff --git a/source/data/region/zh_Hant_HK.txt b/source/data/region/zh_Hant_HK.txt index 49a7b80..b31dd67 100644 --- a/source/data/region/zh_Hant_HK.txt +++ b/source/data/region/zh_Hant_HK.txt @@ -98,5 +98,5 @@ zh_Hant_HK{ Countries%variant{ CI{"象牙海岸"} } - Version{"2.1.27.99"} + Version{"2.1.31.33"} } diff --git a/source/data/region/zh_Hant_MO.txt b/source/data/region/zh_Hant_MO.txt index 9d2c5aa..9589854 100644 --- a/source/data/region/zh_Hant_MO.txt +++ b/source/data/region/zh_Hant_MO.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hant_MO{ %%Parent{"zh_Hant_HK"} - Version{"2.1.27.40"} + Version{"2.1.31.33"} } diff --git a/source/data/region/zu.txt b/source/data/region/zu.txt index 95e540b..20536cc 100644 --- a/source/data/region/zu.txt +++ b/source/data/region/zu.txt @@ -89,7 +89,7 @@ zu{ CW{"i-Curaçao"} CX{"i-Christmas Island"} CY{"i-Cyprus"} - CZ{"i-Czech Republic"} + CZ{"i-Czechia"} DE{"i-Germany"} DG{"i-Diego Garcia"} DJ{"i-Djibouti"} @@ -305,10 +305,10 @@ zu{ CD{"i-Congo (DRC)"} CG{"i-Congo (Republic)"} CI{"i-Ivory Coast"} - CZ{"i-Czechia"} + CZ{"i-Czech Republic"} FK{"i-Falkland Islands (Islas Malvinas)"} MK{"i-Macedonia (FYROM)"} TL{"i-East Timor"} } - Version{"2.1.29.22"} + Version{"2.1.31.74"} } diff --git a/source/data/translit/InterIndic_Arabic.txt b/source/data/translit/InterIndic_Arabic.txt index 0e06a03..50feb76 100644 --- a/source/data/translit/InterIndic_Arabic.txt +++ b/source/data/translit/InterIndic_Arabic.txt @@ -6,6 +6,7 @@ # $nonword = [^\uE000-\uE0FF]; +$wordBoundary = [^[:L:][:M:][:N:]]; \uE015\uE03F\uE02F\uE03E } $nonword→كيا; # किया \uE026\uE03F\uE02F\uE03E } $nonword→ديا; # दिया \uE015\uE03F } $nonword→كي; # कि at word end @@ -28,6 +29,7 @@ $nonword = [^\uE000-\uE0FF]; \uE00C→ل; # ऌ \uE00D→ا ي; # ऍ \uE00E→ي; # ऎ +$wordBoundary {\uE00F} → إي; # word-initial ए \uE00F } $nonword→ي; # ए use ي when at end \uE00F→ي; # ए use ي when not at end \uE010 } $nonword→ا ي; # ऐ use ي when at end diff --git a/source/data/translit/Zawgyi_my.txt b/source/data/translit/Zawgyi_my.txt index 66024b8..b572070 100644 --- a/source/data/translit/Zawgyi_my.txt +++ b/source/data/translit/Zawgyi_my.txt @@ -26,7 +26,7 @@ $ukinzi = \u1004\u103A\u1039; # Codepoints representing kinzi in Unicode # This character has multiple representations in the Zawgyi font. $zmedialra = [\u103B\u107E-\u1084]; #### -#### STAGE (1): CODEPOINT MAPPING FROM ZAWGYI TO UNICODE +#### STAGE 1: CODEPOINT MAPPING FROM ZAWGYI TO UNICODE #### # Kinzi (predefined ligatures) # Move base character to the right @@ -66,8 +66,6 @@ $zmedialra = [\u103B\u107E-\u1084]; \u1087 → \u103E ; \u1088 → \u103E \u102F ; \u1089 → \u103E \u1030 ; -# Single diacritics with space - use non-breaking -# TODO(ccornelius): determine if this breaks transliteration # asat \u1039 → \u103A ; # Vowels @@ -128,26 +126,30 @@ $zmedialra = [\u103B\u107E-\u1084]; # yayit $zmedialra → \u103C ; #### -#### STAGE (2): POST REORDERING RULES FOR UNICODE RENDERING +#### STAGE 2: POST REORDERING RULES FOR UNICODE RENDERING #### Now every codepoint is Unicode. This starts conversion #### from semi-visual order to logical order. #### ::Null; # Case of MYANMAR digit being used instead of a letter -\u1044 \u103a → | \u104E \u103A ; -# Lone zero with diacritic mark -\u1031 \u1040 ($nondigits) → \u1031 \u101D $1; -($nondigits) \u1040 ([\u102B-\u103F]) → $1 \u101D $2; -# cwc: Simpler replacements for Zawgyi 1025 +# Lone digit zero +[$] \u1040 ($nondigits) → \u101D $1; +([\u102b-\u103f]) \u1040 ($nondigits) → $1 \u101d $2; +# Lone digit 4 +^ \u1044 ($nondigits) → | \u104E $1 ; +([\u102b-\u103f]) \u1044 ($nondigits) → $1 \u104E $2; +# Simpler replacements for Zawgyi 1025 \u1025 \u103A → \u1009 \u103A; \u1025 \u102E → \u1026; -# Asat and dot below reordering. -\u1037\u103A → \u103A\u1037; +# Asat and dot below reordering, to Unicode NFC. +\u103A\u1037 → \u1037\u103A; # Reorder some vowel signs \u1036 ($umedial*) ($vowelsign+) → $1 $2 \u1036 ; ([\u102B\u102C\u102F\u1030]) ([\u102D\u102E\u1032]) → $2 $1; # Move ra medial, but not others. \u103C ($consonant) → $1 \u103C; +# Replace CA + YA with JHA +\u1005\u103b → \u1008; #### #### Stage 3 #### Move \u1031, \u1036, and \u103C after consonants. @@ -193,11 +195,21 @@ $zmedialra → \u103C ; # Move visarga (\u1038) after other signs \u1038 ([$vowelmedial]) → $1 \u1038; \u1038 ([\u1036\u1037\u103A]) → $1 \u1038; +# Reorder +\u1036 \u102f → \u102f \u1036; ### ### Stage 6 ### Finish medial sorting, fix conflicting and extra diacritics ### ::Null; +# Fix duplicate and overlapping modifiers. +\u102F \u102F+ → \u102F; +\u102F \u1030 → \u102F; +\u102F \u103A → \u102F; +\u102D \u102E → \u102E; +\u1036 \u1036+ → \u1036; +# Remove space directly before diacritics. +[:WSpace:] ([\u102b-\u1032\u1036-\u103e]) → $1; # Fix 103B/103A order for asat. ($consonant) \u103B \u103A → $1 \u103A \u103B; diff --git a/source/data/translit/root.txt b/source/data/translit/root.txt index 02fdc66..76666da 100644 --- a/source/data/translit/root.txt +++ b/source/data/translit/root.txt @@ -3793,6 +3793,16 @@ root { } } + ta-fonipa-t-ta { + alias {"ta-ta_FONIPA"} + } + ta-ta_FONIPA { + file { + resource:process(transliterator) {"ta_ta_FONIPA.txt"} + direction {"FORWARD"} + } + } + am-t-tlh { alias {"tlh-am"} } diff --git a/source/data/translit/ta_ta_FONIPA.txt b/source/data/translit/ta_ta_FONIPA.txt new file mode 100644 index 0000000..2ded60e --- /dev/null +++ b/source/data/translit/ta_ta_FONIPA.txt @@ -0,0 +1,79 @@ +# © 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html#License +# +# File: ta_ta_FONIPA.txt +# Generated from CLDR +# + +$c = [\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9]; +$v = [\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC]; +$nasal = [ŋɲɳnm]; +# Delete ZWNJ and ZWJ to simplify further processing. +\u200C → ; +\u200D → ; +::NFC; +# Manifest the implicit vowel after every consonant that is not followed by a +# dependent vowel or virama. +($c) } [^$v \u0BCD] → $1 a; +::Null; +ஃப → f; +ஃ → x; +அ → a; +ஆ → aː; +இ → i; +ஈ → iː; +உ → u; +ஊ → uː; +எ → e; +ஏ → eː; +ஐ → aɪ; +ஒ → o; +ஓ → oː; +ஔ → aʊ; +$nasal { க → g; +க → k; +ங → ŋ; +$nasal { ச → d\u0361ʒ; +ச\u0BCDச → t\u0361ʃ; +[ʈr] { ச → t\u0361ʃ; +ச → s \u02BC; +ஜ → d\u0361ʒ; +ஞ → ɲ; +$nasal { ட → ɖ; +ட → ʈ; +ண → ɳ; +$nasal { த → d\u032A; +த → t\u032A; +ந → n; +ன → n; +$nasal { ப → b; +ப → p; +ம → m; +ய → j; +ர → r; +ற\u0BCDற → tʳ; +ற } \u0BCD → tʳ; +$nasal { ற → tʳ; +ற → r; +ல → l; +ள → ɭ; +ழ → ɻ; +வ → ʋ; +ஶ → ʃ; +ஷ → ʂ; +ஸ\u0BCD } ர → ʃ; +ஸ → s; +ஹ → h; +\u0BBE → aː; +\u0BBF → i; +\u0BC0 → iː; +\u0BC1 → u; +\u0BC2 → uː; +\u0BC6 → e; +\u0BC7 → eː; +\u0BC8 → aɪ; +\u0BCA → o; +\u0BCB → oː; +\u0BCC → aʊ; +\u0BCD → ; + diff --git a/source/data/unidata/changes.txt b/source/data/unidata/changes.txt index 3c45a08..c34d75d 100644 --- a/source/data/unidata/changes.txt +++ b/source/data/unidata/changes.txt @@ -40,6 +40,137 @@ For new script codes see http://www.unicode.org/iso15924/codechanges.html ---------------------------------------------------------------------------- *** +TODO: +- ICU ticket #13061 undo hacks from emoji 5.0 update +- define & use ICU4C_SRC_DIR + +---------------------------------------------------------------------------- *** + +Emoji 5.0 update for ICU 59 +- ICU 59 mostly remains on Unicode 9.0 +- except updates bidi and segmentation data to Unicode 10 beta + +First run of tools on combined icu4c/icu4j/tools trunk after svn repository reorg. + +* Command-line environment setup + +ICU_ROOT=~/svn.icu/trunk +ICU_SRC_DIR=$ICU_ROOT/src +ICU4C_SRC_DIR=$ICU_SRC_DIR/icu4c +ICUDT=icudt59b +export LD_LIBRARY_PATH=$ICU_ROOT/dbg/lib +SRC_DATA_IN=$ICU4C_SRC_DIR/source/data/in +UNIDATA=$ICU4C_SRC_DIR/source/data/unidata + +*** ICU Trac + +- ticket:12900: take Emoji 5.0 properties data into ICU 59 once it's released +- changes directly on trunk + +*** data files & enums & parser code + +* download files + +- download Unicode 9.0 files into a uni90e50 folder: ucd, idna, security (skip uca) +- download emoji 5.0 beta files into the same uni90e50 folder +- download Unicode 10.0 beta files: ucd + + copy Unicode 10 bidi files to the uni90e50/ucd folder: + BidiBrackets.txt + BidiCharacterTest.txt + BidiMirroring.txt + BidiTest.txt + extracted/DerivedBidiClass.txt + + copy Unicode 10 segmentation files to the uni90e50/ucd folder: + LineBreak.txt + auxiliary/* + +* preparseucd.py changes +- adjust for combined trunks +- write new copyright lines +- ignore new Emoji_Component property for now + +* process and/or copy files +- ~/svn.icu/trunk/src/tools/unicode$ py/preparseucd.py ~/unidata/uni90e50/20170322 $ICU_SRC_DIR + + This writes files (especially ppucd.txt) to the ICU4C unidata and testdata subfolders. + +- cp ~/unidata/uni90e50/20170322/security/confusables.txt $UNIDATA + +* build ICU (make install) + so that the tools build can pick up the new definitions from the installed header files. + + $ICU_ROOT/dbg/icu4c$ echo;echo; make -j7 install > out.txt 2>&1 ; tail -n 30 out.txt ; date + +* build Unicode tools using CMake+make + +~/svn.icu/trunk/src/tools/unicode/c/icudefs.txt: + +# Location (--prefix) of where ICU was installed. +set(ICU_INST_DIR /usr/local/google/home/mscherer/svn.icu/trunk/inst/icu4c) +# Location of the ICU4C source tree. +set(ICU4C_SRC_DIR /usr/local/google/home/mscherer/svn.icu/trunk/src/icu4c) + + ~/svn.icu/trunk/dbg/tools/unicode/c$ + cmake ../../../../src/tools/unicode/c + make + +* generate core properties data files + ~/svn.icu/trunk/dbg/tools/unicode/c$ + genprops/genprops $ICU4C_SRC_DIR +- rebuild ICU (make install) & tools + +* run & fix ICU4C tests +- Andy handles RBBI & spoof check test failures + +* update Java data files +- refresh just the UCD/UCA-related/derived files, just to be safe +- see (ICU4C)/source/data/icu4j-readme.txt +- mkdir /tmp/icu4j +- ~/svn.icu/trunk/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install + output: + ... + Unicode .icu files built to ./out/build/icudt59l + echo timestamp > uni-core-data + mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt59b + mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt59b + echo pnames.icu uprops.icu ucase.icu ubidi.icu nfc.nrm > ./out/icu4j/add.txt + LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt59l.dat ./out/icu4j/icudt59b.dat -a ./out/icu4j/add.txt -s ./out/build/icudt59l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt59b + mv ./out/icu4j/"com/ibm/icu/impl/data/icudt59b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt59b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt59b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt59b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt59b" + jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt59b/ + mkdir -p /tmp/icu4j/main/shared/data + cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data + jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt59b/ + mkdir -p /tmp/icu4j/main/shared/data + cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data + make[1]: Leaving directory `/usr/local/google/home/mscherer/svn.icu/trunk/dbg/icu4c/data' +- copy the big-endian Unicode data files to another location, + separate from the other data files, + and then refresh ICU4J + cd ~/svn.icu/trunk/dbg/icu4c/data/out/icu4j + mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr + cp com/ibm/icu/impl/data/$ICUDT/confusables.cfu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT + cp com/ibm/icu/impl/data/$ICUDT/*.icu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT + rm /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/cnvalias.icu + cp com/ibm/icu/impl/data/$ICUDT/brkitr/* /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr + jar uvf ~/svn.icu/trunk/src/icu4j/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/$ICUDT + +* When refreshing all of ICU4J data from ICU4C +- ~/svn.icu/trunk/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install +- cp /tmp/icu4j/main/shared/data/icudata.jar ~/svn.icu/trunk/src/icu4j/main/shared/data +or +- ~/svn.icu/trunk/dbg/icu4c$ make ICU4J_ROOT=~/svn.icu/trunk/src/icu4j icu4j-data-install + +* refresh Java test .txt files +- copy new .txt files into ICU4J's main/tests/core/src/com/ibm/icu/dev/data/unicode + cd $ICU4C_SRC_DIR/source/data/unidata + cp confusables.txt confusablesWholeScript.txt NormalizationCorrections.txt NormalizationTest.txt SpecialCasing.txt UnicodeData.txt ~/svn.icu/trunk/src/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode + cd ../../test/testdata + cp BidiCharacterTest.txt BidiTest.txt ~/svn.icu/trunk/src/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode + cp ~/unidata/uni90e50/20170322/ucd/CompositionExclusions.txt ~/svn.icu/trunk/src/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode + +* run & fix ICU4J tests + +---------------------------------------------------------------------------- *** + Unicode 9.0 update for ICU 58 * Command-line environment setup diff --git a/source/data/unidata/confusables.txt b/source/data/unidata/confusables.txt index ec41626..f3c1a1e 100644 --- a/source/data/unidata/confusables.txt +++ b/source/data/unidata/confusables.txt @@ -1,7 +1,5 @@ # confusables.txt -# Date: 2016-04-05, 11:47:12 GMT -# Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html +# Date: 2016-06-16, 13:41:30 GMT # © 2016 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html diff --git a/source/data/unidata/norm2/nfc.txt b/source/data/unidata/norm2/nfc.txt index 84efb86..578adf4 100644 --- a/source/data/unidata/norm2/nfc.txt +++ b/source/data/unidata/norm2/nfc.txt @@ -1,3 +1,5 @@ +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # Copyright (C) 1999-2016, International Business Machines # Corporation and others. All Rights Reserved. # diff --git a/source/data/unidata/norm2/nfkc.txt b/source/data/unidata/norm2/nfkc.txt index 637436c..7158124 100644 --- a/source/data/unidata/norm2/nfkc.txt +++ b/source/data/unidata/norm2/nfkc.txt @@ -1,3 +1,5 @@ +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # Copyright (C) 1999-2016, International Business Machines # Corporation and others. All Rights Reserved. # diff --git a/source/data/unidata/norm2/nfkc_cf.txt b/source/data/unidata/norm2/nfkc_cf.txt index 7410e12..24adbcc 100644 --- a/source/data/unidata/norm2/nfkc_cf.txt +++ b/source/data/unidata/norm2/nfkc_cf.txt @@ -1,7 +1,7 @@ -# Unicode Character Database -# Copyright (c) 1991-2016 Unicode, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# For documentation, see http://www.unicode.org/reports/tr44/ +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html +# Copyright (C) 1999-2016, International Business Machines +# Corporation and others. All Rights Reserved. # # file name: nfkc_cf.txt # diff --git a/source/data/unidata/ppucd.txt b/source/data/unidata/ppucd.txt index f5ddc82..4856d24 100644 --- a/source/data/unidata/ppucd.txt +++ b/source/data/unidata/ppucd.txt @@ -1,6 +1,6 @@ # Preparsed UCD generated by ICU preparseucd.py -# Copyright (c) 1991-2016 Unicode, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# Copyright (C) 1991 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html ucd;9.0.0 property;Catalog;age;Age @@ -1887,79 +1887,79 @@ cp;02AD;age=3.0;na=LATIN LETTER BIDENTAL PERCUSSIVE cp;02AE;age=4.0;na=LATIN SMALL LETTER TURNED H WITH FISHHOOK cp;02AF;age=4.0;na=LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL -block;02B0..02FF;age=1.1;bc=ON;blk=Modifier_Letters;CI;Dia;gc=Sk;Gr_Base;lb=AL;sc=Zyyy +block;02B0..02FF;age=1.1;bc=ON;blk=Modifier_Letters;CI;Dia;gc=Sk;Gr_Base;lb=AL;sc=Zyyy;WB=LE # 02B0..02FF Spacing Modifier Letters # Latin superscript modifier letters -cp;02B0;Alpha;bc=L;Cased;CWKCF;dm=0068;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL H;NFKC_CF=0068;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B1;Alpha;bc=L;Cased;CWKCF;dm=0266;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL H WITH HOOK;NFKC_CF=0266;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B2;Alpha;bc=L;Cased;CWKCF;dm=006A;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL J;NFKC_CF=006A;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;SD;WB=LE;XIDC;XIDS -cp;02B3;Alpha;bc=L;Cased;CWKCF;dm=0072;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL R;NFKC_CF=0072;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B4;Alpha;bc=L;Cased;CWKCF;dm=0279;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL TURNED R;NFKC_CF=0279;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B5;Alpha;bc=L;Cased;CWKCF;dm=027B;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL TURNED R WITH HOOK;NFKC_CF=027B;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B6;Alpha;bc=L;Cased;CWKCF;dm=0281;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL CAPITAL INVERTED R;NFKC_CF=0281;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B7;Alpha;bc=L;Cased;CWKCF;dm=0077;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL W;NFKC_CF=0077;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02B8;Alpha;bc=L;Cased;CWKCF;dm=0079;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL Y;NFKC_CF=0079;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS +cp;02B0;Alpha;bc=L;Cased;CWKCF;dm=0068;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL H;NFKC_CF=0068;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B1;Alpha;bc=L;Cased;CWKCF;dm=0266;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL H WITH HOOK;NFKC_CF=0266;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B2;Alpha;bc=L;Cased;CWKCF;dm=006A;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL J;NFKC_CF=006A;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;SD;XIDC;XIDS +cp;02B3;Alpha;bc=L;Cased;CWKCF;dm=0072;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL R;NFKC_CF=0072;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B4;Alpha;bc=L;Cased;CWKCF;dm=0279;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL TURNED R;NFKC_CF=0279;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B5;Alpha;bc=L;Cased;CWKCF;dm=027B;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL TURNED R WITH HOOK;NFKC_CF=027B;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B6;Alpha;bc=L;Cased;CWKCF;dm=0281;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL CAPITAL INVERTED R;NFKC_CF=0281;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B7;Alpha;bc=L;Cased;CWKCF;dm=0077;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL W;NFKC_CF=0077;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02B8;Alpha;bc=L;Cased;CWKCF;dm=0079;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL Y;NFKC_CF=0079;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS # Miscellaneous phonetic modifiers -cp;02B9;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER PRIME;SB=LE;WB=LE;XIDC;XIDS -cp;02BA;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOUBLE PRIME;SB=LE;WB=LE;XIDC;XIDS -cp;02BB;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER TURNED COMMA;SB=LE;WB=LE;XIDC;XIDS -cp;02BC;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER APOSTROPHE;SB=LE;WB=LE;XIDC;XIDS -cp;02BD;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER REVERSED COMMA;SB=LE;WB=LE;XIDC;XIDS -cp;02BE;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER RIGHT HALF RING;SB=LE;WB=LE;XIDC;XIDS -cp;02BF;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER LEFT HALF RING;SB=LE;WB=LE;XIDC;XIDS -cp;02C0;Alpha;bc=L;Cased;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER GLOTTAL STOP;SB=LO;WB=LE;XIDC;XIDS -cp;02C1;Alpha;bc=L;Cased;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER REVERSED GLOTTAL STOP;SB=LO;WB=LE;XIDC;XIDS +cp;02B9;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER PRIME;SB=LE;XIDC;XIDS +cp;02BA;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOUBLE PRIME;SB=LE;XIDC;XIDS +cp;02BB;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER TURNED COMMA;SB=LE;XIDC;XIDS +cp;02BC;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER APOSTROPHE;SB=LE;XIDC;XIDS +cp;02BD;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER REVERSED COMMA;SB=LE;XIDC;XIDS +cp;02BE;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER RIGHT HALF RING;SB=LE;XIDC;XIDS +cp;02BF;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER LEFT HALF RING;SB=LE;XIDC;XIDS +cp;02C0;Alpha;bc=L;Cased;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER GLOTTAL STOP;SB=LO;XIDC;XIDS +cp;02C1;Alpha;bc=L;Cased;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER REVERSED GLOTTAL STOP;SB=LO;XIDC;XIDS cp;02C2;na=MODIFIER LETTER LEFT ARROWHEAD cp;02C3;na=MODIFIER LETTER RIGHT ARROWHEAD cp;02C4;ea=A;na=MODIFIER LETTER UP ARROWHEAD cp;02C5;na=MODIFIER LETTER DOWN ARROWHEAD -cp;02C6;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER CIRCUMFLEX ACCENT;SB=LE;WB=LE;XIDC;XIDS -cp;02C7;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=CARON;SB=LE;WB=LE;XIDC;XIDS -cp;02C8;Alpha;gc=Lm;IDC;IDS;lb=BB;na=MODIFIER LETTER VERTICAL LINE;SB=LE;WB=LE;XIDC;XIDS -cp;02C9;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER MACRON;SB=LE;WB=LE;XIDC;XIDS -cp;02CA;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER ACUTE ACCENT;SB=LE;WB=LE;XIDC;XIDS -cp;02CB;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER GRAVE ACCENT;SB=LE;WB=LE;XIDC;XIDS -cp;02CC;Alpha;gc=Lm;IDC;IDS;lb=BB;na=MODIFIER LETTER LOW VERTICAL LINE;SB=LE;WB=LE;XIDC;XIDS -cp;02CD;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER LOW MACRON;SB=LE;WB=LE;XIDC;XIDS -cp;02CE;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW GRAVE ACCENT;SB=LE;WB=LE;XIDC;XIDS -cp;02CF;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW ACUTE ACCENT;SB=LE;WB=LE;XIDC;XIDS -cp;02D0;Alpha;bc=L;ea=A;Ext;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER TRIANGULAR COLON;SB=LE;WB=LE;XIDC;XIDS -cp;02D1;Alpha;bc=L;Ext;gc=Lm;IDC;IDS;na=MODIFIER LETTER HALF TRIANGULAR COLON;SB=LE;WB=LE;XIDC;XIDS +cp;02C6;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER CIRCUMFLEX ACCENT;SB=LE;XIDC;XIDS +cp;02C7;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=CARON;SB=LE;XIDC;XIDS +cp;02C8;Alpha;gc=Lm;IDC;IDS;lb=BB;na=MODIFIER LETTER VERTICAL LINE;SB=LE;XIDC;XIDS +cp;02C9;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER MACRON;SB=LE;XIDC;XIDS +cp;02CA;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER ACUTE ACCENT;SB=LE;XIDC;XIDS +cp;02CB;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER GRAVE ACCENT;SB=LE;XIDC;XIDS +cp;02CC;Alpha;gc=Lm;IDC;IDS;lb=BB;na=MODIFIER LETTER LOW VERTICAL LINE;SB=LE;XIDC;XIDS +cp;02CD;Alpha;ea=A;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER LOW MACRON;SB=LE;XIDC;XIDS +cp;02CE;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW GRAVE ACCENT;SB=LE;XIDC;XIDS +cp;02CF;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW ACUTE ACCENT;SB=LE;XIDC;XIDS +cp;02D0;Alpha;bc=L;ea=A;Ext;gc=Lm;IDC;IDS;lb=AI;na=MODIFIER LETTER TRIANGULAR COLON;SB=LE;XIDC;XIDS +cp;02D1;Alpha;bc=L;Ext;gc=Lm;IDC;IDS;na=MODIFIER LETTER HALF TRIANGULAR COLON;SB=LE;XIDC;XIDS cp;02D2;na=MODIFIER LETTER CENTRED RIGHT HALF RING cp;02D3;na=MODIFIER LETTER CENTRED LEFT HALF RING cp;02D4;na=MODIFIER LETTER UP TACK cp;02D5;na=MODIFIER LETTER DOWN TACK cp;02D6;na=MODIFIER LETTER PLUS SIGN -cp;02D7;na=MODIFIER LETTER MINUS SIGN;WB=ML +cp;02D7;na=MODIFIER LETTER MINUS SIGN # Spacing clones of diacritics -cp;02D8;CWKCF;dm=0020 0306;dt=Com;ea=A;lb=AI;na=BREVE;NFKC_CF=0020 0306;NFKC_QC=N;NFKD_QC=N -cp;02D9;CWKCF;dm=0020 0307;dt=Com;ea=A;lb=AI;na=DOT ABOVE;NFKC_CF=0020 0307;NFKC_QC=N;NFKD_QC=N -cp;02DA;CWKCF;dm=0020 030A;dt=Com;ea=A;lb=AI;na=RING ABOVE;NFKC_CF=0020 030A;NFKC_QC=N;NFKD_QC=N -cp;02DB;CWKCF;dm=0020 0328;dt=Com;ea=A;lb=AI;na=OGONEK;NFKC_CF=0020 0328;NFKC_QC=N;NFKD_QC=N -cp;02DC;CWKCF;dm=0020 0303;dt=Com;na=SMALL TILDE;NFKC_CF=0020 0303;NFKC_QC=N;NFKD_QC=N -cp;02DD;CWKCF;dm=0020 030B;dt=Com;ea=A;lb=AI;na=DOUBLE ACUTE ACCENT;NFKC_CF=0020 030B;NFKC_QC=N;NFKD_QC=N +cp;02D8;CWKCF;dm=0020 0306;dt=Com;ea=A;lb=AI;na=BREVE;NFKC_CF=0020 0306;NFKC_QC=N;NFKD_QC=N;WB=XX +cp;02D9;CWKCF;dm=0020 0307;dt=Com;ea=A;lb=AI;na=DOT ABOVE;NFKC_CF=0020 0307;NFKC_QC=N;NFKD_QC=N;WB=XX +cp;02DA;CWKCF;dm=0020 030A;dt=Com;ea=A;lb=AI;na=RING ABOVE;NFKC_CF=0020 030A;NFKC_QC=N;NFKD_QC=N;WB=XX +cp;02DB;CWKCF;dm=0020 0328;dt=Com;ea=A;lb=AI;na=OGONEK;NFKC_CF=0020 0328;NFKC_QC=N;NFKD_QC=N;WB=XX +cp;02DC;CWKCF;dm=0020 0303;dt=Com;na=SMALL TILDE;NFKC_CF=0020 0303;NFKC_QC=N;NFKD_QC=N;WB=XX +cp;02DD;CWKCF;dm=0020 030B;dt=Com;ea=A;lb=AI;na=DOUBLE ACUTE ACCENT;NFKC_CF=0020 030B;NFKC_QC=N;NFKD_QC=N;WB=XX # Additions based on 1989 IPA cp;02DE;na=MODIFIER LETTER RHOTIC HOOK cp;02DF;age=3.0;ea=A;lb=BB;na=MODIFIER LETTER CROSS ACCENT -cp;02E0;Alpha;bc=L;Cased;CWKCF;dm=0263;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL GAMMA;NFKC_CF=0263;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02E1;Alpha;bc=L;Cased;CWKCF;dm=006C;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL L;NFKC_CF=006C;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02E2;Alpha;bc=L;Cased;CWKCF;dm=0073;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL S;NFKC_CF=0073;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02E3;Alpha;bc=L;Cased;CWKCF;dm=0078;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL X;NFKC_CF=0078;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS -cp;02E4;Alpha;bc=L;Cased;CWKCF;dm=0295;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;NFKC_CF=0295;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS +cp;02E0;Alpha;bc=L;Cased;CWKCF;dm=0263;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL GAMMA;NFKC_CF=0263;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02E1;Alpha;bc=L;Cased;CWKCF;dm=006C;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL L;NFKC_CF=006C;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02E2;Alpha;bc=L;Cased;CWKCF;dm=0073;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL S;NFKC_CF=0073;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02E3;Alpha;bc=L;Cased;CWKCF;dm=0078;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL X;NFKC_CF=0078;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS +cp;02E4;Alpha;bc=L;Cased;CWKCF;dm=0295;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;NFKC_CF=0295;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS # Tone letters -cp;02E5;na=MODIFIER LETTER EXTRA-HIGH TONE BAR -cp;02E6;na=MODIFIER LETTER HIGH TONE BAR -cp;02E7;na=MODIFIER LETTER MID TONE BAR -cp;02E8;na=MODIFIER LETTER LOW TONE BAR -cp;02E9;na=MODIFIER LETTER EXTRA-LOW TONE BAR +cp;02E5;na=MODIFIER LETTER EXTRA-HIGH TONE BAR;WB=XX +cp;02E6;na=MODIFIER LETTER HIGH TONE BAR;WB=XX +cp;02E7;na=MODIFIER LETTER MID TONE BAR;WB=XX +cp;02E8;na=MODIFIER LETTER LOW TONE BAR;WB=XX +cp;02E9;na=MODIFIER LETTER EXTRA-LOW TONE BAR;WB=XX # Extended Bopomofo tone marks -cp;02EA;age=3.0;na=MODIFIER LETTER YIN DEPARTING TONE MARK;sc=Bopo -cp;02EB;age=3.0;na=MODIFIER LETTER YANG DEPARTING TONE MARK;sc=Bopo +cp;02EA;age=3.0;na=MODIFIER LETTER YIN DEPARTING TONE MARK;sc=Bopo;WB=XX +cp;02EB;age=3.0;na=MODIFIER LETTER YANG DEPARTING TONE MARK;sc=Bopo;WB=XX # IPA modifiers -cp;02EC;age=3.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER VOICING;SB=LE;WB=LE;XIDC;XIDS +cp;02EC;age=3.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER VOICING;SB=LE;XIDC;XIDS cp;02ED;age=3.0;na=MODIFIER LETTER UNASPIRATED # Other modifier letter -cp;02EE;age=3.0;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOUBLE APOSTROPHE;SB=LE;WB=LE;XIDC;XIDS +cp;02EE;age=3.0;Alpha;bc=L;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOUBLE APOSTROPHE;SB=LE;XIDC;XIDS # UPA modifiers cp;02EF;age=4.0;na=MODIFIER LETTER LOW DOWN ARROWHEAD cp;02F0;age=4.0;na=MODIFIER LETTER LOW UP ARROWHEAD @@ -3482,7 +3482,9 @@ cp;085C..085D;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;jt=U;lb=XX;SB=XX;sc=Zzzz;WB # Punctuation cp;085E;-Alpha;gc=Po;-IDC;-IDS;jt=U;na=MANDAIC PUNCTUATION;SB=XX;Term;WB=XX;-XIDC;-XIDS cp;085F;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;jt=U;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;0860..089F;bc=R +cp;0860..086A;bc=AL;lb=AL;SB=LE;WB=LE +cp;086B..086F;bc=AL +cp;0870..089F;bc=R block;08A0..08FF;age=6.1;Alpha;bc=NSM;blk=Arabic_Ext_A;CI;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Arab;WB=Extend;XIDC # 08A0..08FF Arabic Extended-A @@ -3732,133 +3734,135 @@ cp;097D;age=4.1;na=DEVANAGARI LETTER GLOTTAL STOP cp;097E;age=5.0;na=DEVANAGARI LETTER DDDA cp;097F;age=5.0;na=DEVANAGARI LETTER BBA -block;0980..09FF;age=1.1;Alpha;blk=Bengali;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Beng;WB=LE;XIDC;XIDS +block;0980..09FF;age=1.1;Alpha;blk=Bengali;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=AL;SB=LE;sc=Beng;WB=LE;XIDC # 0980..09FF Bengali # Various signs -cp;0980;age=7.0;InSC=Other;na=BENGALI ANJI -cp;0981;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=BENGALI SIGN CANDRABINDU;SB=EX;WB=Extend;-XIDS -cp;0982;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Bindu;lb=CM;na=BENGALI SIGN ANUSVARA;SB=EX;WB=Extend;-XIDS -cp;0983;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Visarga;lb=CM;na=BENGALI SIGN VISARGA;SB=EX;WB=Extend;-XIDS -cp;0984;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;0980;age=7.0;IDS;InSC=Other;na=BENGALI ANJI;XIDS +cp;0981;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=BENGALI SIGN CANDRABINDU;SB=EX;WB=Extend +cp;0982;gc=Mc;GCB=SM;InPC=Right;InSC=Bindu;lb=CM;na=BENGALI SIGN ANUSVARA;SB=EX;WB=Extend +cp;0983;gc=Mc;GCB=SM;InPC=Right;InSC=Visarga;lb=CM;na=BENGALI SIGN VISARGA;SB=EX;WB=Extend +cp;0984;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Independent vowels -cp;0985;InSC=Vowel_Independent;na=BENGALI LETTER A -cp;0986;InSC=Vowel_Independent;na=BENGALI LETTER AA -cp;0987;InSC=Vowel_Independent;na=BENGALI LETTER I -cp;0988;InSC=Vowel_Independent;na=BENGALI LETTER II -cp;0989;InSC=Vowel_Independent;na=BENGALI LETTER U -cp;098A;InSC=Vowel_Independent;na=BENGALI LETTER UU -cp;098B;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC R -cp;098C;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC L -cp;098D..098E;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;098F;InSC=Vowel_Independent;na=BENGALI LETTER E -cp;0990;InSC=Vowel_Independent;na=BENGALI LETTER AI -cp;0991..0992;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;0993;InSC=Vowel_Independent;na=BENGALI LETTER O -cp;0994;InSC=Vowel_Independent;na=BENGALI LETTER AU +cp;0985;IDS;InSC=Vowel_Independent;na=BENGALI LETTER A;XIDS +cp;0986;IDS;InSC=Vowel_Independent;na=BENGALI LETTER AA;XIDS +cp;0987;IDS;InSC=Vowel_Independent;na=BENGALI LETTER I;XIDS +cp;0988;IDS;InSC=Vowel_Independent;na=BENGALI LETTER II;XIDS +cp;0989;IDS;InSC=Vowel_Independent;na=BENGALI LETTER U;XIDS +cp;098A;IDS;InSC=Vowel_Independent;na=BENGALI LETTER UU;XIDS +cp;098B;IDS;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC R;XIDS +cp;098C;IDS;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC L;XIDS +cp;098D..098E;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;098F;IDS;InSC=Vowel_Independent;na=BENGALI LETTER E;XIDS +cp;0990;IDS;InSC=Vowel_Independent;na=BENGALI LETTER AI;XIDS +cp;0991..0992;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;0993;IDS;InSC=Vowel_Independent;na=BENGALI LETTER O;XIDS +cp;0994;IDS;InSC=Vowel_Independent;na=BENGALI LETTER AU;XIDS # Consonants -cp;0995;na=BENGALI LETTER KA -cp;0996;na=BENGALI LETTER KHA -cp;0997;na=BENGALI LETTER GA -cp;0998;na=BENGALI LETTER GHA -cp;0999;na=BENGALI LETTER NGA -cp;099A;na=BENGALI LETTER CA -cp;099B;na=BENGALI LETTER CHA -cp;099C;na=BENGALI LETTER JA -cp;099D;na=BENGALI LETTER JHA -cp;099E;na=BENGALI LETTER NYA -cp;099F;na=BENGALI LETTER TTA -cp;09A0;na=BENGALI LETTER TTHA -cp;09A1;na=BENGALI LETTER DDA -cp;09A2;na=BENGALI LETTER DDHA -cp;09A3;na=BENGALI LETTER NNA -cp;09A4;na=BENGALI LETTER TA -cp;09A5;na=BENGALI LETTER THA -cp;09A6;na=BENGALI LETTER DA -cp;09A7;na=BENGALI LETTER DHA -cp;09A8;na=BENGALI LETTER NA -cp;09A9;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;09AA;na=BENGALI LETTER PA -cp;09AB;na=BENGALI LETTER PHA -cp;09AC;na=BENGALI LETTER BA -cp;09AD;na=BENGALI LETTER BHA -cp;09AE;na=BENGALI LETTER MA -cp;09AF;na=BENGALI LETTER YA -cp;09B0;na=BENGALI LETTER RA -cp;09B1;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;09B2;na=BENGALI LETTER LA -cp;09B3..09B5;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;09B6;na=BENGALI LETTER SHA -cp;09B7;na=BENGALI LETTER SSA -cp;09B8;na=BENGALI LETTER SA -cp;09B9;na=BENGALI LETTER HA -cp;09BA..09BB;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;0995;IDS;na=BENGALI LETTER KA;XIDS +cp;0996;IDS;na=BENGALI LETTER KHA;XIDS +cp;0997;IDS;na=BENGALI LETTER GA;XIDS +cp;0998;IDS;na=BENGALI LETTER GHA;XIDS +cp;0999;IDS;na=BENGALI LETTER NGA;XIDS +cp;099A;IDS;na=BENGALI LETTER CA;XIDS +cp;099B;IDS;na=BENGALI LETTER CHA;XIDS +cp;099C;IDS;na=BENGALI LETTER JA;XIDS +cp;099D;IDS;na=BENGALI LETTER JHA;XIDS +cp;099E;IDS;na=BENGALI LETTER NYA;XIDS +cp;099F;IDS;na=BENGALI LETTER TTA;XIDS +cp;09A0;IDS;na=BENGALI LETTER TTHA;XIDS +cp;09A1;IDS;na=BENGALI LETTER DDA;XIDS +cp;09A2;IDS;na=BENGALI LETTER DDHA;XIDS +cp;09A3;IDS;na=BENGALI LETTER NNA;XIDS +cp;09A4;IDS;na=BENGALI LETTER TA;XIDS +cp;09A5;IDS;na=BENGALI LETTER THA;XIDS +cp;09A6;IDS;na=BENGALI LETTER DA;XIDS +cp;09A7;IDS;na=BENGALI LETTER DHA;XIDS +cp;09A8;IDS;na=BENGALI LETTER NA;XIDS +cp;09A9;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09AA;IDS;na=BENGALI LETTER PA;XIDS +cp;09AB;IDS;na=BENGALI LETTER PHA;XIDS +cp;09AC;IDS;na=BENGALI LETTER BA;XIDS +cp;09AD;IDS;na=BENGALI LETTER BHA;XIDS +cp;09AE;IDS;na=BENGALI LETTER MA;XIDS +cp;09AF;IDS;na=BENGALI LETTER YA;XIDS +cp;09B0;IDS;na=BENGALI LETTER RA;XIDS +cp;09B1;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09B2;IDS;na=BENGALI LETTER LA;XIDS +cp;09B3..09B5;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09B6;IDS;na=BENGALI LETTER SHA;XIDS +cp;09B7;IDS;na=BENGALI LETTER SSA;XIDS +cp;09B8;IDS;na=BENGALI LETTER SA;XIDS +cp;09B9;IDS;na=BENGALI LETTER HA;XIDS +cp;09BA..09BB;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Various signs -cp;09BC;-Alpha;bc=NSM;ccc=7;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Nukta;jt=T;lb=CM;na=BENGALI SIGN NUKTA;SB=EX;WB=Extend;-XIDS -cp;09BD;age=4.0;InSC=Avagraha;na=BENGALI SIGN AVAGRAHA +cp;09BC;-Alpha;bc=NSM;ccc=7;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Nukta;jt=T;lb=CM;na=BENGALI SIGN NUKTA;SB=EX;WB=Extend +cp;09BD;age=4.0;IDS;InSC=Avagraha;na=BENGALI SIGN AVAGRAHA;XIDS # Dependent vowel signs -cp;09BE;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AA;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS -cp;09BF;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN I;SB=EX;WB=Extend;-XIDS -cp;09C0;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN II;SB=EX;WB=Extend;-XIDS -cp;09C1;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN U;SB=EX;WB=Extend;-XIDS -cp;09C2;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN UU;SB=EX;WB=Extend;-XIDS -cp;09C3;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC R;SB=EX;WB=Extend;-XIDS -cp;09C4;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC RR;SB=EX;WB=Extend;-XIDS -cp;09C5..09C6;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;09C7;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN E;SB=EX;WB=Extend;-XIDS -cp;09C8;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AI;SB=EX;WB=Extend;-XIDS -cp;09C9..09CA;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;09BE;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AA;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend +cp;09BF;gc=Mc;GCB=SM;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN I;SB=EX;WB=Extend +cp;09C0;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN II;SB=EX;WB=Extend +cp;09C1;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN U;SB=EX;WB=Extend +cp;09C2;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN UU;SB=EX;WB=Extend +cp;09C3;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC R;SB=EX;WB=Extend +cp;09C4;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC RR;SB=EX;WB=Extend +cp;09C5..09C6;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09C7;gc=Mc;GCB=SM;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN E;SB=EX;WB=Extend +cp;09C8;gc=Mc;GCB=SM;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AI;SB=EX;WB=Extend +cp;09C9..09CA;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Two-part dependent vowel signs -cp;09CB;dm=09C7 09BE;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN O;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend;-XIDS -cp;09CC;dm=09C7 09D7;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AU;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend;-XIDS +cp;09CB;dm=09C7 09BE;dt=Can;gc=Mc;GCB=SM;InPC=Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN O;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend +cp;09CC;dm=09C7 09D7;dt=Can;gc=Mc;GCB=SM;InPC=Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI VOWEL SIGN AU;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend # Virama -cp;09CD;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Virama;jt=T;lb=CM;na=BENGALI SIGN VIRAMA;SB=EX;WB=Extend;-XIDS +cp;09CD;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InPC=Bottom;InSC=Virama;jt=T;lb=CM;na=BENGALI SIGN VIRAMA;SB=EX;WB=Extend # Additional consonant -cp;09CE;age=4.1;InSC=Consonant_Dead;na=BENGALI LETTER KHANDA TA -cp;09CF..09D6;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;09CE;age=4.1;IDS;InSC=Consonant_Dead;na=BENGALI LETTER KHANDA TA;XIDS +cp;09CF..09D6;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Sign -cp;09D7;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI AU LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS -cp;09D8..09DB;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;09D7;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=BENGALI AU LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend +cp;09D8..09DB;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Additional consonants -cp;09DC;Comp_Ex;CWKCF;dm=09A1 09BC;dt=Can;na=BENGALI LETTER RRA;NFC_QC=N;NFD_QC=N;NFKC_CF=09A1 09BC;NFKC_QC=N;NFKD_QC=N -cp;09DD;Comp_Ex;CWKCF;dm=09A2 09BC;dt=Can;na=BENGALI LETTER RHA;NFC_QC=N;NFD_QC=N;NFKC_CF=09A2 09BC;NFKC_QC=N;NFKD_QC=N -cp;09DE;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS -cp;09DF;Comp_Ex;CWKCF;dm=09AF 09BC;dt=Can;na=BENGALI LETTER YYA;NFC_QC=N;NFD_QC=N;NFKC_CF=09AF 09BC;NFKC_QC=N;NFKD_QC=N +cp;09DC;Comp_Ex;CWKCF;dm=09A1 09BC;dt=Can;IDS;na=BENGALI LETTER RRA;NFC_QC=N;NFD_QC=N;NFKC_CF=09A1 09BC;NFKC_QC=N;NFKD_QC=N;XIDS +cp;09DD;Comp_Ex;CWKCF;dm=09A2 09BC;dt=Can;IDS;na=BENGALI LETTER RHA;NFC_QC=N;NFD_QC=N;NFKC_CF=09A2 09BC;NFKC_QC=N;NFKD_QC=N;XIDS +cp;09DE;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09DF;Comp_Ex;CWKCF;dm=09AF 09BC;dt=Can;IDS;na=BENGALI LETTER YYA;NFC_QC=N;NFD_QC=N;NFKC_CF=09AF 09BC;NFKC_QC=N;NFKD_QC=N;XIDS # Additional vowels for Sanskrit -cp;09E0;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC RR -cp;09E1;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC LL -cp;09E2;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC L;SB=EX;WB=Extend;-XIDS -cp;09E3;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC LL;SB=EX;WB=Extend;-XIDS +cp;09E0;IDS;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC RR;XIDS +cp;09E1;IDS;InSC=Vowel_Independent;na=BENGALI LETTER VOCALIC LL;XIDS +cp;09E2;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC L;SB=EX;WB=Extend +cp;09E3;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=BENGALI VOWEL SIGN VOCALIC LL;SB=EX;WB=Extend # Reserved -cp;09E4..09E5;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;09E4..09E5;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC # Digits -cp;09E6;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT ZERO;nt=De;nv=0;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09E7;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT ONE;nt=De;nv=1;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09E8;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT TWO;nt=De;nv=2;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09E9;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT THREE;nt=De;nv=3;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09EA;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT FOUR;nt=De;nv=4;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09EB;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT FIVE;nt=De;nv=5;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09EC;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT SIX;nt=De;nv=6;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09ED;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT SEVEN;nt=De;nv=7;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09EE;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT EIGHT;nt=De;nv=8;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS -cp;09EF;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=BENGALI DIGIT NINE;nt=De;nv=9;SB=NU;scx=Beng Cakm Sylo;WB=NU;-XIDS +cp;09E6;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT ZERO;nt=De;nv=0;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09E7;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT ONE;nt=De;nv=1;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09E8;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT TWO;nt=De;nv=2;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09E9;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT THREE;nt=De;nv=3;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09EA;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT FOUR;nt=De;nv=4;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09EB;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT FIVE;nt=De;nv=5;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09EC;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT SIX;nt=De;nv=6;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09ED;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT SEVEN;nt=De;nv=7;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09EE;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT EIGHT;nt=De;nv=8;SB=NU;scx=Beng Cakm Sylo;WB=NU +cp;09EF;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BENGALI DIGIT NINE;nt=De;nv=9;SB=NU;scx=Beng Cakm Sylo;WB=NU # Additions for Assamese -cp;09F0;na=BENGALI LETTER RA WITH MIDDLE DIAGONAL -cp;09F1;na=BENGALI LETTER RA WITH LOWER DIAGONAL +cp;09F0;IDS;na=BENGALI LETTER RA WITH MIDDLE DIAGONAL;XIDS +cp;09F1;IDS;na=BENGALI LETTER RA WITH LOWER DIAGONAL;XIDS # Currency signs -cp;09F2;-Alpha;bc=ET;gc=Sc;-IDC;-IDS;InSC=Other;lb=PO;na=BENGALI RUPEE MARK;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F3;-Alpha;bc=ET;gc=Sc;-IDC;-IDS;InSC=Other;lb=PO;na=BENGALI RUPEE SIGN;SB=XX;WB=XX;-XIDC;-XIDS +cp;09F2;-Alpha;bc=ET;gc=Sc;-IDC;InSC=Other;lb=PO;na=BENGALI RUPEE MARK;SB=XX;WB=XX;-XIDC +cp;09F3;-Alpha;bc=ET;gc=Sc;-IDC;InSC=Other;lb=PO;na=BENGALI RUPEE SIGN;SB=XX;WB=XX;-XIDC # Historic symbols for fractional values -cp;09F4;-Alpha;gc=No;-IDC;-IDS;InSC=Other;na=BENGALI CURRENCY NUMERATOR ONE;nt=Nu;nv=1/16;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F5;-Alpha;gc=No;-IDC;-IDS;InSC=Other;na=BENGALI CURRENCY NUMERATOR TWO;nt=Nu;nv=1/8;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F6;-Alpha;gc=No;-IDC;-IDS;InSC=Other;na=BENGALI CURRENCY NUMERATOR THREE;nt=Nu;nv=3/16;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F7;-Alpha;gc=No;-IDC;-IDS;InSC=Other;na=BENGALI CURRENCY NUMERATOR FOUR;nt=Nu;nv=1/4;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F8;-Alpha;gc=No;-IDC;-IDS;InSC=Other;na=BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;nt=Nu;nv=3/4;SB=XX;WB=XX;-XIDC;-XIDS -cp;09F9;-Alpha;gc=No;-IDC;-IDS;InSC=Other;lb=PO;na=BENGALI CURRENCY DENOMINATOR SIXTEEN;nt=Nu;nv=16;SB=XX;WB=XX;-XIDC;-XIDS +cp;09F4;-Alpha;gc=No;-IDC;InSC=Other;na=BENGALI CURRENCY NUMERATOR ONE;nt=Nu;nv=1/16;SB=XX;WB=XX;-XIDC +cp;09F5;-Alpha;gc=No;-IDC;InSC=Other;na=BENGALI CURRENCY NUMERATOR TWO;nt=Nu;nv=1/8;SB=XX;WB=XX;-XIDC +cp;09F6;-Alpha;gc=No;-IDC;InSC=Other;na=BENGALI CURRENCY NUMERATOR THREE;nt=Nu;nv=3/16;SB=XX;WB=XX;-XIDC +cp;09F7;-Alpha;gc=No;-IDC;InSC=Other;na=BENGALI CURRENCY NUMERATOR FOUR;nt=Nu;nv=1/4;SB=XX;WB=XX;-XIDC +cp;09F8;-Alpha;gc=No;-IDC;InSC=Other;na=BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;nt=Nu;nv=3/4;SB=XX;WB=XX;-XIDC +cp;09F9;-Alpha;gc=No;-IDC;InSC=Other;lb=PO;na=BENGALI CURRENCY DENOMINATOR SIXTEEN;nt=Nu;nv=16;SB=XX;WB=XX;-XIDC # Sign -cp;09FA;-Alpha;gc=So;-IDC;-IDS;InSC=Other;na=BENGALI ISSHAR;SB=XX;WB=XX;-XIDC;-XIDS +cp;09FA;-Alpha;gc=So;-IDC;InSC=Other;na=BENGALI ISSHAR;SB=XX;WB=XX;-XIDC # Historic currency sign -cp;09FB;age=5.2;-Alpha;bc=ET;gc=Sc;-IDC;-IDS;InSC=Other;lb=PR;na=BENGALI GANDA MARK;SB=XX;WB=XX;-XIDC;-XIDS -cp;09FC..09FF;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;09FB;age=5.2;-Alpha;bc=ET;gc=Sc;-IDC;InSC=Other;lb=PR;na=BENGALI GANDA MARK;SB=XX;WB=XX;-XIDC +cp;09FC;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;sc=Zzzz;-XIDC +cp;09FD;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;SB=XX;sc=Zzzz;WB=XX;-XIDC +cp;09FE..09FF;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC block;0A00..0A7F;age=1.1;Alpha;blk=Gurmukhi;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Guru;WB=LE;XIDC;XIDS # 0A00..0A7F Gurmukhi @@ -4085,7 +4089,7 @@ cp;0AF1;age=4.0;-Alpha;bc=ET;gc=Sc;-IDC;-IDS;InSC=Other;lb=PR;na=GUJARATI RUPEE cp;0AF2..0AF8;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS # Additional consonant cp;0AF9;age=8.0;na=GUJARATI LETTER ZHA -cp;0AFA..0AFF;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;0AFA..0AFF;age=NA;-Alpha;bc=NSM;gc=Cn;GCB=EX;-Gr_Base;-IDC;-IDS;InSC=Other;lb=CM;SB=EX;sc=Zzzz;WB=Extend;-XIDC;-XIDS block;0B00..0B7F;age=1.1;Alpha;blk=Oriya;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Orya;WB=LE;XIDC;XIDS # 0B00..0B7F Oriya @@ -4562,7 +4566,7 @@ cp;0CF3..0CFF;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Z block;0D00..0D7F;age=1.1;Alpha;blk=Malayalam;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Mlym;WB=LE;XIDC;XIDS # 0D00..0D7F Malayalam -cp;0D00;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;0D00;age=NA;-Alpha;bc=NSM;gc=Cn;GCB=EX;-Gr_Base;-IDC;-IDS;InSC=Other;lb=CM;SB=EX;sc=Zzzz;WB=Extend;-XIDC;-XIDS # Various signs cp;0D01;age=7.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=MALAYALAM SIGN CANDRABINDU;SB=EX;WB=Extend;-XIDS cp;0D02;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Bindu;lb=CM;na=MALAYALAM SIGN ANUSVARA;SB=EX;WB=Extend;-XIDS @@ -4624,7 +4628,7 @@ cp;0D37;na=MALAYALAM LETTER SSA cp;0D38;na=MALAYALAM LETTER SA cp;0D39;na=MALAYALAM LETTER HA cp;0D3A;age=6.0;na=MALAYALAM LETTER TTTA -cp;0D3B..0D3C;age=NA;-Alpha;gc=Cn;-Gr_Base;-IDC;-IDS;InSC=Other;lb=XX;SB=XX;sc=Zzzz;WB=XX;-XIDC;-XIDS +cp;0D3B..0D3C;age=NA;-Alpha;bc=NSM;gc=Cn;GCB=EX;-Gr_Base;-IDC;-IDS;InSC=Other;lb=CM;SB=EX;sc=Zzzz;WB=Extend;-XIDC;-XIDS # Addition for Sanskrit cp;0D3D;age=5.1;InSC=Avagraha;na=MALAYALAM SIGN AVAGRAHA # Dependent vowel signs @@ -8595,7 +8599,7 @@ cp;1CF4;age=6.1;ccc=230;InPC=Top;InSC=Cantillation_Mark;na=VEDIC TONE CANDRA ABO # Signs cp;1CF5;age=6.1;Alpha;bc=L;-CI;-Dia;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jt=U;lb=AL;na=VEDIC SIGN JIHVAMULIYA;SB=LE;sc=Zyyy;scx=Deva Knda;WB=LE;XIDS cp;1CF6;age=6.1;Alpha;bc=L;-CI;-Dia;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jt=U;lb=AL;na=VEDIC SIGN UPADHMANIYA;SB=LE;sc=Zyyy;WB=LE;XIDS -cp;1CF7;age=NA;bc=L;-CI;-Dia;gc=Cn;GCB=XX;-Gr_Ext;-IDC;jt=U;lb=XX;SB=XX;sc=Zzzz;scx=