From 7aae07acc94abc30150acbeaff92bebf7428434b Mon Sep 17 00:00:00 2001 From: Mihai Nita Date: Fri, 21 Feb 2025 14:11:28 -0800 Subject: [PATCH 01/19] ICU-22922 BRS77 Fix version in release-icu4c-ubuntu.yml Will need a proper fix, but let's just release this for now. --- .github/workflows/release-icu4c-ubuntu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-icu4c-ubuntu.yml b/.github/workflows/release-icu4c-ubuntu.yml index c0418d47827c..b778ef42c1e9 100644 --- a/.github/workflows/release-icu4c-ubuntu.yml +++ b/.github/workflows/release-icu4c-ubuntu.yml @@ -60,14 +60,14 @@ jobs: source /etc/os-release # Get the ICU version in artifact_version source icu4j/releases_tools/shared.sh - # Convert 76.1 to 76_1 + # Convert 77.1 to 77_1 underscore_version=$(echo $artifact_version | sed 's/\./_/g') pushd ${RELEASE_FOLDER} tar -czf icu4c-${underscore_version}-Ubuntu${VERSION_ID}-x64.tgz icu rm -fr icu popd - mv icu4c/source/dist/icu4c-76_1-d* ${RELEASE_FOLDER} - mv icu4c/source/dist/icu4c-76_1-src.* ${RELEASE_FOLDER} + mv icu4c/source/dist/icu4c-77_1-d* ${RELEASE_FOLDER} + mv icu4c/source/dist/icu4c-77_1-src.* ${RELEASE_FOLDER} - name: Upload build results uses: actions/upload-artifact@v4.3.6 From 0748442ed6764b4debe456d922c5fa67f9b88bb8 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Mon, 24 Feb 2025 16:17:54 -0800 Subject: [PATCH 02/19] ICU-23059 ICU4C MF2: Update spec tests This updates the MF2 spec tests to https://github.com/unicode-org/message-format-wg/commit/943479b6022993bb1713ab028cbe34f9e6f0b79f with the following exceptions: - functions/currency.json and functions/math.json are omitted because these are not yet implemented - bidi.json will be handled in a future PR - u-options.json will be handled in a future PR Changes include: * `:integer` now returns a value encapsulating the rounded numeric value of the argument, rather than the value itself. * Fallbacks are handled according to the current spec. * Fallback values are not passed into functions. * Characters inside literal fallbacks are properly escaped. * The test runner skips null values properly. * The test runner handles boolean `expErrors` in defaultTestProperties. * `:string` normalizes its input and normalizeNFC() has been refactored so it can be called there. --- icu4c/source/i18n/messageformat2.cpp | 100 ++++++++---- .../source/i18n/messageformat2_arguments.cpp | 6 +- icu4c/source/i18n/messageformat2_checker.cpp | 3 +- .../source/i18n/messageformat2_evaluation.cpp | 9 +- icu4c/source/i18n/messageformat2_evaluation.h | 4 +- .../source/i18n/messageformat2_formatter.cpp | 21 --- .../i18n/messageformat2_function_registry.cpp | 61 ++++++-- ...essageformat2_function_registry_internal.h | 5 + icu4c/source/i18n/unicode/messageformat2.h | 27 ++-- .../i18n/unicode/messageformat2_arguments.h | 3 +- .../intltest/messageformat2test_read_json.cpp | 19 ++- .../test/intltest/messageformat2test_utils.h | 21 ++- testdata/message2/more-functions.json | 2 +- testdata/message2/normalization.json | 67 -------- testdata/message2/spec/bidi.json | 146 ++++++++++++++++++ testdata/message2/spec/fallback.json | 52 +++++++ testdata/message2/spec/functions/date.json | 5 +- .../message2/spec/functions/datetime.json | 1 + testdata/message2/spec/functions/integer.json | 21 ++- testdata/message2/spec/functions/number.json | 44 +----- testdata/message2/spec/functions/string.json | 29 +++- testdata/message2/spec/functions/time.json | 5 +- testdata/message2/spec/syntax.json | 38 +++++ 23 files changed, 470 insertions(+), 219 deletions(-) delete mode 100644 testdata/message2/normalization.json create mode 100644 testdata/message2/spec/bidi.json create mode 100644 testdata/message2/spec/fallback.json diff --git a/icu4c/source/i18n/messageformat2.cpp b/icu4c/source/i18n/messageformat2.cpp index 50d87422b64c..fd7f34bc42d8 100644 --- a/icu4c/source/i18n/messageformat2.cpp +++ b/icu4c/source/i18n/messageformat2.cpp @@ -18,6 +18,7 @@ #include "messageformat2_allocation.h" #include "messageformat2_checker.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "messageformat2_macros.h" @@ -36,29 +37,62 @@ static Formattable evalLiteral(const Literal& lit) { } // Assumes that `var` is a message argument; returns the argument's value. -[[nodiscard]] FormattedPlaceholder MessageFormatter::evalArgument(const VariableName& var, MessageContext& context, UErrorCode& errorCode) const { +[[nodiscard]] FormattedPlaceholder MessageFormatter::evalArgument(const UnicodeString& fallback, + const VariableName& var, + MessageContext& context, + UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { - // The fallback for a variable name is itself. - UnicodeString str(DOLLAR); - str += var; - const Formattable* val = context.getGlobal(*this, var, errorCode); + const Formattable* val = context.getGlobal(var, errorCode); if (U_SUCCESS(errorCode)) { - return (FormattedPlaceholder(*val, str)); + // Note: the fallback string has to be passed in because in a declaration like: + // .local $foo = {$bar :number} + // the fallback for $bar is "$foo". + UnicodeString fallbackToUse = fallback; + if (fallbackToUse.isEmpty()) { + fallbackToUse += DOLLAR; + fallbackToUse += var; + } + return (FormattedPlaceholder(*val, fallbackToUse)); } } return {}; } +// Helper function to re-escape any escaped-char characters +static UnicodeString reserialize(const UnicodeString& s) { + UnicodeString result(PIPE); + for (int32_t i = 0; i < s.length(); i++) { + switch(s[i]) { + case BACKSLASH: + case PIPE: + case LEFT_CURLY_BRACE: + case RIGHT_CURLY_BRACE: { + result += BACKSLASH; + break; + } + default: + break; + } + result += s[i]; + } + result += PIPE; + return result; +} + // Returns the contents of the literal -[[nodiscard]] FormattedPlaceholder MessageFormatter::formatLiteral(const Literal& lit) const { - // The fallback for a literal is itself. - return FormattedPlaceholder(evalLiteral(lit), lit.quoted()); +[[nodiscard]] FormattedPlaceholder MessageFormatter::formatLiteral(const UnicodeString& fallback, + const Literal& lit) const { + // The fallback for a literal is itself, unless another fallback is passed in + // (same reasoning as evalArgument()) + UnicodeString fallbackToUse = fallback.isEmpty() ? reserialize(lit.unquoted()) : fallback; + return FormattedPlaceholder(evalLiteral(lit), fallbackToUse); } -[[nodiscard]] InternalValue* MessageFormatter::formatOperand(const Environment& env, - const Operand& rand, - MessageContext& context, - UErrorCode &status) const { +[[nodiscard]] InternalValue* MessageFormatter::formatOperand(const UnicodeString& fallback, + const Environment& env, + const Operand& rand, + MessageContext& context, + UErrorCode &status) const { if (U_FAILURE(status)) { return {}; } @@ -77,17 +111,20 @@ static Formattable evalLiteral(const Literal& lit) { // NFC-normalize the variable name. See // https://github.com/unicode-org/message-format-wg/blob/main/spec/syntax.md#names-and-identifiers - const VariableName normalized = normalizeNFC(var); + const VariableName normalized = StandardFunctions::normalizeNFC(var); // Look up the variable in the environment if (env.has(normalized)) { // `var` is a local -- look it up const Closure& rhs = env.lookup(normalized); // Format the expression using the environment from the closure - return formatExpression(rhs.getEnv(), rhs.getExpr(), context, status); + // The name of this local variable is the fallback for its RHS. + UnicodeString newFallback(DOLLAR); + newFallback += var; + return formatExpression(newFallback, rhs.getEnv(), rhs.getExpr(), context, status); } // Variable wasn't found in locals -- check if it's global - FormattedPlaceholder result = evalArgument(normalized, context, status); + FormattedPlaceholder result = evalArgument(fallback, normalized, context, status); if (status == U_ILLEGAL_ARGUMENT_ERROR) { status = U_ZERO_ERROR; // Unbound variable -- set a resolution error @@ -101,7 +138,7 @@ static Formattable evalLiteral(const Literal& lit) { return create(InternalValue(std::move(result)), status); } else { U_ASSERT(rand.isLiteral()); - return create(InternalValue(formatLiteral(rand.asLiteral())), status); + return create(InternalValue(formatLiteral(fallback, rand.asLiteral())), status); } } @@ -122,7 +159,7 @@ FunctionOptions MessageFormatter::resolveOptions(const Environment& env, const O // Options are fully evaluated before calling the function // Format the operand - LocalPointer rhsVal(formatOperand(env, v, context, status)); + LocalPointer rhsVal(formatOperand({}, env, v, context, status)); if (U_FAILURE(status)) { return {}; } @@ -227,17 +264,18 @@ FunctionOptions MessageFormatter::resolveOptions(const Environment& env, const O } // Formats an expression using `globalEnv` for the values of variables -[[nodiscard]] InternalValue* MessageFormatter::formatExpression(const Environment& globalEnv, - const Expression& expr, - MessageContext& context, - UErrorCode &status) const { +[[nodiscard]] InternalValue* MessageFormatter::formatExpression(const UnicodeString& fallback, + const Environment& globalEnv, + const Expression& expr, + MessageContext& context, + UErrorCode &status) const { if (U_FAILURE(status)) { return {}; } const Operand& rand = expr.getOperand(); // Format the operand (formatOperand handles the case of a null operand) - LocalPointer randVal(formatOperand(globalEnv, rand, context, status)); + LocalPointer randVal(formatOperand(fallback, globalEnv, rand, context, status)); FormattedPlaceholder maybeRand = randVal->takeArgument(status); @@ -281,7 +319,7 @@ void MessageFormatter::formatPattern(MessageContext& context, const Environment& } else { // Format the expression LocalPointer partVal( - formatExpression(globalEnv, part.contents(), context, status)); + formatExpression({}, globalEnv, part.contents(), context, status)); FormattedPlaceholder partResult = partVal->forceFormatting(context.getErrors(), status); // Force full evaluation, e.g. applying default formatters to @@ -315,7 +353,7 @@ void MessageFormatter::resolveSelectors(MessageContext& context, const Environme // 2. For each expression exp of the message's selectors for (int32_t i = 0; i < dataModel.numSelectors(); i++) { // 2i. Let rv be the resolved value of exp. - LocalPointer rv(formatOperand(env, Operand(selectors[i]), context, status)); + LocalPointer rv(formatOperand({}, env, Operand(selectors[i]), context, status)); if (rv->canSelect()) { // 2ii. If selection is supported for rv: // (True if this code has been reached) @@ -444,7 +482,7 @@ void MessageFormatter::resolvePreferences(MessageContext& context, UVector& res, // 2ii(b)(a) Assert that key is a literal. // (Not needed) // 2ii(b)(b) Let `ks` be the resolved value of `key` in Unicode Normalization Form C. - ks = normalizeNFC(key.asLiteral().unquoted()); + ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 2ii(b)(c) Append `ks` as the last element of the list `keys`. ksP.adoptInstead(create(std::move(ks), status)); CHECK_ERROR(status); @@ -505,7 +543,7 @@ void MessageFormatter::filterVariants(const UVector& pref, UVector& vars, UError // 2i(c). Assert that `key` is a literal. // (Not needed) // 2i(d). Let `ks` be the resolved value of `key`. - UnicodeString ks = normalizeNFC(key.asLiteral().unquoted()); + UnicodeString ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 2i(e). Let `matches` be the list of strings at index `i` of `pref`. const UVector& matches = *(static_cast(pref[i])); // `matches` is a vector of strings // 2i(f). If `matches` includes `ks` @@ -567,7 +605,7 @@ void MessageFormatter::sortVariants(const UVector& pref, UVector& vars, UErrorCo // 5iii(c)(a). Assert that `key` is a literal. // (Not needed) // 5iii(c)(b). Let `ks` be the resolved value of `key`. - UnicodeString ks = normalizeNFC(key.asLiteral().unquoted()); + UnicodeString ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 5iii(c)(c) Let matchpref be the integer position of ks in `matches`. matchpref = vectorFind(matches, ks); U_ASSERT(matchpref >= 0); @@ -692,14 +730,14 @@ void MessageFormatter::check(MessageContext& context, const Environment& localEn // Check that variable is in scope const VariableName& var = rand.asVariable(); - UnicodeString normalized = normalizeNFC(var); + UnicodeString normalized = StandardFunctions::normalizeNFC(var); // Check local scope if (localEnv.has(normalized)) { return; } // Check global scope - context.getGlobal(*this, normalized, status); + context.getGlobal(normalized, status); if (status == U_ILLEGAL_ARGUMENT_ERROR) { status = U_ZERO_ERROR; context.getErrors().setUnresolvedVariable(var, status); @@ -736,7 +774,7 @@ void MessageFormatter::checkDeclarations(MessageContext& context, Environment*& // memoizing the value of localEnv up to this point // Add the LHS to the environment for checking the next declaration - env = Environment::create(normalizeNFC(decl.getVariable()), + env = Environment::create(StandardFunctions::normalizeNFC(decl.getVariable()), Closure(rhs, *env), env, status); diff --git a/icu4c/source/i18n/messageformat2_arguments.cpp b/icu4c/source/i18n/messageformat2_arguments.cpp index c43c600a2f40..bf402fe6d5f0 100644 --- a/icu4c/source/i18n/messageformat2_arguments.cpp +++ b/icu4c/source/i18n/messageformat2_arguments.cpp @@ -13,6 +13,7 @@ #include "unicode/messageformat2_arguments.h" #include "unicode/messageformat2_data_model_names.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "uvector.h" // U_ASSERT U_NAMESPACE_BEGIN @@ -26,13 +27,12 @@ namespace message2 { using Arguments = MessageArguments; - const Formattable* Arguments::getArgument(const MessageFormatter& context, - const VariableName& arg, + const Formattable* Arguments::getArgument(const VariableName& arg, UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { U_ASSERT(argsLen == 0 || arguments.isValid()); for (int32_t i = 0; i < argsLen; i++) { - UnicodeString normalized = context.normalizeNFC(argumentNames[i]); + UnicodeString normalized = StandardFunctions::normalizeNFC(argumentNames[i]); // arg already assumed to be normalized if (normalized == arg) { return &arguments[i]; diff --git a/icu4c/source/i18n/messageformat2_checker.cpp b/icu4c/source/i18n/messageformat2_checker.cpp index 46b25ff389b5..1956d78aea61 100644 --- a/icu4c/source/i18n/messageformat2_checker.cpp +++ b/icu4c/source/i18n/messageformat2_checker.cpp @@ -13,6 +13,7 @@ #include "messageformat2_allocation.h" #include "messageformat2_checker.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "messageformat2_macros.h" #include "uvector.h" // U_ASSERT @@ -113,7 +114,7 @@ Key Checker::normalizeNFC(const Key& k) const { return k; } return Key(Literal(k.asLiteral().isQuoted(), - context.normalizeNFC(k.asLiteral().unquoted()))); + StandardFunctions::normalizeNFC(k.asLiteral().unquoted()))); } static bool areDefaultKeys(const Key* keys, int32_t len) { diff --git a/icu4c/source/i18n/messageformat2_evaluation.cpp b/icu4c/source/i18n/messageformat2_evaluation.cpp index fcccbf5ae5e7..96396ced1a35 100644 --- a/icu4c/source/i18n/messageformat2_evaluation.cpp +++ b/icu4c/source/i18n/messageformat2_evaluation.cpp @@ -211,10 +211,9 @@ PrioritizedVariant::~PrioritizedVariant() {} errors.checkErrors(status); } - const Formattable* MessageContext::getGlobal(const MessageFormatter& context, - const VariableName& v, + const Formattable* MessageContext::getGlobal(const VariableName& v, UErrorCode& errorCode) const { - return arguments.getArgument(context, v, errorCode); + return arguments.getArgument(v, errorCode); } MessageContext::MessageContext(const MessageArguments& args, @@ -356,6 +355,10 @@ PrioritizedVariant::~PrioritizedVariant() {} return {}; } + if (arg.isFallback()) { + return arg; + } + // The fallback for a nullary function call is the function name UnicodeString fallback; if (arg.isNullOperand()) { diff --git a/icu4c/source/i18n/messageformat2_evaluation.h b/icu4c/source/i18n/messageformat2_evaluation.h index fcb30bc3e638..9ef2d798b05d 100644 --- a/icu4c/source/i18n/messageformat2_evaluation.h +++ b/icu4c/source/i18n/messageformat2_evaluation.h @@ -149,9 +149,7 @@ namespace message2 { public: MessageContext(const MessageArguments&, const StaticErrors&, UErrorCode&); - const Formattable* getGlobal(const MessageFormatter&, - const VariableName&, - UErrorCode&) const; + const Formattable* getGlobal(const VariableName&, UErrorCode&) const; // If any errors were set, update `status` accordingly void checkErrors(UErrorCode& status) const; diff --git a/icu4c/source/i18n/messageformat2_formatter.cpp b/icu4c/source/i18n/messageformat2_formatter.cpp index ead6f62a7899..1d024fcdf48d 100644 --- a/icu4c/source/i18n/messageformat2_formatter.cpp +++ b/icu4c/source/i18n/messageformat2_formatter.cpp @@ -119,24 +119,6 @@ namespace message2 { // MessageFormatter - // Returns the NFC-normalized version of s, returning s itself - // if it's already normalized. - UnicodeString MessageFormatter::normalizeNFC(const UnicodeString& s) const { - UErrorCode status = U_ZERO_ERROR; - // Check if string is already normalized - UNormalizationCheckResult result = nfcNormalizer->quickCheck(s, status); - // If so, return it - if (U_SUCCESS(status) && result == UNORM_YES) { - return s; - } - // Otherwise, normalize it - UnicodeString normalized = nfcNormalizer->normalize(s, status); - if (U_FAILURE(status)) { - return {}; - } - return normalized; - } - MessageFormatter::MessageFormatter(const MessageFormatter::Builder& builder, UErrorCode &success) : locale(builder.locale), customMFFunctionRegistry(builder.customMFFunctionRegistry) { CHECK_ERROR(success); @@ -188,8 +170,6 @@ namespace message2 { errors = errorsNew.orphan(); } - nfcNormalizer = Normalizer2::getNFCInstance(success); - // Note: we currently evaluate variables lazily, // without memoization. This call is still necessary // to check out-of-scope uses of local variables in @@ -218,7 +198,6 @@ namespace message2 { signalErrors = other.signalErrors; errors = other.errors; other.errors = nullptr; - nfcNormalizer = other.nfcNormalizer; return *this; } diff --git a/icu4c/source/i18n/messageformat2_function_registry.cpp b/icu4c/source/i18n/messageformat2_function_registry.cpp index e45fb3544ec5..70a75a797ecc 100644 --- a/icu4c/source/i18n/messageformat2_function_registry.cpp +++ b/icu4c/source/i18n/messageformat2_function_registry.cpp @@ -10,10 +10,13 @@ #if !UCONFIG_NO_MF2 #include +#include #include "unicode/dtptngen.h" +#include "unicode/messageformat2.h" #include "unicode/messageformat2_data_model_names.h" #include "unicode/messageformat2_function_registry.h" +#include "unicode/normalizer2.h" #include "unicode/smpdtfmt.h" #include "charstr.h" #include "double-conversion.h" @@ -172,6 +175,28 @@ void MFFunctionRegistry::checkStandard() const { // Formatter/selector helpers +// Returns the NFC-normalized version of s, returning s itself +// if it's already normalized. +/* static */ UnicodeString StandardFunctions::normalizeNFC(const UnicodeString& s) { + UErrorCode status = U_ZERO_ERROR; + const Normalizer2* nfcNormalizer = Normalizer2::getNFCInstance(status); + if (U_FAILURE(status)) { + return s; + } + // Check if string is already normalized + UNormalizationCheckResult result = nfcNormalizer->quickCheck(s, status); + // If so, return it + if (U_SUCCESS(status) && result == UNORM_YES) { + return s; + } + // Otherwise, normalize it + UnicodeString normalized = nfcNormalizer->normalize(s, status); + if (U_FAILURE(status)) { + return {}; + } + return normalized; +} + // Converts `s` to a double, indicating failure via `errorCode` static void strToDouble(const UnicodeString& s, double& result, UErrorCode& errorCode) { CHECK_ERROR(errorCode); @@ -504,21 +529,6 @@ static UChar32 digitToChar(int32_t val, UErrorCode errorCode) { } } -static FormattedPlaceholder tryParsingNumberLiteral(const number::LocalizedNumberFormatter& nf, const FormattedPlaceholder& input, UErrorCode& errorCode) { - double numberValue = parseNumberLiteral(input.asFormattable(), errorCode); - if (U_FAILURE(errorCode)) { - return notANumber(input); - } - - UErrorCode savedStatus = errorCode; - number::FormattedNumber result = nf.formatDouble(numberValue, errorCode); - // Ignore U_USING_DEFAULT_WARNING - if (errorCode == U_USING_DEFAULT_WARNING) { - errorCode = savedStatus; - } - return FormattedPlaceholder(input, FormattedValue(std::move(result))); -} - int32_t StandardFunctions::Number::maximumFractionDigits(const FunctionOptions& opts) const { Formattable opt; @@ -636,6 +646,8 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar realFormatter = formatterForOptions(*this, opts, errorCode); number::FormattedNumber numberResult; + int64_t integerValue = 0; + if (U_SUCCESS(errorCode)) { // Already checked that contents can be formatted const Formattable& toFormat = arg.asFormattable(); @@ -644,23 +656,31 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar double d = toFormat.getDouble(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatDouble(d, errorCode); + integerValue = static_cast(std::round(d)); break; } case UFMT_LONG: { int32_t l = toFormat.getLong(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatInt(l, errorCode); + integerValue = l; break; } case UFMT_INT64: { int64_t i = toFormat.getInt64(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatInt(i, errorCode); + integerValue = i; break; } case UFMT_STRING: { // Try to parse the string as a number - return tryParsingNumberLiteral(realFormatter, arg, errorCode); + double d = parseNumberLiteral(toFormat, errorCode); + if (U_FAILURE(errorCode)) + return {}; + numberResult = realFormatter.formatDouble(d, errorCode); + integerValue = static_cast(std::round(d)); + break; } default: { // Other types can't be parsed as a number @@ -670,6 +690,11 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar } } + // Need to return the integer value if invoked as :integer + if (isInteger) { + return FormattedPlaceholder(FormattedPlaceholder(Formattable(integerValue), arg.getFallback()), + FormattedValue(std::move(numberResult))); + } return FormattedPlaceholder(arg, FormattedValue(std::move(numberResult))); } @@ -1263,9 +1288,11 @@ void StandardFunctions::TextSelector::selectKey(FormattedPlaceholder&& toFormat, if (U_FAILURE(errorCode)) { return; } + // Normalize result + UnicodeString normalized = normalizeNFC(formattedValue); for (int32_t i = 0; i < keysLen; i++) { - if (keys[i] == formattedValue) { + if (keys[i] == normalized) { prefs[0] = keys[i]; prefsLen = 1; break; diff --git a/icu4c/source/i18n/messageformat2_function_registry_internal.h b/icu4c/source/i18n/messageformat2_function_registry_internal.h index 9599b67bb2ba..084f47e1f387 100644 --- a/icu4c/source/i18n/messageformat2_function_registry_internal.h +++ b/icu4c/source/i18n/messageformat2_function_registry_internal.h @@ -33,6 +33,11 @@ namespace message2 { class StandardFunctions { friend class MessageFormatter; + public: + // Used for normalizing variable names and keys for comparison + static UnicodeString normalizeNFC(const UnicodeString&); + + private: static UnicodeString getStringOption(const FunctionOptions& opts, const UnicodeString& optionName, UErrorCode& errorCode); diff --git a/icu4c/source/i18n/unicode/messageformat2.h b/icu4c/source/i18n/unicode/messageformat2.h index 926d14318d17..93614324788f 100644 --- a/icu4c/source/i18n/unicode/messageformat2.h +++ b/icu4c/source/i18n/unicode/messageformat2.h @@ -355,9 +355,7 @@ namespace message2 { // Formatting methods - // Used for normalizing variable names and keys for comparison - UnicodeString normalizeNFC(const UnicodeString&) const; - [[nodiscard]] FormattedPlaceholder formatLiteral(const data_model::Literal&) const; + [[nodiscard]] FormattedPlaceholder formatLiteral(const UnicodeString&, const data_model::Literal&) const; void formatPattern(MessageContext&, const Environment&, const data_model::Pattern&, UErrorCode&, UnicodeString&) const; // Evaluates a function call // Dispatches on argument type @@ -371,13 +369,21 @@ namespace message2 { MessageContext& context, UErrorCode& status) const; // Formats an expression that appears in a pattern or as the definition of a local variable - [[nodiscard]] InternalValue* formatExpression(const Environment&, - const data_model::Expression&, - MessageContext&, - UErrorCode&) const; + [[nodiscard]] InternalValue* formatExpression(const UnicodeString&, + const Environment&, + const data_model::Expression&, + MessageContext&, + UErrorCode&) const; [[nodiscard]] FunctionOptions resolveOptions(const Environment& env, const OptionMap&, MessageContext&, UErrorCode&) const; - [[nodiscard]] InternalValue* formatOperand(const Environment&, const data_model::Operand&, MessageContext&, UErrorCode&) const; - [[nodiscard]] FormattedPlaceholder evalArgument(const data_model::VariableName&, MessageContext&, UErrorCode&) const; + [[nodiscard]] InternalValue* formatOperand(const UnicodeString&, + const Environment&, + const data_model::Operand&, + MessageContext&, + UErrorCode&) const; + [[nodiscard]] FormattedPlaceholder evalArgument(const UnicodeString&, + const data_model::VariableName&, + MessageContext&, + UErrorCode&) const; void formatSelectors(MessageContext& context, const Environment& env, UErrorCode &status, UnicodeString& result) const; // Function registry methods @@ -452,9 +458,6 @@ namespace message2 { // The default is false. bool signalErrors = false; - // Used for implementing normalizeNFC() - const Normalizer2* nfcNormalizer = nullptr; - }; // class MessageFormatter } // namespace message2 diff --git a/icu4c/source/i18n/unicode/messageformat2_arguments.h b/icu4c/source/i18n/unicode/messageformat2_arguments.h index 07c96f892bca..2008b3345415 100644 --- a/icu4c/source/i18n/unicode/messageformat2_arguments.h +++ b/icu4c/source/i18n/unicode/messageformat2_arguments.h @@ -114,8 +114,7 @@ namespace message2 { private: friend class MessageContext; - const Formattable* getArgument(const MessageFormatter&, - const data_model::VariableName&, + const Formattable* getArgument(const data_model::VariableName&, UErrorCode&) const; // Avoids using Hashtable so that code constructing a Hashtable diff --git a/icu4c/source/test/intltest/messageformat2test_read_json.cpp b/icu4c/source/test/intltest/messageformat2test_read_json.cpp index 3e378d6b905f..c4bdc4cc2f57 100644 --- a/icu4c/source/test/intltest/messageformat2test_read_json.cpp +++ b/icu4c/source/test/intltest/messageformat2test_read_json.cpp @@ -112,10 +112,11 @@ static bool setArguments(TestMessageFormat2& t, return false; // For now, boolean and null arguments are unsupported } } else { - schemaError = true; - break; + // Null argument -- not supported + return false; } } else { + t.logln("name is null"); schemaError = true; break; } @@ -138,6 +139,7 @@ static bool setArguments(TestMessageFormat2& t, static void runValidTest(TestMessageFormat2& icuTest, const std::string& testName, const std::string& defaultError, + bool anyError, const json& j, IcuTestErrorCode& errorCode) { auto j_object = j.template get(); @@ -205,6 +207,9 @@ static void runValidTest(TestMessageFormat2& icuTest, } else if (defaultError.length() > 0) { test.setExpectedError(getExpectedRuntimeErrorFromString(defaultError)); expectedError = true; + } else if (anyError) { + test.setExpectedAnyError(); + expectedError = true; } // If no expected result and no error, then set the test builder to expect success @@ -250,9 +255,13 @@ static void runTestsFromJsonFile(TestMessageFormat2& t, // Some files have an expected error std::string defaultError; + bool anyError = false; if (!j_object["defaultTestProperties"].is_null() && !j_object["defaultTestProperties"]["expErrors"].is_null()) { auto expErrors = j_object["defaultTestProperties"]["expErrors"]; + // If expErrors is a boolean "true", that means we expect all tests + // to emit errors but we don't care which ones. + anyError = expErrors.is_boolean() && expErrors.template get(); // expErrors might also be a boolean, in which case we ignore it -- // so we have to check if it's an array if (expErrors.is_array()) { @@ -273,7 +282,7 @@ static void runTestsFromJsonFile(TestMessageFormat2& t, t.logln(u_str(iter->dump())); - runValidTest(t, testName, defaultError, *iter, errorCode); + runValidTest(t, testName, defaultError, anyError, *iter, errorCode); } } else { // Test doesn't follow schema -- probably an error @@ -301,6 +310,7 @@ void TestMessageFormat2::jsonTestsFromFiles(IcuTestErrorCode& errorCode) { // Do valid spec tests runTestsFromJsonFile(*this, "spec/syntax.json", errorCode); + runTestsFromJsonFile(*this, "spec/fallback.json", errorCode); // Uncomment when test functions are implemented in the registry // See https://unicode-org.atlassian.net/browse/ICU-22907 @@ -315,9 +325,6 @@ void TestMessageFormat2::jsonTestsFromFiles(IcuTestErrorCode& errorCode) { runTestsFromJsonFile(*this, "spec/functions/time.json", errorCode); // Other tests (non-spec) - // TODO: Delete this file after https://github.com/unicode-org/message-format-wg/pull/904 - // lands and the tests here are updated from the spec repo - runTestsFromJsonFile(*this, "normalization.json", errorCode); // TODO: https://github.com/unicode-org/message-format-wg/pull/902 will // move the bidi tests into the spec runTestsFromJsonFile(*this, "bidi.json", errorCode); diff --git a/icu4c/source/test/intltest/messageformat2test_utils.h b/icu4c/source/test/intltest/messageformat2test_utils.h index 7eacab9998de..7d6f813ff59d 100644 --- a/icu4c/source/test/intltest/messageformat2test_utils.h +++ b/icu4c/source/test/intltest/messageformat2test_utils.h @@ -28,6 +28,7 @@ class TestCase : public UMemory { /* const */ Locale locale; /* const */ std::map arguments; /* const */ UErrorCode expectedError; + /* const */ bool arbitraryError = false; /* const */ bool expectedNoSyntaxError; /* const */ bool hasExpectedOutput; /* const */ UnicodeString expected; @@ -45,11 +46,14 @@ class TestCase : public UMemory { std::map getArguments() const { return std::move(arguments); } const UnicodeString& getTestName() const { return testName; } bool expectSuccess() const { - return (!ignoreError && U_SUCCESS(expectedError)); + return (!ignoreError && U_SUCCESS(expectedError) && !arbitraryError); } bool expectFailure() const { return (!ignoreError && U_FAILURE(expectedError)); } + bool expectArbitraryError() const { + return arbitraryError; + } bool expectNoSyntaxError() const { return expectedNoSyntaxError; } @@ -139,6 +143,10 @@ class TestCase : public UMemory { expectedError = U_SUCCESS(errorCode) ? U_ZERO_ERROR : errorCode; return *this; } + Builder& setExpectedAnyError() { + arbitraryError = true; + return *this; + } Builder& setNoSyntaxError() { expectNoSyntaxError = true; return *this; @@ -182,6 +190,7 @@ class TestCase : public UMemory { bool hasExpectedOutput; UnicodeString expected; UErrorCode expectedError; + bool arbitraryError; bool expectNoSyntaxError; bool hasLineNumberAndOffset; uint32_t lineNumber; @@ -190,7 +199,7 @@ class TestCase : public UMemory { const MFFunctionRegistry* functionRegistry = nullptr; // Not owned public: - Builder() : pattern(""), locale(Locale::getDefault()), hasExpectedOutput(false), expected(""), expectedError(U_ZERO_ERROR), expectNoSyntaxError(false), hasLineNumberAndOffset(false), ignoreError(false) {} + Builder() : pattern(""), locale(Locale::getDefault()), hasExpectedOutput(false), expected(""), expectedError(U_ZERO_ERROR), arbitraryError(false), expectNoSyntaxError(false), hasLineNumberAndOffset(false), ignoreError(false) {} }; private: @@ -200,6 +209,7 @@ class TestCase : public UMemory { locale(builder.locale), arguments(builder.arguments), expectedError(builder.expectedError), + arbitraryError(builder.arbitraryError), expectedNoSyntaxError(builder.expectNoSyntaxError), hasExpectedOutput(builder.hasExpectedOutput), expected(builder.expected), @@ -270,6 +280,9 @@ class TestUtils { failExpectedSuccess(tmsg, testCase, errorCode, parseError.line, parseError.offset); return; } + if (testCase.expectArbitraryError() && U_SUCCESS(errorCode)) { + failExpectedArbitraryError(tmsg, testCase); + } if (testCase.expectFailure() && errorCode != testCase.expectedErrorCode()) { failExpectedFailure(tmsg, testCase, errorCode); return; @@ -323,6 +336,10 @@ class TestUtils { tmsg.errln(testCase.getTestName() + " failed test with wrong error code; pattern: " + testCase.getPattern() + " and error code " + UnicodeString(u_errorName(errorCode)) + " and expected error code: " + UnicodeString(u_errorName(testCase.expectedErrorCode()))); errorCode.reset(); } + static void failExpectedArbitraryError(IntlTest& tmsg, const TestCase& testCase) { + tmsg.dataerrln(testCase.getTestName()); + tmsg.errln(testCase.getTestName() + " succeeded although any error was expected; pattern: " + testCase.getPattern()); + } static void failWrongOutput(IntlTest& tmsg, const TestCase& testCase, const UnicodeString& result) { tmsg.dataerrln(testCase.getTestName()); tmsg.logln(testCase.getTestName() + " failed test with wrong output; pattern: " + testCase.getPattern() + " and expected output = " + testCase.expectedOutput() + " and actual output = " + result); diff --git a/testdata/message2/more-functions.json b/testdata/message2/more-functions.json index b34803635ce9..6d074f8b2d80 100644 --- a/testdata/message2/more-functions.json +++ b/testdata/message2/more-functions.json @@ -63,7 +63,7 @@ { "src": [".local $num = {|42| :number}\n", "{{Testing date formatting: {$num :datetime}}}"], - "exp": "Testing date formatting: {|42|}", + "exp": "Testing date formatting: {$num}", "expErrors": [{"type": "bad-operand"}] }, { diff --git a/testdata/message2/normalization.json b/testdata/message2/normalization.json deleted file mode 100644 index da3bdca87eb3..000000000000 --- a/testdata/message2/normalization.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/unicode-org/message-format-wg/main/test/schemas/v0/tests.schema.json", - "scenario": "Syntax", - "description": "Test cases that do not depend on any registry definitions.", - "defaultTestProperties": { - "locale": "en-US" - }, - "tests": [ - { - "description": "NFC: text is not normalized", - "src": "\u1E0A\u0323", - "exp": "\u1E0A\u0323" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", - "src": ".local $\u0044\u0323\u0307 = {foo} {{{$\u1E0c\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", - "src": ".local $\u1E0c\u0307 = {foo} {{{$\u0044\u0323\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", - "src": ".input {$\u1E0c\u0307} {{{$\u0044\u0323\u0307}}}", - "params": [{"name": "\u1E0c\u0307", "value": "foo"}], - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", - "src": ".input {$\u0044\u0323\u0307} {{{$\u1E0c\u0307}}}", - "params": [{"name": "\u0044\u0323\u0307", "value": "foo"}], - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; reordering", - "src": ".local $\u0044\u0307\u0323 = {foo} {{{$\u1E0c\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; special case mapping", - "src": ".local $\u0041\u030A\u0301 = {foo} {{{$\u01FA}}}", - "exp": "foo" - }, - { - "description": "NFC: keys are normalized", - "src": ".local $x = {\u1E0C\u0307 :string} .match $x \u1E0A\u0323 {{Right}} * {{Wrong}}", - "exp": "Right" - }, - { - "description": "NFC: keys are normalized (unquoted)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} \u1E0C\u0307 {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - }, - { - "description": "NFC: keys are normalized (quoted)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x |\u1E0A\u0323| {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - }, - { - "description": "NFC: keys are normalized (mixed)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - } -] -} diff --git a/testdata/message2/spec/bidi.json b/testdata/message2/spec/bidi.json new file mode 100644 index 000000000000..2d650a3e34d6 --- /dev/null +++ b/testdata/message2/spec/bidi.json @@ -0,0 +1,146 @@ +{ + "scenario": "Bidi support", + "description": "Tests for correct parsing of messages with bidirectional marks and isolates", + "defaultTestProperties": { + "bidiIsolation": "default", + "locale": "en-US" + }, + "tests": [ + { + "description": "simple-message = o [simple-start pattern]", + "src": " \u061C Hello world!", + "exp": " \u061C Hello world!" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": "\u200E .local $x = {1} {{ {$x}}}", + "exp": " \u20681\u2069" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": ".local $x = {1} \u200F {{ {$x}}}", + "exp": " \u20681\u2069" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": ".local $x = {1} {{ {$x}}} \u2066", + "exp": " \u20681\u2069" + }, + { + "description": "input-declaration = input o variable-expression", + "src": ".input \u2067 {$x :number} {{hello}}", + "params": [{"name": "x", "value": "1"}], + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local $x \u2068 = \u2069 {1} {{hello}}", + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local \u2067 $x = {1} {{hello}}", + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local\u2067 $x = {1} {{hello}}", + "exp": "hello" + }, + { + "description": "o \"{{\" pattern \"}}\"", + "src": "\u2067 {{hello}}", + "exp": "hello" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}\n.match $x\n1 {{one}}\n\u061C * {{other}}", + "exp": "one" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}.match $x \u061c1 {{one}}* {{other}}", + "exp": "one" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}.match $x\u061c1 {{one}}* {{other}}", + "expErrors": [{"type": "syntax-error"}] + }, + { + "description": "variant = key *(s key) quoted-pattern", + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1 \u200E 1 {{one}}* * {{other}}", + "exp": "one" + }, + { + "description": "variant = key *(s key) quoted-pattern", + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1\u200E 1 {{one}}* * {{other}}", + "exp": "one" + }, + { + "description": "literal-expression = \"{\" o literal [s function] *(s attribute) o \"}\"", + "src": "{\u200E hello \u200F}", + "exp": "\u2068hello\u2069" + }, + { + "description": "variable-expression = \"{\" o variable [s function] *(s attribute) o \"}\"", + "src": ".local $x = {1} {{ {\u200E $x \u200F} }}", + "exp": " \u20681\u2069 " + }, + { + "description": "function-expression = \"{\" o function *(s attribute) o \"}\"", + "src": "{1 \u200E :number \u200F}", + "exp": "1" + }, + { + "description": "markup = \"{\" o \"#\" identifier *(s option) *(s attribute) o [\"/\"] \"}\"", + "src": "{\u200F #b \u200E }", + "exp": "" + }, + { + "description": "markup = \"{\" o \"/\" identifier *(s option) *(s attribute) o \"}\"", + "src": "{\u200F /b \u200E }", + "exp": "" + }, + { + "description": "option = identifier o \"=\" o (literal / variable)", + "src": "{1 :number minimumFractionDigits\u200F=\u200E1 }", + "exp": "1.0" + }, + { + "description": "attribute = \"@\" identifier [o \"=\" o (literal / variable)]", + "src": "{1 :number @locale\u200F=\u200Een }", + "exp": "1" + }, + { + "description": " name... excludes U+FFFD and U+061C -- this pases as name -> [bidi] name-start *name-char", + "src": ".local $\u061Cfoo = {1} {{ {$\u061Cfoo} }}", + "exp": " \u20681\u2069 " + }, + { + "description": " name matches https://www.w3.org/TR/REC-xml-names/#NT-NCName but excludes U+FFFD and U+061C", + "src": ".local $foo\u061Cbar = {2} {{ }}", + "expErrors": [{"type": "syntax-error"}] + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $\u200Efoo\u200F = {3} {{{$\u200Efoo\u200F}}}", + "exp": "\u20683\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $foo = {4} {{{$\u200Efoo\u200F}}}", + "exp": "\u20684\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $\u200Efoo\u200F = {5} {{{$foo}}}", + "exp": "\u20685\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $foo\u200Ebar = {5} {{{$foo\u200Ebar}}}", + "expErrors": [{"type": "syntax-error"}] + } + ] +} diff --git a/testdata/message2/spec/fallback.json b/testdata/message2/spec/fallback.json new file mode 100644 index 000000000000..fd1429c9b664 --- /dev/null +++ b/testdata/message2/spec/fallback.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://raw.githubusercontent.com/unicode-org/message-format-wg/main/test/schemas/v0/tests.schema.json", + "scenario": "Fallback", + "description": "Test cases for fallback behaviour.", + "defaultTestProperties": { + "bidiIsolation": "none", + "locale": "en-US", + "expErrors": true + }, + "tests": [ + { + "description": "function with unquoted literal operand", + "src": "{42 :test:function fails=format}", + "exp": "{|42|}" + }, + { + "description": "function with quoted literal operand", + "src": "{|C:\\\\| :test:function fails=format}", + "exp": "{|C:\\\\|}" + }, + { + "description": "unannotated implicit input variable", + "src": "{$var}", + "exp": "{$var}" + }, + { + "description": "annotated implicit input variable", + "src": "{$var :number}", + "exp": "{$var}" + }, + { + "description": "local variable with unknown function in declaration", + "src": ".local $var = {|val| :test:undefined} {{{$var}}}", + "exp": "{$var}" + }, + { + "description": "function with local variable operand with unknown function in declaration", + "src": ".local $var = {|val| :test:undefined} {{{$var :test:function}}}", + "exp": "{$var}" + }, + { + "description": "local variable with unknown function in placeholder", + "src": ".local $var = {|val|} {{{$var :test:undefined}}}", + "exp": "{$var}" + }, + { + "description": "function with no operand", + "src": "{:test:undefined}", + "exp": "{:test:undefined}" + } + ] +} diff --git a/testdata/message2/spec/functions/date.json b/testdata/message2/spec/functions/date.json index 494ca8d23458..625eb9712e46 100644 --- a/testdata/message2/spec/functions/date.json +++ b/testdata/message2/spec/functions/date.json @@ -3,6 +3,7 @@ "scenario": "Date function", "description": "The built-in formatter for dates.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, @@ -35,10 +36,10 @@ "src": "{|2006-01-02| :date style=long}" }, { - "src": ".local $d = {|2006-01-02| :date style=long} {{{$d :date}}}" + "src": ".local $d = {|2006-01-02| :date style=long} {{{$d}}}" }, { - "src": ".local $t = {|2006-01-02T15:04:06| :time} {{{$t :date}}}" + "src": ".local $d = {|2006-01-02| :datetime dateStyle=long timeStyle=long} {{{$d :date}}}" } ] } diff --git a/testdata/message2/spec/functions/datetime.json b/testdata/message2/spec/functions/datetime.json index 758a8bbaa004..a5f3bd00bc9d 100644 --- a/testdata/message2/spec/functions/datetime.json +++ b/testdata/message2/spec/functions/datetime.json @@ -3,6 +3,7 @@ "scenario": "Datetime function", "description": "The built-in formatter for datetimes.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, diff --git a/testdata/message2/spec/functions/integer.json b/testdata/message2/spec/functions/integer.json index 4ea96941e179..f249cb27e500 100644 --- a/testdata/message2/spec/functions/integer.json +++ b/testdata/message2/spec/functions/integer.json @@ -3,6 +3,7 @@ "scenario": "Integer function", "description": "The built-in formatter for integers.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -19,14 +20,18 @@ "exp": "hello 4" }, { - "src": ".input {$foo :integer} .match $foo 1 {{one}} * {{other}}", - "params": [ - { - "name": "foo", - "value": 1.2 - } - ], - "exp": "one" + "src": ".input {$foo :integer} .match $foo 1 {{=1}} * {{other}}", + "params": [{ "name": "foo", "value": 1.2 }], + "exp": "=1" + }, + { + "src": ".input {$foo :integer} .match $foo 1 {{=1}} one {{one}} * {{other}}", + "params": [{ "name": "foo", "value": 1.2 }], + "exp": "=1" + }, + { + "src": ".local $x = {1.25 :integer} .local $y = {$x :number} {{{$y}}}", + "exp": "1" } ] } diff --git a/testdata/message2/spec/functions/number.json b/testdata/message2/spec/functions/number.json index 2b00d83e4957..dee7b9c01376 100644 --- a/testdata/message2/spec/functions/number.json +++ b/testdata/message2/spec/functions/number.json @@ -3,6 +3,7 @@ "scenario": "Number function", "description": "The built-in formatter for numbers.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -131,33 +132,14 @@ }, { "src": ".local $foo = {$bar :number minimumFractionDigits=foo} {{bar {$foo}}}", - "params": [ - { - "name": "bar", - "value": 4.2 - } - ], - "exp": "bar {$bar}", - "expErrors": [ - { - "type": "bad-option" - } - ] + "params": [{ "name": "bar", "value": 4.2 }], + "expErrors": [{ "type": "bad-option" }] }, { "src": ".local $foo = {$bar :number} {{bar {$foo}}}", - "params": [ - { - "name": "bar", - "value": "foo" - } - ], - "exp": "bar {$bar}", - "expErrors": [ - { - "type": "bad-operand" - } - ] + "params": [{ "name": "bar", "value": "foo" }], + "exp": "bar {$foo}", + "expErrors": [{ "type": "bad-operand" }] }, { "src": ".input {$foo :number} {{bar {$foo}}}", @@ -181,18 +163,8 @@ }, { "src": ".input {$foo :number minimumFractionDigits=foo} {{bar {$foo}}}", - "params": [ - { - "name": "foo", - "value": 4.2 - } - ], - "exp": "bar {$foo}", - "expErrors": [ - { - "type": "bad-option" - } - ] + "params": [{ "name": "foo", "value": 4.2 }], + "expErrors": [{ "type": "bad-option" }] }, { "src": ".input {$foo :number} {{bar {$foo}}}", diff --git a/testdata/message2/spec/functions/string.json b/testdata/message2/spec/functions/string.json index 1deb2ec66ce7..82f17380e585 100644 --- a/testdata/message2/spec/functions/string.json +++ b/testdata/message2/spec/functions/string.json @@ -3,6 +3,7 @@ "scenario": "String function", "description": "The built-in formatter for strings.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -34,8 +35,7 @@ "value": null } ], - "exp": "other", - "ignoreCpp": "Explicit null doesn't work" + "exp": "other" }, { "src": ".input {$foo :string} .match $foo 1 {{one}} * {{other}}", @@ -45,6 +45,31 @@ "type": "unresolved-variable" } ] + }, + { + "description": "NFC: keys are normalized (unquoted)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} \u1E0C\u0307 {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: keys are normalized (quoted)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x |\u1E0A\u0323| {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: keys are normalized (mixed)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: :string normalizes the comparison value (un-normalized selector, normalized key)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0C\u0307 {{Right}} * {{Wrong}}", + "exp": "Right" + }, + { + "description": "NFC: keys are normalized (normalized selector, un-normalized key)", + "src": ".local $x = {\u1E0C\u0307 :string} .match $x \u1E0A\u0323 {{Right}} * {{Wrong}}", + "exp": "Right" } ] } diff --git a/testdata/message2/spec/functions/time.json b/testdata/message2/spec/functions/time.json index 416d18a3efef..1f6cf2293132 100644 --- a/testdata/message2/spec/functions/time.json +++ b/testdata/message2/spec/functions/time.json @@ -3,6 +3,7 @@ "scenario": "Time function", "description": "The built-in formatter for times.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, @@ -32,10 +33,10 @@ "src": "{|2006-01-02T15:04:06| :time style=medium}" }, { - "src": ".local $t = {|2006-01-02T15:04:06| :time style=medium} {{{$t :time}}}" + "src": ".local $t = {|2006-01-02T15:04:06| :time style=medium} {{{$t}}}" }, { - "src": ".local $d = {|2006-01-02T15:04:06| :date} {{{$d :time}}}" + "src": ".local $t = {|2006-01-02T15:04:06| :datetime dateStyle=long timeStyle=long} {{{$t :time}}}" } ] } diff --git a/testdata/message2/spec/syntax.json b/testdata/message2/spec/syntax.json index 27b74b2f302c..d03024bc81a6 100644 --- a/testdata/message2/spec/syntax.json +++ b/testdata/message2/spec/syntax.json @@ -3,6 +3,7 @@ "scenario": "Syntax", "description": "Test cases that do not depend on any registry definitions.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -697,6 +698,43 @@ { "src": "{{trailing whitespace}} \n", "exp": "trailing whitespace" + }, + { + "description": "NFC: text is not normalized", + "src": "\u1E0A\u0323", + "exp": "\u1E0A\u0323" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", + "src": ".local $\u0044\u0323\u0307 = {foo} {{{$\u1E0c\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", + "src": ".local $\u1E0c\u0307 = {foo} {{{$\u0044\u0323\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", + "src": ".input {$\u1E0c\u0307} {{{$\u0044\u0323\u0307}}}", + "params": [{"name": "\u1E0c\u0307", "value": "foo"}], + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", + "src": ".input {$\u0044\u0323\u0307} {{{$\u1E0c\u0307}}}", + "params": [{"name": "\u0044\u0323\u0307", "value": "foo"}], + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; reordering", + "src": ".local $\u0044\u0307\u0323 = {foo} {{{$\u1E0c\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; special case mapping", + "src": ".local $\u0041\u030A\u0301 = {foo} {{{$\u01FA}}}", + "exp": "foo" } ] } From 0b88b1c754473abbb19327da621df16d1e1306ba Mon Sep 17 00:00:00 2001 From: Frank Tang Date: Tue, 25 Feb 2025 21:02:23 +0000 Subject: [PATCH 03/19] ICU-23060 Fix heap-buffer-overflow when UnicodeString size too large See #3416 --- icu4c/source/common/unistr.cpp | 5 +++++ icu4c/source/test/intltest/ustrtest.cpp | 13 +++++++++++++ icu4c/source/test/intltest/ustrtest.h | 1 + 3 files changed, 19 insertions(+) diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp index a720245772e6..7b48addbe85b 100644 --- a/icu4c/source/common/unistr.cpp +++ b/icu4c/source/common/unistr.cpp @@ -1945,6 +1945,11 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity, growCapacity = newCapacity; } else if(newCapacity <= US_STACKBUF_SIZE && growCapacity > US_STACKBUF_SIZE) { growCapacity = US_STACKBUF_SIZE; + } else if(newCapacity > growCapacity) { + return false; // bad inputs + } + if(growCapacity > kMaxCapacity) { + return false; } // save old values diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp index 5df9d8e1fd44..31cb65190511 100644 --- a/icu4c/source/test/intltest/ustrtest.cpp +++ b/icu4c/source/test/intltest/ustrtest.cpp @@ -77,6 +77,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & TESTCASE_AUTO(TestNullPointers); TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf); TESTCASE_AUTO(TestLargeAppend); + TESTCASE_AUTO(TestLargeMemory); TESTCASE_AUTO(TestU16StringView); TESTCASE_AUTO(TestWStringView); TESTCASE_AUTO_END; @@ -2351,6 +2352,18 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() { assertEquals("", u"abbcdcde", str); } +void UnicodeStringTest::TestLargeMemory() { +#if U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED + if(quick) { return; } + IcuTestErrorCode status(*this, "TestLargeMemory"); + constexpr uint32_t len = 2147483643; + char16_t *buf = new char16_t[len]; + if (buf == nullptr) { return; } + uprv_memset(buf, 0x4e, len * 2); + icu::UnicodeString test(buf, len); + delete [] buf; +#endif +} void UnicodeStringTest::TestLargeAppend() { if(quick) return; diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h index 47d4a8acc825..074d4b8bc06e 100644 --- a/icu4c/source/test/intltest/ustrtest.h +++ b/icu4c/source/test/intltest/ustrtest.h @@ -92,6 +92,7 @@ class UnicodeStringTest: public IntlTest { void TestUnicodeStringImplementsAppendable(); void TestSizeofUnicodeString(); void TestMoveSwap(); + void TestLargeMemory(); void TestUInt16Pointers(); void TestWCharPointers(); From c210730f767267ab2779177fd8da491eaeabd5a2 Mon Sep 17 00:00:00 2001 From: DraganBesevic Date: Wed, 26 Feb 2025 09:00:48 -0800 Subject: [PATCH 04/19] ICU-22923 Integrate CLDR 47 release beta2, part 1, binary files --- icu4c/source/common/localefallback_data.h | 1065 ++++++++--------- .../icu/impl/data/icudata/cns-11643-1992.cnv | Bin 116080 -> 116080 bytes .../icu/impl/data/icudata/ebcdic-xml-us.cnv | Bin 2736 -> 2736 bytes .../ibm/icu/impl/data/icudata/euc-jp-2007.cnv | Bin 97280 -> 97280 bytes .../ibm/icu/impl/data/icudata/euc-tw-2014.cnv | Bin 545632 -> 545632 bytes .../icu/impl/data/icudata/gb18030-2022.cnv | Bin 233024 -> 233024 bytes .../icu/impl/data/icudata/gsm-03.38-2009.cnv | Bin 3200 -> 3200 bytes .../impl/data/icudata/ibm-1006_P100-1995.cnv | Bin 3472 -> 3472 bytes .../impl/data/icudata/ibm-1025_P100-1995.cnv | Bin 2928 -> 2928 bytes .../impl/data/icudata/ibm-1026_P100-1995.cnv | Bin 2944 -> 2944 bytes .../impl/data/icudata/ibm-1047_P100-1995.cnv | Bin 2704 -> 2704 bytes .../impl/data/icudata/ibm-1051_P100-1995.cnv | Bin 3376 -> 3376 bytes .../impl/data/icudata/ibm-1089_P100-1995.cnv | Bin 3056 -> 3056 bytes .../impl/data/icudata/ibm-1097_P100-1995.cnv | Bin 3504 -> 3504 bytes .../impl/data/icudata/ibm-1098_P100-1995.cnv | Bin 4304 -> 4304 bytes .../impl/data/icudata/ibm-1112_P100-1995.cnv | Bin 2960 -> 2960 bytes .../impl/data/icudata/ibm-1122_P100-1999.cnv | Bin 2832 -> 2832 bytes .../impl/data/icudata/ibm-1123_P100-1995.cnv | Bin 3024 -> 3024 bytes .../impl/data/icudata/ibm-1124_P100-1996.cnv | Bin 3024 -> 3024 bytes .../impl/data/icudata/ibm-1125_P100-1997.cnv | Bin 3872 -> 3872 bytes .../impl/data/icudata/ibm-1129_P100-1997.cnv | Bin 3136 -> 3136 bytes .../impl/data/icudata/ibm-1130_P100-1997.cnv | Bin 3136 -> 3136 bytes .../impl/data/icudata/ibm-1131_P100-1997.cnv | Bin 3712 -> 3712 bytes .../impl/data/icudata/ibm-1132_P100-1998.cnv | Bin 2848 -> 2848 bytes .../impl/data/icudata/ibm-1133_P100-1997.cnv | Bin 2784 -> 2784 bytes .../impl/data/icudata/ibm-1137_P100-1999.cnv | Bin 2912 -> 2912 bytes .../impl/data/icudata/ibm-1140_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1141_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1142_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1143_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1144_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1145_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1146_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1147_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1148_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1149_P100-1997.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/ibm-1153_P100-1999.cnv | Bin 3040 -> 3040 bytes .../impl/data/icudata/ibm-1154_P100-1999.cnv | Bin 2960 -> 2960 bytes .../impl/data/icudata/ibm-1155_P100-1999.cnv | Bin 2928 -> 2928 bytes .../impl/data/icudata/ibm-1156_P100-1999.cnv | Bin 2992 -> 2992 bytes .../impl/data/icudata/ibm-1157_P100-1999.cnv | Bin 2864 -> 2864 bytes .../impl/data/icudata/ibm-1158_P100-1999.cnv | Bin 3056 -> 3056 bytes .../impl/data/icudata/ibm-1160_P100-1999.cnv | Bin 2864 -> 2864 bytes .../impl/data/icudata/ibm-1162_P100-1999.cnv | Bin 2944 -> 2944 bytes .../impl/data/icudata/ibm-1164_P100-1999.cnv | Bin 3168 -> 3168 bytes .../impl/data/icudata/ibm-1168_P100-2002.cnv | Bin 3600 -> 3600 bytes .../impl/data/icudata/ibm-1250_P100-1995.cnv | Bin 3200 -> 3200 bytes .../impl/data/icudata/ibm-1251_P100-1995.cnv | Bin 3168 -> 3168 bytes .../impl/data/icudata/ibm-1252_P100-2000.cnv | Bin 3248 -> 3248 bytes .../impl/data/icudata/ibm-1253_P100-1995.cnv | Bin 3056 -> 3056 bytes .../impl/data/icudata/ibm-1254_P100-1995.cnv | Bin 3264 -> 3264 bytes .../impl/data/icudata/ibm-1255_P100-1995.cnv | Bin 3232 -> 3232 bytes .../impl/data/icudata/ibm-1256_P110-1997.cnv | Bin 4208 -> 4208 bytes .../impl/data/icudata/ibm-1257_P100-1995.cnv | Bin 3056 -> 3056 bytes .../impl/data/icudata/ibm-1258_P100-1997.cnv | Bin 3408 -> 3408 bytes .../impl/data/icudata/ibm-12712_P100-1998.cnv | Bin 2992 -> 2992 bytes .../impl/data/icudata/ibm-1276_P100-1995.cnv | Bin 3376 -> 3376 bytes .../impl/data/icudata/ibm-1363_P110-1997.cnv | Bin 2832 -> 2832 bytes .../impl/data/icudata/ibm-1363_P11B-1998.cnv | Bin 133936 -> 133936 bytes .../impl/data/icudata/ibm-1364_P110-2007.cnv | Bin 144592 -> 144592 bytes .../impl/data/icudata/ibm-1371_P100-1999.cnv | Bin 120784 -> 120784 bytes .../impl/data/icudata/ibm-1373_P100-2002.cnv | Bin 124336 -> 124336 bytes .../impl/data/icudata/ibm-1375_P100-2008.cnv | Bin 183904 -> 183904 bytes .../impl/data/icudata/ibm-1383_P110-1999.cnv | Bin 76464 -> 76464 bytes .../impl/data/icudata/ibm-1386_P100-2001.cnv | Bin 116704 -> 116704 bytes .../impl/data/icudata/ibm-1388_P100-2024.cnv | Bin 174992 -> 174992 bytes .../impl/data/icudata/ibm-1390_P110-2003.cnv | Bin 167104 -> 167104 bytes .../impl/data/icudata/ibm-1399_P110-2003.cnv | Bin 4128 -> 4128 bytes .../impl/data/icudata/ibm-16684_P110-2003.cnv | Bin 3296 -> 3296 bytes .../impl/data/icudata/ibm-16804_X110-1999.cnv | Bin 3296 -> 3296 bytes .../impl/data/icudata/ibm-273_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-277_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-278_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-280_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-284_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-285_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-290_P100-1995.cnv | Bin 2672 -> 2672 bytes .../impl/data/icudata/ibm-297_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-33722_P120-1999.cnv | Bin 5232 -> 5232 bytes .../icudata/ibm-33722_P12A_P12A-2004_U2.cnv | Bin 99360 -> 99360 bytes .../icudata/ibm-33722_P12A_P12A-2009_U2.cnv | Bin 100176 -> 100176 bytes .../impl/data/icudata/ibm-37_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-420_X120-1999.cnv | Bin 3264 -> 3264 bytes .../impl/data/icudata/ibm-424_P100-1995.cnv | Bin 2912 -> 2912 bytes .../impl/data/icudata/ibm-437_P100-1995.cnv | Bin 3952 -> 3952 bytes .../impl/data/icudata/ibm-4517_P100-2005.cnv | Bin 3424 -> 3424 bytes .../impl/data/icudata/ibm-4899_P100-1998.cnv | Bin 2752 -> 2752 bytes .../impl/data/icudata/ibm-4909_P100-1999.cnv | Bin 2848 -> 2848 bytes .../impl/data/icudata/ibm-4971_P100-1999.cnv | Bin 2848 -> 2848 bytes .../impl/data/icudata/ibm-500_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-5012_P100-1999.cnv | Bin 2928 -> 2928 bytes .../impl/data/icudata/ibm-5123_P100-1999.cnv | Bin 2704 -> 2704 bytes .../impl/data/icudata/ibm-5346_P100-1998.cnv | Bin 3200 -> 3200 bytes .../impl/data/icudata/ibm-5347_P100-1998.cnv | Bin 3200 -> 3200 bytes .../impl/data/icudata/ibm-5348_P100-1997.cnv | Bin 3200 -> 3200 bytes .../impl/data/icudata/ibm-5349_P100-1998.cnv | Bin 3072 -> 3072 bytes .../impl/data/icudata/ibm-5350_P100-1998.cnv | Bin 3280 -> 3280 bytes .../impl/data/icudata/ibm-5351_P100-1998.cnv | Bin 3232 -> 3232 bytes .../impl/data/icudata/ibm-5352_P100-1998.cnv | Bin 4224 -> 4224 bytes .../impl/data/icudata/ibm-5353_P100-1998.cnv | Bin 3088 -> 3088 bytes .../impl/data/icudata/ibm-5354_P100-1998.cnv | Bin 3408 -> 3408 bytes .../impl/data/icudata/ibm-5471_P100-2006.cnv | Bin 133664 -> 133664 bytes .../impl/data/icudata/ibm-5478_P100-1995.cnv | Bin 73152 -> 73152 bytes .../impl/data/icudata/ibm-720_P100-1997.cnv | Bin 3488 -> 3488 bytes .../impl/data/icudata/ibm-737_P100-1997.cnv | Bin 3712 -> 3712 bytes .../impl/data/icudata/ibm-775_P100-1996.cnv | Bin 3680 -> 3680 bytes .../impl/data/icudata/ibm-803_P100-1999.cnv | Bin 2592 -> 2592 bytes .../impl/data/icudata/ibm-813_P100-1995.cnv | Bin 2832 -> 2832 bytes .../impl/data/icudata/ibm-838_P100-1995.cnv | Bin 2784 -> 2784 bytes .../impl/data/icudata/ibm-8482_P100-1999.cnv | Bin 2704 -> 2704 bytes .../impl/data/icudata/ibm-850_P100-1995.cnv | Bin 3632 -> 3632 bytes .../impl/data/icudata/ibm-851_P100-1995.cnv | Bin 3632 -> 3632 bytes .../impl/data/icudata/ibm-852_P100-1995.cnv | Bin 3760 -> 3760 bytes .../impl/data/icudata/ibm-855_P100-1995.cnv | Bin 3664 -> 3664 bytes .../impl/data/icudata/ibm-856_P100-1995.cnv | Bin 3584 -> 3584 bytes .../impl/data/icudata/ibm-857_P100-1995.cnv | Bin 3616 -> 3616 bytes .../impl/data/icudata/ibm-858_P100-1997.cnv | Bin 3568 -> 3568 bytes .../impl/data/icudata/ibm-860_P100-1995.cnv | Bin 3824 -> 3824 bytes .../impl/data/icudata/ibm-861_P100-1995.cnv | Bin 3952 -> 3952 bytes .../impl/data/icudata/ibm-862_P100-1995.cnv | Bin 4160 -> 4160 bytes .../impl/data/icudata/ibm-863_P100-1995.cnv | Bin 3936 -> 3936 bytes .../impl/data/icudata/ibm-864_X110-1999.cnv | Bin 4192 -> 4192 bytes .../impl/data/icudata/ibm-865_P100-1995.cnv | Bin 3952 -> 3952 bytes .../impl/data/icudata/ibm-866_P100-1995.cnv | Bin 3664 -> 3664 bytes .../impl/data/icudata/ibm-867_P100-1998.cnv | Bin 4096 -> 4096 bytes .../impl/data/icudata/ibm-868_P100-1995.cnv | Bin 4272 -> 4272 bytes .../impl/data/icudata/ibm-869_P100-1995.cnv | Bin 3536 -> 3536 bytes .../impl/data/icudata/ibm-870_P100-1995.cnv | Bin 2992 -> 2992 bytes .../impl/data/icudata/ibm-871_P100-1995.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-874_P100-1995.cnv | Bin 2784 -> 2784 bytes .../impl/data/icudata/ibm-875_P100-1995.cnv | Bin 2832 -> 2832 bytes .../impl/data/icudata/ibm-878_P100-1996.cnv | Bin 3504 -> 3504 bytes .../impl/data/icudata/ibm-9005_X110-2007.cnv | Bin 2976 -> 2976 bytes .../impl/data/icudata/ibm-901_P100-1999.cnv | Bin 3696 -> 3696 bytes .../impl/data/icudata/ibm-902_P100-1999.cnv | Bin 3616 -> 3616 bytes .../impl/data/icudata/ibm-9067_X100-2005.cnv | Bin 2960 -> 2960 bytes .../impl/data/icudata/ibm-912_P100-1995.cnv | Bin 3744 -> 3744 bytes .../impl/data/icudata/ibm-913_P100-2000.cnv | Bin 2976 -> 2976 bytes .../impl/data/icudata/ibm-914_P100-1995.cnv | Bin 2992 -> 2992 bytes .../impl/data/icudata/ibm-915_P100-1995.cnv | Bin 2928 -> 2928 bytes .../impl/data/icudata/ibm-916_P100-1995.cnv | Bin 2912 -> 2912 bytes .../impl/data/icudata/ibm-918_P100-1995.cnv | Bin 3472 -> 3472 bytes .../impl/data/icudata/ibm-920_P100-1995.cnv | Bin 2912 -> 2912 bytes .../impl/data/icudata/ibm-921_P100-1995.cnv | Bin 2960 -> 2960 bytes .../impl/data/icudata/ibm-922_P100-1999.cnv | Bin 3584 -> 3584 bytes .../impl/data/icudata/ibm-923_P100-1998.cnv | Bin 2816 -> 2816 bytes .../impl/data/icudata/ibm-930_P120-1999.cnv | Bin 99792 -> 99792 bytes .../impl/data/icudata/ibm-933_P110-1995.cnv | Bin 142352 -> 142352 bytes .../impl/data/icudata/ibm-935_P110-1999.cnv | Bin 84064 -> 84064 bytes .../impl/data/icudata/ibm-937_P110-1999.cnv | Bin 1280 -> 1280 bytes .../impl/data/icudata/ibm-939_P120-1999.cnv | Bin 5920 -> 5920 bytes .../impl/data/icudata/ibm-942_P12A-1999.cnv | Bin 7920 -> 7920 bytes .../impl/data/icudata/ibm-943_P130-1999.cnv | Bin 10640 -> 10640 bytes .../impl/data/icudata/ibm-943_P15A-2003.cnv | Bin 90992 -> 90992 bytes .../impl/data/icudata/ibm-9447_P100-2002.cnv | Bin 3360 -> 3360 bytes .../impl/data/icudata/ibm-9448_X100-2005.cnv | Bin 4336 -> 4336 bytes .../impl/data/icudata/ibm-9449_P100-2002.cnv | Bin 3216 -> 3216 bytes .../impl/data/icudata/ibm-949_P110-1999.cnv | Bin 2080 -> 2080 bytes .../impl/data/icudata/ibm-949_P11A-1999.cnv | Bin 130368 -> 130368 bytes .../impl/data/icudata/ibm-950_P110-1999.cnv | Bin 14896 -> 14896 bytes .../impl/data/icudata/ibm-954_P101-2007.cnv | Bin 101408 -> 101408 bytes .../impl/data/icudata/ibm-964_P110-1999.cnv | Bin 150384 -> 150384 bytes .../icudata/ibm-970_P110_P110-2006_U2.cnv | Bin 102832 -> 102832 bytes .../impl/data/icudata/ibm-971_P100-1995.cnv | Bin 1344 -> 1344 bytes .../impl/data/icudata/icu-internal-25546.cnv | Bin 104128 -> 104128 bytes .../data/icudata/icu-internal-compound-d1.cnv | Bin 71344 -> 71344 bytes .../data/icudata/icu-internal-compound-d2.cnv | Bin 74880 -> 74880 bytes .../data/icudata/icu-internal-compound-d3.cnv | Bin 83680 -> 83680 bytes .../data/icudata/icu-internal-compound-d4.cnv | Bin 68224 -> 68224 bytes .../data/icudata/icu-internal-compound-d5.cnv | Bin 31840 -> 31840 bytes .../data/icudata/icu-internal-compound-d6.cnv | Bin 87648 -> 87648 bytes .../data/icudata/icu-internal-compound-d7.cnv | Bin 79184 -> 79184 bytes .../data/icudata/icu-internal-compound-s1.cnv | Bin 2240 -> 2240 bytes .../data/icudata/icu-internal-compound-s2.cnv | Bin 2480 -> 2480 bytes .../data/icudata/icu-internal-compound-s3.cnv | Bin 2848 -> 2848 bytes .../data/icudata/icu-internal-compound-t.cnv | Bin 320944 -> 320944 bytes .../impl/data/icudata/iso-8859_10-1998.cnv | Bin 2736 -> 2736 bytes .../impl/data/icudata/iso-8859_11-2001.cnv | Bin 2528 -> 2528 bytes .../impl/data/icudata/iso-8859_14-1998.cnv | Bin 2992 -> 2992 bytes .../ibm/icu/impl/data/icudata/iso-ir-165.cnv | Bin 74064 -> 74064 bytes .../ibm/icu/impl/data/icudata/jisx-212.cnv | Bin 71488 -> 71488 bytes .../ibm/icu/impl/data/icudata/lmb-excp.cnv | Bin 11536 -> 11536 bytes .../icu/impl/data/icudata/macos-0_2-10.2.cnv | Bin 3968 -> 3968 bytes .../icu/impl/data/icudata/macos-29-10.2.cnv | Bin 3440 -> 3440 bytes .../icu/impl/data/icudata/macos-35-10.2.cnv | Bin 3920 -> 3920 bytes .../icu/impl/data/icudata/macos-6_2-10.4.cnv | Bin 3664 -> 3664 bytes .../icu/impl/data/icudata/macos-7_3-10.2.cnv | Bin 3632 -> 3632 bytes .../impl/data/icudata/windows-874-2000.cnv | Bin 3584 -> 3584 bytes .../impl/data/icudata/windows-936-2000.cnv | Bin 6448 -> 6448 bytes .../impl/data/icudata/windows-949-2000.cnv | Bin 5568 -> 5568 bytes .../impl/data/icudata/windows-950-2000.cnv | Bin 11872 -> 11872 bytes .../com/ibm/icu/impl/LocaleFallbackData.java | 1 - .../ibm/icu/impl/data/icudata/dayPeriods.res | Bin 19968 -> 19968 bytes .../ibm/icu/impl/data/icudata/langInfo.res | Bin 72272 -> 72240 bytes .../com/ibm/icu/impl/data/icudata/rbnf/gu.res | Bin 0 -> 4688 bytes .../icu/impl/data/icudata/rbnf/res_index.res | Bin 992 -> 1008 bytes .../impl/data/icudata/supplementalData.res | Bin 245328 -> 245328 bytes .../com/ibm/icu/dev/data/testdata/ibm9027.cnv | Bin 52544 -> 52544 bytes .../com/ibm/icu/dev/data/testdata/test1.cnv | Bin 4320 -> 4320 bytes .../ibm/icu/dev/data/testdata/test1bmp.cnv | Bin 2448 -> 2448 bytes .../com/ibm/icu/dev/data/testdata/test2.cnv | Bin 9344 -> 9344 bytes .../com/ibm/icu/dev/data/testdata/test3.cnv | Bin 10608 -> 10608 bytes .../com/ibm/icu/dev/data/testdata/test4.cnv | Bin 10496 -> 10496 bytes .../com/ibm/icu/dev/data/testdata/test4x.cnv | Bin 800 -> 800 bytes .../com/ibm/icu/dev/data/testdata/test5.cnv | Bin 7760 -> 7760 bytes 205 files changed, 532 insertions(+), 534 deletions(-) create mode 100644 icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res diff --git a/icu4c/source/common/localefallback_data.h b/icu4c/source/common/localefallback_data.h index 389eec8bbfa5..3b8ad8a3f398 100644 --- a/icu4c/source/common/localefallback_data.h +++ b/icu4c/source/common/localefallback_data.h @@ -66,31 +66,31 @@ const char dsLocaleIDChars[] = "lbe\0lbf\0lbj\0lbm\0lbo\0lbr\0lcp\0lep\0lez\0lhm\0lhs\0lif\0lis\0" "lkh\0lki\0lmh\0lmn\0lo\0loy\0lpo\0lrc\0lrk\0lrl\0lsa\0lsd\0lss\0" "ltc\0luk\0luu\0luv\0luz\0lwl\0lwm\0lya\0lzh\0lzz_GE\0mag\0mai\0" - "man_GN\0mby\0mde\0mdf\0mdx\0mdy\0mfa\0mfi\0mga\0mgp\0mhj\0mid\0" - "mjl\0mjq\0mjr\0mjt\0mju\0mjv\0mjz\0mk\0mkb\0mke\0mki\0mkm\0ml\0" - "mlf\0mn\0mn_CN\0mnc\0mni\0mnj\0mns\0mnw\0mpz\0mr\0mra\0mrd\0mrj\0" - "mro\0mrr\0ms_CC\0mtm\0mtr\0mud\0muk\0mut\0muv\0muz\0mve\0mvf\0" - "mvy\0mvz\0mwr\0mwt\0mww\0my\0mym\0myv\0myz\0mzn\0nan\0nan_TW\0" - "nao\0ncd\0ncq\0ndf\0ne\0neg\0neh\0nei\0new\0ngt\0nio\0nit\0niv\0" - "nli\0nlm\0nlx\0nmm\0nnp\0nod\0noe\0nog\0noi\0non\0nos\0npb\0nqo\0" - "nrn\0nsd\0nsf\0nsk\0nst\0nsv\0nty\0ntz\0nwc\0nwx\0nyl\0nyq\0nyw\0" - "oaa\0oac\0oar\0oav\0obm\0obr\0odk\0oht\0oj\0ojs\0okm\0oko\0okz\0" - "ola\0ole\0omk\0omp\0omr\0omx\0oon\0or\0ort\0oru\0orv\0os\0osa\0" - "osc\0osi\0ota\0otb\0otk\0oty\0oui\0pa\0pa_PK\0pal\0paq\0pbt\0" - "pcb\0pce\0pcf\0pcg\0pch\0pci\0pcj\0peg\0peo\0pgd\0pgg\0pgl\0pgn\0" - "phd\0phk\0phl\0phn\0pho\0phr\0pht\0phu\0phv\0phw\0pi\0pka\0pkr\0" - "plk\0pll\0pmh\0pnt\0pnt_RU\0pra\0prc\0prd\0prt\0prx\0ps\0psh\0" - "psi\0pst\0psu\0pum\0pwo\0pwr\0pww\0pyx\0qxq\0raa\0rab\0raf\0rah\0" - "raj\0rav\0rbb\0rdb\0rei\0rhg\0rji\0rjs\0rka\0rki\0rkt\0rmi\0rmt\0" - "rmz\0rsk\0rtw\0ru\0rue\0rut\0rwr\0ryu\0sa\0sah\0sam\0sat\0saz\0" - "sbn\0sbu\0sck\0scl\0scp\0sct\0scu\0scx\0sd\0sd_IN\0sdb\0sdf\0" - "sdg\0sdh\0sdr\0sds\0sel\0sfm\0sgh\0sgj\0sgr\0sgt\0sgw\0sgy\0shd\0" - "shi\0shm\0shn\0shu\0shv\0si\0sia\0sip\0siy\0siz\0sjd\0sjp\0sjt\0" - "skb\0skj\0skr\0smh\0smp\0smu\0smy\0soa\0sog\0soi\0sou\0spt\0spv\0" - "sqo\0sqq\0sqt\0sr\0srb\0srh\0srx\0srz\0ssh\0sss\0sts\0stv\0sty\0" - "suz\0sva\0swb\0swi\0swv\0sxu\0syc\0syl\0syn\0syr\0syw\0ta\0tab\0" - "taj\0tbk\0tcn\0tco\0tcx\0tcy\0tda\0tdb\0tdd\0tdg\0tdh\0te\0tes\0" - "tg\0tg_PK\0tge\0tgf\0th\0the\0thf\0thi\0thl\0thm\0thq\0thr\0ths\0" + "mby\0mde\0mdf\0mdx\0mdy\0mfa\0mfi\0mga\0mgp\0mhj\0mid\0mjl\0mjq\0" + "mjr\0mjt\0mju\0mjv\0mjz\0mk\0mkb\0mke\0mki\0mkm\0ml\0mlf\0mn\0" + "mn_CN\0mnc\0mni\0mnj\0mns\0mnw\0mpz\0mr\0mra\0mrd\0mrj\0mro\0" + "mrr\0ms_CC\0mtm\0mtr\0mud\0muk\0mut\0muv\0muz\0mve\0mvf\0mvy\0" + "mvz\0mwr\0mwt\0mww\0my\0mym\0myv\0myz\0mzn\0nan\0nan_TW\0nao\0" + "ncd\0ncq\0ndf\0ne\0neg\0neh\0nei\0new\0ngt\0nio\0nit\0niv\0nli\0" + "nlm\0nlx\0nmm\0nnp\0nod\0noe\0nog\0noi\0non\0nos\0npb\0nqo\0nrn\0" + "nsd\0nsf\0nsk\0nst\0nsv\0nty\0ntz\0nwc\0nwx\0nyl\0nyq\0nyw\0oaa\0" + "oac\0oar\0oav\0obm\0obr\0odk\0oht\0oj\0ojs\0okm\0oko\0okz\0ola\0" + "ole\0omk\0omp\0omr\0omx\0oon\0or\0ort\0oru\0orv\0os\0osa\0osc\0" + "osi\0ota\0otb\0otk\0oty\0oui\0pa\0pa_PK\0pal\0paq\0pbt\0pcb\0" + "pce\0pcf\0pcg\0pch\0pci\0pcj\0peg\0peo\0pgd\0pgg\0pgl\0pgn\0phd\0" + "phk\0phl\0phn\0pho\0phr\0pht\0phu\0phv\0phw\0pi\0pka\0pkr\0plk\0" + "pll\0pmh\0pnt\0pnt_RU\0pra\0prc\0prd\0prt\0prx\0ps\0psh\0psi\0" + "pst\0psu\0pum\0pwo\0pwr\0pww\0pyx\0qxq\0raa\0rab\0raf\0rah\0raj\0" + "rav\0rbb\0rdb\0rei\0rhg\0rji\0rjs\0rka\0rki\0rkt\0rmi\0rmt\0rmz\0" + "rsk\0rtw\0ru\0rue\0rut\0rwr\0ryu\0sa\0sah\0sam\0sat\0saz\0sbn\0" + "sbu\0sck\0scl\0scp\0sct\0scu\0scx\0sd\0sd_IN\0sdb\0sdf\0sdg\0" + "sdh\0sdr\0sds\0sel\0sfm\0sgh\0sgj\0sgr\0sgt\0sgw\0sgy\0shd\0shi\0" + "shm\0shn\0shu\0shv\0si\0sia\0sip\0siy\0siz\0sjd\0sjp\0sjt\0skb\0" + "skj\0skr\0smh\0smp\0smu\0smy\0soa\0sog\0soi\0sou\0spt\0spv\0sqo\0" + "sqq\0sqt\0sr\0srb\0srh\0srx\0srz\0ssh\0sss\0sts\0stv\0sty\0suz\0" + "sva\0swb\0swi\0swv\0sxu\0syc\0syl\0syn\0syr\0syw\0ta\0tab\0taj\0" + "tbk\0tcn\0tco\0tcx\0tcy\0tda\0tdb\0tdd\0tdg\0tdh\0te\0tes\0tg\0" + "tg_PK\0tge\0tgf\0th\0the\0thf\0thi\0thl\0thm\0thq\0thr\0ths\0" "ti\0tig\0tij\0tin\0tjl\0tjo\0tkb\0tks\0tkt\0tmr\0tnv\0tov\0tpu\0" "tra\0trg\0trm\0trw\0tsd\0tsj\0tt\0tth\0tto\0tts\0ttz\0tvn\0twm\0" "txg\0txo\0tyr\0tyv\0ude\0udg\0udi\0udm\0ug\0ug_KZ\0ug_MN\0uga\0" @@ -647,514 +647,513 @@ const int32_t defaultScriptTable[] = { 2128, 130, // lzz_GE -> Geor 2135, 110, // mag -> Deva 2139, 110, // mai -> Deva - 2143, 370, // man_GN -> Nkoo - 2150, 10, // mby -> Arab - 2154, 10, // mde -> Arab - 2158, 105, // mdf -> Cyrl - 2162, 125, // mdx -> Ethi - 2166, 125, // mdy -> Ethi - 2170, 10, // mfa -> Arab - 2174, 10, // mfi -> Arab - 2178, 270, // mga -> Latg - 2182, 110, // mgp -> Deva - 2186, 10, // mhj -> Arab - 2190, 305, // mid -> Mand - 2194, 110, // mjl -> Deva - 2198, 330, // mjq -> Mlym - 2202, 330, // mjr -> Mlym - 2206, 110, // mjt -> Deva - 2210, 535, // mju -> Telu - 2214, 330, // mjv -> Mlym - 2218, 110, // mjz -> Deva - 2222, 105, // mk -> Cyrl - 2225, 110, // mkb -> Deva - 2229, 110, // mke -> Deva - 2233, 10, // mki -> Arab - 2237, 550, // mkm -> Thai - 2241, 330, // ml -> Mlym - 2244, 550, // mlf -> Thai - 2248, 105, // mn -> Cyrl - 2251, 340, // mn_CN -> Mong - 2257, 340, // mnc -> Mong - 2261, 50, // mni -> Beng - 2265, 10, // mnj -> Arab - 2269, 105, // mns -> Cyrl - 2273, 355, // mnw -> Mymr - 2277, 550, // mpz -> Thai - 2281, 110, // mr -> Deva - 2284, 550, // mra -> Thai - 2288, 110, // mrd -> Deva - 2292, 105, // mrj -> Cyrl - 2296, 345, // mro -> Mroo - 2300, 110, // mrr -> Deva - 2304, 10, // ms_CC -> Arab - 2310, 105, // mtm -> Cyrl - 2314, 110, // mtr -> Deva - 2318, 105, // mud -> Cyrl - 2322, 555, // muk -> Tibt - 2326, 110, // mut -> Deva - 2330, 520, // muv -> Taml - 2334, 125, // muz -> Ethi - 2338, 10, // mve -> Arab - 2342, 340, // mvf -> Mong - 2346, 10, // mvy -> Arab - 2350, 125, // mvz -> Ethi - 2354, 110, // mwr -> Deva - 2358, 355, // mwt -> Mymr - 2362, 200, // mww -> Hmnp - 2366, 355, // my -> Mymr - 2369, 125, // mym -> Ethi - 2373, 105, // myv -> Cyrl - 2377, 305, // myz -> Mand - 2381, 10, // mzn -> Arab - 2385, 180, // nan -> Hans - 2389, 185, // nan_TW -> Hant - 2396, 110, // nao -> Deva - 2400, 110, // ncd -> Deva - 2404, 260, // ncq -> Laoo - 2408, 105, // ndf -> Cyrl - 2412, 110, // ne -> Deva - 2415, 105, // neg -> Cyrl - 2419, 555, // neh -> Tibt - 2423, 590, // nei -> Xsux - 2427, 110, // new -> Deva - 2431, 260, // ngt -> Laoo - 2435, 105, // nio -> Cyrl - 2439, 535, // nit -> Telu - 2443, 105, // niv -> Cyrl - 2447, 10, // nli -> Arab - 2451, 10, // nlm -> Arab - 2455, 110, // nlx -> Deva - 2459, 110, // nmm -> Deva - 2463, 580, // nnp -> Wcho - 2467, 255, // nod -> Lana - 2471, 110, // noe -> Deva - 2475, 105, // nog -> Cyrl - 2479, 110, // noi -> Deva - 2483, 445, // non -> Runr - 2487, 595, // nos -> Yiii - 2491, 555, // npb -> Tibt - 2495, 370, // nqo -> Nkoo - 2499, 445, // nrn -> Runr - 2503, 595, // nsd -> Yiii - 2507, 595, // nsf -> Yiii - 2511, 70, // nsk -> Cans - 2515, 560, // nst -> Tnsa - 2519, 595, // nsv -> Yiii - 2523, 595, // nty -> Yiii - 2527, 10, // ntz -> Arab - 2531, 365, // nwc -> Newa - 2535, 110, // nwx -> Deva - 2539, 550, // nyl -> Thai - 2543, 10, // nyq -> Arab - 2547, 550, // nyw -> Thai - 2551, 105, // oaa -> Cyrl - 2555, 105, // oac -> Cyrl - 2559, 495, // oar -> Syrc - 2563, 130, // oav -> Geor - 2567, 420, // obm -> Phnx - 2571, 355, // obr -> Mymr - 2575, 10, // odk -> Arab - 2579, 590, // oht -> Xsux - 2583, 70, // oj -> Cans - 2586, 70, // ojs -> Cans - 2590, 170, // okm -> Hang - 2594, 175, // oko -> Hani - 2598, 235, // okz -> Khmr - 2602, 110, // ola -> Deva - 2606, 555, // ole -> Tibt - 2610, 105, // omk -> Cyrl - 2614, 350, // omp -> Mtei - 2618, 335, // omr -> Modi - 2622, 355, // omx -> Mymr - 2626, 110, // oon -> Deva - 2630, 395, // or -> Orya - 2633, 535, // ort -> Telu - 2637, 10, // oru -> Arab - 2641, 105, // orv -> Cyrl - 2645, 105, // os -> Cyrl - 2648, 400, // osa -> Osge - 2652, 205, // osc -> Ital - 2656, 210, // osi -> Java - 2660, 10, // ota -> Arab - 2664, 555, // otb -> Tibt - 2668, 390, // otk -> Orkh - 2672, 150, // oty -> Gran - 2676, 405, // oui -> Ougr - 2680, 165, // pa -> Guru - 2683, 10, // pa_PK -> Arab - 2689, 415, // pal -> Phli - 2693, 105, // paq -> Cyrl - 2697, 10, // pbt -> Arab - 2701, 235, // pcb -> Khmr - 2705, 355, // pce -> Mymr - 2709, 330, // pcf -> Mlym - 2713, 330, // pcg -> Mlym - 2717, 110, // pch -> Deva - 2721, 110, // pci -> Deva - 2725, 535, // pcj -> Telu - 2729, 395, // peg -> Orya - 2733, 585, // peo -> Xpeo - 2737, 230, // pgd -> Khar - 2741, 110, // pgg -> Deva - 2745, 380, // pgl -> Ogam - 2749, 205, // pgn -> Ital - 2753, 110, // phd -> Deva - 2757, 355, // phk -> Mymr - 2761, 10, // phl -> Arab - 2765, 420, // phn -> Phnx - 2769, 260, // pho -> Laoo - 2773, 10, // phr -> Arab - 2777, 550, // pht -> Thai - 2781, 550, // phu -> Thai - 2785, 10, // phv -> Arab - 2789, 110, // phw -> Deva - 2793, 470, // pi -> Sinh - 2796, 60, // pka -> Brah - 2800, 330, // pkr -> Mlym - 2804, 10, // plk -> Arab - 2808, 355, // pll -> Mymr - 2812, 60, // pmh -> Brah - 2816, 155, // pnt -> Grek - 2820, 105, // pnt_RU -> Cyrl - 2827, 230, // pra -> Khar - 2831, 10, // prc -> Arab - 2835, 10, // prd -> Arab - 2839, 550, // prt -> Thai - 2843, 10, // prx -> Arab - 2847, 10, // ps -> Arab - 2850, 10, // psh -> Arab - 2854, 10, // psi -> Arab - 2858, 10, // pst -> Arab - 2862, 60, // psu -> Brah - 2866, 110, // pum -> Deva - 2870, 355, // pwo -> Mymr - 2874, 110, // pwr -> Deva - 2878, 550, // pww -> Thai - 2882, 355, // pyx -> Mymr - 2886, 10, // qxq -> Arab - 2890, 110, // raa -> Deva - 2894, 110, // rab -> Deva - 2898, 110, // raf -> Deva - 2902, 50, // rah -> Beng - 2906, 110, // raj -> Deva - 2910, 110, // rav -> Deva - 2914, 355, // rbb -> Mymr - 2918, 10, // rdb -> Arab - 2922, 395, // rei -> Orya - 2926, 440, // rhg -> Rohg - 2930, 110, // rji -> Deva - 2934, 110, // rjs -> Deva - 2938, 235, // rka -> Khmr - 2942, 355, // rki -> Mymr - 2946, 50, // rkt -> Beng - 2950, 20, // rmi -> Armn - 2954, 10, // rmt -> Arab - 2958, 355, // rmz -> Mymr - 2962, 105, // rsk -> Cyrl - 2966, 110, // rtw -> Deva - 2970, 105, // ru -> Cyrl - 2973, 105, // rue -> Cyrl - 2977, 105, // rut -> Cyrl - 2981, 110, // rwr -> Deva - 2985, 225, // ryu -> Kana - 2989, 110, // sa -> Deva - 2992, 105, // sah -> Cyrl - 2996, 450, // sam -> Samr - 3000, 385, // sat -> Olck - 3004, 460, // saz -> Saur - 3008, 10, // sbn -> Arab - 3012, 555, // sbu -> Tibt - 3016, 110, // sck -> Deva - 3020, 10, // scl -> Arab - 3024, 110, // scp -> Deva - 3028, 260, // sct -> Laoo - 3032, 505, // scu -> Takr - 3036, 155, // scx -> Grek - 3040, 10, // sd -> Arab - 3043, 110, // sd_IN -> Deva - 3049, 10, // sdb -> Arab - 3053, 10, // sdf -> Arab - 3057, 10, // sdg -> Arab - 3061, 10, // sdh -> Arab - 3065, 50, // sdr -> Beng - 3069, 10, // sds -> Arab - 3073, 105, // sel -> Cyrl - 3077, 425, // sfm -> Plrd - 3081, 105, // sgh -> Cyrl - 3085, 110, // sgj -> Deva - 3089, 10, // sgr -> Arab - 3093, 555, // sgt -> Tibt - 3097, 125, // sgw -> Ethi - 3101, 10, // sgy -> Arab - 3105, 10, // shd -> Arab - 3109, 540, // shi -> Tfng - 3113, 10, // shm -> Arab - 3117, 355, // shn -> Mymr - 3121, 10, // shu -> Arab - 3125, 10, // shv -> Arab - 3129, 470, // si -> Sinh - 3132, 105, // sia -> Cyrl - 3136, 555, // sip -> Tibt - 3140, 10, // siy -> Arab - 3144, 10, // siz -> Arab - 3148, 105, // sjd -> Cyrl - 3152, 110, // sjp -> Deva - 3156, 105, // sjt -> Cyrl - 3160, 550, // skb -> Thai - 3164, 110, // skj -> Deva - 3168, 10, // skr -> Arab - 3172, 595, // smh -> Yiii - 3176, 450, // smp -> Samr - 3180, 235, // smu -> Khmr - 3184, 10, // smy -> Arab - 3188, 530, // soa -> Tavt - 3192, 475, // sog -> Sogd - 3196, 110, // soi -> Deva - 3200, 550, // sou -> Thai - 3204, 555, // spt -> Tibt - 3208, 395, // spv -> Orya - 3212, 10, // sqo -> Arab - 3216, 260, // sqq -> Laoo - 3220, 10, // sqt -> Arab - 3224, 105, // sr -> Cyrl - 3227, 480, // srb -> Sora - 3231, 10, // srh -> Arab - 3235, 110, // srx -> Deva - 3239, 10, // srz -> Arab - 3243, 10, // ssh -> Arab - 3247, 260, // sss -> Laoo - 3251, 10, // sts -> Arab - 3255, 125, // stv -> Ethi - 3259, 105, // sty -> Cyrl - 3263, 490, // suz -> Sunu - 3267, 130, // sva -> Geor - 3271, 10, // swb -> Arab - 3275, 175, // swi -> Hani - 3279, 110, // swv -> Deva - 3283, 445, // sxu -> Runr - 3287, 495, // syc -> Syrc - 3291, 50, // syl -> Beng - 3295, 495, // syn -> Syrc - 3299, 495, // syr -> Syrc - 3303, 110, // syw -> Deva - 3307, 520, // ta -> Taml - 3310, 105, // tab -> Cyrl - 3314, 110, // taj -> Deva - 3318, 500, // tbk -> Tagb - 3322, 555, // tcn -> Tibt - 3326, 355, // tco -> Mymr - 3330, 520, // tcx -> Taml - 3334, 245, // tcy -> Knda - 3338, 540, // tda -> Tfng - 3342, 110, // tdb -> Deva - 3346, 510, // tdd -> Tale - 3350, 110, // tdg -> Deva - 3354, 110, // tdh -> Deva - 3358, 535, // te -> Telu - 3361, 210, // tes -> Java - 3365, 105, // tg -> Cyrl - 3368, 10, // tg_PK -> Arab - 3374, 110, // tge -> Deva - 3378, 555, // tgf -> Tibt - 3382, 550, // th -> Thai - 3385, 110, // the -> Deva - 3389, 110, // thf -> Deva - 3393, 510, // thi -> Tale - 3397, 110, // thl -> Deva - 3401, 550, // thm -> Thai - 3405, 110, // thq -> Deva - 3409, 110, // thr -> Deva - 3413, 110, // ths -> Deva - 3417, 125, // ti -> Ethi - 3420, 125, // tig -> Ethi - 3424, 110, // tij -> Deva - 3428, 105, // tin -> Cyrl - 3432, 355, // tjl -> Mymr - 3436, 10, // tjo -> Arab - 3440, 110, // tkb -> Deva - 3444, 10, // tks -> Arab - 3448, 110, // tkt -> Deva - 3452, 495, // tmr -> Syrc - 3456, 65, // tnv -> Cakm - 3460, 10, // tov -> Arab - 3464, 235, // tpu -> Khmr - 3468, 10, // tra -> Arab - 3472, 190, // trg -> Hebr - 3476, 10, // trm -> Arab - 3480, 10, // trw -> Arab - 3484, 155, // tsd -> Grek - 3488, 555, // tsj -> Tibt - 3492, 105, // tt -> Cyrl - 3495, 260, // tth -> Laoo - 3499, 260, // tto -> Laoo - 3503, 550, // tts -> Thai - 3507, 110, // ttz -> Deva - 3511, 355, // tvn -> Mymr - 3515, 110, // twm -> Deva - 3519, 525, // txg -> Tang - 3523, 565, // txo -> Toto - 3527, 530, // tyr -> Tavt - 3531, 105, // tyv -> Cyrl - 3535, 105, // ude -> Cyrl - 3539, 330, // udg -> Mlym - 3543, 105, // udi -> Cyrl - 3547, 105, // udm -> Cyrl - 3551, 10, // ug -> Arab - 3554, 105, // ug_KZ -> Cyrl - 3560, 105, // ug_MN -> Cyrl - 3566, 570, // uga -> Ugar - 3570, 105, // ugh -> Cyrl - 3574, 550, // ugo -> Thai - 3578, 105, // uk -> Cyrl - 3581, 395, // uki -> Orya - 3585, 105, // ulc -> Cyrl - 3589, 50, // unr -> Beng - 3593, 110, // unr_NP -> Deva - 3600, 50, // unx -> Beng - 3604, 10, // ur -> Arab - 3607, 550, // urk -> Thai - 3611, 10, // ush -> Arab - 3615, 155, // uum -> Grek - 3619, 10, // uz_AF -> Arab - 3625, 105, // uz_CN -> Cyrl - 3631, 10, // uzs -> Arab - 3635, 520, // vaa -> Taml - 3639, 10, // vaf -> Arab - 3643, 110, // vah -> Deva - 3647, 575, // vai -> Vaii - 3651, 110, // vas -> Deva - 3655, 110, // vav -> Deva - 3659, 110, // vay -> Deva - 3663, 10, // vgr -> Arab - 3667, 110, // vjk -> Deva - 3671, 245, // vmd -> Knda - 3675, 10, // vmh -> Arab - 3679, 125, // wal -> Ethi - 3683, 10, // wbk -> Arab - 3687, 535, // wbq -> Telu - 3691, 110, // wbr -> Deva - 3695, 125, // wle -> Ethi - 3699, 10, // wlo -> Arab - 3703, 110, // wme -> Deva - 3707, 10, // wne -> Arab - 3711, 10, // wni -> Arab - 3715, 135, // wsg -> Gong - 3719, 10, // wsv -> Arab - 3723, 110, // wtm -> Deva - 3727, 180, // wuu -> Hans - 3731, 0, // xag -> Aghb - 3735, 105, // xal -> Cyrl - 3739, 125, // xan -> Ethi - 3743, 105, // xas -> Cyrl - 3747, 90, // xco -> Chrs - 3751, 75, // xcr -> Cari - 3755, 105, // xdq -> Cyrl - 3759, 10, // xhe -> Arab - 3763, 235, // xhm -> Khmr - 3767, 395, // xis -> Orya - 3771, 10, // xka -> Arab - 3775, 10, // xkc -> Arab - 3779, 555, // xkf -> Tibt - 3783, 10, // xkj -> Arab - 3787, 10, // xkp -> Arab - 3791, 295, // xlc -> Lyci - 3795, 300, // xld -> Lydi - 3799, 120, // xly -> Elym - 3803, 130, // xmf -> Geor - 3807, 310, // xmn -> Mani - 3811, 325, // xmr -> Merc - 3815, 360, // xna -> Narb - 3819, 110, // xnr -> Deva - 3823, 155, // xpg -> Grek - 3827, 380, // xpi -> Ogam - 3831, 105, // xpm -> Cyrl - 3835, 430, // xpr -> Prti - 3839, 105, // xrm -> Cyrl - 3843, 105, // xrn -> Cyrl - 3847, 455, // xsa -> Sarb - 3851, 110, // xsr -> Deva - 3855, 60, // xtq -> Brah - 3859, 520, // xub -> Taml - 3863, 520, // xuj -> Taml - 3867, 205, // xve -> Ital - 3871, 10, // xvi -> Arab - 3875, 105, // xwo -> Cyrl - 3879, 315, // xzh -> Marc - 3883, 105, // yai -> Cyrl - 3887, 110, // ybh -> Deva - 3891, 110, // ybi -> Deva - 3895, 10, // ydg -> Arab - 3899, 330, // yea -> Mlym - 3903, 155, // yej -> Grek - 3907, 535, // yeu -> Telu - 3911, 425, // ygp -> Plrd - 3915, 190, // yhd -> Hebr - 3919, 190, // yi -> Hebr - 3922, 595, // yig -> Yiii - 3926, 190, // yih -> Hebr - 3930, 595, // yiv -> Yiii - 3934, 105, // ykg -> Cyrl - 3938, 105, // ykh -> Cyrl - 3942, 425, // yna -> Plrd - 3946, 105, // ynk -> Cyrl - 3950, 215, // yoi -> Jpan - 3954, 550, // yoy -> Thai - 3958, 105, // yrk -> Cyrl - 3962, 595, // ysd -> Yiii - 3966, 595, // ysn -> Yiii - 3970, 595, // ysp -> Yiii - 3974, 105, // ysr -> Cyrl - 3978, 425, // ysy -> Plrd - 3982, 190, // yud -> Hebr - 3986, 185, // yue -> Hant - 3990, 180, // yue_CN -> Hans - 3997, 105, // yug -> Cyrl - 4001, 105, // yux -> Cyrl - 4005, 425, // ywq -> Plrd - 4009, 425, // ywu -> Plrd - 4013, 555, // zau -> Tibt - 4017, 10, // zba -> Arab - 4021, 175, // zch -> Hani - 4025, 10, // zdj -> Arab - 4029, 175, // zeh -> Hani - 4033, 540, // zen -> Tfng - 4037, 175, // zgb -> Hani - 4041, 540, // zgh -> Tfng - 4045, 175, // zgm -> Hani - 4049, 175, // zgn -> Hani - 4053, 180, // zh -> Hans - 4056, 185, // zh_AU -> Hant - 4062, 185, // zh_BN -> Hant - 4068, 185, // zh_GB -> Hant - 4074, 185, // zh_GF -> Hant - 4080, 185, // zh_HK -> Hant - 4086, 185, // zh_ID -> Hant - 4092, 185, // zh_MO -> Hant - 4098, 185, // zh_PA -> Hant - 4104, 185, // zh_PF -> Hant - 4110, 185, // zh_PH -> Hant - 4116, 185, // zh_SR -> Hant - 4122, 185, // zh_TH -> Hant - 4128, 185, // zh_TW -> Hant - 4134, 185, // zh_US -> Hant - 4140, 185, // zh_VN -> Hant - 4146, 175, // zhd -> Hani - 4150, 375, // zhx -> Nshu - 4154, 105, // zko -> Cyrl - 4158, 240, // zkt -> Kits - 4162, 105, // zkz -> Cyrl - 4166, 175, // zlj -> Hani - 4170, 175, // zln -> Hani - 4174, 175, // zlq -> Hani - 4178, 175, // zqe -> Hani - 4182, 395, // zrg -> Orya - 4186, 190, // zrp -> Hebr - 4190, 10, // zum -> Arab - 4194, 125, // zwa -> Ethi - 4198, 175, // zyg -> Hani - 4202, 175, // zyn -> Hani - 4206, 175, // zzj -> Hani + 2143, 10, // mby -> Arab + 2147, 10, // mde -> Arab + 2151, 105, // mdf -> Cyrl + 2155, 125, // mdx -> Ethi + 2159, 125, // mdy -> Ethi + 2163, 10, // mfa -> Arab + 2167, 10, // mfi -> Arab + 2171, 270, // mga -> Latg + 2175, 110, // mgp -> Deva + 2179, 10, // mhj -> Arab + 2183, 305, // mid -> Mand + 2187, 110, // mjl -> Deva + 2191, 330, // mjq -> Mlym + 2195, 330, // mjr -> Mlym + 2199, 110, // mjt -> Deva + 2203, 535, // mju -> Telu + 2207, 330, // mjv -> Mlym + 2211, 110, // mjz -> Deva + 2215, 105, // mk -> Cyrl + 2218, 110, // mkb -> Deva + 2222, 110, // mke -> Deva + 2226, 10, // mki -> Arab + 2230, 550, // mkm -> Thai + 2234, 330, // ml -> Mlym + 2237, 550, // mlf -> Thai + 2241, 105, // mn -> Cyrl + 2244, 340, // mn_CN -> Mong + 2250, 340, // mnc -> Mong + 2254, 50, // mni -> Beng + 2258, 10, // mnj -> Arab + 2262, 105, // mns -> Cyrl + 2266, 355, // mnw -> Mymr + 2270, 550, // mpz -> Thai + 2274, 110, // mr -> Deva + 2277, 550, // mra -> Thai + 2281, 110, // mrd -> Deva + 2285, 105, // mrj -> Cyrl + 2289, 345, // mro -> Mroo + 2293, 110, // mrr -> Deva + 2297, 10, // ms_CC -> Arab + 2303, 105, // mtm -> Cyrl + 2307, 110, // mtr -> Deva + 2311, 105, // mud -> Cyrl + 2315, 555, // muk -> Tibt + 2319, 110, // mut -> Deva + 2323, 520, // muv -> Taml + 2327, 125, // muz -> Ethi + 2331, 10, // mve -> Arab + 2335, 340, // mvf -> Mong + 2339, 10, // mvy -> Arab + 2343, 125, // mvz -> Ethi + 2347, 110, // mwr -> Deva + 2351, 355, // mwt -> Mymr + 2355, 200, // mww -> Hmnp + 2359, 355, // my -> Mymr + 2362, 125, // mym -> Ethi + 2366, 105, // myv -> Cyrl + 2370, 305, // myz -> Mand + 2374, 10, // mzn -> Arab + 2378, 180, // nan -> Hans + 2382, 185, // nan_TW -> Hant + 2389, 110, // nao -> Deva + 2393, 110, // ncd -> Deva + 2397, 260, // ncq -> Laoo + 2401, 105, // ndf -> Cyrl + 2405, 110, // ne -> Deva + 2408, 105, // neg -> Cyrl + 2412, 555, // neh -> Tibt + 2416, 590, // nei -> Xsux + 2420, 110, // new -> Deva + 2424, 260, // ngt -> Laoo + 2428, 105, // nio -> Cyrl + 2432, 535, // nit -> Telu + 2436, 105, // niv -> Cyrl + 2440, 10, // nli -> Arab + 2444, 10, // nlm -> Arab + 2448, 110, // nlx -> Deva + 2452, 110, // nmm -> Deva + 2456, 580, // nnp -> Wcho + 2460, 255, // nod -> Lana + 2464, 110, // noe -> Deva + 2468, 105, // nog -> Cyrl + 2472, 110, // noi -> Deva + 2476, 445, // non -> Runr + 2480, 595, // nos -> Yiii + 2484, 555, // npb -> Tibt + 2488, 370, // nqo -> Nkoo + 2492, 445, // nrn -> Runr + 2496, 595, // nsd -> Yiii + 2500, 595, // nsf -> Yiii + 2504, 70, // nsk -> Cans + 2508, 560, // nst -> Tnsa + 2512, 595, // nsv -> Yiii + 2516, 595, // nty -> Yiii + 2520, 10, // ntz -> Arab + 2524, 365, // nwc -> Newa + 2528, 110, // nwx -> Deva + 2532, 550, // nyl -> Thai + 2536, 10, // nyq -> Arab + 2540, 550, // nyw -> Thai + 2544, 105, // oaa -> Cyrl + 2548, 105, // oac -> Cyrl + 2552, 495, // oar -> Syrc + 2556, 130, // oav -> Geor + 2560, 420, // obm -> Phnx + 2564, 355, // obr -> Mymr + 2568, 10, // odk -> Arab + 2572, 590, // oht -> Xsux + 2576, 70, // oj -> Cans + 2579, 70, // ojs -> Cans + 2583, 170, // okm -> Hang + 2587, 175, // oko -> Hani + 2591, 235, // okz -> Khmr + 2595, 110, // ola -> Deva + 2599, 555, // ole -> Tibt + 2603, 105, // omk -> Cyrl + 2607, 350, // omp -> Mtei + 2611, 335, // omr -> Modi + 2615, 355, // omx -> Mymr + 2619, 110, // oon -> Deva + 2623, 395, // or -> Orya + 2626, 535, // ort -> Telu + 2630, 10, // oru -> Arab + 2634, 105, // orv -> Cyrl + 2638, 105, // os -> Cyrl + 2641, 400, // osa -> Osge + 2645, 205, // osc -> Ital + 2649, 210, // osi -> Java + 2653, 10, // ota -> Arab + 2657, 555, // otb -> Tibt + 2661, 390, // otk -> Orkh + 2665, 150, // oty -> Gran + 2669, 405, // oui -> Ougr + 2673, 165, // pa -> Guru + 2676, 10, // pa_PK -> Arab + 2682, 415, // pal -> Phli + 2686, 105, // paq -> Cyrl + 2690, 10, // pbt -> Arab + 2694, 235, // pcb -> Khmr + 2698, 355, // pce -> Mymr + 2702, 330, // pcf -> Mlym + 2706, 330, // pcg -> Mlym + 2710, 110, // pch -> Deva + 2714, 110, // pci -> Deva + 2718, 535, // pcj -> Telu + 2722, 395, // peg -> Orya + 2726, 585, // peo -> Xpeo + 2730, 230, // pgd -> Khar + 2734, 110, // pgg -> Deva + 2738, 380, // pgl -> Ogam + 2742, 205, // pgn -> Ital + 2746, 110, // phd -> Deva + 2750, 355, // phk -> Mymr + 2754, 10, // phl -> Arab + 2758, 420, // phn -> Phnx + 2762, 260, // pho -> Laoo + 2766, 10, // phr -> Arab + 2770, 550, // pht -> Thai + 2774, 550, // phu -> Thai + 2778, 10, // phv -> Arab + 2782, 110, // phw -> Deva + 2786, 470, // pi -> Sinh + 2789, 60, // pka -> Brah + 2793, 330, // pkr -> Mlym + 2797, 10, // plk -> Arab + 2801, 355, // pll -> Mymr + 2805, 60, // pmh -> Brah + 2809, 155, // pnt -> Grek + 2813, 105, // pnt_RU -> Cyrl + 2820, 230, // pra -> Khar + 2824, 10, // prc -> Arab + 2828, 10, // prd -> Arab + 2832, 550, // prt -> Thai + 2836, 10, // prx -> Arab + 2840, 10, // ps -> Arab + 2843, 10, // psh -> Arab + 2847, 10, // psi -> Arab + 2851, 10, // pst -> Arab + 2855, 60, // psu -> Brah + 2859, 110, // pum -> Deva + 2863, 355, // pwo -> Mymr + 2867, 110, // pwr -> Deva + 2871, 550, // pww -> Thai + 2875, 355, // pyx -> Mymr + 2879, 10, // qxq -> Arab + 2883, 110, // raa -> Deva + 2887, 110, // rab -> Deva + 2891, 110, // raf -> Deva + 2895, 50, // rah -> Beng + 2899, 110, // raj -> Deva + 2903, 110, // rav -> Deva + 2907, 355, // rbb -> Mymr + 2911, 10, // rdb -> Arab + 2915, 395, // rei -> Orya + 2919, 440, // rhg -> Rohg + 2923, 110, // rji -> Deva + 2927, 110, // rjs -> Deva + 2931, 235, // rka -> Khmr + 2935, 355, // rki -> Mymr + 2939, 50, // rkt -> Beng + 2943, 20, // rmi -> Armn + 2947, 10, // rmt -> Arab + 2951, 355, // rmz -> Mymr + 2955, 105, // rsk -> Cyrl + 2959, 110, // rtw -> Deva + 2963, 105, // ru -> Cyrl + 2966, 105, // rue -> Cyrl + 2970, 105, // rut -> Cyrl + 2974, 110, // rwr -> Deva + 2978, 225, // ryu -> Kana + 2982, 110, // sa -> Deva + 2985, 105, // sah -> Cyrl + 2989, 450, // sam -> Samr + 2993, 385, // sat -> Olck + 2997, 460, // saz -> Saur + 3001, 10, // sbn -> Arab + 3005, 555, // sbu -> Tibt + 3009, 110, // sck -> Deva + 3013, 10, // scl -> Arab + 3017, 110, // scp -> Deva + 3021, 260, // sct -> Laoo + 3025, 505, // scu -> Takr + 3029, 155, // scx -> Grek + 3033, 10, // sd -> Arab + 3036, 110, // sd_IN -> Deva + 3042, 10, // sdb -> Arab + 3046, 10, // sdf -> Arab + 3050, 10, // sdg -> Arab + 3054, 10, // sdh -> Arab + 3058, 50, // sdr -> Beng + 3062, 10, // sds -> Arab + 3066, 105, // sel -> Cyrl + 3070, 425, // sfm -> Plrd + 3074, 105, // sgh -> Cyrl + 3078, 110, // sgj -> Deva + 3082, 10, // sgr -> Arab + 3086, 555, // sgt -> Tibt + 3090, 125, // sgw -> Ethi + 3094, 10, // sgy -> Arab + 3098, 10, // shd -> Arab + 3102, 540, // shi -> Tfng + 3106, 10, // shm -> Arab + 3110, 355, // shn -> Mymr + 3114, 10, // shu -> Arab + 3118, 10, // shv -> Arab + 3122, 470, // si -> Sinh + 3125, 105, // sia -> Cyrl + 3129, 555, // sip -> Tibt + 3133, 10, // siy -> Arab + 3137, 10, // siz -> Arab + 3141, 105, // sjd -> Cyrl + 3145, 110, // sjp -> Deva + 3149, 105, // sjt -> Cyrl + 3153, 550, // skb -> Thai + 3157, 110, // skj -> Deva + 3161, 10, // skr -> Arab + 3165, 595, // smh -> Yiii + 3169, 450, // smp -> Samr + 3173, 235, // smu -> Khmr + 3177, 10, // smy -> Arab + 3181, 530, // soa -> Tavt + 3185, 475, // sog -> Sogd + 3189, 110, // soi -> Deva + 3193, 550, // sou -> Thai + 3197, 555, // spt -> Tibt + 3201, 395, // spv -> Orya + 3205, 10, // sqo -> Arab + 3209, 260, // sqq -> Laoo + 3213, 10, // sqt -> Arab + 3217, 105, // sr -> Cyrl + 3220, 480, // srb -> Sora + 3224, 10, // srh -> Arab + 3228, 110, // srx -> Deva + 3232, 10, // srz -> Arab + 3236, 10, // ssh -> Arab + 3240, 260, // sss -> Laoo + 3244, 10, // sts -> Arab + 3248, 125, // stv -> Ethi + 3252, 105, // sty -> Cyrl + 3256, 490, // suz -> Sunu + 3260, 130, // sva -> Geor + 3264, 10, // swb -> Arab + 3268, 175, // swi -> Hani + 3272, 110, // swv -> Deva + 3276, 445, // sxu -> Runr + 3280, 495, // syc -> Syrc + 3284, 50, // syl -> Beng + 3288, 495, // syn -> Syrc + 3292, 495, // syr -> Syrc + 3296, 110, // syw -> Deva + 3300, 520, // ta -> Taml + 3303, 105, // tab -> Cyrl + 3307, 110, // taj -> Deva + 3311, 500, // tbk -> Tagb + 3315, 555, // tcn -> Tibt + 3319, 355, // tco -> Mymr + 3323, 520, // tcx -> Taml + 3327, 245, // tcy -> Knda + 3331, 540, // tda -> Tfng + 3335, 110, // tdb -> Deva + 3339, 510, // tdd -> Tale + 3343, 110, // tdg -> Deva + 3347, 110, // tdh -> Deva + 3351, 535, // te -> Telu + 3354, 210, // tes -> Java + 3358, 105, // tg -> Cyrl + 3361, 10, // tg_PK -> Arab + 3367, 110, // tge -> Deva + 3371, 555, // tgf -> Tibt + 3375, 550, // th -> Thai + 3378, 110, // the -> Deva + 3382, 110, // thf -> Deva + 3386, 510, // thi -> Tale + 3390, 110, // thl -> Deva + 3394, 550, // thm -> Thai + 3398, 110, // thq -> Deva + 3402, 110, // thr -> Deva + 3406, 110, // ths -> Deva + 3410, 125, // ti -> Ethi + 3413, 125, // tig -> Ethi + 3417, 110, // tij -> Deva + 3421, 105, // tin -> Cyrl + 3425, 355, // tjl -> Mymr + 3429, 10, // tjo -> Arab + 3433, 110, // tkb -> Deva + 3437, 10, // tks -> Arab + 3441, 110, // tkt -> Deva + 3445, 495, // tmr -> Syrc + 3449, 65, // tnv -> Cakm + 3453, 10, // tov -> Arab + 3457, 235, // tpu -> Khmr + 3461, 10, // tra -> Arab + 3465, 190, // trg -> Hebr + 3469, 10, // trm -> Arab + 3473, 10, // trw -> Arab + 3477, 155, // tsd -> Grek + 3481, 555, // tsj -> Tibt + 3485, 105, // tt -> Cyrl + 3488, 260, // tth -> Laoo + 3492, 260, // tto -> Laoo + 3496, 550, // tts -> Thai + 3500, 110, // ttz -> Deva + 3504, 355, // tvn -> Mymr + 3508, 110, // twm -> Deva + 3512, 525, // txg -> Tang + 3516, 565, // txo -> Toto + 3520, 530, // tyr -> Tavt + 3524, 105, // tyv -> Cyrl + 3528, 105, // ude -> Cyrl + 3532, 330, // udg -> Mlym + 3536, 105, // udi -> Cyrl + 3540, 105, // udm -> Cyrl + 3544, 10, // ug -> Arab + 3547, 105, // ug_KZ -> Cyrl + 3553, 105, // ug_MN -> Cyrl + 3559, 570, // uga -> Ugar + 3563, 105, // ugh -> Cyrl + 3567, 550, // ugo -> Thai + 3571, 105, // uk -> Cyrl + 3574, 395, // uki -> Orya + 3578, 105, // ulc -> Cyrl + 3582, 50, // unr -> Beng + 3586, 110, // unr_NP -> Deva + 3593, 50, // unx -> Beng + 3597, 10, // ur -> Arab + 3600, 550, // urk -> Thai + 3604, 10, // ush -> Arab + 3608, 155, // uum -> Grek + 3612, 10, // uz_AF -> Arab + 3618, 105, // uz_CN -> Cyrl + 3624, 10, // uzs -> Arab + 3628, 520, // vaa -> Taml + 3632, 10, // vaf -> Arab + 3636, 110, // vah -> Deva + 3640, 575, // vai -> Vaii + 3644, 110, // vas -> Deva + 3648, 110, // vav -> Deva + 3652, 110, // vay -> Deva + 3656, 10, // vgr -> Arab + 3660, 110, // vjk -> Deva + 3664, 245, // vmd -> Knda + 3668, 10, // vmh -> Arab + 3672, 125, // wal -> Ethi + 3676, 10, // wbk -> Arab + 3680, 535, // wbq -> Telu + 3684, 110, // wbr -> Deva + 3688, 125, // wle -> Ethi + 3692, 10, // wlo -> Arab + 3696, 110, // wme -> Deva + 3700, 10, // wne -> Arab + 3704, 10, // wni -> Arab + 3708, 135, // wsg -> Gong + 3712, 10, // wsv -> Arab + 3716, 110, // wtm -> Deva + 3720, 180, // wuu -> Hans + 3724, 0, // xag -> Aghb + 3728, 105, // xal -> Cyrl + 3732, 125, // xan -> Ethi + 3736, 105, // xas -> Cyrl + 3740, 90, // xco -> Chrs + 3744, 75, // xcr -> Cari + 3748, 105, // xdq -> Cyrl + 3752, 10, // xhe -> Arab + 3756, 235, // xhm -> Khmr + 3760, 395, // xis -> Orya + 3764, 10, // xka -> Arab + 3768, 10, // xkc -> Arab + 3772, 555, // xkf -> Tibt + 3776, 10, // xkj -> Arab + 3780, 10, // xkp -> Arab + 3784, 295, // xlc -> Lyci + 3788, 300, // xld -> Lydi + 3792, 120, // xly -> Elym + 3796, 130, // xmf -> Geor + 3800, 310, // xmn -> Mani + 3804, 325, // xmr -> Merc + 3808, 360, // xna -> Narb + 3812, 110, // xnr -> Deva + 3816, 155, // xpg -> Grek + 3820, 380, // xpi -> Ogam + 3824, 105, // xpm -> Cyrl + 3828, 430, // xpr -> Prti + 3832, 105, // xrm -> Cyrl + 3836, 105, // xrn -> Cyrl + 3840, 455, // xsa -> Sarb + 3844, 110, // xsr -> Deva + 3848, 60, // xtq -> Brah + 3852, 520, // xub -> Taml + 3856, 520, // xuj -> Taml + 3860, 205, // xve -> Ital + 3864, 10, // xvi -> Arab + 3868, 105, // xwo -> Cyrl + 3872, 315, // xzh -> Marc + 3876, 105, // yai -> Cyrl + 3880, 110, // ybh -> Deva + 3884, 110, // ybi -> Deva + 3888, 10, // ydg -> Arab + 3892, 330, // yea -> Mlym + 3896, 155, // yej -> Grek + 3900, 535, // yeu -> Telu + 3904, 425, // ygp -> Plrd + 3908, 190, // yhd -> Hebr + 3912, 190, // yi -> Hebr + 3915, 595, // yig -> Yiii + 3919, 190, // yih -> Hebr + 3923, 595, // yiv -> Yiii + 3927, 105, // ykg -> Cyrl + 3931, 105, // ykh -> Cyrl + 3935, 425, // yna -> Plrd + 3939, 105, // ynk -> Cyrl + 3943, 215, // yoi -> Jpan + 3947, 550, // yoy -> Thai + 3951, 105, // yrk -> Cyrl + 3955, 595, // ysd -> Yiii + 3959, 595, // ysn -> Yiii + 3963, 595, // ysp -> Yiii + 3967, 105, // ysr -> Cyrl + 3971, 425, // ysy -> Plrd + 3975, 190, // yud -> Hebr + 3979, 185, // yue -> Hant + 3983, 180, // yue_CN -> Hans + 3990, 105, // yug -> Cyrl + 3994, 105, // yux -> Cyrl + 3998, 425, // ywq -> Plrd + 4002, 425, // ywu -> Plrd + 4006, 555, // zau -> Tibt + 4010, 10, // zba -> Arab + 4014, 175, // zch -> Hani + 4018, 10, // zdj -> Arab + 4022, 175, // zeh -> Hani + 4026, 540, // zen -> Tfng + 4030, 175, // zgb -> Hani + 4034, 540, // zgh -> Tfng + 4038, 175, // zgm -> Hani + 4042, 175, // zgn -> Hani + 4046, 180, // zh -> Hans + 4049, 185, // zh_AU -> Hant + 4055, 185, // zh_BN -> Hant + 4061, 185, // zh_GB -> Hant + 4067, 185, // zh_GF -> Hant + 4073, 185, // zh_HK -> Hant + 4079, 185, // zh_ID -> Hant + 4085, 185, // zh_MO -> Hant + 4091, 185, // zh_PA -> Hant + 4097, 185, // zh_PF -> Hant + 4103, 185, // zh_PH -> Hant + 4109, 185, // zh_SR -> Hant + 4115, 185, // zh_TH -> Hant + 4121, 185, // zh_TW -> Hant + 4127, 185, // zh_US -> Hant + 4133, 185, // zh_VN -> Hant + 4139, 175, // zhd -> Hani + 4143, 375, // zhx -> Nshu + 4147, 105, // zko -> Cyrl + 4151, 240, // zkt -> Kits + 4155, 105, // zkz -> Cyrl + 4159, 175, // zlj -> Hani + 4163, 175, // zln -> Hani + 4167, 175, // zlq -> Hani + 4171, 175, // zqe -> Hani + 4175, 395, // zrg -> Orya + 4179, 190, // zrp -> Hebr + 4183, 10, // zum -> Arab + 4187, 125, // zwa -> Ethi + 4191, 175, // zyg -> Hani + 4195, 175, // zyn -> Hani + 4199, 175, // zzj -> Hani }; //====================================================================== diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv index f4c47c3b3ae5e111f4298ee57999b3f38a3059ec..424a3b0449364678f5932b281b0afd446750cfc0 100644 GIT binary patch delta 18 Zcmey+#r~m-eS#q delta 18 Zcmey+#r~m-eS#q diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv index bc063323f3551b15ec33e6993920c9f14e560ee2..ac024acd7386be0d770a459f86b341212ae6eb31 100644 GIT binary patch delta 13 UcmdlWx?25bNT delta 18 ZcmZqp!P@YHb%H1p17oB3R&mCc)c`>>25bNT diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv index 5527e31e2cffa994816e025b78c1115b8885e29b..30a18a4d42477f62598437400fd192e1d391af2a 100644 GIT binary patch delta 39 ucmaE`O!2`o#R;NJj0}z9t>TQW;!LgL%&p=qt>Ub$;%u$r>|4b-Jc9x5ZVF!j delta 39 ucmaE`O!2`o#R;NJ42+H9t>TQW;!LgL%&p=qt>Ub$;%u$r>|4b-Jc9x5Z3whws1~z6qjCj0}z9t>TQW;!In`nKkwhws1~z6qjC42+H9t>TQW;!In`nKk=EF%EZX9Q9P3e02k&17ytkO delta 13 UcmZpWY>=EF%EZ99Q9P3e02k#07ytkO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv index dbc737a1baaf4b9b13ac7e4e7bda6f8ef6c8cf8f..5c66e625ca158aac10820e47b55d5b3ee7ca88be 100644 GIT binary patch delta 13 UcmbOrJwbYcC=(;YM)68s02#9bO#lD@ delta 13 UcmbOrJwbYcC=&zYM)68s02#6aO#lD@ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv index 4ead460524577e89ff4401e97410ecdf97733830..7e8b7238e000f5f3f9842cd933b860cc6f335647 100644 GIT binary patch delta 13 Ucmew$_CaidC=(;YM)62)03rhe;Q#;t delta 13 Ucmew$_CaidC=&zYM)62)03red;Q#;t diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv index 68b37d8fbd6f851be3b3ed70e5d341ce7b5fa29a..34b5f8558fdfc58cd8aca4fea42d8dc3d3763ad4 100644 GIT binary patch delta 13 UcmZn=ZxEj#%EZX9Q9P3y02jFf6951J delta 13 UcmZn=ZxEj#%EZ99Q9P3y02jCe6951J diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv index c3ab23f2c1c6972da0277f5b209c7381dedf9be2..6e9bf88dc6f0bd306b6e2c7c0c39b9f20e830e5b 100644 GIT binary patch delta 13 TcmbOrIspio7#TK-S8@RW87u=n delta 13 TcmbOrIspio7#KH-S8@RW87l)m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv index 229b64471e58a6fb79a913fa4552b0d7cc5fbefc..0d9ad4cd0a5fcd4033d98ad6df70398f71adbbef 100644 GIT binary patch delta 13 UcmdlWwLxlvC=(;YMsZ1A02|!{D*ylh delta 13 UcmdlWwLxlvC=&zYMsZ1A02|x`D*ylh diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv index c7548a70b459a3b57a3f66d77b55b027fd6c497f..8fbbada01c744cd031cdc6a98bc13c5cf177c64b 100644 GIT binary patch delta 13 Ucmew${y}_#C=(;YM)8~603#U$V*mgE delta 13 Ucmew${y}_#C=&zYM)8~603#R#V*mgE diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv index d5a67a7ad611ef355a43f8e3944bbb159c520706..bd6294004e241291c2ca5d2f0510919f20bc073a 100644 GIT binary patch delta 13 UcmdlWy+L|{C=(;YM)8@v037oJtpET3 delta 13 UcmdlWy+L|{C=&zYM)8@v037lItpET3 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv index d0fa91b3e4fedc33ce8d4a55e1ce80a9e697b5a7..7b4cb7a7c7c34b12fccfa4d48cd3e156cdddc4dd 100644 GIT binary patch delta 13 UcmcbhctLT3C=(;YM)92j03f;q8~^|S delta 13 UcmcbhctLT3C=&zYM)92j03f*p8~^|S diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv index 26592c2817d8af1f2d59daf71239366cf57b020e..b4d96eded64f893364bc57b9c762d5f9f390d6a8 100644 GIT binary patch delta 13 UcmbOrK0$nfC=(;YM)68+02x^WLjV8( delta 13 UcmbOrK0$nfC=&zYM)68+02x>VLjV8( diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv index aea871480fc1b81bd3dbd2605aaa0b62fba4510d..8f81dfc7d4d750bc325f4c02272e0470608bec82 100644 GIT binary patch delta 13 UcmbOrHbHEHC=(;YM)99q02)FAzyJUM delta 13 UcmbOrHbHEHC=&zYM)99q02)C9zyJUM diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv index bc8420340d45e840782ff8b2fa59610b825c47c8..e99c6ba9a50fec0b767b4ab1ff443e018494c8aa 100644 GIT binary patch delta 13 Ucmca0enEVKC=(;YM)95803X=|0{{R3 delta 13 Ucmca0enEVKC=&zYM)95803X-{0{{R3 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv index c17d2b8d6c1d92aab3072404ff1dc21cd5690a68..c2ab1d2f773459dc0527b7e78cf9a46057eb76aa 100644 GIT binary patch delta 13 Ucmca0enEVKC=(;YM)95803X=|0{{R3 delta 13 Ucmca0enEVKC=&zYM)95803X-{0{{R3 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv index b9acf6b0084691799cfbfc7720610ff13a83e643..c69a691e277dfbb8a7e34c2d5676230367090f38 100644 GIT binary patch delta 13 UcmZ1=w?J-!C=(;YMsZGl02-GA1poj5 delta 13 UcmZ1=w?J-!C=&zYMsZGl02-D91poj5 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv index 69401da429f3f5caee425d58f6362118e2c00d5d..9fa0a083a0d78f033d8628b1dff3bdc553bfada0 100644 GIT binary patch delta 13 UcmX>gaX?~%C=(;YMsZCZ03A>RRsaA1 delta 13 UcmX>gaX?~%C=&zYMsZCZ03A;QRsaA1 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv index 04b60d8f44572686d34b5f70a937284f3b7fbb96..ab5ecd9d9c033b0d32d6814b80b5fd3c4ab486c8 100644 GIT binary patch delta 13 UcmX>gaX?~%C=(;YMsZCZ03A>RRsaA1 delta 13 UcmX>gaX?~%C=&zYMsZCZ03A;QRsaA1 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv index 26a80854233fd15c0010a247223595d064817f5b..36c9aca3e2e0ce5688258a622420cc0aeeb99cb0 100644 GIT binary patch delta 13 UcmZpWZIGQH%EZX9Q9P3m02n|6A^-pY delta 13 UcmZpWZIGQH%EZ99Q9P3m02n_5A^-pY diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv index 335d3763513de22d367f57253f59a324d621394a..f5812b9dcdcca9c992a291013761bf4ec31c4b47 100644 GIT binary patch delta 13 UcmZ1=wm@uxC=(;YMsZGV02$)~@c;k- delta 13 UcmZ1=wm@uxC=&zYMsZGV02$%}@c;k- diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv index e0630dd75cc6cf14e7d3d30cc7b8ef3f56cb52af..603052897965b0e11cce93afc252743fbd390790 100644 GIT binary patch delta 13 UcmaDL`apDoC=(;YM)8we03l2SE&u=k delta 13 UcmaDL`apDoC=&zYM)8we03k~RE&u=k diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv index e7a1b5085a8d08754ba89dcc2bef77b4a89cbaa6..332668ab5d60a87a715416606874f498b38c2d04 100644 GIT binary patch delta 13 UcmaDL_CRccC=(;YMsZJW03c%nu>b%7 delta 13 UcmaDL_CRccC=&zYMsZJW03c!mu>b%7 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv index f86e0f1e177a9018bc7cf4903bbee412a2039568..7cbde7556b46a958ab3fef4ab1616ba1359d3043 100644 GIT binary patch delta 13 UcmdlWxVLjV8( diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv index c858e6583d2497655aaef6d6d74cb24727df20cc..67d8cf53881da90945fc546a58b1b9097a3496ef 100644 GIT binary patch delta 13 Ucmew$_CaidC=(;YM)62)03rhe;Q#;t delta 13 Ucmew$_CaidC=&zYM)62)03red;Q#;t diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv index a7eeccb3ee6755f644b536f7935daabd430dd036..01e833ed11f4523af170985d6d78c26f93428a66 100644 GIT binary patch delta 13 UcmdlWzCnC~C=(;YM)8^4034YEqW}N^ delta 13 UcmdlWzCnC~C=&zYM)8^4034VDqW}N^ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv index 57378dc6cffd7368f9cdd17c2344b66210fe4cae..698afcc99fdae28480a6df5b42ab7ec4a66df7e3 100644 GIT binary patch delta 13 UcmdlWwn1!yC=(;YMsZ1Q02_k?ApigX delta 13 UcmdlWwn1!yC=&zYMsZ1Q02_h>ApigX diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv index 97ede9f05cfc521a80a1e880ab0ea75bb9696e06..38d116743c850e8bfec06825910ed72aae112582 100644 GIT binary patch delta 13 Ucmew${y}_#C=(;YM)8~603#U$V*mgE delta 13 Ucmew${y}_#C=&zYM)8~603#R#V*mgE diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv index 27ba704c4b4f2d94ea978de8ada4b30b7979909c..5f77196fce85f2fa4c23c59f3ba646cdceec0400 100644 GIT binary patch delta 13 UcmdlWwn1!yC=(;YMsZ1Q02_k?ApigX delta 13 UcmdlWwn1!yC=&zYMsZ1Q02_h>ApigX diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv index 08822e2a819a85089e73b365e8ed26dadd48e4d0..943fd7440d06d00e52da77734ab85bc2791294f6 100644 GIT binary patch delta 13 UcmZn=ZxEj#%EZX9Q9P3y02jFf6951J delta 13 UcmZn=ZxEj#%EZ99Q9P3y02jCe6951J diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv index 70abf9c982bcd4187d0b7153a7d6cd9886e775ea..8d6f5c2546fa9dc84a5342e3054da91c6b7c0c4f 100644 GIT binary patch delta 13 UcmaDL@jzmNC=(;YMsZIb03eV9wg3PC delta 13 UcmaDL@jzmNC=&zYMsZIb03eS8wg3PC diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv index f96d6edfe1e8a3fa95bf59c445608562ec9bcaf2..2f2da14b28f810ecc7e5a4178c7a863ab121bf25 100644 GIT binary patch delta 13 UcmbOrGeKs8C=(;YM)9A#02;{y&j0`b delta 13 UcmbOrGeKs8C=&zYM)9A#02;^x&j0`b diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv index d0dcf09af39ffd3db6ba2dea5bbd8c2414f6e974..e55267d75b2f0da56cc62c99da7060c606c16475 100644 GIT binary patch delta 13 UcmZpWY>=EF%EZX9Q9P3e02k&17ytkO delta 13 UcmZpWY>=EF%EZ99Q9P3e02k#07ytkO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv index 3635418f75a7665b3443e5e0f25018c8cc7be1f6..b4ccd3b62163ae074e0fe63d0caf79b44a1fe5e7 100644 GIT binary patch delta 13 UcmaDL@jzmNC=(;YMsZIb03eV9wg3PC delta 13 UcmaDL@jzmNC=&zYMsZIb03eS8wg3PC diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv index 8c3506f2d12c4d5bc4f6bd0a46d38fe77bb6bb57..ffc7c098b4dcd50add8d922b99d1e1b030c4510d 100644 GIT binary patch delta 13 UcmdlWxj}M*C=(;YM)8?E035~xr~m)} delta 13 UcmdlWxj}M*C=&zYM)8?E035{wr~m)} diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv index 4a85d1f94278221d6d74fb0eb1f21728e59b26cb..d98efbf9362934007542f5f636af8f2fed0ebe18 100644 GIT binary patch delta 13 Ucmew${y}_#C=(;YM)8~603#U$V*mgE delta 13 Ucmew${y}_#C=&zYM)8~603#R#V*mgE diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv index 4be20ccb288e6cd1c574e106c9e07e81d389f6aa..c8ade9b264221fdd6c7df30226a0205e28accb13 100644 GIT binary patch delta 13 UcmX>gc|dZ4C=(;YM)8$A03K!o*Z=?k delta 13 UcmX>gc|dZ4C=&zYM)8$A03Kxn*Z=?k diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv index 379ee3b71774f128633247116e954b8a0757f1e5..09ca769ef81e65eec311642d4d29a74cadcf4405 100644 GIT binary patch delta 13 UcmZ1=xj=G)C=(;YM)6J_02?L)cmMzZ delta 13 UcmZ1=xj=G)C=&zYM)6J_02?I(cmMzZ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv index 1c4be38155c0f730cdd6f9aed0071cb03f064de2..590060503f16f43bdb4f51386d4109529c90eb1e 100644 GIT binary patch delta 13 UcmeyM@IhgMC=(;YM)61i03zfA`Tzg` delta 13 UcmeyM@IhgMC=&zYM)61i03zc9`Tzg` diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv index fb9efa19b3a4330a0b5a46707ec5f655ca2a4b60..b48f7125a94e78c98e56391d274405b185e97ed4 100644 GIT binary patch delta 13 Ucmew${y}_#C=(;YM)8~603#U$V*mgE delta 13 Ucmew${y}_#C=&zYM)8~603#R#V*mgE diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv index b331cf0cb021ad8acb97ec4e77e3f0ab1b2e1dbc..b0a9ffcb6386fff37f0b10d40e329f3ce93ec543 100644 GIT binary patch delta 13 Ucmca0bwO%^C=(;YMsZ7C03RI#ivR!s delta 13 Ucmca0bwO%^C=&zYMsZ7C03RF!ivR!s diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv index 1e3880038a618f88579097e5d6ae838116149278..8135e74021a35ae4f82afcd13ed0998d6a18afac 100644 GIT binary patch delta 13 UcmdlWzCnC~C=(;YM)8^4034YEqW}N^ delta 13 UcmdlWzCnC~C=&zYM)8^4034VDqW}N^ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv index a0c3fc92c1ebe218b409502af622b676a6e943d0..f8b01d88ccf0f1924d96a0fb47c933d0b5d5702f 100644 GIT binary patch delta 13 UcmdlWwLxlvC=(;YMsZ1A02|!{D*ylh delta 13 UcmdlWwLxlvC=&zYMsZ1A02|x`D*ylh diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv index cbcac05ee391bd07f05d4f253e3692878bf0de68..a12003a8fb10028787340f547f646dd29c0a8185 100644 GIT binary patch delta 13 UcmbOrHbHEHC=(;YM)99q02)FAzyJUM delta 13 UcmbOrHbHEHC=&zYM)99q02)C9zyJUM diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv index 4351818b7ee553f61f32dcd31b711c213b4da0f6..a75798f29b3c2a5a6f2dfef4e0748e394e713556 100644 GIT binary patch delta 21 ccmdlmjbpTPZ#hE0z0ZKOoYybcN delta 21 ccmdlmjbpTPZ#hE0z0ZKLnYybcN diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv index a53f8f6b82fcb20c49a462367c75733311ef612f..c338736e8ab20ddd1b0c1ec2f811af5c6d372c41 100644 GIT binary patch delta 21 dcmccclHTPZ#hG@R003Nn2O9tY delta 21 dcmccclHTPZ#hG@R003Nm2O9tY diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv index dadfee065402abf5da2640fd6d3d4cae8c8015ca..ff7c43c8f476af472123dcf779aa4f02f933f837 100644 GIT binary patch delta 18 acmcbxp8djl_6ed)j0}z9Tg4f7UIzd|TPZ#hETPZ#hEW&1Gj0`Us$2~KP+|tM delta 21 bcmbPmoofORi83)THj1~3Gj0`Us$2~KP+wlk31tt_h+{j0}z9t>TPZ#hF(2002(?2B!c3 delta 21 dcmX>wlk31tt_h+{42+H9t>TPZ#hF(2002(>2B!c3 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv index bf6772a6af1ad509de17595288de6d10b267ee8e..09281dd94040f1af2cadcf51aa03fad5f8a8dce0 100644 GIT binary patch delta 13 UcmZ3Wus~sgC=(;YMsZF702;&t3IG5A delta 13 UcmZ3Wus~sgC=&zYMsZF702;#s3IG5A diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv index 11729a313aba0b352584d2b162ef2e26972f8f6d..af37e7e8b0eebc84491af66bcf5c429133ab7fff 100644 GIT binary patch delta 13 UcmaDL`9N}lC=(;YM)8w803oIXH~;_u delta 13 UcmaDL`9N}lC=&zYM)8w803oFWH~;_u diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv index a76b9e1593ccb464c0bc9c8a59cf4b609b6451f1..3fe84bbd79bf12ba19e7ccdc387c72e48f657aa4 100644 GIT binary patch delta 13 UcmaDL`9N}lC=(;YM)8w803oIXH~;_u delta 13 UcmaDL`9N}lC=&zYM)8w803oFWH~;_u diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv index 13bcb30eae4006b0588c21ac9b5a482c37c1c575..10adeb02bebd99c3b28900b88c05581013389878 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv index d073d9395ef30e8e3b7ce53cc041528830f3db99..f096bd1efa2055bc094d89ad6325b518712e3b22 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv index ce1db690e82f063720182ea992475538a7c7ddd4..672db8cf94c2d8cb3849e9ccfe2c8549bd96740b 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv index 4196cee3c0e1a13e65c04cd0b1315df236327f38..3121458e0dac387ee2944010e559d1973b88eb05 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv index 93e009254c83fbe4940fdeed163fc6f53db55bb3..f2b8878ed68035c26c1a261483194a2c46a44533 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv index 915235ab6b9f824d2e067715fd79bd52408eb70b..751098e553a4cbd9432867076f7f4e3bf68710cc 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv index 07a0624fc1569bc50db4182d0884888f580a8510..ff6ec79026dad80bed472119d403e6ed4e8e012b 100644 GIT binary patch delta 13 Ucmew$@|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv index a1d44a08b14dc5eea7bd86fae5124327ea4aabfd..081a293c0e6644546e0b3851f290b27c455b06ef 100644 GIT binary patch delta 13 UcmeyM@j+vPC=(;YM)61y03({ delta 18 ZcmZ3`!M31-ZGtEh17oB3R&hqo763LX1or>{ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv index 767c817d8ccafe6b92d7c53b3f32a7dca753030d..3af93f46e63624892d7ac48223aa51708262d838 100644 GIT binary patch delta 18 Zcmcc6$9AEQZGtEhBSWM3R&hqlb^twi1(pB+ delta 18 Zcmcc6$9AEQZGtEh17oB3R&hqlb^twh1(pB+ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv index 8d0ea24fbec5b5285c995a7927780e5132cb1edd..5fa43db5f602acaf87d238d3cd65d11e16041773 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv index 227973775d7f191983a1b51fffc6281078241695..16e80464b45841e9b7214a8aec43a790a2e0372f 100644 GIT binary patch delta 13 UcmX>gc|dZ4C=(;YM)8$A03K!o*Z=?k delta 13 UcmX>gc|dZ4C=&zYM)8$A03Kxn*Z=?k diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv index ef8aae263b2011903950d359a659a08c33522820..5213e5a861ec9f83d10b5403c452e11e8b9630cc 100644 GIT binary patch delta 13 UcmaDL_CRccC=(;YMsZJW03c%nu>b%7 delta 13 UcmaDL_CRccC=&zYMsZJW03c!mu>b%7 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv index a4cd190288d986c250a66bff8830f6ea3c0ebeb9..4e08e3f354b99608080a4df3a600aecb3a84a14d 100644 GIT binary patch delta 13 Ucmew$_d#xgC=(;YM)62~03x>o^#A|> delta 13 Ucmew$_d#xgC=&zYM)62~03x;n^#A|> diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv index 1ac81424fceba2a9336ca5fca1ed28106c235356..37b805a49e27565cddfd2a09f2e52df0450b6400 100644 GIT binary patch delta 13 UcmaDL^+0NZC=(;YMsZJG03f{sy8r+H delta 13 UcmaDL^+0NZC=&zYMsZJG03f^ry8r+H diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv index c475367440c6afebd3d639c635988b037f3d438c..8608c3356b561ecd5aff264769b8c20995ba66b1 100644 GIT binary patch delta 13 UcmX>gdO&o7C=(;YM)8$g03Hkj&Hw-a delta 13 UcmX>gdO&o7C=&zYM)8$g03Hhi&Hw-a diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv index ee19acbd92a62037ba8d5dde531308dec15ca241..c100de238730185ff42506d949f32ff473c2dde0 100644 GIT binary patch delta 13 UcmZ1=wm@uxC=(;YMsZGV02$)~@c;k- delta 13 UcmZ1=wm@uxC=&zYMsZGV02$%}@c;k- diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv index 67a6b8f7115dac5c5e22b430d857fb48f9f39fcf..0e7c3879b74ddbe66d7d7d079a462d31dd4d5366 100644 GIT binary patch delta 13 UcmZ1=wm@uxC=(;YMsZGV02$)~@c;k- delta 13 UcmZ1=wm@uxC=&zYMsZGV02$%}@c;k- diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv index 1991b3ff368959192d8f0c1ae4ad9b99b4dd2a99..01816aed32467dc4cfda94f2dcd67067f71a37ef 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv index 26a2cc751b252721b769c6628a000051309bd482..0899909a0e0435422e0cf3e36397e5e7bda4f0e5 100644 GIT binary patch delta 13 Ucmew$_CaidC=(;YM)62)03rhe;Q#;t delta 13 Ucmew$_CaidC=&zYM)62)03red;Q#;t diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv index 1864f0808b9cb7392aa0ba799618248ab1de9e9b..8ca5e3c5c03522d005f22920a896f6221d4756af 100644 GIT binary patch delta 13 TcmbOrIspio7#TK-S8@RW87u=n delta 13 TcmbOrIspio7#KH-S8@RW87l)m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv index 33fb87850d605ccb767a69759c0ade45952fdd95..8b754282e1d48fc46620a3bb80f819ccd9d625d2 100644 GIT binary patch delta 13 UcmZpWY>=EF%EZX9Q9P3e02k&17ytkO delta 13 UcmZpWY>=EF%EZ99Q9P3e02k#07ytkO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv index 19d35c0f2b2f1e2303ced8c7a4d70ca36d1910e1..790de2aa33d5a86111b14044f7243eb5ff68e95d 100644 GIT binary patch delta 13 UcmZpWY>=EF%EZX9Q9P3e02k&17ytkO delta 13 UcmZpWY>=EF%EZ99Q9P3e02k#07ytkO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv index 9064c38597edd41c576f17d95bdc16482174f977..ecfc14bdc83d9d0ec6de50d00a927e7b91898be5 100644 GIT binary patch delta 13 UcmZpWY>=EF%EZX9Q9P3e02k&17ytkO delta 13 UcmZpWY>=EF%EZ99Q9P3e02k#07ytkO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv index 96f893221c833ed4223b19606a5de0f900e71bae..ff8c2fcdd2047a5924587954451101689bfaab83 100644 GIT binary patch delta 13 UcmZpWXpop7%EZX9QT!!002t2$l>h($ delta 13 UcmZpWXpop7%EZ99QT!!002s~#l>h($ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv index 1b34ca16294888309f930c17d4161ae922ebfac5..87f820c2e2fda556af2360494a0f5fb76c1276ba 100644 GIT binary patch delta 13 Ucmca0c|mf5C=(;YM)93I03Zeg2mk;8 delta 13 Ucmca0c|mf5C=&zYM)93I03Zbf2mk;8 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv index 8c03344c8bd4924cfd72431c83ec9336993efb38..a6b6b27540978c1b76555ba834ab3a5e1fffe919 100644 GIT binary patch delta 13 UcmZ1=xj=G)C=(;YM)6J_02?L)cmMzZ delta 13 UcmZ1=xj=G)C=&zYM)6J_02?I(cmMzZ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv index 012d0e8bd339a1cec78ee64171ffc966f3e66614..87683cd6c8240ea26e519e6d8ea64007ffa0f83b 100644 GIT binary patch delta 13 UcmZorY*3sa%EZX9Q9M%s02rDBEC2ui delta 13 UcmZorY*3sa%EZ99Q9M%s02rAAEC2ui diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv index 5b492d15a5b32b45bb4c02c1b9267a12d3721086..3b285ce485f4407975e853f1bd25ecdd56a8f834 100644 GIT binary patch delta 13 UcmbOrF+pO2C=(;YM)9BA02*%t#Q*>R delta 13 UcmbOrF+pO2C=&zYM)9BA02*!s#Q*>R diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv index 353092e322ae3f3694fcd93ad2e6c76644d03270..8ee6efc9a6b47a1e4e8b340331c2d66616d370df 100644 GIT binary patch delta 13 Ucmca0bwO%^C=(;YMsZ7C03RI#ivR!s delta 13 Ucmca0bwO%^C=&zYMsZ7C03RF!ivR!s diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv index e4d6f7b47c71497e338461c18da6b7fe74e616fc..28020db54f8d8af2277bc3537ea372c1fab075f6 100644 GIT binary patch delta 21 ccmZ25g=4`KjtQbnj0}z9t>TPZ#hEy{07qN}Hvj+t delta 21 ccmZ25g=4`KjtQbn42+H9t>TPZ#hEy{07qK|Hvj+t diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv index 88cdbc78a82911fa74daa60ca9ea4a06f39dd384..218068ca19c1efb29f905b48e12cb88ae053f939 100644 GIT binary patch delta 18 acmX@Go8`c6mI;M1& delta 13 UcmZ1=vOr{lC=&zYMsZFq02#Fc>;M1& diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv index 223b95c34abecd1460f037dad1692c9f0c5573a5..7666743ab541cf6193bb1e47ca73825809c6587c 100644 GIT binary patch delta 13 UcmbOrHbHEHC=(;YM)99q02)FAzyJUM delta 13 UcmbOrHbHEHC=&zYM)99q02)C9zyJUM diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv index 8f70ea407048fc891444c072de7382d20ff82640..4459174e5f3cea90dd5a1a71a72904f238f8af3f 100644 GIT binary patch delta 13 UcmaDL`apDoC=(;YM)8we03l2SE&u=k delta 13 UcmaDL`apDoC=&zYM)8we03k~RE&u=k diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv index edcb569df72694d20d4270053ac3bfe218d82591..7dcd65a77d4eb10a282b451310a7f51cadfe9d4d 100644 GIT binary patch delta 13 TcmbOrIspio7#TK-S8@RW87u=n delta 13 TcmbOrIspio7#KH-S8@RW87l)m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv index 7751b1dc91e28404cc2bd87fb3fb0d88bf951ad6..fd7461c6ae9219eab16606962b05de8b2f9ef7f7 100644 GIT binary patch delta 13 UcmdlWvq5HpC=(;YMsZ0#02~SfFaQ7m delta 13 UcmdlWvq5HpC=&zYMsZ0#02~PeFaQ7m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv index ca4532a9837afc60db21797b348758c6b91b60f5..5b682b1054998cbcf4256b9817fca53887ca514a 100644 GIT binary patch delta 13 UcmdlWvq5HpC=(;YMsZ0#02~SfFaQ7m delta 13 UcmdlWvq5HpC=&zYMsZ0#02~PeFaQ7m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv index 72b833562004627f723f57463c42b98b650bf746..5992c0c2192472e1cd818695f73077c0b623d2af 100644 GIT binary patch delta 13 UcmdlWyFqq>C=(;YM)8?^039F$vH$=8 delta 13 UcmdlWyFqq>C=&zYM)8?^039C#vH$=8 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv index 5bbaf750e568df3b4beac0364c3561b6e624b203..c8aa336faf98f0462ca3f812eee322bf6854a7ae 100644 GIT binary patch delta 13 Ucmca0b3tZ;C=(;YMsZ6%03S*NkN^Mx delta 13 Ucmca0b3tZ;C=&zYMsZ6%03S&MkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv index 85f41b2ef24f70bd9a374be624d834b2a3b9115e..7475193e9b4ccce1465a1d0ca5b7f6b1a184ee39 100644 GIT binary patch delta 13 UcmZpWX^@#9%EZX9QT!z@02wI*p8x;= delta 13 UcmZpWX^@#9%EZ99QT!z@02wF)p8x;= diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv index 57e9aa4132fe7136233f8e3563537fb542070289..f25297cf925cc99c5d49895454b7877737ab52e0 100644 GIT binary patch delta 13 UcmZ1=vp{BoC=(;YMsZF)02*oo00000 delta 13 UcmZ1=vp{BoC=&zYMsZF)02*ln00000 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv index 8c50f64845fd125e6193dc06d56f11899c43386b..ef1384cd8ab1b8247712730346799643a82f3b89 100644 GIT binary patch delta 13 Ucmew${Xu$yC=(;YM)8}x03&k*Z2$lO delta 13 Ucmew${Xu$yC=&zYM)8}x03&h)Z2$lO diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv index 21cc8d77251f455ad6d5d3191dc2b0ffcb6fbf7e..8c0e9ad815b8ef681cd61edf378e457da7f9a759 100644 GIT binary patch delta 13 Ucmew$`$2YsC=(;YM)8|`03)CTasU7T delta 13 Ucmew$`$2YsC=&zYM)8|`03)9SasU7T diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv index d1943e77aa24ae0a9ed05a634c98b6a46d2cf3bf..ecc1e276ffe3d49ead729bd5826571672d22fc73 100644 GIT binary patch delta 13 Ucmew$_d#xgC=(;YM)62~03x>o^#A|> delta 13 Ucmew$_d#xgC=&zYM)62~03x;n^#A|> diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv index e7e1092cf23acf91c1ed21d152cf47c437b1fd56..21914f8417ac9edbda65247f282fa8cb0f6ed2be 100644 GIT binary patch delta 13 UcmX@0a6n;#C=(;YMsZC603HMbY5)KL delta 13 UcmX@0a6n;#C=&zYMsZC603HJaY5)KL diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv index 02a65f1f9aea98da97506a8a2b7e811f8768934d..864c238c7ec507201a06ef8a61b492569a527cc9 100644 GIT binary patch delta 13 UcmaDL_dsrfC=(;YMsZJm03jCx#Q*>R delta 13 UcmaDL_dsrfC=&zYMsZJm03j9w#Q*>R diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv index 66ec4b1e7b2e79dcb7d7b0615bc15a53eccb7e7b..e51a9089d10c0bbd7fa49e63cd10fef1bc14cd52 100644 GIT binary patch delta 13 UcmaE$@IYaLC=(;YMsZI803k#J$^ZZW delta 13 UcmaE$@IYaLC=&zYMsZI803kyI$^ZZW diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv index 1b2eea2826991213c6b8c2971a92bbd5bd339a3f..5dd4a1e2f99f229fd3d58f07756aed3a2cb66727 100644 GIT binary patch delta 13 Ucmew$_d#xgC=(;YM)62~03x>o^#A|> delta 13 Ucmew$_d#xgC=&zYM)62~03x;n^#A|> diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv index f2a46e513cab37eca75e37c20b49ba4046d30fc1..dd100e4dcb7555ca071409ef83f1d76fbf7a8ace 100644 GIT binary patch delta 13 Ucmca0b3tZ;C=(;YMsZ6%03S*NkN^Mx delta 13 Ucmca0b3tZ;C=&zYMsZ6%03S&MkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv index 765fc2b95cdbdf05a78da4787b7676096b9260cc..b2572f902f08434ba7dc1dbece68d38fc9dd7462 100644 GIT binary patch delta 13 UcmZorXi%6S%EZX9QT!!802zY=sQ>@~ delta 13 UcmZorXi%6S%EZ99QT!!802zV@~ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv index fdb7f2bc866203e43015333b70ce5ed553f5f773..fb6a6ef65c2f5380ed021acae526687d67fa4fe9 100644 GIT binary patch delta 13 Ucmdm>xIuA(C=(;YM)8>f03CV*yZ`_I delta 13 Ucmdm>xIuA(C=&zYM)8>f03CS)yZ`_I diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv index 98f4e1b0cb79ee789489a7eca90f5d4f01be53ae..40bbc5afc3eb9219b5255528aeee80fa027782ab 100644 GIT binary patch delta 13 Ucmca0eL;GHC=(;YM)94z03b624FCWD delta 13 Ucmca0eL;GHC=&zYM)94z03b314FCWD diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv index 691bde170cf6a65b4d6bd4118807c96d5854ae8d..f83b7d30ca0a1f609919201e1d08b877dae5ddaf 100644 GIT binary patch delta 13 UcmdlWzCnC~C=(;YM)8^4034YEqW}N^ delta 13 UcmdlWzCnC~C=&zYM)8^4034VDqW}N^ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv index d848a34ea34c32f7513b1ceabc2cca178de1b1b4..f61f49c1f5bf8bdf194387c293bc9e14ae317f6a 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv index cc2f525e06f4967871990af04351b07668729160..56435eeff424e89358f0c3085da2e3bcd2701855 100644 GIT binary patch delta 13 UcmaDL`apDoC=(;YM)8we03l2SE&u=k delta 13 UcmaDL`apDoC=&zYM)8we03k~RE&u=k diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv index 5acd42941b62eab82ab80bca2466cc7bff259ac3..2f69cbc6f1e431830d16d68d6a1060db553ac85f 100644 GIT binary patch delta 13 UcmbOrHbHEHC=(;YM)99q02)FAzyJUM delta 13 UcmbOrHbHEHC=&zYM)99q02)C9zyJUM diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv index 5451f07f58bed58be199fad8b680689fbd10430b..ff516633b60854bb4597390206dabf5fd6a04e6f 100644 GIT binary patch delta 13 UcmdlWy+L|{C=(;YM)8@v037oJtpET3 delta 13 UcmdlWy+L|{C=&zYM)8@v037lItpET3 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv index 83bc1e2cd6564bb9d35ef3d5d572f26cdd7971cd..aeefe0c046b6c7394a8e35f318e41f115624779f 100644 GIT binary patch delta 13 UcmZ1=zCe6}C=(;YM)6K=02=uNa{vGU delta 13 UcmZ1=zCe6}C=&zYM)6K=02=rMa{vGU diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv index d649de43f3ac6276a3a9a65536dfff777c3d05e5..5f7c266f1a9b6d3cd6dfca94d0861f5ac7e7a68f 100644 GIT binary patch delta 13 Ucmew$^Fd~UC=(;YM)62K03wP5@Bjb+ delta 13 Ucmew$^Fd~UC=&zYM)62K03wM4@Bjb+ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv index 363fbf3e6376e95d437cfbd72fe2ed0a6e3e44e9..0a73d0a0a17466a14c09962c77bc8219e41711b9 100644 GIT binary patch delta 13 UcmZ1=vp{BoC=(;YMsZF)02*oo00000 delta 13 UcmZ1=vp{BoC=&zYMsZF)02*ln00000 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv index 50b742dea135205c9ad170010558cd559146abe7..a44c8d6e91375b166e4301349544f426386d8bfd 100644 GIT binary patch delta 13 UcmbOrK0$nfC=(;YM)68+02x^WLjV8( delta 13 UcmbOrK0$nfC=&zYM)68+02x>VLjV8( diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv index 2dc215a46c05486e39b17c22ed36d17bb6428880..65150ee04be7ffcd7dfa145a68f72011e982d82e 100644 GIT binary patch delta 13 UcmZ1=yFhk=C=(;YM)6KQ02_bb%7 delta 13 UcmaDL_CRccC=&zYMsZJW03c!mu>b%7 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv index afbe07cc5234f780ff5c606f846b24926ef7347c..c34e1090de21dbddfd66316ec40b6bb045c4f4bc 100644 GIT binary patch delta 13 UcmbOrJwbYcC=(;YM)68s02#9bO#lD@ delta 13 UcmbOrJwbYcC=&zYM)68s02#6aO#lD@ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv index d82b4fda40429aa52ea70926f9040e2604d6c685..0fa2d890fca0df56efaf68979afdaa6f1ac8e7bb 100644 GIT binary patch delta 13 UcmaDL_CRccC=(;YMsZJW03c%nu>b%7 delta 13 UcmaDL_CRccC=&zYMsZJW03c!mu>b%7 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv index 6333bf9a5e1d8e98d840afcaf25e9f2b754e78ec..84a9025fffe64e96374f8f477138e1b666ecf37a 100644 GIT binary patch delta 13 UcmbOrK0$nfC=(;YM)68+02x^WLjV8( delta 13 UcmbOrK0$nfC=&zYM)68+02x>VLjV8( diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv index 0d4cbb3beccc9553219e867019f943f86456967f..cf5025c7a3fd48a17a455d252a1a7802993ebe1e 100644 GIT binary patch delta 13 UcmZpWX^@#9%EZX9QT!z@02wI*p8x;= delta 13 UcmZpWX^@#9%EZ99QT!z@02wF)p8x;= diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv index 952a892d2a04dcac2c82ad401a7901108ec763ec..48b78178aeadebcf00116129fd3982bb6747e1bf 100644 GIT binary patch delta 13 UcmZn=YY>|t%EZX9QT!zr02rbJkN^Mx delta 13 UcmZn=YY>|t%EZ99QT!zr02rYIkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv index 9b10315011df2fcd20f47a1ab407f6ebf1d5d7fd..a93193e076818ea1c4f9ea7353bab28eb4080b0a 100644 GIT binary patch delta 18 Zcmcc6&32)iZGtEhBSWM3R&mCitpGk51`YrK delta 18 Zcmcc6&32)iZGtEh17oB3R&mCitpGk41`YrK diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv index 64089b41f63ea2d0fd7e2348b8741dd4103d4d13..996f9b6e4b5de0996d98ab8c6d347170574474f5 100644 GIT binary patch delta 21 bcmbPmgJS{^i83)VG>W&1Gj0`U`l$^7P{9VU delta 21 bcmbPmgJS{^i83)THj1~3Gj0`U`l$^7P{0PT diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv index 674b0d550e6aa8dedaa37626694ebd80d79331dc..5229a4b65466ddeb9458ebc9acccb36050abffa0 100644 GIT binary patch delta 18 ZcmaDbf%U-z)(N6aj0}z9Tg4eYJpez71&IIv delta 18 ZcmaDbf%U-z)(N6a42+H9Tg4eYJpez61&IIv diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv index 7ee50622a9675c368e1f6f92554c479a71c146b0..e42fd9c5d594cc0504e19bea8d7aa771916a4ec7 100644 GIT binary patch delta 13 UcmZqRYT%k6%EZX9QT!zf02h=4asU7T delta 13 UcmZqRYT%k6%EZ99QT!zf02h-3asU7T diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv index 519f0cd560d7e2d4eb80fd0c6318642c3ad72571..469dfeaa51e9aa4848d7d9876318c1ff75ee97cc 100644 GIT binary patch delta 13 UcmZ3Ww?J=#C=(;YMsZGY02}`UEdT%j delta 13 UcmZ3Ww?J=#C=&zYMsZGY02}@TEdT%j diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv index 8803fdfa2c60974fcc5bbbacdb1c258e17e43a62..7dc2dfe1e22c8c4abff36b5cfc5caf0e17ff6a38 100644 GIT binary patch delta 13 Ucmexh`@wdCC=(;YM)8|+048t*!T02zh@NB{r; delta 13 UcmbOrIYDxQC=&zYM)67>02ze?NB{r; diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv index 37003d386cb870f4660e0329df7c82e2ed701640..00431f63f6242cec56f9a632837de70799ed04d6 100644 GIT binary patch delta 13 UcmZ1=us~pfC=(;YMsZFK02y2Y;s5{u delta 13 UcmZ1=us~pfC=&zYMsZFK02x~X;s5{u diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv index 0f9af8891f6e7607c9850238475e48797d07f55e..26a97093d17a37536d47eb5ae6cc2891df833ce2 100644 GIT binary patch delta 18 acmX@`i~Yba_6ed)j0}z9Tg4eQ{{jF=?*_I2 delta 18 acmX@`i~Yba_6ed)42+H9Tg4eQ{{jF=?gq91 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv index fad9d63b981232a59ffb4d433f6008d2fca9f77f..ca7a06e6d477acb15d246a56dfa18db13ec6d3f8 100644 GIT binary patch delta 13 Ucmdl`vY}*xC=(;YMsZ0i03*f(3;+NC delta 13 Ucmdl`vY}*xC=&zYMsZ0i03*c&3;+NC diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv index 463d0ba8d6d74b98e7ea0efb8f2c0eb7e6c0cc21..73d4cd70f0aa7e7dc10d3ca2e5a9fb961b1bd48a 100644 GIT binary patch delta 18 ZcmZ25gKfbKwh5w4j0}z9Tg4eUdjL2i1s?za delta 18 ZcmZ25gKfbKwh5w442+H9Tg4eUdjL2h1s?za diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv index 815d8046314b7e3f612b312cd48ab74891593442..8935c7e8bb66643963491ae2e9f2af773c5f99a6 100644 GIT binary patch delta 21 ccmew`jq}4a&IzJSj0}z9t>TPZ#hD_#0aV%sZU6uP delta 21 ccmew`jq}4a&IzJS42+H9t>TPZ#hD_#0aV!rZU6uP diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv index 33d6a3f5055f9dad6d960daa1d4106e7daeec0ea..85b401900bd417153a4f25fcfe0475aa91c8e186 100644 GIT binary patch delta 18 acmdn6m~F#iwh5w4j0}z9Tg4e?P6Plvtp(}; delta 18 acmdn6m~F#iwh5w442+H9Tg4e?P6PlvtOe=- diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv index 73c04f147556df79f396239413603ba7625cd2eb..668ac26cd5c0d75169720496f74813e2c15706ca 100644 GIT binary patch delta 13 UcmX@Wb%1MvC=(;YMsZD602~zqGXMYp delta 13 UcmX@Wb%1MvC=&zYMsZD602~wpGXMYp diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv index 9aefaf6607badce495a9389f2854f580728b0838..26af0d69fbf45f9474b3e7be3796d7b3152101cc 100644 GIT binary patch delta 18 acmX@GmhHe=wh5w4j0}z9Tg4eyP6Gfy7zQ%{ delta 18 acmX@GmhHe=wh5w442+H9Tg4eyP6Gfy7X~u` diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv index 11e634e2d4d266b1006a2ae3f2d7c2ba98f52911..e7dfb3c0c74bfcf2ebb8fa9bea86b0b5c816dda4 100644 GIT binary patch delta 18 acmdn6mSw|QmI~b%H1pBSWM3R&mCYZU8_l1_1y7 delta 18 ZcmaFR%le>~b%H1p17oB3R&mCYZU8_k1_1y7 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv index d930e94d87e684847cb62dd3c0d4bd28d823be85..0b4931467097ca3177f226718c100ba0ca9c63c3 100644 GIT binary patch delta 18 ZcmZpe%F-~EWr8RZBSWM3R&mBmE&wyC1hW7D delta 18 ZcmZpe%F-~EWr8RZ17oB3R&mBmE&wyB1hW7D diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv index 5bc74f58855d2436b0224c47996bb04fda3f7327..a7e9e2df936b3f17fa6732e134afad2ef0908f90 100644 GIT binary patch delta 15 WcmaFxgYm%+#tEWKj0_vaJ!=3t;RWab delta 15 WcmaFxgYm%+#tEWK42&DaJ!=3t;05Ra diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv index 699ef48f3d55636a76f991800c0a775db6ca5bbf..7ab09886ef6703904360bae9ac401185d7556140 100644 GIT binary patch delta 18 ZcmaE`hV{W3)(N6aj0}z9Tg4eY!vI431gctCK1C=(;YM)8##03EUe!~g&Q delta 13 UcmX>gctCK1C=&zYM)8##03ERd!~g&Q diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv index 7d5e4881fcfb3a5124675fd28840943a10ebf28a..d454c155cb2e8fe51148be1b860fb537fdfab48d 100644 GIT binary patch delta 13 UcmdlWyg_(^C=(;YM)8@P031I9nE(I) delta 13 UcmdlWyg_(^C=&zYM)8@P031F8nE(I) diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv index 8c49147922ac1f40273938819221dee1f1e948f4..c8883c85b6c4a73c88532aa170f6c00c618593f7 100644 GIT binary patch delta 13 UcmZ1=wm@uxC=(;YMsZGV02$)~@c;k- delta 13 UcmZ1=wm@uxC=&zYMsZGV02$%}@c;k- diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv index 68cad946591bee61e8f62b8af7290a65a56245ca..b5677714cdee3184375a4ba2242059348562b0b1 100644 GIT binary patch delta 27 jcmdmRT6n{0;R&Klj0}z9t>TQW;!LgL%v;4-WTQW;!LgL%v;4-Wf|mIf|mIi_@% delta 13 Ucmew$^+9TaC=&zYM)62q03uui>i_@% diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv index 92d40ea7a29ac2f686e71af00d061be1decab36b..6dc067ab005efe2245caaa5230d91fadfba44f7e 100644 GIT binary patch delta 13 Ucmca0cR_A~C=(;YMsZ7i03UY)l>h($ delta 13 Ucmca0cR_A~C=&zYMsZ7i03UV(l>h($ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv index 217cac431c2d5d769f91774b167569851c199894..e85dbf6708192b7277d984b8454be38099a5d238 100644 GIT binary patch delta 13 Ucmca0b3tZ;C=(;YMsZ6%03S*NkN^Mx delta 13 Ucmca0b3tZ;C=&zYMsZ6%03S&MkN^Mx diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv index a467758ff114d6b561669b050d82e5b2ae3536e3..6d1773ac410c27932f8cc04f6f6cebb83bc4e20d 100644 GIT binary patch delta 13 UcmdlWvq5HpC=(;YMsZ0#02~SfFaQ7m delta 13 UcmdlWvq5HpC=&zYMsZ0#02~PeFaQ7m diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv index 2023838d10ee590ee8b2ffee31eb8bb3f96bf026..c580c5a0bf57cdf3522f5cbca7bd4420bea503f2 100644 GIT binary patch delta 13 UcmZpWX^@#9%EZX9QT!z@02wI*p8x;= delta 13 UcmZpWX^@#9%EZ99QT!z@02wF)p8x;= diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv index 3970d5c1f0c1c8d38ed7224d8324278936b123e9..344ed957ef78e631d7ee452af1f9b4e99fa990e1 100644 GIT binary patch delta 13 UcmdmBw83bCC=(;YMsZ0=03G=QX8-^I delta 13 UcmdmBw83bCC=&zYMsZ0=03G-PX8-^I diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv index 9983a6bc44c7faa1b6599de22472a9837dbfc968..66801f13ce6f015ad295748af723cb445b364cc2 100644 GIT binary patch delta 13 UcmX@0eL#DHC=(;YM)8%R03Z7V1poj5 delta 13 UcmX@0eL#DHC=&zYM)8%R03Z4U1poj5 diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv index 92be0baf54687d05c9e2dcafabb5cc9cb26a2048..de11db17c7081493715702057e06ec4cc16f3d6d 100644 GIT binary patch delta 13 UcmaD5^B`t|C=(;YMsZI)049nAU;qFB delta 13 UcmaD5^B`t|C=&zYMsZI)049k9U;qFB diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java b/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java index 95d79cbeb3fe..9fde7d32ac90 100644 --- a/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java +++ b/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java @@ -557,7 +557,6 @@ private static Map buildDefaultScriptTable() { t.put("lzz_GE", "Geor"); t.put("mag", "Deva"); t.put("mai", "Deva"); - t.put("man_GN", "Nkoo"); t.put("mby", "Arab"); t.put("mde", "Arab"); t.put("mdf", "Cyrl"); diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res index c70d61b0426e899589a51280d3bea31291ba4731..14057532652c204d4c130d7a66d998779b153da5 100644 GIT binary patch delta 2715 zcmai0Ply{;7=L4N$!6EO&1Uj%GBcU{pQM>2o3$;`Z3o1h(xxmbi`woU+RN5Ib1D{F zHXuq)OUWk+WvP2Ap6c2nf=Kl$)pkKVh(det(8Ja)6pAPDdzqOxZ_;FY8D{2v@B8!n ze&6rC?uO9a5Vn>l;M~NtaOmc{6Q4{8&3;V+RSSqs@|4sV1hEM&bpQcS#|y3o{wK0@t?FEizSR|M_(jM zL=d`UbT->53F_e!7`Gel&}T@Va{bb5ZzW_dQ$;*G!e%=p!=H&D{3a$?&A8WzkJZDi zxf~QC5!^eI&B3?1Fnk#a!tH7h9z_)BM8Yqaq{Z1=S;<)~Mtv)eO^dXlTM^;cY!Hq| z-_%U9?(KHo7RkKxwvKgJc^w``jeWGH*As^wbWg|X7`f-|g^gIjS^Finfcf5uy-X{{ zSf`W#OzIK15Kj#4*^Jjk7c+xwI^Imo(JYITb{DV;ct?@;wJ?57&Y=glQ|E~RN^Fo3 zX4i(@vUtGWv+3~$en?zEHXJQVXw!nvbsa8A0VmUSse>qSRd98$9MnNh1{jBW#B%e4 zBS{r&TS`{ObnQyAfa}*vI;z>N8h{+H~)u|xo5B?!xM3*)=1t1N3|-cx+~dr-S; zYjZ<_HDo{XeNexP^*3@VKAyK%l{n^R6(qQ89D)yOGw`?`@iBL&?q{+Uk>HY=!dVCQV6DPPU>OGDao#_@gznb+0g&+tVv7_VLT z3+l+c-_MjW_Vt`JnCl-i6d?cClgu$>(D01=Eaf&i?Nchh{a4urdi4YCP92@hGLrM=j2G8cs}YWrC&2H|??bakHT{1wzYyZ)KF4EG9{UccCwa^ru7GVIES zUBi9{uALYbj6$dSzPlA1u)e;)_%cdida#w1U-ZvX6F${P!?Bf(gWd6eb;?!DGv}sv zgPm>jd>9zHYqD${DFn*gY(PVQ)|ss*W43@hesaVXc;UKmA%2 zkDo9shw&0no2Eq%U0$q0hD)9s9{9dSk98jB6&#wc>tXzhZ`^Utu3S`Nn9Xn`JZu`A zN;t!Lkqu{?Ty#aA9h4N}SLP(VytqT)0lY}gJNEQ?@Yb9JzsJJSHeTi2>jbw4uU7^B L=)1W)HzWNIG*Axn delta 2667 zcmai0U5Fc16ux6|$!6QSW;6Ml%uFW9B$=d{OmZ=Q<9 zmJNuKr={!>1zGAo6+x(LiwGjsSE;rO#RpO7KKRgwtu6@SlXz}2_s*R(*}jCy%=!7w zcfND(?QTfj4QcD#1iUeEP;zd*Iq|`i)LeHI(2bDXBu_{urI(0J8s1ZbG$E5!;H^k# zlD~sfGb;R=ItZ(glGKFl$P4f=Qi4S_BsD;r(Px;YO;%VO^m+gJ5${Rcvsl8cgY2it z5|N}X8I5K;qd+}+67zPW9r_zlr&wHy_Et(2kZSVlBW$)KD*ToT!#z1Q#j;Re&8a~# z7DJEeya`{MQTQwthTF9;{1wxn6N?^dkd}uMIRZDYcwbBLz!%S^McUA<%J6eO42$uX zjRslsy?M3s-qRW)a0?bZjN1n&nio??JxX^Cb`@%+|=zaSsv4D8*B%Y&nVy-h< z2qvuy_%3x3HE_J7piK)twk)`;ggm5cN(WgIsu1d4K4O8I4sqr5h|BQ7v9yl0 zEv2hNy;9(dH0{;3vIVP0CJ-y@CGE|B=?#=}7ck4mDx-kVV>lyTNB6568 zWYDq(TI}j`!i+K{Vz1USaX4dyW>|^B0K<+!U4PGyafR&+rFSoL6n{&GirZk{U`d(? zP45^L{xqku#6Gv;><`d4vs9_g>@!2V=DgSG^QgJ5k$g<79V0p9&ooVEW~Zo+B;oB` z1#@3FmHtG3pQ9B7|NWCYfeK=rvgr<3s%>&Mu$hAPpXcW=YLI9V+j3lfvfp1gZdPlI zvB&O&enuNIat(eoBbXr*>o-Xkq#&lbV#VQpA`G1Z6_s14;_ubM!bn>FEYx%#$fKj# zBTM_K;glJNPn^TN7MlpY^tw9F_xh(~e!w0~*HyS*M0o3^IX=`M;n1?hF{t6NN7rrw z3&s_v2mW`fIBM(G0@ur^-O_`ty!upds+#bjHJXmCd=ds7|JR~gMVuz1=LSE^=E;qK z3RX~e@0Kae*UDAi6o21PEj=jvGve<{VGF~tiovN6w(x%R(@_{V^$#irhvFw}5Em%7 zx1H!dtGLQF;qMV)A(I}s{WXX5VA1%@Gx_#dz6YJQj_-;qX&K(DYWS|JtME-VJAN-4 zbd&xd%b?pOff;&Ao3!kaN!u{kz}M|pc@ZOb67~#%^SCzMJ+*NoHU5j6Lo#b+G0wVE z!z0jfEL!By<-{%K1lYo`z_$)Pz(rn{aY(+bNAWE_2?sa7QXypDW;hcbGnTLwykWe= zhp|mAu>%(4Xm|l!oDJgzg~{FT3^^PcmZ=bn4cbI*O@=GW0@zmDF2 zk8GDjB8h{qdnJjUnOMBO_`R*_c_lqP$$jud8J8q9X>lITT08nMon9Uov2;g{k ztV;mPXh4sFhp}KCrx#PAfLk|*sK}QLa!&9M4hbPKWiT)q0!)T>h$(jg3poHOf?`UF zCjq<%g7+ZsPKMa3egN4Yf)6kcZWCb5GMkvv2k7+$+DX8$H^3)a#T3DiU=UM!0*?ff zn9>VacGrn1@j#$QuBJ!9>4JruUMh^%ii$stqT(;JsQ4RzBoIX!<4kahir+klz){BQvJ(W5pEY19br-Ndxxm_!!Ig=U>pjHiuMR+h0iN0{60|;04TRh zRCwH?!rMhzVYi72hh0=S0n!DLtrk(yW)&5-2xWx{_?S(i!UBQyI#FTJiwa}zhP*xb zaqdL7N>tqOvmA)^BgFj)Y(!o448w&+mni=>8r+)!2t&}DAyGlv*^xMBBK+@`7xje? zIQZNKpB7+1fk7)UU|El3t;}AV6BF5aMH3j`0PYB^u0izc7FGpmR@6jNRcjViiaKCh z50(vJ*_b(DoqFebDLm7_$5$l-Txo&i_5?`Hw~(4@2=^UOJr8O52Et$PCIIwTkd`V) z*w>JjvyhfAAzkOp$!!S`<}?sH1K^dAmQ#RO0jv44GcCsa-6@38RS zdwP?D2|-aF-!95~0A5eKX=|JBET3vsQL-?8x@9sDOJ{~2=1 zZy7l^@!MuDYB|;MRy}9E90Pm_K3?PJwIN>D&g&igij!+x{A$GEdm~p}vhW|Q{IZr; z>-cwiei1y}32uHfz)6U=gwO4E@Mfnb+r_al!N{+hd6SjjuyLg04SL>a;Ma1_Z=AjH zrTl#b39bPkL;QS@e-q*t+WEIG{*{+k`S{nCcnhzz^0N+pPRqYE^3!I1Myln}Xc}33QT=kQA62X?@P4x2516&>CM?wt)!~Cd?e`4o{9sE-#|ID0V z<{w)4AuIo=jeo4;2lf0tBY)q-KZuJY>8${NJH+>f`F<_mqvLzce4mxS*-gveG4lg9 zULN4@W-ZPdmAz86K``?-Vk5aP^Yfhn{%n{(XW-k+e0v+;(aY7DzE}NxcYwbZ;;*~N z%WnR%m%n03u<#eG{6+ie=N3Fu0Z!qy3$-u&^D@woFF#|ei`Of_oQ9dJD1r=>LVM`|Ko1@UXfY#r`~vr&}) z0$#rY;&0s@Nf4(6x`%>!E10SnG}bLZZU$Qnb~gcwM1vEDF1`(xB3Rz>iSi$duaIK( zimmFsC6Yc4r9TP0uYvP*=+-6(cmrr6K(7U#I$&4t5#QGN+x|IpJhC?aR_F9Gv3;DKz(PXShir}6$281nH6pdL2E@hCqC z$nOF2`>?JLAjKa7xpx5k0FWy;R{v@efeUhv$32bstc86Y{njg1iPKUI*hh zz<*D!CL#X{%U7>0P+!?3Npg+uIy~fMkd>Vf_gSE@4c4g}KO9bce&Zf8rEbj$Y!ywFX0J;x|3<2Pwkc+zj z?e55&C6_}ug9*Bneac2zFN}bRV7(MZ1T`G!N4BlrzHvv_RPrhO z|1%gUKG(wh^D)c@pTO{PI5KvW!}0%atVe(u;sbE}5DX8&B=8YDItX^}!I1L)R+xH= zO4P5FO8R!`fZ}a1+YM&>VNiJohLi&^a_j-qy)cgK1E@Cv>Mc_eOkuAA$Zi-yUW4J} zbqK0@1CT)k6)(V?@gmGyFBzrEF*EyQ7Q$5Xic~2oUY;T}!?&GVtk?;kJ`2R31Iz6Y zUL!ZOx@-D*I88i=j|yJx!K@*vnoFv*Af6ad^NfXV`sY*@<%Fv|g$+?*@F z=I_dXu0XwbQ@jHvAjJysdJ2fF1e&Y-8aFsCf%r?oaTz!*hy7PP+1-`|-%kVc>0mko zQZ*9-%mN-zn~DsW+NMB|sokwf@XvgRvj9vM0@X!ewiwK21MD1toeSpka`xn^m*w@a zC&Sz!Dkj0C_&At70d9{%go)t#7`UW?>BE4Wt^&+QU@s=bMG8(a7M`a9^f<`cc(8jA z9*+Xw(cn8qfV4c6sh+k@UA)tu~cLT6!0E+=& z31mnLJfqAhZHdqje?k}i1$y$g<06!&yaSZ$cj$;eA|tLm1QO8>A`^!0@ z7p4|v6wfUYTztAJ%El);_+xH9N$TZK`1xcQk}_O;ijPnA^J#g<^VBOgsyFAWw-l(~ z1=Y0=^L0)%kA(Sz4*sZ*rv>=KA)apMV;wxz&BuB8crSm*lw^&!@=VetzCR$Oq`TVBj(n?_=hD1sfmO!1Qwua6IlOkPv6)iZJgFHe*Rj?VEh%E!9} zcyy4*gn6uk{pDnTyST*7r7$G1KdkJ#Hr2TscJ`;1wHsO3#5&CEcd3rY*?9M8J@4V* zJzX4z;a*pOcCq+*3iHlV2Oy8NN#fObJ zXkKn1%2>FB(dV6Xmy4>}=?fORvyDD$r_V{1qbBz$&eRcAl2l3hE)<$bQmK0KHuY=U z)#rDpePxNA_Yk_Roo)})9UZjHON)JUtDlwxXek_H(`Y zbdG_}HPU%7ZAU_G2+*8%nj5BhF1p@BvwSo=67rcgy4FE6opha+t~S!A&2&xvRm*10 zip}b$x2O*ntE;yj?Oh`2?}X7X6d$6)!gP2Cz0XhY4$ymo^j=TAhrH>fLw)ovCrxqD z!EQRllBBZ5+i0?#${kc;p#!XRU>hBzqkZ(WuYo2RX+IO~FX`(X8cYllF+^J1$(=Cy zv4i~NB&}}3yyTXj@Bq1OO|%l+MsC^&v6B`Dp;~fXPnwM6hKV3EY3}YybP=ta==?+< zAchbz>d4P_@{7tresz-H;G*4iRUm(a$)6qMuK)=LNk@qM4p#*d^pTLCw7ZDUP5d4b zuq4^z?ZoXM9w+fyh{H;pZNz1aHttwiRD z@E{w5BtJw7+R3I4Qs^NYyd=j*a{VL^Xpl@ZS!W~b?Ig=hvbE%C9a&=_&!~)Kt)!oG zSm&;im)prJVe+bNZ;7byo! zxR;T)ZP;Wd`^{vZg}iAcZ^6BcykR7JOk}T??ADRj^yKvjO-X+Ouq7w(|&R$ zNGhG=go~VXlT#j2;U!;o(L81+UpUBdGf`W}5i2>WC5Lt7Q$6|2Kt4BKcz%OMzF}9+ zAyuyW^*nXWMo>dvypKE;AS**;m6I%Yktf|`g_bNblf_oDq>U`KlV#CX(%VU()&wt+ z`AHv1Ki9C%J1Ds?Oz!U>4+O})K{6~vhP%iRHyP?7clpTOesWKzViQFhNpX_FCX#GE ze$7JUTGCIYBmMPcfPoA&l0pCOV|tK05^7L|$%GE_sE3UAl81aG%}*YV^ucHw8Dl47 z9VFFF#u>;6BN=HT4_e5m|J%m-?PNiiEcBB(0Wvp8<~hl97n$KEGd*OMkIe3>sVR0c z)j?F#EaV9*ncPM)bSKmFW*or`M@ZtXH>Z9i5ad>HlvB^$e4Q4$>T^*C(69Y*|n zSMF4BfyZBkaa9NYI)E#K_-qKDbKz5NT;aiAdhux=K4XfM9X@WyC!F}C2_H4%V{P~g zE&f!8KhxvS4Onf&MK(_%|Q^F@S#x;h!D& zmJ@RqzU{`M2j7XbIWglF3#L}wYQs#6Z|E@6<7NZKMtoD!F9H;d4`N?C_J?u6hdqAm z4ODJaIk4S{9WLzjV3!xWyNFqBxXq4jW^A%xvlUykSgXT2J=Pnr!HA8LMRJo_~#A5+C`=<0ME4I^jqm;CKj&h#ROb-fo=)2pq%5rx~ox^=B^zZq| z0#Pa@yKk}*hHw@X>RCY0G9P^Tw@%wSsbpj6{%ui4=C&}8op~c~ahTD~Og?4~FpHMy zEKF}@h8V~%vw4|4z#Lj;HL^BKU()qM4o0`-PX>bDAeLYVjfYiMVU9qgKu)wo%$7Zy9UPxdw~tCuQS-F)FD ztB2`{U9mBZgI!f=sm92DFtf`&+>s5UCqwj9m{z#y7an>%Ku>7t=Vq$5&?8oQ)JBi> zv?W0ZdOn0#hv_#q`jvxLIqBDMI?zfJJ!_@swDe0IJ*}r_dODM!Ip}2{y%IQG=cM1e z=p{G(!5nX<-&yf{4th~bFQ|0%TLZ1m9hH~9QLxfarCR!tlYT7q(NBW(aCS=e^bNCf zqP6rr9ev+OKd{gbUG$LPqwj$6fy~wGHe|)Yyh7i!)3+S-?Eu}crEeJN9y8r*rTe4~ z`l6S<6ceGbJ3wCx)7Q21Wh;HfPG8;J{L|*MFkd^_G1 z#ws`7=E2*&c!v*{`SDKBJG`Y07u)bw2QG2pQXMWd;UY8MY{8pi;k5vM*@s^V;8#O< zw+_Ex#4kGWO9_qv@T9`*!}~+{opyY{f!}oEw_Nyb*mu0ghWFa>J}rJthhNuY)f+wR zosIcX2!9;LpV;vSPW+)8AJXD-9e!7j4;t`$X8eA^Rm~R7(>TzB~Exesr3qyEO7%%qXc|JVfj~6)bOedb@!n56Yjt9@RBwFwkE1ueh zr`c3^x*gBZ;z>IExDh{L!jsK71Kz+zhCQ4a#Op$MeHdqT;A{t8?ZQuc@ER|E#)sEJ zr{EP<{1m+Nvf)*BG+T?8>hLl>UT(xsZc)!HRzJNpGFm~7ae5Fx(vByD@uMAhq7#pE z;qe~)kPoN%vFhOn&?pNY-G;~5@mL2=)!_&9SZTl`jCiC8KNt&dd~u=&3w|sM;67TM zV8Oi{xOZe0>^%Fbv|&8F1K$_G_XP31Av_Gq4G;CqtnpW4Qw> z%y@tW547SzTCD1;!%0v?M%>SY`xmHZZc@KcsID(MD%&iPIV0B$+}(%c{kTUE_Y7CR z;>6J|9OK5Z9vlbE(ce}qv0%je9r|65{xG0Fjp#3UVH25&(1j5CwjEW6(RUr_ zq7!}XLI>RFycc}~Q!hH(rb6fJ=qm@R(xWd8=(HJ~v7pL`Uil*zG1MGJxC7nvqox45 z5kkm`>fNZpgBrc)nh#x%Fwj`g)izXPL$!8Pr$v`^=m$NzY^W|bp)3E*2gndc#*SlI z0i+EgT?px2=qES&*@INSc+syu^qVy@bRyA#?l{qpR&=WkaT~g=JMPn?79*l2)M`dd z($^gsl~FK+LhYzMjKUqL!;L&1^Q?K5rKAtZbp!(-rM<>GQWCuDGK*xgUix4^vn~2mtbi|L2y3nU?^qB{J z-g!8oj~(a}Cpv6KA6n2MEBXj#HT0ely>CJvXi>Qiy{ktDBL`k*aiEvO=#>uiY5=_u zL@$QWOAhp`8$IVi&wJ4>A5wMAe`tpdmD$lwGb**9ZC12hi#F@f76U3aqOB%W($f*S ztD?69XnzR3<3Rh|=uIzr3%U@!VMcrGXs;IS)}hx7==BZiCv((ma{s%jpn@>k)PV~9 zC@+9E22noTRL}-5%JHFGCt9y^p)5Db?poPe8_IN`b!POm1+B57XS8UA4n3tuD-CFs z5v`6gqA3nEHH4-~WR4VQP_!g~mWI%>Fk0S$o^+rEZnV&g7WvR(W1d`C%nw_a$w@!U}{n41Lqbr`uj{F>>b6!SIgwf;?qBQ##&IS6^)B*!6+jdZ9-$TXoL=p)T0N>9VgDI zWC7GC2tUk3N$seg6ZLYT-fooWJwL>Ugh-`yx1e|{>S04Y?I=Nqr23IY6l+3pcXv~w zsClCnr!Ey*P>fKAx(OIXC)y%E89~E+=)M5Dza2ebLw7sTJuY;w2MseNn9yJ|8e&01 z+t6KFl&nMYSUpl0QA*X=Q&07fI;!@5-8fX5T(y+-?->`p{^(CxXO5R|`RzlgwY;Y` zCoZGwATKY|D*E*|S0Za=vu(Jel1P=6cz&P!B3IQ{+F$x4UXo^xTrbOY)qNl<*0S%* zKlLkB7iD?yx}kgSn%s$b`wG?5i_|kqWhG`-Eo4fyE3DBZb)jVestCisv44X+vTVF9kpIpg!w3#3MD2vqkKbnF~BeI+Xh;GnF~ z%&Pk2WP0g)3$HXTRBv0XKD{J1Z$@555lmTS(gFysuP_TPc2=4-sZa`Ms09wuqPap7 zDiRFrbX3l$;`B1XRS|+`b{9J%XmOGNhO9DxpUlpjl(QyRnh7Wd_N5T2yc4x)RB>vl z;B7JqUeo|wDrAMBW7*M}>DhC07Z>a(mX%o9Nr+o2=ua;b9LMI$iXH5DROYCH)Iy>C z+7!XePLvN0%B82uCj>_%eIXbdzRwv`kX9(mbg^TyOb0t!UKSjz`b221zFR;iTVzEp zjYgJjWgp23{Ose*jO>zvLq(9jLcv_QNU*X)-Evd&(+VfRO4)lt8!LxF^IfT-CfCXi zMrDmJOfQz|*#|E6pU0_%8RR_4&$4~*BX$X=75wN;iIU`HSig{j4`p3ejaJ1iIm zvQK51{$q1w+qLX-paA=MbDnU6smn)&2FDzLu#rOUB65!sL|gy_RqdRa|ESo6rHo z2Gy_uwQOS@-jIL>v?R0;(=9rgla4!h6C$gd+1r>@HO4oxx0*=S4R%j0d$XRY?rLCn zM{C&r1~!aViXt0+hut^t?Rhijs~0R(XD#kl$NFPU0R-nwjS?A7VTp`I-(s)dW-;RB zhwrdh%yttN)xutD)#&RJ>zTCSa#a(1^~T8{rAh_||m?pMo_VPI^=f=_m zN`G&?F8fvVern<^Y zy>BG8)K6)-rfp?g*oE!4=&kyMdWsv^=4(xdu2Z5pSzgPE>S%LfbF%7I!Y%q6Z*YsO zF=*oUDN4TG1cE; zrQ;tPe@6ZAbLlTl?%9&W<2k)?o1#0%erciCD81fFn{LG4ID!!?#I&)N*443sdbUY6 z?i;pImYDtx%U4#4V@IaS#+_w(qO2SJXwj4T+2TT$#?*%n<6%)x;DGEEuyXtu!KE>&jDpAE?Ug#P%MW9pie?#a8>)_@k8- zr>3ONoH*}^r2?-wCDpK}o7oznsX{H_ilb6x#bLNzRvd=k;WD$8R<=sE&f85{b$!Ang+d0yPi(lQL?cHkG%sMu! z>GJUA%7syw&88@dHC1N}$w-}&F=P5Hp@q$e(y(a_$9IUw=LqmrTDPc$O;9Mh zs%IHD*pxeLs_c=oC@LzyQ-7@NalujXoZvg(^Igb(Hb|0>JyBlt$3WHOZrS7Wb{Fj{ zm2I}OC9-YW*jWQ+rOr#6KLOrDpS&bASKSgATPWPDxvi|am7$z2T(7z#w6X=VOdDGy z%ki?sO7+soCyr#q6b&hwR6Mm*nxo7GJ)8tv{+MjDtKtltYL;u6RyGl~Zgs9K-^U*9 zR*;*AJ&S1O{8jVEFF28~aKj=vt^0Mq zmiT|#R&%?R_3V;2P`Ae8$9tgx5nlfY+#S|S)unKh^#uv}N8~{NK*}XhGBD*JBH1x0kWLJu*@8zrrfgKQ)&wU8UiOyrQBE&5-H&AgDWLsuy$$D)qLU z>-(RemjC_N&;=3MY^JuG)J~`)qMzq#{?pGG5cf{uyhSlIUze0-WKB`8oT@%BEiNK+ zW@w~{h#oO^iD-G@-vd;)py+SVmS##ZZ6%aJs*dkyq&NRhL{AO|5d~$H2+fgmiT?VJ zlu~U(N-GX`Nh#FH|0kuF)Blsw*rtRo85JqHLk+d3zwgr4hvuw!X!pbW(hp2dz>&?P zP5-GXh-jCvcB$&IrOgfQh^o^1dfFfx_f>-%q?Oi4)0K}1(3rwEv^FBJV^Y(`%f?pI zs|Qz0M@vT?+$SBOs%^!Ek@A59zbBL;WeSlEiLPZs8!sQa&K_=N_qMQfXo%Fg6X#8z zziz>Xh0-P_K-oxPcVL^MVWSZn+g!c6g>_@>A)$e#35X?38$B&!#@ty8XK$Dj)mU*2 zwitF@+HhHYWmZoSfXh>$J;I62-Wp0VGDVrj=RZgpwSy^QJI%+PY zWN1cZimVEk>*aF2KD5q0!|Xdl+wTnY_P+mrpAQA|obx^3d+s^kd+sxRc`@qN#i*lq z%MVE;l3wt0k3=&6aQNrKv?a09)QYEL`>l>Fzj(3YNX{Q4RT9a;-z9PRt{FcTi#zr< zf4KMbEBnsZ?*AtKfMjT4)kh`A4rCli)UaZ6vR{l(mTJz0+Qs;kh=f@wcQ)R)P@Y~O z)s~g}%Fgyp8?!oQ^_>mknuN7NbJ;n8mVJ?SXIIIJgjGUI+3AR?vQu?sCmYH>U*Otc zT9CN#&aSnKgqkwdaq0E4vbwU*N|x=-+aIN6#U?R+7KC`%A;!;kiSctH&0_omb}@bi zeDGjMjGrlJ#Q2AbwiUg-Tb)+i*B$4V0kiu%#P}q5I^8YCCwj&BsXj4&nq3BdlfZ8> z08KH7@e=_2KARXnF$#XU2Of-8ImP%f@bq5r85;@6?1X z-P0+6We-5_2@iXLb#I**ALbTi7nOOEVU8KT;XxrN#*Y9dBZ0|XonrhbV4(z{_<$Hc z+${s|Vc;DH-UBP#zgh|0ggQ360xh!WAmA#;dIjayV|{i0F_ zCcm_c%3p!K~Mq|TRPZ@UXB>}i+fNkd~gSR zMDU@&pcNP}U~oI*fsFN;Te5qEcV5{9#t67KgVjxl-e_hQAl_{=W24T(vv2p#kj)Y+!^Gq4({&c9v8QIxXR|`c0YGmWmays zaf_X|J6Wxk>rLEX=0*!Qns}Rrw`w`l@!S3EL%cFCukrEPAg}A-^>$w6;MbkJI_z-8z<)4v)m00>rs3ae z`FA@0J$SfeE>8TsCCF*$!XZ1yj;c&2zh#gac%z9oSva!tW-V{f@f&)6GyBqx#XFwO zJ(4GL4gnqFUkCW*ApfR=S2}rxhhOyaOXg@Z|I)%Q*!fo)e$K$pn|QfY!#}t1Q&AeO zI<4ntJp62smxcHj*&pYqAKfkytnr>04_Ev7@c=&&tREWUC$0Qr8~?=4KXvfWOfnOH z-^@R-@DJPhM_T^2j=y8z?;81gy~0U)-OrB(`H>KRL&IOu@*^hxs)fH6so`&$c&U}Y z<>$vTR%T4hT%RSFRQzzyaPANI_!EBqWQaed=X*_jUpwF5&)Jo}Lq7hZpT893FFVQe zF8;iSzhIV``7;*&tnJ)WcK)1>AJlV|i9em5v{k(Y8i3`KWgXeOnjA@ueR_t`e;30 zVc?G#`AQ8>)AD6HzC6Yj7cR72K3){yyMw&g#`EpGz{LyQd}o;1b_?Ip&U39iPs1~{ zJj=kdjXXy(wBY)>lCSqIfEHSN;HX(tER2EzR++4#!VFbyfm&~eTDSJJ3hYntIk-o?YHzeH7A&>UUpfHLgNFfn%m^MoLu>qE5EZ|I z*KdHR>1_`;CWY>41#;-{i(q)5GP zxB8W0$pCwTFBZISLRU6Iw>CjQ1T>ogy%v1xfL*;?R5XC!4MQxTT?5WlfOs83R6~dw zp!Yq5y`qEoKS1oOeeJ`-dZsuBnCAfxbW2eNSYNoy$3f|fiqj@haRwkjvJ{|LiqFC8 zRDb&@j{siZK%`3W{1#Yz2c8$f^AfQ58dzL5_lM|TfonxO-e5aduVG(+|CfMyp+LPw zRj59;Qxa>NTKAX+ z0$d@iX(v$H1>uSu>}^=m4xp3^5%VBoKCG!gGRQUgAMi{7&jRpl0N)DW+WAc{;>c1u<4bj5QErE$q#sFbgSibnHz% zD}@l-bCS0&+Ywg$M*wVP1XwHrf{P*Ik{(@^vkU?)2g?!`VG8 zFvBS3g84ikIUfiv0Gv4xD8&Tzml{5#?uP^>K~7+NQzQe*13kM6>mdN01pyxh$JyX8 z0~kLDKr_>4ZdI?{7GW+6IoTW!n=KI>W4fB+9wz$nhdCIL}}tbMpkfD}#vmqdV>3NX{aX(9xMVNx-mEx!g}*<8 zi9!u0{6{Jn4nBtI<&*H-@fMu_$9lR27$V*S$M?bT0~iH9ghy|K-8(R)yt^C5-oj$_ zizSkQ-8!H=3T7{Y*&8saya`iEDa;(NfawvKM_vV}*8u8uV=T-YhXCY7m_lBH>EvYy zdN@3PJPq^5Gcag83j^1425G|Ng#*$HV61sTnjk8lPZgTs*RCyAJ^`OT3B;cQ%Y6`F zKLj`+g~$itLsh}SLiO^Z=&;Bs=fK*F!MX$~vcE!}WCAXqM#a`GQlJZ){+foIRLjk``WL$ z2XmjyQ?JaAwhsgnkAc^EAhH2yZuC{Tz-cwaUjvS7!Rb+OTGv};jfLOmgZTn5T?naK z1OXNU4=7G$DvWJ&A;`SmmRR`Da&TDzCXWEsm0-3C%$5M`Qh-eZ^JUqGbJT0L_p!yn z+#xC-hEZ`gn9TvVnGoS2aGeD%)4?4fg`LxTiBT!PSA4grwh z=A#?}afgOfqH-88gjZ&Idb4W066!D{Kn|Zo{9jAIB-<}A!T@gkJn!w z54OW0nIm8eM;4!0Tk_QldnEFL`6Y^yq`mVEypM$?IQi@dJ74JFi+p^spy5jj5(`s` zmKF<6z97QNRS((uEEj)R>fv*IJOzfNR41S7<@0=e{`OPb)$4Yscjl^h<*DDwmkhFv z_I6D)GeZ2qPCnDir~7$wkUwDKiFQ8K#izOX{T`lVjI~5t_@s6|*~+IF`2-Wc&&(%k z_`O;_R>#Nbd4hqD?*;QTALLN+!9G4Dz=!I%T+as>`9Kqo6|8(%A4jY&+Q&!v`Q4rT z9tR)c~1KKQZ8-X|0)z z?+LdsdeA{tPWp5Qea1|mXs1uw=u^^!iE{=NrEAF`X+kd&yFzFrgG$}+#j5sp(0w7g zzmp#D(A{2I?4u=qx(CiJa?D0|I_NGJEz;0D1I;(n0t+pKxuJVU=z}3Tvy(pLrOAH! zK!DD$(W!Pi%|Y*X(j+&XZj3R~i6%P9Oeb6Dly;h^q2shPK}W~y=>!A4ub*QGT)tFv zfuAl6(nTF~v4hTa(s^DwADW2Hw$eE^nqsG^8ahk=-Dd{+uw;N^q%X!t*ZJvVLAt(! zZV1th4!X)oSG(vMH(l$YkA|ZzH_;Vl`iPCLw37@CU81E+^)$^um%(%mA!)Xs=5)~Q zA-cm!hiABHrk7@gLvCrO>2|u+LAPn>CIj7UqK}u}^+CL9Oo-mwNyqx=-F|vcfR1)Y zyUA-FdY6}ua?s&UI>JRqnq#feR;sX3rJcr`=}-$D)=uNJbfAvL>ggZ@9c-jSBm*5I z12F;879^~L{1_rXb&{VQgt^FV58*y?$4^8{jD_54C&WrxY=qiLt42i{b)?BakdZW- z2=48SaT2YI=zK))Cx##~YRNA)@~fTv<{%olL3dvP$e$tdS10+~PdWqS_aONLt^g$H zB^^EzauT15_}wI6jnTTCO%-U39(UEqE+!pVT z@zZ_*+CNBRI;hY|DV|CI>x4!uv_~+sFYs zdBQ~YSjgUXvQI;HX-Sce?ADWFBPo##36BF|v=2h$!%p&%kG$(A?*+*Fu4orI<|c1@ z$UAoOrh}9^$y=(f`xZHB#U>kh!$e*+lh-Wdb+~Vl!v^w-ksQ&G7q#Ri9eFuS)7u4n zp@V!CA{Ab8-bcy<ln z$l53iiE$9YN#q_fz()p3202G}-7U%35E<7=68vOzfQ$)}d!1yYi`?ZVqrBv9AGxPX ziAj7r8SWq>j6`8Nb;C@Q8Zua=B|~&%sGbZnkhuTs;{yRQBUrBrkq0};OgFjTLz28? zx{oA>`(Uz_OtFzfJDKVt)AVG5f!t>#6U}7Of46aY2U!s!kNC(^KS>LaWe&2yNfx@u zA~#v=B}=+%YOamUvlG>PGnr!{DeWXxdnQRoX6Y}9M)I(U%uZKt+NwUiP2G`kVpgVP z@P9f;79#yRNq;|y4v;=U(l^{eJ-wutkMwquNEeB6lOEk0Ah8pvgG89{pJx1*1^=zV z9a-5%Z=f(!>4Wd zj02xF;*%!)c{@I(!JlgJXF9Cb+HD7fv-DpbywBlAFNn))rPN`@ONhXy#-&<;IDP~vL1h9z?DY)tt8goE$jH#5dN(b zYrOa;KmIw0f3aikz;~Qjbm2BP{xRI}I0TaofFi;>m zfPEdZU%o?S$94yHII+`>T^{W2Cf07nRvWgNu*r`rf&;v^w{2v z{W%Aujxk==@t<>#1tL@lZ0wu_7_M1RsAB;^!+h}L-#u^ltl}LdNB2Y+nA^-eHs%e# zonb~7GkKZW&nz0IGc&z~8G1l|na#uOe&*1yb_27T%Xdrd%;{mSLUr0s^&>@+SVwo8 zu-`&V)5)}c_H%&!5@f$RRP2tEi7wXWVL$rVPo@|Xqh{7>Va&>I+ZoreW-Y@ycFVws zk+n#z{=gJc!TKKAT0~gFI@DLo1XU5Ga9Nk z(c@-%!a`44>F0f|u@HiO9mJbL^s<#!*y%+Fy#%KN{nAJ;Sm;+8dQMBv>u7mjM=Uf4 zz2>D={&Tesdc{e9aM7!#XcPU;g5R;z?=|!rm6lfO>9;u(wUhJNUvA4$FR z;{g36Gd^>E*5d3a4Sh#T-!;(p%=CRH{Xp>2H^I0xedE@wj9xI7(ARAAbvr%kr*CNJ zVFP`|M2}eLt5Q3C)Gi@FcfJ+U)a$V2WoL5 zllwTu58m&^2YmPm5J6nj zj(1yeu^pE<@g6NMG~%5myvvLWdcr#Z{Ja;x;Kzr8_(d&##(@VGw^5!XMl4dk*}*3xA-& zZ)x!{9e!Jn-!b8L^R8Fzs@hb1vUp{Q`tdzIpa^iT9p`y*z6R%L@pc{F5ta~77uF*| zyfTDWdGInXUhcyy?0As_FIGA65*J?T#%bmlGoEX~^V;!zD_&s33pMy*EuL+_bBs8} zgj3;lTX@jJTLXAo5NCvNW+%?F<4sPy*^M9f;4NO94()>dWcX-|kr}%*Yo&ouNFob7z;)fh~niJpe#z|g0-G`IIK$FaPayy=4 z!-;l0Rf`jJc)T7@FyQ-)cw$d@y^94mmizDkKOU&T{mi((9mhxp|MRl7LKDLGcH*&q zd`|$64&pITgZM5l9_7P#JMeHP9^u9#;hY!+%C4|sr5(qc@K7@zX2Ee99IM5Hpok23 zun`X_edFXHRkRoP@!`G!EDKdW@4!8rxTg#Ea^v1%rV_Fd!(085adk4DYM5QkDwFg~>2^U>xM_<`cg&kegp>uk4-h|4{ z=*zHX`NEehghS|-suK|(YVso#M9mIV??Mf3bi;#gdQl@VK-bNvx*gS6QLPQtY0wW^ zbXAA0=_^Z(sOsM#0U1Kb*m*L;kF)`#3nIM}{p>=&xY4g3^qUuHEaAZuwb{{+4)l`+ z@pg2_ibU-xuMVlG0ks+tGojm(fv)hpjDkVb(SbrC)Y*xCcOj1(c|FMIMSedDgeloA z$YDiJ8*(|3TZ7D6WYM8^J+c~*EvxFO?bq&XS8v>*K9&3Lbd1h~(AiE@=0~3g(5WCg z4SR-;d(jCWQk`_7PhIFUH&S<N3u^uf+S8v^_KDX^ekBk#pnc?p! zx{1ySp_ERP>O-^q=-~jG9VYsq2Th;pMGrYpvJ*YvLNmIV-fu-oHZJ7#9*emqvJzJX|T!X4J=m z`dX39hWcrdR5!tZdKppgQ9V}5S591&*d_Y{$i4u&4`;y?7%FN}lzjSEC^E(x{t^V; z>qTSzXj}(Mu%f#i=pH8;?M7paG9wycibW&M=&p7&N`n+yq|~8!0~%h@@9blJr2dNR ziwz^Cqbeq|!F_wlww=&toG&j;`|UlcyVUes_Uy&E>Lq#Vf_%6Z!)>)zw$oSO6B}q$X ztQH!`c%k`%I6&?+Jnpe~s%(r*xrzgzADcV^)C_j!`q5qdS)hjcBK!XXhibCl)2|7o255 zcxHF9azTR!31G;+^y94bS=pO&r0Kv@&&~I~|cec4A&)fzWXyRWPwLQcJzfRd1IU z=_|YuJ0=$X7~g0XxAEbm?UetXqeSjg6OnVWMncFS}8>;z<|Ah8IR z`I%s6p9uN~*{AY!-^nHNy&9$l3b2>A(u5{2bpEpZK2S=z{B5GJ(Ez4_V6IU%o436&qK}#y7JBcIs6B=D1c_ zD;v(f8+x0K5ZSBEOo5T9g()dJazl0leQ}cwYec1p#Z|MRH7vIlXUou#7Fi21-KHs= z{N9EO5ZTnsj$(4LA-aLR-bgZ=*gZAuwK}F6RnP8@s$y@{voW+>6xqFPY;4-=X$zOB zm#LvU3d1m}$n5;=}%F^u)N&0fC4dWu)4x3ONBy+~MO3wx=xN>>+C$0F*l zRy49hO=o(b%X_QX3)M_g!=%vNJ%KFi+f@D>u0D2)9j;=%t68+Fmi6h|6x$lz$_DXz zpI8ysbYll%16tU?`r4{`a;xFOX6r#lh&Gx3BiQ&YrtLe{W>Z z3z$6}QA_=ZJ=4aXO}XZnzhVB?1w{+ha~Jg@GQtkFFcrO&(|UE9I7QkU9tL(|HN*yX*qDX){& z(OdOw*Nw*aZ_<{kGo>|bXD!7s&2g&RvfEU{>s=x%X*)N!nH6LDOAGy#(ccDRQ!%Rc-1j%BuJPOpnCjcuo@ozFJFlMpWb(6f`nJUKXim`` z+T3;$aBfoC*h-t4qMMFm#0oLJQA6u$S$-WWkWc-Z<;r7{zh-#}<>HhHiSnsmvK^(( zp?Rw^1t-hsSuna_TH%bM)x~n?knQpeP33uc5qyhMS-(Vjiw0XN>*eW|lfm@KIV-ly zi@hu-A`g0FFI0B6U@5PL?#hZtpO~LmD8N)+n$60^)^5p5Ja~WZkeNsJOXk+N$I=(yGhjDN7fcDsBq3Y)fj@{i(%s)sA@)*>m$2hu1Gn zIBu9HZK0Od;|BSDS9t|U^?p!*wXn)HrN@51M-|(`(xg@Nvo^L&Xk^QmB&N+=xpEc! zx>Q>K-B)ci6j{R-)w0EnSI0D$uZX~G2}KdCu`*>uN@8ltg87St7Pc^=ip{S-wNE^? zM1ZH#+DBU0f`rD(>RJZ0a=clyr7N%KLgedT8%p(&A>)3zTfJW?XxX=AJ9do(>44Ox_!mb7dJyr({M z1rE2{0%MN|x2o?XRNPKUm@nL{XcJo53VFJft(0eb*s9Wx{}_DV!?4A(;}WoQ4Rj-x>xZ?Suz>&W<0^OXRW* z%cd%rJvN>a$(^Aqn{Nwp;RKf^fN4Nn^03M-x&nk=lR#|{7LY5mEC5}_%+B_=GX z$CtA+Eg-4TBTbYx(^gCwp|>Hir}i~a@?V8LGaM8aWLF|ItHP%i{p}y2rP{F2mVMkU zv`|+6pU_@S{#R&wHp;q1R-`R$)KGKo`)=jEf64uarXNXubB+v$x0*KnE4iSs-KyIy zxhGdQ*Sl)QgXYruI@%zg`c=IPgqPMxlM@~gppk{IX>C}3CnqLNlTWFn)yF1FCrKwA z+aevWs%^!E;cA0%Kn9gdS-i+bM%A#p8m_*7lO;E^(Jkx&=%1-eXQs_xwsm>d3TY#g zLzPKkGhtVwpe_(gY_8nc!lD>U66)D>0kMAbCe2G(uyoOi#aT-t8p>`!ML>~AA+(ZV>F!>azwa$wA|H46Z<3U;MUUfCG!uS{pX+m E1B0NI(f|Me diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res new file mode 100644 index 0000000000000000000000000000000000000000..3b2177da89be2f42949aa23fe5ddbd2ba98be8c3 GIT binary patch literal 4688 zcmbVQU2GIp6h3ojW{Wq082o+ESgAx1N@%z3?t+yFgv19lDbW`!3Q_^n7HFyECz@EZ zB9Vv@ib*A*mD1D=76P^@QA%q}7F~JpK@ydiNHo3}c``)fgXjL7`!lvney@|?5Al8})l2CVFG?vZr8oGX zlyXuU<>T6Jsgy_fq?8+^G{C3$87XI^Jc;tKlxtzP(9D|)kKwO6nNA~{I!H^aVP4c; z>VW)y#YeQ2LO;n%{G8O(gF-USr!^MxJI#;rX}O2|Ugl@`38}GuPwG95^6Ua4?&AY; zkMcXgKjWkPGCwVKbwK<2_=rKNn9B1HO#F)10!DJ4pVcRjPM|o+$E3e{$_B5De}?yY zcuQzWx<(y&feYSM9vXq7pF)qL(zemCSmFh(YtptNLvQK~H`!|7lSXI#Ssk%ga`x$} z5=e|KRl$&>Bd%PXtVceGEDvg~vKrqZ%*LeQkNgee&SAs8s?5XuJ$}Ne0aMu?vo;!+ zZ>o=?x7S8#_og*2f#8fejqH_koNHvl%^-w~_sIM}n(|j#qaJ4xd#VA^jo7&46zf;IMokkrqqdLYQuG5v3#~fYc zr;!geCF)Hi0~qyy;V5mqCwV4>Nxg`jbjJ*yMiZyVOwr+$n8jX4G`3URS`xjXW*_aQ zJW#w%3ICLfjMGUjmst}R&J*-bm7R6`_M%oEVfxJ^3(?6mi-)f%sOFCv9RVnoQ7&?WCj)b@Wh~jhz#|O@oKP?W_jF zu0Y_g5MSjh?m51VTMPb-CDa0$ILX!zc~i5@u4Hr_cP*oF?$=zo3}?VSZ;HG3p{zMi@a40dHN2=i zyBWx8pK6l&b~$55HD$TZmGSAWDV+FRhDgS}yf%0lFRy&c?M0kJs*delDr4|a94#r|kK%7No=}4IP%WSSTIGys(rk!(!U?SI z^3KrDj5x3QF)mTFf}1gXR#kq)Q>2|>>YNcif&2RSM8!SLPy>tcqEC0`&BsV~KpWz3 z$9Q@$vRZfnr*t8Aoyef&O7P`+J&Qh%CVZ;( zW~k&liB(N~j-ek^fD(!%cU#~hTfi#|l8s*gDXAH|Dtqvu@EPIVflDC~|Qs!GoMMcn7T%TUmCn zj@ADrm3I66RGGp5dm7!r|I2xmS+V@ztov&**GW$QxfY38`&ZOkd7s{DHpOh(By+nH zb1ZA`>f@%8Xbz~EAfA36f(40bwisnmwfpcHehOZ}xzLN6eWK@461Cln(n%?a$UCuS z_u-rxl$!0he=F|kLLJ_j&|)E;fs^a%%3DS;?V%8oMIj`M;<&^ibUqHDAsnl28AlPl zST=-YaR@1iL+E@QMf~s9Ab~llURWOQsd}wygZMjZR%)S?Kab~C-46#+tHM;OHU2pM zAwC#C9dChtd>b+c_QE1Kh_6l3a2MPMHEbEIhPChv9EazER`@X33R{Ej;ML$jaD=Ua zVpJ2=MJs~i;RCECTpZ@2wQNJUCR`V-55~ji!;a|pXj>eGd!ycPe|Q9b4yNHcdl~*< zeL*Q43dh*nK^V*q?qMUrgTar%qM$KY5w8wEVP}IIjD?rNZ`kbkjwl};4%UU&*cAIR z8e&)2wdizsJ-Wc|WxuhS@UQ5$=x+9BREoZheu>lZVEjeu_V`BX-Kyp)z}WVLbKwGf z&0d1<*+B4X>ZjBtp=C?p9PA7V@Op41cp~)?zWsRwGKIoBFl#Md&ms%e_?{?_uXzf8 E1KqpBK>z>% literal 0 HcmV?d00001 diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res index 7c86fbbea1f016128f3f29b937fa52a21f5e87bb..a4a41f428b43e683a19ec9b41846480eb5b3b899 100644 GIT binary patch delta 221 zcmaFB{(*ghvg}(11_pK@t_9+cP@D#&8G-oiM2E9X>7|=_7+DzAR{;e$7*8;sVLZ=x ziSa7qZN_JeZ-8Q`AZ@Z4lRo3o$!Sdb%%2&;C(mG#^;KY0VN_?-V$@|cU^HelW3*(n zVYFv-VsvHnVDx4TWDH>pXN+QuWlUg9W=vzuWGrMXVJv5?VytCsU~Fb=W9(w=Wt_-3 mi*YXFQpOFF8JSNi0_|M2ih+r7H-o~eRRKW90+8G-oqM2EAR1sItb)qorh#-ofU8P71DXS~FC zgYhxrOQ0AkNS$oOq|bP0au$<5b2!82$#a-w85Jk*Vv^SPV+>>rVGL)CVvJ=>U`%FA zW6WbLWGrDUXRKnZWo%$44ty;yv#JGb&Vb!Vt Mpo@T5XcZ6u083&lZ~y=R diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res index c50dd22e26f0aafa998a02c0afadceee802e4cef..7b816b91cea92be9de4f155e847ce56f137cc43b 100644 GIT binary patch delta 42 zcmV+_0M-A{{0`9k4uFIKgaWh!%{2q>e$cnjH3M2V0_M<{ENugl0uENUz-7uo A1ONa4 diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv index ae1daaa0bcb1f09de815610dc02622ec28e25c55..0e4eae6a2968e59a6b53e6e271086c0f1d295dee 100644 GIT binary patch delta 15 XcmX>wi}}DT<_V%qj0_vaHO~S7Es_Nx delta 15 XcmX>wi}}DT<_V%q42&DaHO~S7Es+Hw diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv index 8912192cef971494c6d44c0175e4a6d0de22c847..71f18a9a4248d9db893410c9198f2d47457a8193 100644 GIT binary patch delta 13 UcmaE$_&{-jC=(;YM)8vZ03uohOaK4? delta 13 UcmaE$_&{-jC=&zYM)8vZ03ulgOaK4? diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv index 34bb8aa8dca9bd5c307994fdf21292158b8029b1..532f57d930989da2e8e3f6edc1532513cb01573d 100644 GIT binary patch delta 13 UcmbOrJVAJZC=(;YM)68c02u!RIRF3v delta 13 UcmbOrJVAJZC=&zYM)68c02uxQIRF3v diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv index 211d2218ccde906b537736a2896c71a41b322a5f..75e8ca50765030d1f1c22fb72346b598dc743015 100644 GIT binary patch delta 13 UcmZqhZ19{Q%EZX9Q9M%x0303zkN^Mx delta 13 UcmZqhZ19{Q%EZ99Q9M%x0300ykN^Mx diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv index 7f36ad999a3cc24d09b84f609cd12887cd8424ec..cf8a1aeb5f5a704248d2c7bb4178106b0ddac908 100644 GIT binary patch delta 13 Ucmewm^dV@1C=(;YM)62Z04GTVcK`qY delta 13 Ucmewm^dV@1C=&zYM)62Z04GQUcK`qY diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv index f4665f66bd0794c03b97a930dfac405f91375a8e..0698f4349d4d9905a28ca4cf12138e3db736c02e 100644 GIT binary patch delta 13 UcmZn&Y6zMj%EZX9QT(L_03GNACIA2c delta 13 UcmZn&Y6zMj%EZ99QT(L_03GK9CIA2c diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv index 361eb47d7913c323f796891cfc7bd51fe5cefce1..f95393bb32a65de013f3d266ee2f87a0ddcb11b7 100644 GIT binary patch delta 13 UcmZ3$wt#JdC=(;YMsZGN02q4$$p8QV delta 13 UcmZ3$wt#JdC=&zYMsZGN02q1#$p8QV diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv index f4ce7679664a9731983f4491cbb381b7b487f295..478772b9f089130f68359b993a20c088a0af54c9 100644 GIT binary patch delta 13 Ucmca$bHQeUC=(;YMsZ6y03sR#-~a#s delta 13 Ucmca$bHQeUC=&zYMsZ6y03sO!-~a#s From 7931e6f7ceb31c2997118afd5c1b31e600b21e9a Mon Sep 17 00:00:00 2001 From: DraganBesevic Date: Wed, 26 Feb 2025 09:02:26 -0800 Subject: [PATCH 05/19] ICU-22923 Integrate CLDR 47 release beta2, part 2, data files --- icu4c/source/data/misc/dayPeriods.txt | 8 +- icu4c/source/data/misc/langInfo.txt | 4060 +++++++++---------- icu4c/source/data/misc/supplementalData.txt | 6 +- 3 files changed, 2035 insertions(+), 2039 deletions(-) diff --git a/icu4c/source/data/misc/dayPeriods.txt b/icu4c/source/data/misc/dayPeriods.txt index 0ec696f4ca2b..15b5091c0e5f 100644 --- a/icu4c/source/data/misc/dayPeriods.txt +++ b/icu4c/source/data/misc/dayPeriods.txt @@ -1822,10 +1822,10 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"06:00"} + from{"00:00"} } night1{ - before{"06:00"} + before{"24:00"} from{"21:00"} } noon{ @@ -3647,10 +3647,10 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"06:00"} + from{"00:00"} } night1{ - before{"06:00"} + before{"24:00"} from{"21:00"} } } diff --git a/icu4c/source/data/misc/langInfo.txt b/icu4c/source/data/misc/langInfo.txt index c9f69672ed1c..7f11f4f7ccaa 100644 --- a/icu4c/source/data/misc/langInfo.txt +++ b/icu4c/source/data/misc/langInfo.txt @@ -5627,7 +5627,6 @@ langInfo:table(nofallback){ 430236467, 427305158, 144669906, - 430945460, 422343989, 427756814, 429390503, @@ -7786,2038 +7785,2035 @@ langInfo:table(nofallback){ "ZR","CD", } trie:bin{ -001a6df03adb74d96a77ce9c77a88b78 -aec579b81d7a00186fc19d75957a647a -32e1d574e838f5d91d3801e1adf9ead9 -1d42022a3e42d85c2d4811616e01e2ab -aff4abaa0b4d26540f54d85bd9552a56 -10ceabad10d3abac4dd87175502a5310 +001a6df03ab774d96977ce9b77a88b78 +aec479b81c7a00186fc19d75957a647a +32e1d573e838f5d91d3701e1adf9ead9 +1d41022a3e42d85c014811616e01e2ab +aff4abaa0b4d26540f54d85bad552a56 +10ceabad10d3abac4dd87149502a5310 d2aba802c1aba7c6aba5c8aba647f05b -e7473248d871564910c4aba301c2abab -c6aba1754e776c7904e2d574e7d91d3e -ead91d3feed91d40f0d91d4103e8d91d -39edd91d3aeed91d3bf9d91d3c10e1d9 -1d3d7263729673a24d740bf11af50cf5 -d91d35f8d91d36f9d91d37f1d91d32f3 -d91d33f4d91d34ed0cedd91d2feed91d -30f0d91d31e5d91d2ce7d91d2decd91d -2e04e7d91d24eed91d25efd91d26f0d9 -1d27f3d91d2803e1d91d29edd831d4f2 -d91d2af5d91d2b6f30706a7110e5d91d -2306ef10efd91d05f1d91d06f2d91d07 -f3d91d08e3d91d03e8d91d04edd91c6c -0019ee3af41ef710f7d91d1ff8d91d20 -f9d91d21fad91d22f4d91d1cf5d91d1d -f6d91d1ef10cf1d91d19f2d91d1af3d9 -1d1beed91d16efd91d17f0d91d18e71e -ea10ead91d12ebd91d13ecd91d14edd9 -1d15e7d91d0fe8d91d10e9d91d11e40c -e4d91d0ce5d91d0de6d91d0ee1d91d09 -e2d91d0ae3d91d0b68c10a6cad6c506d -826e04e1d91cfee5d91cffe7d91d00eb -d91d01f3d91d0205ee0ceed91ce1f1d9 -1ce2f5d91ce3e1d91cdeead91cdfedd9 -1ce00019ee3af41ef710f7d91cfaf8d9 -1cfbf9d91cfcfad91cfdf4d91cf7f5d9 -1cf8f6d91cf9f10cf1d91cf4f2d91cf5 -f3d91cf6eed91cf1efd91cf2f0d91cf3 -e71eea10ead91cedebd91ceeecd91cef -edd91cf0e7d91ceae8d91cebe9d91cec -e40ce4d91ce7e5d91ce8e6d91ce9e1d9 -1ce4e2d91ce5e3d91ce66866698a6b07 -f00ff0d91cdbf4d568f5d91cdcfad91c -dde1d91cdae2b947e4b7c8efd91bb904 -e4d91ccfe9d91cd0eed91cd1f7d91cd2 -f8d5a407ee0feed91cd7f2cd14f7d91c -d8fad91cd9e1d91cd3ebd91cd4ecd91c -d5edd91cd66439645a65606705ed0ced -d91ccceed91ccdf2d91ccee1d91ccae2 -d91ccbe8d5b410ead91cc404e1d91cc5 -e7d91cc6e8d91cc7edd91cc8eed91cc9 -613a62a27a6301e1d91cc2e8d91cc300 -17ef36f51af80cf8d91cb9f9d91cbafa -d91cbbf5d91cb6f6d91cb7f7d91cb8f2 -0cf2d91cb3f3d91cb4f4d91cb5efd91c -b1f0d91cadf1d91cb2e71aea0cead91c -aeebd91cafedd91cb0e7d91cabe8d91c -ace9d91cade40ce4d91ca8e5d91ca9e6 -d91caae1d91ca5e2d91ca6e3d91ca705 -f40cf4d91cbff5d91cc0f7d91cc1e1d9 -1cbce3d91cbde5d91cbe00186dc19174 -96782a78307936e1d74cefd51b10f7d9 -1b1205ee0ceed91b16f2d91b17f9d91b -18e2d91b13e9d91b14edd91b15745075 -7e7704e1d91b0de2d91b0eefd91b0ff2 -d91b10f7d91b1106e90de9d7fdebd7fe -edd7fff7d91b00e2d7fae6d7fbe8d7fc -0bf21af60cf6d91b0af8d91b0bf9d91b -0cf2d91b07f4d91b08f5d91b09ec0cec -d91b04edd91b05eed91b06e1d91b01e2 -d91b02e4d91b03705b705c72607307f2 -0cf2d7f6f3d7f7f5d7f8f6d7f9e1d7f3 -e7d558e9d7f4ebd7f510e3d7e30ff01a -f60cf6d7eff7d7f0f8d7f1fad7f2f0d7 -ebf2d7ecf3d7edf5d7eeeb0cebd7e8ec -d7e9edd7eaefd5c5e2d7e4e7d7e5e8d7 -e6e9d7e76d906ea2666f0ee91aef0cef -d7dff2d7e0f3d7e1f7d7e2e9d7dbebd7 -dcedd7ddeed7dee40ce4d7d7e5d7d8e6 -d7d9e7d7dae1d7d4e2d7d5e3d7d60ded -17f30cf3d7c4f4d7c5f7d7c6f8d7c7ed -d7c1eed7c2efd7c3e40ce4d7bde5d7be -e8d7bfe9d7c0e1d7bae2d7bbe3d7bc0d -ed17f00cf0d7d1f5d7d2f7d7d3f9b186 -edd7cfeec165efd7d0e50ce5d7cbe7d7 -cce9d7cdebd7cee2d7c8e3d7c9e4d7ca -67b56a4a6a826b8c6c0cef17f50cf5d7 -b6f6d7b7f7d7b8f8d7b9efd7b3f2d7b4 -f3d7b5e809e8d7b0e9d7b1edd7b2e1d7 -ade5d7aee7d7af01e1d7a6e9d7a704e1 -d7a8e4d7a9f2d7aaf7d7abf9d7ac679e -68a257690010eb1df20ff2d7a2f5d7a3 -f6d7a4f7c718f9d7a5ebd79eecd79fed -d7a0eed7a1e70ce7d79ae8d79be9d79c -ead79de2d796e3d797e5d798e6d79907 -ef0cefd78ff5d790f7d78cf9d791e1d7 -8be2d78ce7d78de9d78e03e1d792e7d7 -93ebd794f5d7956452642e655a6610e7 -d78a06eb0cebd77af4d77bf5d77cf9d7 -7de4d777e7d778ead7790def17f30cf3 -d786f4d787f5d788f7d789efd184f0d7 -84f2d785e80ce8d781e9d782ecad7ded -d783e3d77ee4d77fe7d780613662a260 -6301e1d775e9d7760017ee2af514f809 -f8d762f9d763fad764f5d75ff6d760f7 -d761f209f2d75cf3d75df4d75eeed759 -f0d75af1d75be714ea09ead756ecd757 -edd758e7d753e8d754e9d755e409e4d7 -50e5d751e6d752e1d74de2d74ee3d74f -0fec1af20cf2d771f4d772f6d773f7d7 -74ecd76dedd76ef0d76ff1d770e80ce8 -d769e9d76aead76bebd76ce1d765e2d7 -66e5d767e6d76800186ec25875b67847 -783079567a90e8d91b4804e2d91be7eb -d91be8edd91be9f2d91beaf4d91beb06 -eb10ebd91befecd91bf0f4d91bf1f9d9 -1bf2e1d91bece2d91bedead91bee01e8 -d91bf3f0d91bf4757e76a2537709ec14 -ecd91be2efd91be3f2d91be4f4d91be5 -f7d91be6e1d91bdde4d91bdee5d91bdf -ead91be0ebd91be108ed14edd91bd3ee -d91bd4efd91bd5f4d91bd6f5d91bd7e2 -d91bcfe4d91bd0ead91bd1ecd91bd204 -e5d91bd8e9d91bd9eed91bdaefd91bdb -f3d91bdc72c0d172a25873a28b740012 -ed2af414f4d91bcaf5d91bcbf6d91bcc -f7d91bcdf9d91bceedd91bc5eed91bc6 -f0d91bc7f1d91bc8f3d91bc9e514e5d9 -1bc0e8d91bc1e9d91bc2ead91bc3ecd9 -1bc4e1d91bbce2d91bbde3d91bbee4d9 -1bbf0bed19f20cf2d91badf5d91baef7 -d91bafedd91babeed91bacf1af29e50c -e5d91ba8e7d91ba9e9d91baae1d91ba5 -e2d91ba6e4d91ba70eed22f210f2d91b -b8f3d91bb9f5d91bbaf9d91bbbedd91b -b4eed91bb5f0d91bb6f1d91bb7e80ee8 -d91bb2e9d91bb3eacf5becadc7e1d5ac -e2d91bb0e5d91bb16ea2606fa2957000 -14ec2ff219f70cf7d91ba2f8d91ba3fa -d91ba4f2d5aaf4d91ba0f6d91ba1ecd9 -1b9bedd91b9ceed91b9defd91b9ef1d9 -1b9fe714e7d91b96e8d91b97e9d91b98 -ead91b99ebd91b9ae1d91b92e2d91b93 -e4d91b94e5b9dfe6d91b950cee1cf40e -f4c171f5d91b85f9c381fad91b86eed9 -1b82f1d91b83f2d91b84ea0cead91b7f -ebd91b80edd91b81e1d5a1e2d91b7de9 -d91b7e0aed1af00cf0d91b8ff2d91b90 -f7d91b91edd91b8ceed91b8defd91b8e -e3d91b87e4d91b88e7d91b89e9d91b8a -ebd91b8b68c10c6bc0d56ba2606ca2c0 -6d0014ef2ff51af80cf8d91b7af9d91b -7bfad91b7cf5d91b77f6d91b78f7d91b -79efd91b73f0d91b74f1d91b75f2d599 -f4d91b76e713e7d91b6fe8d91b70ead9 -1b71edd91b72eed596e1d91b6ae2d91b -6be3d91b6ce4d91b6de6d91b6e0015f0 -30f51af80cf8d91b65f9d91b66fad91b -67f5d91b62f6d91b63f7d91b64f0d91b -5df1d91b5ef2d91b5ff3d91b60f4d91b -61e619ea0cead91b5aecd91b5beed91b -5ce6d91b58e7d91b59e8d761e1d91b53 -e2d91b54e3d91b55e4d91b56e5d91b57 -03e1d91b68e3d592e4d593f9d91b6968 -38694e6a01e2d91b51f4d91b5202e5d9 -1b49edd91b4af6d91b4b05f20cf2d91b -4ef3d91b4ff9d91b50e18fe9d91b4cee -d91b4d64586464658a6706e910e9d91b -44edd91b45f5d91b46f7d91b47e2d91b -41e4d91b42e7d91b4304e1d91b35ebd9 -1b36efd91b37f1d91b38f9d91b3906f2 -10f2d91b3df3d91b3ef4d91b3ff5d91b -40e4d91b3ae7d91b3bedd91b3c613c62 -a2566302e8abf9efd541f2d5400010ee -26f414f4d91b24f5d91b25f6d91b26f7 -d91b27f9d91b28eed91b20efd91b21f2 -d91b22f3d91b23ea10ead91b1cebd91b -1decd91b1eedd91b1fe1d91b19e2d91b -1ae7d52fe9d91b1b0cea1ef010f0d91b -31f2d91b32f7d91b33f9d91b34ead91b -2eedd91b2feed91b30e50ce5d91b2be7 -d91b2ce9d91b2de1ab5ee2d91b29e4d9 -1b2a00166ec175765c7912792ee9b72b -efd91c6401f2d91ca3f5d91ca4765c77 -6a7805ed0cedd91ca0f5d91ca1f9d91c -a2e1d91c9de7d91c9eecd91c9f01e1d9 -1c94f4d91c9506f110f1d91c99f2d91c -9af5d91c9bf7d91c9ce1d91c96e7d91c -97eed91c98739673a26f74a287750013 -ed2af414f4d91c90f5d91c87f7d91c91 -f8d91c92fad91c93edd91c8beed91c8c -f0d91c8df1d91c8ef2d91c8fe614e6d9 -1c86e7d91c87e9d91c88ead91c89ecd9 -1c8ae1d91c80e2d91c81e3d91c82e4d9 -1c83e5012a304812616ef3d91c85012a -d91c844310ced91c8505f20cf2d91c7b -f3d91c7cf9d91c7de4d91c78eed91c79 -f0d91c7a01f7d91c7ef9d91c7f6e7e6f -a24f7209ed14edd91c41efd91c74f3d9 -1c75f7d91c76f9d91c77e1d91c6fe2d9 -1c70e5d91c71ebd91c72ecd91c7307ec -10ecd91c61f1d91c27f3d91c62f5d91c -63e1d91c5de4d91c5ee7d91c5febd91c -6009ed14edd91c6aeed91c6bf3d91c6c -f4d91c6df9d91c6ee2d91c65e7d91c66 -e9d91c67ebd91c68ecd91c6967c0df6b -7e6b7c6ca2526d09ed13edd91c59eed9 -1c5aefd91c5bf0d91c5cf4c1f0e2d91c -54e5d91c55e7d91c56ebd91c57ecd91c -5808eb14ebd91c46edd91c47efd91c48 -f2d91c49f9d91c4ae1d91c42e7d91c43 -e8d91c44e9d91c4508e914e9d91c4fec -d91c50f2d91c51f5d91c52f9d91c53e1 -d91c4be2d91c4ce5d91c4de7d91c4e67 -8a68a255690aec1af30cf3d91c3ff6d9 -1c40f9d91c41ecd91c3cedd91c3df2d9 -1c3ee1d91c37e7d91c38e8d91c39e9d9 -1c3aead91c3b07f010f0d91c32f2d91c -33f5d91c34f7d91c35e1d91c2ee9d91c -2fecd91c30edd91c3110e4d91c3661a2 -4562a2b963a2f064a2fa650cee1ef410 -f4d91c2af5d91c2bf6d91c2cf9d91c2d -eed91c27f2d91c28f3d91c29e90ce9d9 -1c24ead91c25ecd91c26e1d91c21e3d9 -1c22e5d91c230019ee3af41ef710f7d9 -1c0af8d91c0bf9d91c0cfad91c0df4d9 -1c07f5d91c08f6d91c09f10cf1d91c04 -f2d91c05f3d91c06eed91c01efd91c02 -f0d91c03e71dea0fead91bfeebd91bff -ecd91c00edbb95e7d91bfbe8d91bfce9 -d91bfde40ce4d91bf8e5d91bf9e6d91b -fae1d91bf5e2d91bf6e3d91bf70cea1e -ee10eed91c16efd91c17f8d91c18f9d9 -1c19ead91c13ecd91c14edd91c15e50c -e5d91c10e8d91c11e9d91c12e1d91c0e -e2d91c0fe4ab7d02ecd91c1aeed91c1b -f2d91c1c04e1d91c1de4b72be5d91c1e -e7d91c1febd91c2074a45675b2857600 -116e46751b75367746e5d70ae9d52aef -d74002edd748eed749f4d74a10e1d74b -6e326f42724c7410efd74702ebd73ded -d73ef0d73f01f2d741f4d74203e1d743 -efd744f3d745f4d74669a769a2586aa2 -706ba2716ca2946d0015ec25f314f809 -f8d73af9d73bfad73cf3d737f5d738f7 -d739ecd732edd733f0d734f1d735f2d7 -36e614e909e9d72fead730ebd731e6d7 -2ce7d72de8d72ee1d727e2d728e3d729 -e4d72ae5d72b07ec0cecd715eed716f4 -d717f6d718e3d711e4d712e6d713e7d7 -1410ebd7190aee14f409f4d722f5d723 -fad724eed71fefd720f0d721e1d71aea -d71bebd71cecd71dedd71e01f0d725f3 -d726613662a24365a2476710f2d71000 -10ed1df20ff2d703f3d704f5d705f6d7 -06f9d707edd5ffeed700efd701f0d702 -e80ce8d5fde9d5bbeab1ccecd5fee1d5 -f9e5d5fae6d5fbe7d5fc01e2d708ebd7 -0904e3d70bedd70cefd70df0d70ef2d7 -0f002775c18ce920f20ff2d1e7f3d300 -f4d312f7a3b9f9d36be9d13debd15dec -d170eed19eefd1b47a387a36e1cf9fe5 -cff7e756e8d12b06ed0cedd37eeed37f -efd380f8d381e8d37bead37cecd37d01 -2a2e41127261e2d115012ad1145010cb -d11575a24176a28777a2b578a2f3790f -f21af60cf6d377f8d378f9d379fad37a -f2d373f3d374f4d375f5d376ea0cead1 -95ecd370eed371f0d372e1d36ce5d36d -e8d36ee9d36f0014ec25f314f809f8d3 -3bf9d33cfad33df3d338f5d339f6d33a -ecd333edd334eed335efd336f1d337e6 -0fe6d32ee7d32fe8d330e9d331ead332 -e1d329e2d32ae3d32be4d32ce5d32d0d -ee17f40cf4d347f5d348f7d349f8d34a -eed344efd345f3d346e90ce9d340ebd3 -41ecd342edd343e1d33ee4bba1e5d33f -0012ee20f40ff4d358f5d359f7d35af8 -d35bf9d35ceed353efd354f0d355f1d3 -56f2d357e60fe6d34fe7d350e8d351ec -d352edd164e1d34be2d34ce4d34de5d3 -4e0def17f40cf4d367f5d368f8d369f9 -d36aefd364f1d365f3d366e90ce9d360 -ead361edd362eed363e1d35de5d35ee7 -d35f6bc2e870c15870a25d71a29e72a2 -b973a40e740016ee2af414f709f7d326 -f9d327fad328f4d323f5d324f6d325f1 -09f1d18ef2d321f3d322eed31eefd31f -f0d320e814eb09ebd31becd31cedd31d -e8d318e9d319ead31ae2d313e3d314e4 -d315e5d316e6d3170013ee20f60ff6d1 -daf7d1d5f8d1dbf9d1dcfad1ddeed1d5 -f0d1d6f2d1d7f4d1d8f5d1d9e90fe9d1 -d0ead1d1ebd1d2ecd1d3edd1d4e1d1cb -e3d1cce5d1cde6d1cee7d1cf08ef0fef -d1e2f0d1e3f4d1e4f5d1e5f7d1e6e2d1 -deecd1dfedd1e0eed1e10017ef2af514 -f809f8d1fdf9d1fefad1fff5d1faf6d1 -fbf7d1fcf209f2d1f7f3d1f8f4d1f9ef -d1f4f0d1f5f1d1f6e814ec09ecd1f1ed -d1f2eed1f3e8d1eee9d1efead1f0e509 -e5d1ebe6d1ece7d1ede1d1e8e2d1e9e3 -d1ea0011ec1df50ff5d30df6d30ef7d3 -0ff8d310fad311ecd309f0d30af2d30b -f4d30ce60fe6cfa7e7d305e8d306e9d3 -07ead308e1d301e2d302e3d303e4d304 -6ba2586ca2936da2de6ea4336f0015ef -25f514f809f8d1c8f9d1c9fad1caf5d1 -c5f6d1c6f7d1c7efd1c0f0d1c1f1d1c2 -f2d1c3f3d1c4e814eb09ebd1bdecd1be -edd1bfe8d1bae9d1bbead1bce2d1b5e3 -d1b6e4d1b7e6d1b8e7d1b90011f11df5 -0ff5d16bf6d16cf7d16df8d16efad16f -f1d167f2d168f3d169f4d16ae60fe6d1 -62e7d163ebd164ecd165f0d166e1d15e -e2d15fe4d160e5d1610015ee25f414f7 -09f7d184f8d185f9d186f4d181f5d182 -f6d183eed17cf0d17df1d17ef2d17ff3 -d180e714eb09ebd179ecd17aedd17be7 -d176e9d177ead178e1d171e2d172e3d1 -73e4d174e6d1750017ed2af414f709f7 -d19bf9d19cfad19df4d198f5d199f6d1 -9af009f0d195f1d196f2d197edd192ee -d193efd194e714ea09ead190ebcfe7ec -d191e7d18de8d18ee9d18fe409e4d18a -e5d18be6d18ce1d187e2d188e3d18900 -15ee25f314f709f7d1b1f8d1b2f9d1b3 -f3d1aef4d1aff6d1b0eed1a9efd1aaf0 -d1abf1d1acf2d1ade714eb09ebd1a6ec -d1a7edd1a8e7d1a3e8d1a4e9d1a5e1d1 -9fe2d1a0e3d1a1e4d1a2e5b77d66c11b -667e679a68a28869a2c36a0aee14f309 -f3d15af5d15bf7d15ceed157efd158f0 -d159e1d152e7d153e9d154ead155ecd1 -5604e9d10feed110efd111f2d112f4d1 -130015ef25f514f809f8d128f9d129fa -d12af5d125f6d126f7d127efd120f0d1 -21f1d122f3d123f4d124e614e909e9d1 -1dead11eeed11fe6d11be7a7c9e8d11c -e1d116e2d117e3d118e4d119e5d11a00 -11f11df50ff5d139f6d13af7c77ff9d1 -3bfad13cf1d135f2d136f3d137f4d138 -e90fe9d130ebd131ecd132edd133f0d1 -34e4d12ce5d12de6d12ee8d12f0015ee -25f414f709f7d14ff8d150f9d151f4d1 -4cf5d14df6d14eeed147efd148f0d149 -f1d14af3d14be814eb09ebd144ecd145 -edd146e8d141e9d142ead143e2a936e3 -d13ee4b5d9e6d13fe7d14061a25d62a2 -a863a2f864a43e650016ef2af514f809 -f8d10cf9d10dfad10ef5d109f6d10af7 -d10bf209f2d106f3d107f4d108efd103 -f0d104f1d105e714eb09ebd100edd101 -eed102e7cffde8cffee9cfffe1cff8e2 -cff9e3cffae4cffbe5cffc0015ef25f5 -14f809f8cfb3f9cfb4facfb5f5cfb0f6 -cfb1f7cfb2efcfabf0cfacf1cfadf2cf -aef3cfafe614eb09ebcfa8eccfa9eecf -aae6cfa5e7cfa6eacfa7e1cfa0e2cfa1 -e3cfa2e4cfa3e5cfa40016ed2af514f8 -09f8cfcaf9cfcbfacfccf5cfc7f6cfc8 -f7cfc9f009f0cfc4f3cfc5f4cfc6edcf -c1eecfc2efcfc3e714ea09eacfbeebcf -bfeccfc0e7cfbbe8cfbce9cfbde1cfb6 -e3cfb7e4cfb8e5cfb9e6cfba0014ed25 -f314f809f8cfdff9cfe0facfe1f3cfdc -f5cfddf7cfdeedcfd7eecfd8efcfd9f0 -cfdaf1cfdbe60fe6cfd2e7cfd3e8cfd4 -e9cfd5ebcfd6e1cfcde2cfcee3cfcfe4 -cfd0e5cfd10015ed25f314f609f6cff4 -f8cff5f9cff6f3cff2f4cff3f5af6aed -cfedeecfeeefcfeff1cff0f2cff1e714 -ea09eacfeaebcfebeccfece7cfe7e8cf -e8e9cfe9e1cfe2e2cfe3e3cfe4e4cfe5 -e5cfe6001a6fc101775ae72ce742ebd3 -a1f2d511fa012a8a41127261e2d5f601 -2a2e43127972ecd395022ad3944b2a4d -10ced39610dad395776479687a01ee26 -f3d5f8012a2e41127261e2d5f6022ad5 -28412a4310ced5f710c6d5f610e1d5f4 -10e1d5f57345733e746a75907602e5d5 -f1e8d5f2ecd5f306eb0cebd5e6f0d5e7 -f3d5e8f5d5e9e1d5e3e8d5e4e9d5e505 -f009f0d5ecf2d5edf5d5eee1d5eae5d5 -ebe8af7301edd5eff2d5f06fa24d70a2 -51720014ee25f514f809f8d5e0f9d5e1 -fad5e2f5d5ddf6d5def7d5dfeed5d8ef -d5d9f0d5daf2d5dbf4d5dce70fe7d5d3 -e8d5d4e9d5d5ebd5d6edd5d7e1d5cee2 -d5cfe3d5d0e5d5d1e6d5d201ebafcaee -d5cb01e9d5ccf6d5cd68c0dc6bc0c26b -a2436ca2666da28e6e0bee25f509f5d5 -c8f8d5c9fad5caeed5c4f0d5c5f2012a -2e44126576e1d5c7012ad5c64e10d0d5 -c7e909e9d5c1ebd5c2edd5c3e1d3c2e5 -d5bfe7d5c00af014f609f6d3aaf7d3ab -f9d3acf0d3a7f1d3a8f5d3a9e1d3a2e7 -d3a3e8d3a4e9d3a5ebd3a60beb14f509 -f5d3b6f7cf5df9d3b7ebd3b3edd3b4ee -d3b5e509e5d3b0e6d3b1e9d3b2e1d3ad -e2d3aee3d3af0bee14f209f2d3c0f3d3 -c1f5adc5eed3bdefd3bef0d3bfe709e7 -d3bbe9cf97edd3bce1d3b8e2d3b9e4d3 -ba682e69386a10e9d3a001e1d39ceed3 -9d01f3d39ef6d39f651d6546664a6704 -e1d397e2d398e5d399e8d39aefd39b10 -f3d39210e9d393615c62666407ea0cea -d38eecd38fedd390f5d391e1d38ae5d3 -8be7d38ce9d38d01edd382f2d38305f2 -09f2d387f5d388f9d389e1d384e9d385 -ecd38670ceff70b02871b8fc72bac573 -002b77c12fec3af229f509f5cf54f6cf -67f7cf6ef22cf3cf29f4cf3e22032acd -024daebd522a5410d2cd0601cfcd05d5 -cd03eccdacedcdbdeecdd2efcde7f1a3 -cfe336e709e7cd47e9cd70ebcd93e3cd -00e426e5cd2b032a3644444b4c531269 -6ee4cd1a012acd174910cecd18126576 -e1cd1812686feacd19773878a24a79a2 -5f7aa28ae1abf00012f020f50ff5cf7c -f6cf7df7cf7ef8cf7ff9cf80f0cf77f1 -cf78f2cf79f3cf7af4cf7be90fe9cf72 -eacf73ebcf74edcf75efcf76e2cf6fe6 -cf70e7cf71e8cf6e06f20cf2cf84f3cf -85f5cf86f7cf87e2cf81e5cf82eecf83 -0ced17f20cf2abe7f3cf91f7cf92f8cf -93edcf8eeecf8fefcf90e909e9cf8beb -cf8ceccf8de1cf88e2cf89e3cf8a0aec -14f609f6cf9cf7cf9df9cf9eeccf99ee -cf9af0cf9be1cf94e2cf95e3cf96e4cf -97e7cf986cc2c171c15d74a5745275a2 -5f7605e509e5cf6bedcf6cf3cf6de1cf -68e2cf69e3cf6a0014ed25f214f609f6 -cf51f7cf52f9cf53f2cf4ef3cf4ff4cf -50edcf49eecf4aefcf4bf0cf4cf1cf4d -e80fe8cf44e9cf45eacf46ebcf47eccf -48e1cf3fe2cf40e5cf41e6cf42e7cf43 -0012ed20f40ff4cf62f6cf63f7cf64f9 -cf65facf66edcf5defcf5ef1cf5ff2cf -60f3cf61e70fe7cf59e9cf5aeacf5beb -cf5ceccd4be1cf55e2cf56e3cf57e5cf -5871a24872a25d730013ee20f50ff5cf -39f6cf3af8cf3bf9cf3cfacf3deecf34 -efcf35f1cf36f3cf37f4cf38e70fe7cf -2fe8cf30eacf31eccf32edcf33e2cf2a -e3cf2be4cf2ce5cf2de6cf2e06ef0cef -cf10f1cf11f4cf12f5cf13e1cf0de8cf -0eedcf0f0016ee2af514f809f8b3e1f9 -cf27facf28f5cf24f6cf25f7cf26f209 -f2cf21f3cf22f4cf23eecf1eefcf1ff1 -cf20e714eb09ebcf1beccf1cedcf1de7 -cf18e8cf19e9cf1ae1cf14e2cf15e3cd -00e5cf16e6cf176ca2486da2806ea2c6 -6fa411700011ee1df20ff2cf09f3cf0a -f4cf0bf6cf0cf9b984eecf05efcf06f0 -cf07f1cf08e70fe7cf00e9cf01ebcf02 -eccf03edcf04e2cdfce3cdfde4cdfee5 -cdff0010ee1df50ff5cdb8f7cdb9f8cd -baf9cdbbfacdbceecdb5efcd93f0cdb6 -f2cdb7e90ce9cdb1eacdb2eccdb3edcd -b4e3cdade4cdaee7cdafe8cdb00014ee -25f414f809f8cdcff9cdd0facdd1f4cd -ccf5cdcdf7cdceeecdc7f0cdc8f1cdc9 -f2cdcaf3cdcbe70fe7cdc2e8cdc3eacd -c4ebcdc5eccdc6e1cdbee2cdbfe3cdc0 -e4b993e6cdc10015ef25f514f809f8cd -e5f9cde6faa564f5cde2f6cde3f7cde4 -efcdddf0cddef1cddff2cde0f3cde1e9 -14ec09eccddaedcddbeecddce9cdd7ea -cdd8ebcdd9e2a7f3e3cdd3e5cdd4e6cd -d5e7cdd60013f020f60ff6cdf7f7cdf8 -f8cdf9f9cdfafacdfbf0cdf2f1cdf3f2 -cdf4f3cdf5f5cdf6e70fe7cdede9cdee -ebcdefeccdf0efcdf1e1cde8e2cde9e3 -cdeae4cdebe5cdec66c17d69c0d869a2 -5c6aa2a76b0017ef2af514f809f8cda9 -f9cdaafacdabf5cda6f6cda7f7cda8f2 -09f2cda3f3cda4f4cda5efcda0f0cda1 -f1cda2e714ea09eacd9dedcd9eeecd9f -e7cd9ae8cd9be9cd9ce409e4cd97e5cd -98e6cd99e1cd94e2cd95e3cd960015ed -25f514f809f8cd84f9cd85facd86f5cd -81f6cd82f7cd83edcd7cf0cd7df1cd7e -f2cd7ff3cd80e714ea09eacd79ebcd7a -eccd7be7cd76e8cd77e9cd78e1cd71e2 -cd72e4cd73e5cd74e6cd750bed14f409 -f4cd90f5cd91f7cd92edcd8df0cd8ef2 -cd8fe509e5cd8ae7cd8beccd8ce1cd87 -e2cd88e4cd8966a25767a25e680016ee -2af414f709f7cd6df9cd6efacd6ff4cd -6af5cd6bf6cd6cf109f1cd67f2cd68f3 -cd69eecd64efcd65f0cd66e714ea09ea -cd61ebcd62edcd63e7cd5ee8cd5fe9cd -60e1cd59e2cd5ae3cd5be4cd5ce5cd5d -02e5cd44edcd45f7cd460011ed1df40f -f4cd54f5cd55f7cd56f9cd57facd58ed -cd50f0cd51f2cd52f3cd53e50fe5cd4c -e8cd4de9cd4eeacd4fecb5d1e1cd48e2 -cd49e3cd4ae4cd4b61a26262a2ad63a4 -0564a466650017ee2af414f709f7cd41 -f9cd42facd43f4cd3ef5cd3ff6cd40f1 -09f1cd3bf2cd3cf3cd3deecd38efcd39 -f0cd3ae714ea09eacd35ebcd36eccd37 -e7cd32e8cd33e9cd34e409e4cd2fe5cd -30e6cd31e1cd2ce2cd2de3cd2e0015f0 -25f514f809f8cbe4f9cbe5facbe6f5cb -e1f6cbe2f7cbe3f0a546f1cbddf2cbde -f3cbdff4cbe0e614eb09ebcbdaedcbdb -efcbdce6cbd7e8cbd8eacbd9e1cbd2e2 -cbd3e3cbd4e4cbd5e5cbd60018ee2df4 -17f70cf7cbfcf8cbfdf9cbfefacbfff4 -cbf9f5cbfaf6cbfbf109f1cbf6f2cbf7 -f3cbf8eecbf3efcbf4f0cbf5e814eb09 -ebcbf0eccbf1edcbf2e8cbede9cbeeea -cbefe409e4cbeae5cbebe7cbece1cbe7 -e2cbe8e3cbe90012ee20f40ff4cd12f5 -cd13f6cd14f7cd15f8cd16eecd0eefcd -0ff0cd10f2b51ff3cd11e70fe7cd09e8 -cd0ae9cd0bebcd0ceccd0de2cd01e32c -e5cd07e6cd0822055211522e53325410 -d2cd0610cfcd0510d5cd032acd02312a -4d10c5cd041137b2cd030feb1af20cf2 -cd27f3cd28f5cd29f8cd2aebcd23eecd -24efcd25f1cd26e60ce6cd1fe7cd20e8 -cd21eacd22e1cd1be2cd1ce3cd1de5cd -1e001d70c17b784be90ce9c94aecc96a -f3c909f4c9e1785079547a7ae1012a2e -41127261e2c7e2012ac7e15010cbc7e2 -10edcb0705f509f5cb0bf8cb0cf9cb0d -e5cb08edcb09eecb0a02e5cb0ee8cb0f -eecb1073af736474a24575a2637707ee -0ceecb03efcb04f2cb05f7cb06e1c9ff -e2cb00e7cb01edcb020aee14f409f4c9 -def5c9dff7c9e0eec9dbf1c9dcf3c9dd -e1c9d6e5c9d7e8c9d8e9c9d9edc9da09 -f00ff0c9e7f2c9e8f4c9e9f5c9eaf6c9 -ebe1c9e2e8c9e3e9c9e4eec9e5efc9e6 -0013ef20f50ff5c9fbf7c9fcf8c9fdf9 -c9fefac9edefc9f6f0c9f7f1c9f8f2c9 -f9f4c9fae60fe6c9f1e7c9f2e9c9f3ea -c9f4edc9f5e1c9ece2c9ede3c9eee4c9 -efe5c9f070a24571a270720012ed20f4 -0ff4c9d2f5c9d3f7c9d4f8c9d5f9c9d2 -edc9ceefc9cff0b365f1c9d0f2c9d1e6 -0fe6c9c9e7c9cae8c9cbe9c9ccebc9cd -e1c9c5e3c9c6e4c9c7e5c9c80cee17f1 -0cf1c9c0f2bd12f3c9c1f4c9c2eec9bd -efc9bef0c9bfeb09ebc9baecc9bbedc9 -bce1a776e5c9b8e9c9b901e1c9c3edc9 -c468c1f76cc14d6ca2426da27d6ea2c8 -6f0010ee1df30ff3c9b3f4c9b4f6c9b5 -f7c9b6f9c9b7eec9afefc9b0f0c9b1f1 -c9b2e80ce8c9abe9c9acebc9adedc9ae -e3c9a7e5c9a8e6c9a9e7c9aa0011ee1d -f40ff4bfb3f5b906f6c978f7c979fac9 -7aeec974efc975f2c976f3c977e50fe5 -c96fe7c970e8c971ebc972ecc973e1c9 -6be2c96ce3c96de4c96e0015ee25f414 -f809f8c98cf9c98dfac98ef4c98af5c9 -45f7c98beec985efc986f1c987f2c988 -f3c989e614ea09eac982ecc983edc984 -e6c97fe8c980e9c981e1c97be2c97ce3 -b548e4c97de5c97e0016ed53f33df709 -f7c9a4f9c9a5fac9a6f3c99ff426f6c9 -a3022a32435e4c126174eec9a2042ac9 -a03132523853345410d2c9a21137b2c9 -a110d5c9a1127972ecc9a1f009f0c99c -f1c99df2c99eedc999eec99aefc99be7 -14ea09eac996ebc997ecc998e7c993e8 -c994e9c995e1c98fe2bbe9e3c990e4c9 -91e5c992686a69a2506aa29b6b08ee0f -eec965efc966f0c967f2c968f5c969e1 -c961e2c962e7c963e8c9640cee17f40c -f4c946f5c947f6c948f7c949eec943ef -c944f2c945eb09ebc940ecc941edc942 -e4c93de7c93ee8c93f0015ef25f514f8 -09f8c95df9c95efac95ff5c95af6c95b -f7c95cefc955f0c956f2c957f3c958f4 -c959e714ec09ecc952edc953eec954e7 -c950e8c951eaad1fe1c94be2c94ce3c9 -4de4c94ee6c94f10f4c9606483646865 -8e66a2726708eb0febc938ecc939eec9 -3af3c93bf5c93ce1c934e4c935e7c936 -e9c93705ef09efc91ef4c91ff5c920e1 -c91be3c91ceec91d0011ef1df30ff3b1 -13f6c92df8c92ef9c92ffac930efc92a -f0c92bf1c92cf2b113e70fe7c925e9c9 -26ebc927ecc928edc929e1c921e2c922 -e4c923e5c92402e1c931e5c932ecc933 -619662a295630fe91aee0ceec918f0c9 -19f2a355f7c91ae9c914eac915ebc916 -edc917e50ce5c910e6c911e7c912e8c9 -13e1c90ce2c90de3c90ee4c90f0016ef -2af514f809f8c7f7f9c7f8fac7f9f5c7 -f4f6c7f5f7c7f6f209f2c7f2f3c7f3f4 -bbabefc7eff0c7f0f1c7f1e71eeb13eb -c7ebec26edc7ee012ac7ec5012686cf0 -c7ede7c7e8e8c7e9e9c7eae2c7e3e3c7 -e4e4c7e5e5c7e6e6c7e70011ee1df30f -f3c907f4c908f5c909f6c90af9c90bee -c903efc904f0c905f2c906e70fe7c7fe -e8c7ffe9c900ecc901edc902e2c7fae3 -c7fbe5c7fce6c7fd057839782a797cf5 -cb110bf014f409f4cb42f5cb43f7cb44 -f0cb3ff1cb40f2cb41ec09eccb3ceecb -3defcb3ee1cb39e3cb3ae8cb3b01e1cb -45f0cb46755276a25a7705ed09edcb36 -f3cb37f4cb38e1cb33e3cb34e8cb3500 -13ee20f60ff6cb21f7cb22f8cb23f9cb -24facb11eecb1cf0cb1df1cb1ef2cb1f -f3cb20e70fe7cb17e9cb18ebcb19eccb -1aedcb1be1cb12e2cb13e3cb14e4cb15 -e6cb160ded17f00cf0cb2ff3cb30f7cb -31facb32edcb2ceecb2defcb2ee80ce8 -cb28e9cb29eacb2aeccb2be1cb25e3cb -26e5cb270019709f7820ee0ceecb9aef -c16cf5cbb9f7cbc8782a7934edcb8401 -e4cbcff7cbd010f5cbd1745b74507566 -7705ed09edcbccefcbcdf2cbcee1cbc9 -ebcbcaeccbcb03e3cbb5e8cbb6edcbb7 -f7cbb80eed1af40cf4cbc4f5cbc5f9cb -c6facbc7edc16cefcbc1f0cbc2f1cbc3 -e60ce6cbbde7cbbee9cbbfebcbc0e2cb -bae3cbbbe5cbbc7034723e7301ebcbb3 -f7cbb401eecbadf4cbae03e9cbafedcb -b0efcbb1f4cbb268c0ea6bb76b8a6da2 -4a6ea29a6f0cec17f00cf0cba9f2cbaa -f5cbabf7cbaceccba7edcb98efcba8e5 -09e5cba4e6cba5e7cba6e2cba1e3cba2 -e4cba306e90ce9ab7dedcb81f4cb82f7 -cb83e1cb7ee2cb7fe8cb800016ed2af4 -14f809f8bda3f9cb98facb99f4cb95f5 -cb96f7cb97f009f0cb93f1cb94f2afd7 -edcb90eecb91efcb92e614e909e9cb8d -ebcb8eeccb8fe6cb8ae7cb8be8cb8ce1 -cb85e2cb86e3cb87e4cb88e5cb8905ee -09eecb9ef2cb9ff7cba0e4cb9be7cb9c -eccb9d683a69446a02e7cb7be9cb7cf3 -cb7d01e7cb71f0cb7207ee0ceecb77f2 -cb78f4cb79f5cb7ae1cb73e6cb74eccb -75edcb7664446446654a6704e1cb6cee -cb6df2cb6ef3cb6ff5cb7010e2cb5f0b -ec14f309f3cb69f4cb6af9cb6beccb66 -edcb67eecb68e709e7cb63e9cb64eacb -65e1cb60e2cb61e5cb62613062a24963 -10e6cb5e0013ed20f60ff6cb55f7cb56 -f8cb57f9cb58facb59edcb50eecb51ef -cb52f0cb53f2cb54e70fe7cb4ce8cb4d -e9cb4eeac309ebcb4fe1cb47e2cb48e3 -cb49e4cb4ae6cb4b03e2cb5aebcb5bec -cb5cf0cb5d6da6596eb8666f001b70c0 -f27923ea0ceac769edb183f2c7acf3c7 -bb792a7a3ae3c75502e4c7ddedc7def9 -c7df10edc7e07462743c75a24976a256 -7701e9c7dbecc7dc0011f11df50ff5c7 -d1f7c7d2f8c7d3f9c7d4fac7d5f1c7cd -f2c7cef3c7cff4c7d0e90fe9c7c8ebc7 -c9ecc7caedc7cbeec7cce1c7c4e2c7c5 -e4c7c6e5c7c704e2c7d6e5c7d7e9c7d8 -edc7d9eeb1cc10e4c7da705c72827307 -f00cf0c7c0f4c7c1f5c7c2f8c7c3e1c7 -bce3c7bde9c7beefc7bf05ef09efc7a9 -f4c7aaf9c7abe1b560ebc7a7edc7a80e -f31af70cf7c7b8f8c7b9f9c7acfac7ba -f3c7b4f4c7b5f5c7b6f6c7b7e70ce7c7 -b0eec7b1efc7b2f2c7b3e1c7ade3c7ae -e5c7af69c0f06c926c406d786ea25a6f -02e4c7a4eec7a5f2c7a608ed0fedc783 -efc784f2c785f4c786f5c787e1c77fe4 -c780e5c781ebc7820def17f40cf4c792 -f5c793f7c794f8c795efc78ff0c790f2 -c791e70ce7c78be9c78cebc78decc78e -e1c788e2c789e3c78a0def17f30cf3c7 -a0f4c7a1f5c7a2f8c7a3efc79df0c79e -f2c79fe90ce9c799eac79aebc79beec7 -9ce1c796e5c797e7c79869966aa2426b -0fed1af50cf5c77bf6c77cf8c77dfac7 -7eedc777efc778f2c779f3c77ae50ce5 -c773e7c774e9c775ebc776e1c76fe2c7 -70e3c771e4c77202e1c766e5c767eec7 -6805f309f3c76cf6c76df7c76ee2c76a -e3c76be7c76964326438664e67586801 -f4c764f5c76503e1c759ebc75af4c75b -f5c75c01f3c75df5c75e04e2c75fe3c7 -60e7c761efc762f5c763613a62506302 -e1c756efc757f5c75803e1c749e3c74a -f2c74bf6c74c07ef0cefc751f2c752f4 -c753f5c754e9c74debc74eecc74fedc7 -50002473c2cae82aef0fefc16cf2c1b4 -f3b200f4c1e3f9a9d2e8bfcde9bf2feb -bf26ecc128ee012ad833f54d126f6ee7 -af5177c14c773878a26179a2bc7aa2fd -e7bfb30017ed2af314f609f6c33af7c3 -3bfac33cf3c337f4c338f5c339f009f0 -c335f1c336f2addfedc332eec333efc3 -34e714ea09eab1ccebc330ecc331e7c3 -2de8c32ee9c32fe409e4af29e5c32be6 -c32ce1c328e2c329e3c32a0019ee2df4 -17f70cf7c353f8c354f9c355fac356f4 -c350f5c351f6c352f109f1c34df2c34e -f3c34feec34aefc34bf0c34ce717ea0c -eac346ebc347ecc348edc349e7c343e8 -c344e9c345e409e4c340e5c341e6c342 -e1c33de2c33ee3c33f0013ed20f60ff6 -c364f7c365f8c366f9c367fac368edc3 -60f0c361f2c362f4c1cbf5c363e70fe7 -c35be8c35ceac35debc35eecc35fe2c3 -57e3c358e4a51de5c359e6c35a0013ef -20f50ff5c378f6c379f7c37af8c37bfa -c37cefc373f0c374f1c375f2c376f4c3 -77ea0feac36eebc36fecc370edc371ee -c372e1c369e4c36ae5c36be8c36ce9c3 -6d73a25074a2a075a2f8760014f025f5 -14f809f8c325f9c326fac327f5c322f6 -c323f7c324f0c31df1c31ef2c31ff3c3 -20f4c321e80fe8c318ebc319ecc31aee -c31befc31ce1c313e4c314e5c315e6c3 -16e7c3170016ee2af514f809f8c1e0f9 -c1e1fac1e2f5c1ddf6c1def7c1dff109 -f1c1dbf3c1dcf4c1cbeec1d8efc1d9f0 -c1dae814eb09ebc1d5ecc1d6edc1d7e8 -c1d2e9c1d3eac1d4e2c1cde3c1cee5c1 -cfe6c1d0e7c1d10018ed2df317f60cf6 -c1f9f7c1faf8c1fbf9c1fcf3c1f6f4c1 -f7f5c1f8f009f0c1f3f1c1f4f2c1f5ed -c1f0eec1f1efc1f2e714ea09eac1edeb -c1eeecc1efe7c1eae8c1ebe9c1ece409 -e4c1e7e5c1e8e6c1e9e1c1e4e2c1e5e3 -c1e60015ef25f414f809f8c310f9c311 -fac312f4c30df5c30ef6c30fefc308f0 -c309f1c30af2c30bf3c30ce714ea09ea -c305ebc306edc307e7c302e8c303e9c3 -04e1c1fde2c1fee3c1ffe4c300e5c301 -6ac3076ec1c76ea2626fa2bb70a40b71 -a463720017ef2af514f809f8c1caf9c1 -cbfac1ccf5c1c7f6c1c8f7c1c9f209f2 -c1c4f3c1c5f4c1c6efc1c1f0c1c2f1c1 -c3e814ec09ecc1beedc1bfeec1c0e8c1 -bbeac1bcebc1bde409e4c1b8e6c1b9e7 -c1bae1c1b5e2c1b6e3c1b70018ed2df4 -17f70cf7c168f8c169f9c16afac16bf4 -c165f5c166f6c167f109f1c162f2c163 -f3c164edc15feec160f0c161e715ea0a -eac15debd829caecc15ee7c15ae8c15b -e9c15ce409e4c157e5c158e6c159e1c1 -54e2c155e3c1560016ef2af514f809f8 -c180f9c181fac182f5c17df6c17ef7c1 -7ff209f2c17af3c17bf4c17cefc177f0 -c178f1c179e714ea09eac175ebc176ed -abd2e7c172e8c173e9c174e1c16de3c1 -6ee4c16fe5c170e6c1710018ee2df417 -f70cf7c198f8c199f9c19afac19bf4c1 -95f5c196f6c197f109f1c192f2c193f3 -c194eec18fefc190f0c191e814eb09eb -c18cecc18dedc18ee8c189e9c18aeac1 -8be409e4c186e5c187e7c188e1c183e2 -c184e3c1850017ee2af514f809f8c1b1 -f9c1b2fac1b3f5c1aef6c1aff7c1b0f1 -09f1c1abf2c1acf3c1adeec1a8efc1a9 -f0c1aae814eb09ebc1a5ecc1a6edc1a7 -e8c1a2e9c1a3eac1a4e509e5c19fe6c1 -a0e7c1a1e1c19ce2c19de3c19e6aa255 -6ba2a06ca2eb6d0015ef25f514f809f8 -c151f9c152fac153f5c14ef6c14ff7c1 -50efc149f0c14af1c14bf2c14cf4c14d -e614e909e9c146edc147eec148e6c143 -e7c144e8c145e1c13ee2c13fe3c140e4 -c141e5c1420015ee25f514f809f8c10f -f9c110fac111f5c10cf6c10df7c10eee -c107f1c108f2c109f3c10af4c10be814 -eb09ebc104ecc105edc106e8c101e9c1 -02eac103e2bffce3bffde4bffee5bfff -e7c1000015ef25f514f809f8c125f9c1 -26fac127f5c122f6c123f7c124efc11d -f0c11ef2c11ff3c120f4c121e914ec09 -ecc11aedc11beec11ce9c117eac118eb -c119e1c112e2c113e3c114e5c115e6c1 -160014ee25f314f709f7c13bf8c13cfa -c13df3c138f5c139f6c13aeec133efc1 -34f0c135f1c136f2c137e80fe8c12ee9 -c12feac130ebc131ecc132e1c129e2c1 -2ae3c12be5c12ce6c12d65c1c465a262 -66a2b267a40a68a465690017ed2af414 -f809f8bff9f9bffafabffbf4bff6f5bf -f7f7bff8f009f0bff3f1bff4f2bff5ed -bff0eebff1efbff2e714ea09eabfedeb -bfeeecbfefe7bfeae8bfebe9bfece409 -e4bfe7e5bfe8e6bfe9e1bfe4e2bfe5e3 -bfe60016ee2af414f709f7bf97f9bf98 -fabf99f4bf94f5bf95f6bf96f109f1bf -91f2bf92f3bf93eebf8eefbf8ff0bf90 -e714eb09ebbf8becbf8cedbf8de7abc6 -e8bf89eabf8ae1bf84e2bf85e3bf86e4 -bf87e5bf880018ed2df417f70cf7bfaf -f8bfb0f9bfb1fabfb2f4bfacf5bfadf6 -bfaef009f0bfa9f1bfaaf2bfabedbfa6 -eebfa7efbfa8e714ea09eabfa3ebbfa4 -ecbfa5e7bfa0e8bfa1e9bfa2e409e4bf -9de5bf9ee6bf9fe1bf9ae2bf9be3bf9c -0019ee2df417f70cf7bfcaf8b711f9bf -cbfabfccf4bfc7f5bfc8f6bfc9f109f1 -bfc4f2bfc5f3bfc6eebfc1efbfc2f0bf -c3e717ea0ceabfbdebbfbeecbfbfedbf -c0e7bfbae8bfbbe9bfbce409e4bfb7e5 -bfb8e6bfb9e1bfb4e2bfb5e3bfb60016 -ee2af414f809f8bfe1f9bfe2fabfe3f4 -bfdef5bfdff7bfe0f109f1bfdcf2abb3 -f3bfddeebfd9efbfdaf0bfdbe714eb09 -ebbfd6ecbfd7edbfd8e7bfd3e9bfd4ea -bfd5e2bfcee3bfcfe4bfd0e5bfd1e6bf -d261a25f62a2b463a409640017ee2af5 -14f809f8bf81f9bf82fabf83f5bf7ef6 -bf7ff7bf80f209f2bf7bf3bf7cf4bf7d -eebf78f0bf79f1bf7ae714ea09eabf75 -ebbf76edbf77e7bf72e8bf73e9bf74e4 -09e4bf6fe5bf70e6bf71e1bf6ce2bf6d -e3bf6e0015ee2ff51df812f8bf36f926 -fabf3922012abf374310c3bf38f5bf33 -f6bf34f7bf35eed82517efbf2ff1bf30 -f3bf31f4bf32e614ea09eabf2cebbf2d -edbf2ee6bf29e7bf2ae9bf2be1bf24e2 -bf25e3bf26e4bf27e5bf280017ef2af5 -14f809f8bf4ff9bf50fabf51f5bf4cf6 -bf4df7bf4ef209f2bf49f3bf4af4bf4b -efbf46f0bf47f1bf48e914ec09ecbf43 -edbf44eebf45e9bf40eabf41ebbf42e4 -09e4bf3de6bf3ee8bf3fe1bf3ae2bf3b -e3bf3c0019ee2df417f70cf7bf68f8bf -69f9bf6afabf6bf4bf65f5bf66f6bf67 -f109f1bf62f2bf63f3bf64eebf5fefbf -60f0bf61e717ea0ceabf5bebbf5cecbf -5dedbf5ee7bf58e8bf59e9bf5ae409e4 -bf55e5bf56e6bf57e1bf52e2bf53e3bf -54002473c1dfe220ee0feec589efc5a1 -f2c5c8f6c70ff9c727e2c395e4c3bfe5 -c3d8e7c3f3ecaf8377c0d27736787479 -a2527aa2a7e1c37d09ed0fedc717efc7 -18f2c719f7c71af8c71be2c712e3c713 -e5c714e7c715e9c7160bee14f209f2c7 -25f5a958f8c726eec722efc723f1c724 -e709e7c71fe9c720ecc721e1c71ce4c7 -1de5c71e0017ee2af414f709f7c73cf8 -c73df9c73ef4c739f5c73af6c73bf109 -f1c736f2c737f3c738eec733efc734f0 -c735e814eb09ebc730ecc731edc732e8 -c72de9c72eeac72fe509e5c72ae6c72b -e7c72ce2c728e3b364e4c72909ed0fed -c744f2c745f5c746f9c747fac748e1c7 -3fe2c740e4c741e9c742ebc743734274 -a25775a2887602e8c710edc711efa700 -0014ee25f514f809f8c5e7f9c5e8fac5 -e9f5c5e4f6c5e5f7c5e6eec5dfefc5e0 -f1c5e1f3c5e2f4c5e3e60fe6c5dae7c5 -dbe8c5dcebc5ddedc5dee1c5d5e2c5d6 -e3c5d7e4c5d8e5c5d90eef1af50cf5c5 -f4f8c5f5f9c5f6fac5f7efc5f1f0c5f2 -f2c5f3f3ad1fe90ce9c5edeac5eeebc5 -efedc5f0e4c5eae5c5ebe7c5ec0017ef -2af514f809f8c70cf9c70dfac70ef5c7 -09f6c70af7c70bf209f2c706f3c707f4 -c708efc703f0c704f1c705e814eb09eb -c701edc702eea5dce8c5fee9c5ffeac7 -00e509e5c5fbe6c5fce7c5fde1c5f8e3 -c5f9e4c5fa6ac2596ec1256e966fa293 -70a2d971a2fc720dec17f00cf0c5d2f5 -c39bf8c5d3fac5d4ecc5cfedc5d0eec5 -d1e60ce6c5cce7c5cde9c5ceebc569e1 -c5c9e2c5cae5c5cb0018ed2df417f70c -f7c59ef8c506f9c59ffac5a0f4c59bf5 -c59cf6c59df109f1c599f2c59af3c3a5 -edc596eec597f0c598e714ea09eac593 -ebc594ecc595e7c590e8c591e9c592e4 -09e4c58de5c58ee6c58fe1c58ae2c58b -e3c58c0014ed25f314f609f6c5b2f7c5 -b3f9c5b4f3c5aff4c5b0f5c5b1edab6c -eec5acefaf64f0c5adf1c5aee70fe7c5 -a7e8c5a8e9c5a9eac5aaebc5abe1c5a2 -e3c5a3e4c5a4e5c5a5e6c5a60aee14f5 -09f5c5bcf8c5bdf9c5beeec5b9efc5ba -f3c5bbe2c5b5e7c5b6e8c5b7e9c3d8ec -c5b808ee0feec5c3efc5c4f1c5c5f4c5 -c6f9c5c7e7c5bfebc5c0ecc5c1edc5c2 -6aa2626ba29a6ca2ea6d0018ed2df317 -f60cf6c585f7c586f8c587fac588f3c5 -82f4c583f5c584f009f0c57ff1c580f2 -c581edc57ceec57defc57ee714ea09ea -c579ebc57aecc57be7c576e8c577e9c5 -78e409e4c573e5c574e6c575e1c570e2 -c571e3c5720010ee1df40ff4c544f5c5 -45f8c546f9c547faad93eec540efc541 -f2c542f3c543e90ce9c53ceac53decc5 -3eedc53fe1c538e2c539e4c53ae8c53b -0016ed2af414f709f7c55cf8c55dfac5 -5ef4c559f5c55af6c55bf109f1c556f2 -c557f3c558edc553eec554efc555e614 -e909e9c550eac551ebc552e6c54de7c5 -4ee8c54fe1c548e2c549e3c54ae4c54b -e5c54c0011ef1df60ff6c56bf7c56cf8 -c56df9c56efac56fefc567f1c568f2c5 -69f5c56ae90fe9c563eac564ebc565ed -c566eea5e3e1c55fe3c560e5c561e7c5 -6265c15f65a25d66a2a367a2b068a405 -690016ee2af514f809f8c535f9c536fa -c537f5c532f6c533f7c534f209f2c52f -f3c530f4c531eec52cefc52df1c52ee7 -14ea09eac529ecc52aedc52be7c526e8 -c527e9c528e1c521e2c522e4c523e5c5 -24e6c5250014ed25f414f809f8c3ebf9 -c3ecfac3edf4c3e8f5c3e9f7c3eaedc3 -e3eec3e4efc3e5f1c3e6f2c3e7e70fe7 -c3dee8c3dfe9c3e0eac3e1ebc3e2e1c3 -d9e2c3dae3c3dbe4c3dce5c3dd04e1c3 -eee4c3efecc3f0f2c3f1f5c3f20017ee -2af514f809f8c508f9c509fac50af5c5 -05f6c506f7c507f209f2c503f3c504f4 -bd92eec500f0c501f1c502e814eb09eb -c3fdecc3feedc3ffe8c3fae9c3fbeac3 -fce409e4c3f7e5c3f8e7c3f9e1c3f4e2 -c3f5e3c3f60015ef25f514f809f8c51e -f9c51ffac520f5c51bf6c51cf7c51def -c516f0c517f1c518f2c519f4c51ae614 -eb09ebc513edc514eec515e6c510e7c5 -11e9c512e1c50be2c50ce3c50de4c50e -e5c50f61a25f62a2bc63a407640017ee -2af514f809f8c3d5f9c3d6fac3d7f5c3 -d2f6c3d3f7c3d4f209f2c3cff3c3d0f4 -c3d1eec3ccf0c3cdf1c3cee814eb09eb -c3c9ecc3caedc3cbe8c3c6e9c3c7eac3 -c8e409e4c3c3e6c3c4e7c3c5e1c3c0e2 -c3c1e3c3c20015ee37f314f809f8c392 -f9c393fac394f3c38ff4c390f7c391ee -38efc38bf0c38cf1c38df2c38e012a2e -4812616ef4c38a012ac3895410d7c38a -e614eb09ebc386ecc387edc388e6c383 -e7c384eac385e1c37ee2c37fe3c380e4 -c381e5c3820015ee25f414f709f7c3a9 -f8b307f9c3aaf4c3a6f5c3a7f6c3a8ee -c3a1efc3a2f0c3a3f1c3a4f2c3a5e614 -ea09eac39eebc39fedc3a0e6c39be8c3 -9ce9c39de1c396e2c397e3c398e4c399 -e5c39a0015ec25f114f509f5c3bcf8c3 -bdfac3bef1b7fff2c3baf4c3bbecc3b6 -edc3b7eec3b8efc3b9f0b7cce614e909 -e9c3b3eac3b4ebc3b5e6c3b0e7c3b1e8 -c3b2e1c3abe2c3ace3c3ade4c3aee5c3 -af66dbf469d2ea69aade6ab05c6bb440 -6c002272c13ee11dee0feebdaeefbdbd -f4bdeef5bdf7f6bf0de1bbe2e2bbf7e7 -bd3de9bd557667766e779478a25579a2 -567a03e8bf1fecbf20eebf21fa012a2e -4712656ff2bf23012abf224710c5bf23 -05ec09ecbf11f3bf0df5bf12e1bf0ee9 -bf0febbf1008ec0fecbf17edbf18efbf -19f4bf1af7bf1be1bf13e5bf14e7bf15 -e8bf1610edbf1c01e1bf1deebf1e72a2 -5573a27d74a292750015ef25f414f709 -f7bf0bf9ab12fabf0cf4bf08f5bf09f6 -bf0aefbf03f0bf04f1bf05f2bf06f3bf -07e914ec09ecbf00edbf01eebf02e9bd -fdeabdfeebbdffe1bdf8e3bdf9e4bdfa -e5bdfbe6bdfc0bed14f409f4bde4f6bd -e5fabde6edbde1eebde2efbde3e909e9 -bddeebbddfecbde0e1bddbe3bddce7bd -dd06e90ce9bdeaedbdebf2bdecf3bded -e1bde7e4bde8e5bde907ee0ceebdf3ef -bdf4f3bdf5f5bdf6e3bdefe7bdf0e8bd -f1e9bdf269c1ed6dc0f76d3c6ea25e6f -a28c70a2dc7110f2bdda0016ec2af214 -f709f7bdabf8bdacf9bdadf2bda8f5bd -a9f6bdaaef09efbda5f0bda6f1bda7ec -bda2edbda3eebda4e614e909e9bd9fea -bda0ebbda1e6bd9ce7bd9de8bd9ee1bd -97e2bd98e3bd99e4bd9ae5bd9b0dec17 -f30cf3bdb9f5bdbaf7bdbbfabdbcecbd -b6edbdb7eebdb8e70ce7bdb2e8bdb3e9 -bdb4eabdb5e1bdafe2bdb0e4bdb10016 -ee2af414f809f8bdd2f9bdd3fabdd4f4 -bdcff5bdd0f7bdd1f109f1bdccf2bdcd -f3bdceeebdc9efbdcaf0bdcbe814eb09 -ebbdc6ecbdc7edbdc8e8bdc3e9bdc4ea -bdc5e1bdbee2bdbfe3bdc0e5bdc1e7bd -c204e1bdd5e5bdd6eebdd7efbdd8f8bd -d969a2456aa29a6ba2af6c0011eb1def -0fefbd92f0bd93f1bd94f5bd95f8bd96 -ebbd8eecbd8fedbd90eebd91e50fe5bd -89e6bd8ae7bd8be9bd8ceabd8de1bd85 -e2bd86e3bd87e4bd880015ef25f514f8 -09f8bd6af9bd6bfabd6cf5bd67f6bd68 -f7bd69efbd62f0bd63f1bd64f2bd65f3 -bd66e61eea09eabd5febbd60ecbd61e6 -2ce7bd5de8bd5e012abd5b4c12696de2 -bd5ce1bd56e2bd57e3bd58e4bd59e5bd -5a06ec0cecbd70f0bd71f7bd72f8bd73 -e1bd6de5bd6ee9bd6f0010ec1df20ff2 -bd80f3bd81f4bd82f5bd83f9bd84ecbd -7cedbd7deebd7eefbd7fe50ce5bd78e8 -bd79e9bd7aeabd7be1bd74e2bd75e3bd -76e4bd7765bd656466a27d67a2816807 -ee0ceebd51f3bd52f4bd53f5bd54e1bd -4de8bd4ee9bd4fedbd500019ee2df417 -f70cf7bd37f8bd38f9bd39fabd3af4bd -34f5bd35f6bd36f109f1bd31f2bd32f3 -bd33eebd2eefbd2ff0bd30e717ea0cea -bd2aebbd2becbd2cedbd2de7afe1e8bd -28e9bd29e409e4bd25e5bd26e6bd27e1 -bd22e2bd23e3bd2401e1bd3beebd3c0e -ed1af20cf2bd49f4bd4af5bd4bfabd4c -edbd45eebd46efbd47f1bd48e80ce8bd -41e9bd42ebbd43ecbd44e1bd3ee2bd3f -e7bd40619062a27e63a2bc640deb17ee -0ceebd1eefbd1ff0bd20f1bd21ebbd1b -ecbd1cedbd1de70ce7bd17e8bd18e9bd -19eabd1ae1bd14e2bd15e4bd160014ec -25f214f709f7bbf4f8bbf5fabbf6f2bb -f1f3bbf2f5bbf3ecbbecedbbedeebbee -f0bbeff1bbf0e70fe7bbe8e8bbe9e9bb -eaeabbebebbb33e1bbe3e2bbe4e3bbe5 -e4bbe6e5bbe70012ef20f60ff6bd05f7 -bd06f8bd07f9bd08fabd09efbd00f1bd -01f2bd02f4bd03f5bd04ea0feabbfceb -a921ecbbfdedbbfeeebbffe2bbf8e5bb -f9e6bbfae9bbfb09ec0fecbd0fedbd10 -f0bd11f1bd12f3bd13e3bd0ae4bd0be5 -bd0ce6bd0de8bd0e002474a9e520ef0f -efb5bcf3b568f4b5d7f5b594f7b5ebe5 -b576e7b57fe9b58debaffbeeb5b3782d -7834793e7a4ee1b557e4b56b01e3b5f0 -ecb5f102e1b5f2efb5f3f8b5f404e8b5 -f5e9b111edb5f6f2b5f7fab5f8744875 -a24876a2497703ebb5ecedb5edefb5ee -f3b5ef0ff21af70cf7b5e4f8b5e5f9b5 -e6fab5e7f2b5e0f3b5e1f4b5e2f6b5e3 -eb0cebb5dcecb5ddedb5deefb5dfe2b5 -d8e4b5d9e5b5dae9b5db10edb5e801e2 -b5e9f6b5ea6bc0fc6f626f7a708a7194 -729e730aeb14ef09efb5d4f4b5d5f5b5 -d6ebb5d1edb5d2eeb5d3e1b5cce3b5cd -e4b5cee8b5cfe9b5d002f2b5bdf5b5be -f7b5bf01e9b5c0efb5c101f5b5c2f7b5 -c307ee0ceeb5c8f5b5c9f8b5caf9b5cb -e5b5c4e8b5c5e9b5c6ebb5c76b646ca2 -4d6da2756e07ee0ceeb5b8efb5b9f0b5 -baf4b5bbe2b5b4e7b5b5e8b5b6eab5b7 -0cf017f60cf6b59df7b59ef8b59ffab5 -a0f0b59af2b59bf4b59ceb09ebb597ec -b598efb599e5b594e8b595e9b5960bed -14f509f5b5a9f6b5aaf7b176edb5a6ef -b5a7f0b5a8e909e9b5a4ebb5a5ecb5a6 -e1b5a1e2b5a2e7b5a307f20cf2b5aff3 -b5b0f4b5b1f9b5b2e9b5abecb5aceeb5 -adefb5ae66656652678468a24d69a257 -6a04e3b58fe5b590eab591eeb592f3b5 -9307eb0cebb57bedb57cf5b57df9b57e -e1b577e2b578e5b579e6b57a08ed0fed -b584eeb585efb586f3b587f7b588e2b5 -80e5b581e7b582ecb58303e2b589e9b5 -8af0b58bf7b58c10eeb58e616e627e63 -a25a6409e90fe9b571f2b572f3b573f4 -b574f5b575e1b56ce2b56de3b56ee4b5 -6fe5b57002e9b558eeb559f2b55a0ce9 -17ee0ceeb563f2b564f5b565f9b566e9 -b560ecb561edb562e509e5b55de7b55e -e8b55fe1a7f3e2b55be4b55c03e1b567 -e5b568e8b569f2b56a00186eb07628e1 -0ce1b5f9e9b72bf6b76df7b770763a77 -447902e1b772e5b773f9b77401e4b76e -eeb76f10e9b771715071947298750fee -1af40cf4b769f5b76af7b76bf9b76cee -b765efb766f0b767f2b768e90ce9b761 -ebb762ecb763edb764e1b75de2b75ee4 -b75fe8b76010f2b75804e1b759e2a3b6 -f2b75af4b75bf5b75c6e346f607001e1 -b756f2b75706e90ce9b74deab74eecb7 -4ff3b750e1b74ae4b74be7b74c04e2b7 -51e4b752e7b753f2b754f7b75568796b -3c6b726c886d0aec14f309f3b747f7b7 -48f8b749ecb744eeb745f2b746e1b73f -e2b740e3b741e4b742e9b74303e1b73a -edb73befb73cf5b73d10e5b73e683469 -386a01e5b738f2b73910e9b72a0bec14 -f509f5b735f6b736f9b737ecb732edb7 -33f4b734e409e4b72fe5b730e7b731e1 -b72ce2b72de3b72e643d644065506703 -e2b727e5b728ebb707efb72902e1b71a -e7b71bf4b71c09ec0fecb722eeb723f2 -b724f4b725f5b726e2b71de5b71ee8b7 -1fe9b720ebb721613062a24e6310f4b7 -190014ed25f314f809f8b70bf9b70cfa -b70df3b708f4b709f5b70aedb703eeb7 -04efb705f1b706f2b707e60fe6b5ffe8 -b700eab701ebb702ecb527e1b5fae2b5 -fbe3b5fce4b5fde5b5fe0aee14f409f4 -b716f5b717f7b718eeb713efb714f2b7 -15e5b70ee9b70feab710ebb711edb712 -002875c29feb74f23ff628f6b9eff7bb -84f9022a32414c4c126174eebbb4022a -bbb2432a5410d2bbb410cebbb3127261 -e2bbb3f2b9b1f3bb24f5022aac7d41ac -835912657ae9b9a5eb38ecb976edb991 -eeb9aeefb9c7012a2e41127261e2b95a -042ab95841324336493a4d10ceb95c10 -c6b95910ceb95a10d2b95b7a667a38e1 -b1c3e7b7fce9b929eab9400017ee2af5 -14f809f8bbdff9bbe0fabbe1f5bbdcf6 -bbddf7bbdef209f2bbdaf3bbdbf4af6a -eebbd7efbbd8f0bbd9e814eb09ebaf56 -ecbbd5edbbd6e8add6e9bbd4eaaf6ae4 -09e4bbd1e5bbd2e6bbd3e1bbcee2bbcf -e3bbd075a26576a2ba77a40f78a46779 -0018ed2df417f70cf7bbcaf8bbcbf9bb -ccfabbcdf4bbc7f5bbc8f6bbc9f109f1 -bbc4f2bbc5f3bbc6edbbc1eebbc2efbb -c3e714ea09eabbbeebbbbfecbbc0e7bb -bbe8bbbce9bbbde409e4bbb8e5bbb9e6 -bbbae1bbb5e2bbb6e3bbb70017ee2af5 -14f809f8bb6af9bb6bfabb6cf5bb67f6 -bb68f7bb69f109f1bb64f3bb65f4bb66 -eebb61efbb62f0bb63e814eb09ebbb5e -ecbb5fedbb60e8bb5be9bb5ceabb5de5 -09e5bb58e6bb59e7bb5ae2bb55e3bb56 -e4bb570017ee2af414f809f8bb81f9bb -82fabb83f4bb7ef6bb7ff7bb80f109f1 -bb7cf2bb7df3b1adeebb79efbb7af0bb -7be714ea09eabb76ecbb77edbb78e7bb -73e8bb74e9bb75e409e4bb70e5bb71e6 -bb72e1bb6de2bb6ee3bb6f0018ed2df3 -17f60cf6b9d0f7bb9af9bb9bfabb9cf3 -bb97f4bb98f5bb99f009f0bb94f1bb95 -f2bb96edbb91eebb92efbb93e714ea09 -eabb8eebbb8fecbb90e7bb8be8bb8ce9 -bb8de409e4bb88e5bb89e6bb8ae1bb85 -e2bb86e3bb870015ee25f414f809f8bb -aff9bbb0fabbb1f4bbacf6bbadf7bbae -eebba7efbba8f0bba9f1bbaaf2bbabe6 -14eb09ebbba5ecbb1eedbba6e6bba2e9 -bba3eabba4e1bb9de2bb9ee3bb9fe4bb -a0e5bba16bc3b470c1cf70a26871a2c0 -72a41b73a46b740019ee2df417f70cf7 -bb52f8bb53f9bb54faa591f4bb4ff5bb -50f6bb51f109f1bb4df2af6af3bb4eee -bb4aefbb4bf0bb4ce717ea0ceabb46eb -bb47ecbb48edbb49e7bb43e8bb44e9bb -45e409e4bb40e5bb41e6bb42e1bb3de2 -bb3ee3bb3f0018ee2df417f70cf7b9f0 -f8b9f1f9b9f2fab9f3f4b9edf5b9eef6 -b9eff109f1b9eaf2b9ebf3b9eceeb9e8 -efb9e9f0b73be814eb09ebb9e5ecb9e6 -edb9e7e8b9e2e9b9e3eab9e4e509e5b9 -dfe6b9e0e7b9e1e1b9dce3b9dde4b9de -0019ee2df417f70cf7bb0af8bb0bf9bb -0cfabb0df4bb07f5bb08f6bb09f109f1 -bb04f2bb05f3bb06eebb01efbb02f0bb -03e717ea0ceab9fdebb9feecb9ffedbb -00e7b9fae8b9fbe9b9fce409e4b9f7e5 -b9f8e6b9f9e1b9f4e2b9f5e3b9f60016 -ed2af514f809f8bb21f9bb22fabb23f5 -bb1ef6bb1ff7bb20f209f2bb1bf3bb1c -f4bb1deda90beebb19f0bb1ae614ea09 -eabb16ebbb17ecbb18e6bb13e8bb14e9 -bb15e1bb0ee2bb0fe3bb10e4bb11e5bb -120017ee2af414f709f7bb3af8bb3bfa -bb3cf4bb37f5bb38f6bb39f109f1bb34 -f2bb35f3bb36eebb31efbb32f0bb33e8 -14eb09ebbb2eecbb2fedbb30e8bb2be9 -bb2ceabb2de509e5bb28e6bb29e7bb2a -e2bb25e3bb26e4bb276ba2536ca2ab6d -a4066ea47b6f0014ec25f414f709f7b9 -d9f9b9dafab9dbf4b9d6f5b9d7f6b9d8 -ecb9d1efb9d2f0b9d3f1b9d4f3b9d5e7 -0fe7b9cde8b9cee9b9cfeab9d0ebb33b -e1b9c8e3b9c9e4b9cae5b9cbe6b9cc00 -18ed2df417f70cf7b972f8b973f9b974 -fab975f4b96ff5b970f6b971f109f1b9 -6cf2b96df3b96eedb969efb96af0b96b -e714ea09eab966ebb967ecb968e7b963 -e8b964e9b965e409e4b960e5b961e6b9 -62e1b95de2b95ee3b95f0019ee2df417 -f70cf7b98df8b98ef9b98ffab990f4b9 -8af5b98bf6b98cf109f1b987f2b988f3 -b989eeb984efb985f0b986e717ea0cea -b980ebb981ecb982edb983e7b97de8b9 -7ee9b97fe409e4b97ae5b97be6b97ce1 -b977e2b978e3b9790019ee47f417f70c -f7b9aaf8b9abf9b9acfab9adf4b9a7f5 -b9a8f6b9a9f123f1b9a1f226f3b9a602 -2a3241405912657ae9b9a5012ab9a24c -10c2b9a3127261e2b9a4eeb99eefb99f -f0b9a0e717ea0ceab99bebb99cecb902 -edb99de7b998e8b999e9b99ae409e4b9 -95e5b996e6b997e1b992e2b993e3b994 -0018ee2df417f70cf7b9c3f8b9c4f9b9 -c5fab9c6f4b9c0f5b9c1f6b9c2f109f1 -b9bdf2b9bef3b9bfeeb9baefb9bbf0b9 -bce714eb09ebb9b7ecb9b8edb9b9e7b7 -fce9b9b5eab9b6e409e4b9b2e5b9b3e6 -b9b4e1b9afe2b9b0e3b9b166c1a766a2 -5d67a2b268a2f869a44d6a0016ed2af3 -14f809f8b955f9b956fab957f3b952f4 -b953f5b954f009f0b94ff1b950f2b951 -edb94ceeb94defb94ee714ea09eab949 -ebb94aecb94be7b946e8b947e9b948e1 -b941e2b942e3b943e4b944e5b9450017 -ee2af514f809f8b7f9f9b7fafab7fbf5 -b7f6f6b7f7f7b7f8f109f1b7f3f2b7f4 -f3b7f5eeb7f0efb7f1f0b7f2e714eb09 -ebb7edecb7eeedb7efe7b7eae8b7ebe9 -b7ece409e4b7e7e5b7e8e6b7e9e1b7e4 -e2b7e5e3b7e60014ef25f414f709f7b9 -0ff8b910f9b911f4b90cf5b90df6b90e -efb907f0b908f1b909f2b90af3b90be8 -0fe8b902eab903ebb904ecb905edb906 -e1b7fde2b7fee4b7ffe5b900e6b90100 -17ef2af514f809f8b926f9b927fab928 -f5b923f6b924f7b925f209f2b920f3b9 -21f4b922efb91df0b91ef1b91fe714eb -09ebc822ecb91beeb91ce7b918e8b919 -eab91ae409e4b915e5b916e6b917e1b9 -12e2b913e3b9140015ef25f514f809f8 -b93df9b93efab93ff5b93af6b93bf7b9 -3cefb935f0b936f1b937f3b938f4b939 -e614ea09eab932ecb933edb934e6b92f -e7b930e8b931e1b92ae2b92be3b92ce4 -b92de5b92e61a25d62a29563a2ed64a4 -42650016ed2af514f809f8b7e1f9b7e2 -fab7e3f5b7def6b7dff7b7e0f209f2b7 -dbf3b7dcf4b7ddedb7d8eeb7d9efb7da -e614e909e9b7d5ebb7d6ecb7d7e6b7d2 -e7b7d3e8b7d4e1b7cde2b7cee3b7cfe4 -b7d0e5b7d10010eb1df10ff1b781f6b7 -82f7b783f8b784f9b785ebb77dedb77e -efb77ff0b780e70ce7b779e8b77ae9b7 -7beab77ce1b775e2b776e3b777e4b778 -0018ee2df417f70cf7b79bf8b79cf9b7 -9dfab79ef4b798f5b799f6b79af109f1 -b795f2b796f3b797eeb792efb793f0b7 -94e814eb09ebb78fecb790edb791e8b7 -8ce9b78deab78ee409e4b789e5b78ae7 -b78be1b786e2b787e3b7880017ed2af4 -14f709f7b7b4f9b7b5fab7b6f4b7b1f5 -b7b2f6b7b3f009f0b7aef1b7aff3b7b0 -edb7abeeb7acefb7ade714ea09eab7a8 -ebb7a9ecb7aae7b7a5e8b7a6e9b7a7e4 -09e4b7a2e5b7a3e6b7a4e1b79fe2b7a0 -e3b7a10015ed25f414f809f8b7caf9b7 -cbfab7ccf4b7c7f6b7c8f7b7c9edb7c2 -eeb7c3f0b7c4f1b7c5f2b7c6e714ea09 -eab7bfebb7c0ecb7c1e7b7bce8b7bde9 -b7bee1b7b7e3b7b8e4b7b9e5b7bae6b7 -bb66a6c567aa3268001e72c0f8e51af4 -0cf4b530f5b536f9a554fab556e5b3ca -e9b3d6efb50cf2b51f763f7658777479 -84e122032ab3a9372e43345310c4b3aa -1133b6b3aa10cdb3ab04e3b54ce5b54d -ebb54eeeb54ff6b55002e1b551e3b552 -efb55301e1b554f7b55572a25073a27b -74a282750014ed25f514f809f8b549f9 -b54afab54bf5b546f6b547f7b548edb5 -41f0b542f2b543f3b544f4b545e70fe7 -b53ce8b53de9b53eebb53fecb540e2b5 -37e3b538e4b539e5b53ae6b53b0cf017 -f50cf5b529f7b52af8b52bfab52cf0b5 -26f2b527f4b528eb09ebb523edb524ef -b525e1b520e3b521e5b52202e2b52dee -b52ef3b52f04e9b531efb532f3b533f5 -b534f8b53569c1116dae6d366ea2436f -a26b7010efb51e0010f11df50ff5b3fc -f6b3fdf7b3fef9b3fffab500f1b3f8f2 -b3f9f3b3faf4b3fbea0ceab3f5edb3f6 -eeb3cbf0b3f7e1b3f1e2b3f2e4b3f3e6 -b3f409e919e9b506ea32eeb509efb50a -f3b50b012ab50748126d6ee7b508e1b5 -01e4b502e5b503e7b504e8b5050010ec -1df20ff2b519f4b51af6b51bf7b51cf9 -b51decb515edb516efb517f0b518e50c -e5b511e8b512e9b513eab514e1b50de2 -b50ee3b50fe4b510694e6aa24b6ba24c -6c04e1b3ece2b3ede4b3eef4b3eff5b3 -f00feb1af20cf2b3e3f4b3e4f7b3e5f8 -b3e6ebb3dfecb3e0edb3e1efb3e2e70c -e7b3dbe8b3dce9b3ddeab3dee1b3d7e2 -b3d8e4b3d9e6b3da10e9b3e703e1b3e8 -e5b3e9e8b3eaebb3eb6434643e654867 -6e6802e9b3d3f2b3d4f9b3d501eeb3b2 -f9b3c905e809e8b3cee9b3cfedb3d0e1 -b3cbe4b3cce7b3cd01edb3d1f7b3d261 -3062a2656310e8b3c80015ee25f314f8 -09f8b3c0f9b3c1fab3c2f3b3bdf6b3be -f7b3bfeeb3b8efb3b9f0b3baf1b3bbf2 -b3bce826eb1beb2cecb3b6edb3b7012a -2e4812616ef4b3b5012ab3b45410d7b3 -b5e8b3b1e9b3b2eab3b3e1b3ace3b3ad -e4b3aee5b3afe7b3b004e1b3c3e2b3c4 -eeb3c5efb3c6f5b3c700177199e614ef -09efb144f2b14df9b169e6a254e9b12c -eab1357612762a772ee1b11310f2b166 -01e1b167e5b16871a24272a243750eed -1af40cf4b162f5b163f6b164f9b165ed -b15eeeb15ff1b160f2b161e50ce5b15a -e6b15be8b15ce9b15de2b158e326e4b1 -59012ab1274112646cedb12810f3b14c -0aef14f209f2b155f3b156f4b157efb1 -52f0b153f1b154e3b14ee4b14fe5b14d -ebb150edb1516b556e286e2e6f3e7010 -e5b14b02e2b141e7b142e9b14305ee09 -eeb148f2b149f3b14ae4b145e9b146ed -b1476b346c3e6d01f0b13ff5b14001eb -b136f6b13706ec0cecb13beeb13cf2b1 -3df9b13ee1b138e8b139e9b13a662b66 -5c67666907f00cf0b131f2b132f4b133 -f7b134e1b12de5b12ee6b12fecb13001 -e9b129edb12a10f2b12b613062a24665 -10f2b1260012ec20f40ff4a3b9f5b122 -f8b123f9b124fab125ecb11dedb11eee -b11ff0b120f2b121e70fe7b118e8b119 -e9b11aeab11bebb11ce1b114e2b115e4 -b116e6b11710eca799001f71c18a7953 -ec0cecb300eeb31af5b365f6b37b7930 -7a8ee1b16ae4b1a40dec17ef0cefb3a2 -f2b3a3f9b3a4fab3a5ecb39fedb3a0ee -b3a1e50ce5b39be6b39ce7b39de9b39e -e1b184e2b399e4b39a02e1b3a6e9b3a7 -eeb3a875c0c5753676a25b77a2867810 -f8b3980016ed2af414f709f7b378f8b3 -79fab37af4b376f5b377f6af89f009f0 -b373f1b374f2b375edb370eeb371efb3 -72e614e909e9b36debb36eecb36fe6b3 -6be7b31ae8b36ce1b366e2b367e3b368 -e4b369e5b36a0ced17f00cf0b385f2b1 -d4f3b386f9b387edb382eeb383efb384 -e609e6b37feab380ecb381e1b37ce3b3 -7de5b37e0fea1af40cf4b394f5b395f7 -b396f8b397eab390edb391eeb392f2b3 -93e50ce5b38ce6b38de7b38ee9b38fe1 -b388e2b389e3b38ae4b38b7140725073 -a2567402e1b363e9b364f5b1d502e1b3 -4aeeb34bf2b34c0012ed20f60ff6b359 -f7b35af8b35bf9b35cfab35dedb354f1 -b355f3b356f4b357f5b358e50fe5afc4 -e7b350e8b351e9b352eab353e1b34de2 -b192e3b34ee4b34f04ecb35eeeb35fef -b360f0b361f7b36269c17f6dc0e26d40 -6e9e6fa2807002e1b347e5b348eeb349 -0dee17f60cf6b316f8b317f9b318fab3 -19eeb313f2b314f5b315e70ce7b30fe8 -b310ecb311edb312e1b30ce2b30de4b3 -0e0013ec20f20ff2b32af4b32bf5b32c -f7b32dfab32eecb325edb326eeb327ef -b328f1b329e70fe7b320e8b321e9b322 -eab323ebb324e1b31be2b31ce3b31de4 -b31ee5b31f0018ed2df317f60cf6b343 -f7b344f8b345f9b346f3b340f4b341f5 -b342f009f0b33df1b33ef2b33fedb33b -eeb328efb33ce714ea09eab338ebb339 -ecb33ae7b335e8b336e9b337e409e4b3 -32e5b333e6b334e1b32fe2b330e3b331 -69846aa26d6ba27a6c0beb14f209f2b3 -09f5b30af7b30bebb306ecb307efb308 -e809e8b304e9af56eab305e2b301e3b3 -02e4b3030011ee1df30ff3b1eff4b1f0 -f8b1f1f9b1f2fab1f3eeb1ebf0b1ecf1 -b1edf2b1eee50fe5b1e6e7b1e7e8b1e8 -ecb1e9edb1eae1b1e2e2b1e3e3b1e4e4 -b1e504ebb1f4edb1f5eeb1f6f2b1f7f5 -b1f806ee0ceeb1fcefb1fdf0b1fef5b1 -ffe1b1f9e4b1fae5b1fb65a0656a66a2 -6667a26a6808ee0feeb1ddefb1def2b1 -dff3b1e0f4b1e1e1b1d9e3b1dae5b1db -ebb1dc0013ec20f60ff6b1c6f7b1c7f8 -b1c8f9b1c9fab1caecb1c2efb1c3f1b1 -c4f2adbcf3b1c5e70fe7b1bde8b1bee9 -b1bfeab1c0ebb1c1e1b1b8e2b1b9e3b1 -bae4b1bbe6b1bc01ebb1cbf8b1cc0cec -17f20cf2b1d5f4b1d6f5b1d7f7b1d8ec -b1d3eeb1d4efaff8e509e5b1d0e7b1d1 -ebb1d2e1b1cde2b1cee4b1cf61a24862 -a2a363a2fb640012eb20f10ff1b1b3f2 -b1b4f4b1b5f5b1b6f8b1b7ebb1aeecb1 -afedb1b0eeb1b1efb1b2e60fe6b1a9e7 -b1aae8b1abe9b1aceab1ade2b1a5e3b1 -a6e4b1a7e5b1a80019ee2df417f70cf7 -b180f8b181f9b182fab183f4b17ef5b1 -7ff6adcbf109f1b17bf2b17cf3b17dee -b178efb179f0b17ae717ea0ceab174eb -b175ecb176edb177e7b171e8b172e9b1 -73e409e4b16ee5b16fe6b170e1b16be2 -b16ce3b16d0018ed2df317f70cf7b199 -f8b19af9b19bfab19cf3b196f5b197f6 -b198f009f0b193f1b194f2b195edb190 -eeb191efb192e714ea09eab18debb18e -ecb18fe7b18ae8b18be9b18ce409e4b1 -87e5b188e6b189e1b184e2b185e3b186 -06ec0cecb1a0eeb1a1f2b1a2f4b1a3e3 -b19de4b19ee6b19f63cb0c63a4e464ae -af65001d73927a29ef0cefafeaf3aff6 -f4afbdf5a5f87a44e5afabecafc4ee01 -2aafd953126861f7afda01e1b111e5b1 -12762076387748784c7901e1b10fefb1 -1002e5b10ae8b10beeb10c10efb10d10 -f4b10e732e74667510e4b10908eb0feb -affbedaffcf3affdf5affef9afffe5af -f7e7aff8e8aff9e9affa08f30ff3b104 -f4b105f5b106f8b107fab108e2b100ee -b101efb102f2b1036ac0f16e636e6a6f -a25670a2577208eb0febaff1f2aff2f3 -aff3f4aff4f7aff5e1afede7afeee8af -efe9aff00eed1af20cf2afe6f6afe7f7 -afe8f8afe9edafe2eeafe3efafe4f1af -e5e40ce4afdee6afdfe8afe0ecafe1e1 -afdbe2afdce3afdd10f4afeb10e9afec -6aa24a6ba24b6ca26e6d0dee17f50cf5 -afd5f7afd6f8afd7faafd8eeafd2f0af -d3f3afd4e71ee7afcde9afceeb26edaf -d1012a2e4e126b6fefafd0012aafcf47 -10ceafd0e1afcae2afcbe5afcc10e1af -b80aec14f009f0afc1f2afc2f9afc3ec -afbeedafbfefafc0e1afb9e5afbae7af -bbe9afbcebafbd05ef09efafc8f0a3f2 -f5afc9e5afc5ebafc6edafc7662f663e -674e686a6902f0afb5f4afb6f6afb702 -e1aface5afade9afae04e1afafecafb0 -edafb1efafb2f9afb310f5afb4613462 -386301f2afa9f9afaa10e1afa305ef09 -efafa6f2afa7f5afa8e3afa4e7afa5eb -a7d5002272c161e127f219f2ad2df3ad -44f52cf6ad74f9ad7d012aad6347126c -61e7ad64e1ab49e5ab88e8ab98efad0c -7643764e7758787e79827a04e5ad44e8 -ad81ebad82eead83f4ad8401e7ad75ee -ad7605e509e5ad79e7ad7af4ad7be1ad -77e2ad78e4ad2d10e8ad7c02e1ad7ee2 -ad7fefad80729673a28674a2b4750eec -1af50cf5ad70f6ad71f8ad72f9ad73ec -ad6cefad6df0ad6ef4ad6fe80ce8ad68 -e9ad69eaad6aebad6be1ad65e2ad66e3 -ad670015ed25f414f809f8ad41f9ad42 -faad43f4ad3ef6ad3ff7ad40edad39ee -ad3aefad3bf1ad3cf3ad3de714ea09ea -ad36ebad37ecad38e7ad33e8ad34e9ad -35e1ad2ee2ad2fe3ad30e4ad31e6ad32 -0df017f60cf6ad4ff7ad50f9ad51faad -52f0ad4cf3ad4df4ad4eea0ceaad48eb -ad49edad4aefad4be1ad45e2ad46e8ad -470fee1af40cf4ad5ff5ad60f9ad61fa -ad62eead5befad5cf0ad5df3ad5ee70c -e7ad57e8ad58ecad59edad5ae1ad53e3 -ad54e4ad55e5ad5669c19b6dc0d06d3a -6e826fa25f70a2a07110e4ad2c0aec14 -f209f2abd6f3abfcf4abfdecabfaeea4 -b6efabfbe1abf5e5abf6e7abf7e9abf8 -ebabf90dec17f30cf3ad08f4ad09f7ad -0af8ad0becad05f0ad06f1ad07e70ce7 -ad01e8ad02e9ad03ebad04e1abfee2ab -ffe3ad000013ec20f40ff4ad1cf5ad1d -f8ad1ef9ad1ffaad20ecad17edad18ef -ad19f0ad1af1ad1be60fe6ad12e7ad13 -e8ad14eaad15ebad16e1ad0de2ad0ee3 -ad0fe4ad10e5ad110aee14f509f5ad29 -f8ad2af9ad2beead26efad27f3ad28e1 -ad21e2ad22e3ad23e7ad24e9ad25699c -6aa2616ba28c6c0fec1af40cf4abf1f5 -abf2f7abf3f9abf4ecabededabeeefab -eff3abf0e80ce8abe9e9abeaeaabebeb -abece1abe5e3abe6e4abe7e5abe80aed -14f209f2abc6f7abc7f9abc8edabc3ee -abc4f0abc5e1abbee2abbfe3abc0e5ab -c1e8abc20cee17f20cf2abd2f3abd3f6 -abd4f9abd5eeabcfefabd0f0abd1e909 -e9abccebabcdedabcee1abc9e5abcae8 -abcb0ef21af60cf6abe1f8abe2f9abe3 -faabe4f2abddf3abdef4abdff5abe0ed -0cedabd9eeabdaefabdbf1abdce1abd6 -e2abd7ecabd865c0e465a2af66a2c467 -a2ce680013ee20f40ff4abb9f7abbaf8 -abbbf9abbcfaabbdeeabb4efabb5f0ab -b6f1abb7f2abb8e973e938eaabb0ebab -b1ecabb2edabb3022a3c42a259481161 -6e01e2abaff4abaa0b4d2d5417542e55 -385610c4abad01c8aba9d7abaa01cbab -abd3abac4dcc9a502a5310d2aba802c6 -aba5c8aba6daaba7470e473048cc7e49 -10c4aba310c6aba12aab9e412a4210ce -aba010d5ab9f126f70efabaee2ab99e4 -ab9ae6ab9be7ab9ce8ab9d06eb0cebab -8ceeab8df4ab8ef9ab8fe1ab89e2ab8a -e7ab8b03e1ab90e4ab91e7ab92edab93 -03e1ab94e3ab95e7ab96ebab97616a62 -a27563a2b06408ea0feaab83edab84ef -ab85f2ab86faab87e5ab7fe6ab80e8ab -81e9ab820016ed2af314f809f8ab5ef9 -ab5ffaab60f3ab5bf6ab5cf7ab5df009 -f0ab58f1ab59f2ab5aedab55eeab56ef -ab57e614ea09eaab52ebab53ecab54e6 -ab4fe7ab50e8ab51e1ab4ae2ab4be3ab -4ce4ab4de5ab4e0011ef1df40ff4ab6e -f5ab6ff6ab70f7ab71f9ab72efab6af1 -ab6bf2ab6cf3ab6de90fe9ab65eaab66 -ebab67ecab68eeab69e2ab61e3ab62e4 -ab63e7ab640bec14f009f0ab7cf1ab7d -f2ab7eecab79edab7aefab7be709e7ab -76e8ab77eaab78e3ab73e4ab74e5ab75 -001a6fc1b2776ce10ce1ad85e5adbcf6 -af8afaa34f775079887a05e709e7afa0 -ecafa1eeafa2e1af9ee4af9fe5af0a08 -f30ff3af8ff5af79f7af90f9af91faaf -92e1af8cebaf8decadaaf2af8e0aed14 -f209f2af9bf5af9cf9af9dedaf98eeaf -99efaf9ae1af93e2af94e4af95e7af96 -e9af9773b37334746075a24e7610e1af -8b06eb0cebaf5eeeaf5fefaf60f1af61 -e2af5be8af5ce9af5d0def17f30cf3af -6cf4af6df5af6ef9af6fefaf69f0af6a -f2af6be80ce8af65e9af66ebaf67edaf -68e1af62e2af63e4af640019ee2df417 -f70cf7af86f8af87f9af88faaf89f4af -83f5af84f6af85f109f1af80f2af81f3 -af82eeaf7defaf7ef0af7fe717ea0cea -af79ebaf7aecaf7bedaf7ce7af76e8af -77e9af78e409e4af73e5af74e6af75e1 -af70e2af71e3af726fa24770a285720d -ef17f30cf3af57f4af58f5af59f9af5a -efaf54f1af55f2af56e81ee832e9af52 -eca7beeeaf53012a2e4d126f6ee7af51 -012aaf504310ceaf51e3af4de5af4ee7 -af4f0012ee20f40ff4af47f6af48f7af -49f8af4af9af4beeaf42efaf43f0af44 -f2af45f3af46e60fe6af3ee8af3fe9ad -d8ebaf40ecaf41e1af3ae2af3be3af3c -e5af3d10f0af4c68c15d6b9d6b966ca2 -506da2576e0eee1af50cf5af36f6af37 -f7af38f9af39eeaf32efaf33f2af34f4 -af35e70ce7af2fe9af30eaad8aebaf31 -e1af2ce4af2de5af2e06ec0ceca540f2 -af14f3af15f8af16e1af11e7af12ebaf -1302e7af17edaf18eeaf190011ed1df5 -0ff5af27f6af28f7af29f8af2af9af2b -edaf23efaf24f2af25f3af26e50fe5af -1ee6af1fe7af20ebaf21ecaf22e1af1a -e2af1be3af1ce4af1d689669a2666a0f -eb1aef0cefaf0df2af0ef5af0ff7af10 -ebaf09ecaf0aedaf0beeaf0ce50ce5af -05e6af06e9af07eaaf08e1af01e2af02 -e3af03e4af040cef17f50cf5ade8f6ad -e9f7adeaf8adebefade5f2ade6f3ade7 -ec09ecade2edade3eeade4e4addfe7ad -e0e9ade10016ee2af414f809f8adfef9 -adfffaaf00f4adf0f5adfcf7adfdf109 -f1adf9f2adfaf3adfbeeadf5efadf7f0 -adf8e714ea09eaadf4ebadf5ecadf6e7 -adf1e8adf2e9adf3e1adece2adede3ad -eee4adefe6adf064a264a24265a26567 -0011ec1df30ff3addaf4addbf7addcf8 -adddfaaddeecadd6eeadd7efadd8f2ad -d9e50fe5add1e7add2e8add3e9add4eb -add5e1adcde2adcee3adcfe4add00aea -14f209f2adb9f3adbaf7adbbeaadb6ee -adb7efadb8e1adb1e4adb2e5adb3e7ad -b4e9adb50fec1af20cf2adc9f3adcaf6 -adcbfaadccecadc5edadc6eeadc7f1ad -c8e70ce7adc1e8adc2e9adc3ebadc4e3 -adbde4adbee5adbfe6adc0613662a256 -6301e3adaff2adb00015ed25f314f709 -f7ad99f8ad9afaad9bf3ad96f5ad97f6 -ad98edad91efad92f0ad93f1ad94f2ad -95e714ea09eaad8eebad8fecad90e7ad -8be8ad8ce9ad8de1ad86e3ad87e4ad88 -e5ad89e6ad8a0012ed20f40ff4adaaf5 -adabf6adacf7adadf9adaeedada5eead -a6efada7f0ada8f1ada9e60fe6ada0e7 -ada1e9ada2eaada3ecada4e1ad9ce2ad -9de4ad9ee5ad9f2ab40061ccec620023 -73c2d0e51ded0feda905eea91eefa936 -f2a979f3a993e5a74be7a778e8a78ee9 -a7a777c14b773878a26179a2a77aa2e8 -e1a5ea0017ed2af414f809f8ab07f9ab -08faab09f4ab04f5ab05f7ab06f109f1 -ab01f2ab02f3ab03eda9feefa9fff0ab -00e714ea09eaa9fbeba9fceca9fde7a9 -f8e8a9f9e9a9fae409e4a9f5e5a9f6e6 -a9f7e1a9f2e2a9f3e3a9f40014ed25f2 -14f609f6ab1bf7ab1cfaab1df2a9c2f3 -ab19f5ab1aedab14eeab15efab16f0ab -17f1ab18e80fe8ab0fe9ab10eaab11eb -ab12ecab13e1ab0ae2ab0be3ab0ce6ab -0de7ab0e0013ec20f30ff3ab2df6ab2e -f7ab2ff8ab30faab31ecab28edab29ee -ab2af0ab2bf2ab2ce60fe6ab23e8ab24 -e9ab25eaab26ebab27e1ab1ee2ab1fe3 -ab20e4ab21e5ab220017ee2af514f809 -f8ab46f9ab47faab48f5ab43f6ab44f7 -ab45f109f1ab40f2ab41f4ab42eeab3d -efab3ef0ab3fe814eb09ebab3aecab3b -edab3ce8ab37e9ab38eaab39e409e4ab -34e5ab35e6ab36e1ab32e2ab33e3a7ca -73a25a74a2aa75a2ff760016ed2af514 -f809f8a9eff9a9f0faa9f1f5a9ecf6a9 -edf7a9eef109f1a9e9f2a9eaf4a9ebed -a9e6eea9e7efa9e8e614e909e9a9e3ea -a9e4eba9e5e6a9e0e7a9e1e8a9e2e1a9 -dbe2a9dce3a9dde4a9dee5a9df0016ee -2af414f709f7a9a8f8a9a9f9a9aaf4a9 -a5f5a9a6f6a9a7f109f1a9a2f2a9a3f3 -a9a4eea99fefa9a0f0a9a1e814eb09eb -a99ceca99deda99ee8a999e9a99aeaa9 -9be1a994e2a995e3a996e5a997e6a998 -0017ef2af514f809f8a9bff9a9c0faa9 -c1f5a9bcf6a9bdf7a9bef209f2a9b9f3 -a9baf4a9bbefa9b6f0a9b7f1a9b8e714 -ea09eaa9b3eda9b4eea9b5e7a9b0e8a9 -b1e9a9b2e409e4a9ade5a9aee6a9afe1 -a9abe2a74de3a9ac0018ee2df417f70c -f7a9d7f8a9d8f9a9d9faa9daf4a9d4f5 -a9d5f6a9d6f109f1a9d1f2a9d2f3a9d3 -eea9ceefa9cff0a9d0e714ea09eaa9cb -eba9cceda9cde7a9c8e8a9c9e9a9cae4 -09e4a9c5e5a9c6e6a9c7e1a9c2e2a9c3 -e3a9c46ac3186ec1a56ea2656fa2b570 -a2fb71a44b720018ee2df417f70cf7a9 -8ff8a990f9a991faa992f4a98cf5a98d -f6a98ef109f1a989f2a98af3a98beea9 -86efa987f0a988e814eb09eba983eca9 -84eda985e8a980e9a981eaa982e409e4 -a97de6a97ee7a97fe1a97ae2a97be3a9 -7c0016ee2af514f809f8a933f9a934fa -a935f5a930f6a931f7a932f109f1a92d -f2a92ef3a92feea92aefa92bf0a92ce6 -14ea09eaa927eba928eda929e6a924e7 -a925e9a926e1a91fe2a920e3a921e4a9 -22e5a9230014ef25f514f809f8a949f9 -a94afaa94bf5a946f6a947f7a948efa9 -41f0a942f1a943f2a944f4a945ea0fea -a93ceba93deca93eeda93feea940e1a9 -37e2a938e5a939e6a93ae8a93b0016ef -2af514f809f8a960f9a961faa962f5a9 -5df6a95ef7a95ff209f2a95af3a95bf4 -a95cefa957f0a958f1a959e814eb09eb -a954eca955eda956e8a951e9a952eaa9 -53e1a94ce3a94de4a94ee5a94fe7a950 -0015ef25f414f709f7a976f8a977faa9 -78f4a973f5a974f6a975efa96ef0a96f -f1a970f2a971f3a972e714eb09eba96b -eca96ceda96de7a968e9a969eaa96ae1 -a963e2a964e3a965e4a966e6a9676aa2 -5f6ba2b76ca40f6d0017ed2af314f709 -f7a91bf8a91cfaa91df3a918f5a919f6 -a91af009f0a915f1a916f2a917eda912 -eea913efa914e714ea09eaa90feba910 -eca911e7a90ce8a90de9a90ee409e4a9 -09e5a90ae6a90be1a906e2a907e3a908 -0018ee2df417f70cf7a7d0f8a7d1f9a7 -d2faa7d3f4a7cdf5a7cef6a7cff109f1 -a7caf2a7cbf3a7cceea7c7efa7c8f0a7 -c9e814eb09eba7c4eca7c5eda7c6e8a7 -c1e9a7c2eaa7c3e409e4a7bee6a7bfe7 -a7c0e1a7bbe2a7bce3a7bd0018ee2df4 -17f70cf7a7e9f8a7eaf9a7ebfaa7ecf4 -a7e6f5a7e7f6a7e8f109f1a7e3f2a7e4 -f3a7e5eea7e0efa7e1f0a7e2e814eb09 -eba7ddeca7deeda7dfe8a7dae9a7dbea -a7dce409e4a7d7e6a7d8e7a7d9e1a7d4 -e2a7d5e3a7d60017ee2af414f809f8a9 -02f9a903faa904f4a7fff6a900f7a901 -f109f1a7fcf2a7fdf3a7feeea7f9efa7 -faf0a7fbe714ea09eaa7f6eba7f7eda7 -f8e7a7f3e8a7f4e9a7f5e409e4a7f0e5 -a7f1e6a7f2e1a7ede2a7eee3a7ef65c1 -9b65a25366a29e67a2e968a434690014 -ee25f414f709f7a7b8f9a7b9faa7baf4 -a7b5f5a7b6f6a7b7eea7b1efa7b2f0a7 -b3f1a7b4f2a7aae60fe6a7ade7a7aeeb -a723eca7afeda7b0e1a7a8e2a7a9e3a7 -aae4a7abe5a7ac0015ef25f514f809f8 -a75ff9a760faa761f5a75cf6a75df7a7 -5eefa757f0a758f1a759f3a75af4a75b -e614ea09eaa754eba755eda756e6a751 -e8a752e9a753e1a74ce2a74de3a74ee4 -a74fe5a7500015ee25f414f809f8a775 -f9a776faa777f4a772f5a773f7a774ee -a76defa76ef0a76ff1a770f3a771e614 -ea09eaa76aeca76beda76ce6a767e7a7 -68e8a769e1a762e2a763e3a764e4a765 -e5a7660015f025f514f809f8a78bf9a7 -8cfaa78df5a788f6a789f7a78af0a783 -f1a784f2a785f3a786f4a787e714ed09 -eda71eeea781efa782e7a77ee9a77fea -a780e1a779e2a77ae3a77be4a77ce6a7 -7d0018ed2df317f60cf6a7a3f7a7a4f9 -a7a5faa7a6f3a7a0f4a7a1f5a7a2f009 -f0a79df1a79ef2a79feda79beea79cef -a78ee714ea09eaa798eba799eca79ae7 -a795e8a796e9a797e409e4a792e5a793 -e6a794e1a78fe2a790e3a79161a26562 -a2b563a40a640019ee2df417f70cf7a7 -47f8a748f9a749faa74af4a744f5a745 -f6a746f109f1a741f2a742f3a743eea7 -3eefa73ff0a740e717ea0ceaa73aeba7 -3beca73ceda73de7a737e8a738e9a739 -e409e4a734e5a735e6a736e1a731e2a7 -32e3a7330014ef2ff514f809f8a5fef9 -a5fffaa700f5a5fbf6a5fcf7a5fdefa5 -f5f032f1a5f8f2a5f9f3a5fa012aa5f6 -4b127261e9a5f7e70fe7a5f0e8a5f1ea -a5f2eca5f3eea5f4e1a5ebe2a5ece3a5 -ede5a5eee6a5ef0017ee2af414f709f7 -a716f8a717f9a718f4a713f5a714f6a7 -15f109f1a710f2a711f3a712eea70def -a70ef0a70fe714eb09eba70aeca70bed -a70ce7a707e9a708eaa709e409e4a704 -e5a705e6a706e1a701e2a702e3a70300 -18ed2df317f60cf6a72df7a72ef9a72f -faa730f3a72af4a72bf5a72cf009f0a7 -27f1a728f2a729eda724eea725efa726 -e714ea09eaa721eba722eca723e7a71e -e8a71fe9a720e409e4a71be5a71ce6a7 -1de1a719e2a71ae3a5f300184dc2af54 -c0f257375736584e59665a12616ee2d5 -be01612c631168efc5981172e1d5bd01 -702c731175f8a3c21165efc92a01652c -691169e9b58d117ae9b9a5544455a2ae -5601612c691174e8d5bc1169e9d5bb08 -685e683c698c6ea2466fa248751174e7 -d5ba106101e158e9042ad12b43324b36 -4c3a5410c8d12b10cebd1110c8d5b610 -c1d5b7012aaf8a4d10d6af8a01622a72 -10e8d5b810f4012aa9364210d4a34f11 -73e1c5e301642a7410efd36410f2d5b9 -61346580668667116ce7d5b5056d116d -2e6e327610f4a7ff10eccf9f10e7d35f -67346b386c01e5cfe5f5b91310e2d5b2 -10f2d5b3116cf5cff7116ee7d5b41267 -61f2d39750c0c850a27652a2ad530669 -4769426f6a759079016c2a7210e3abe7 -10efd5b101643e6e01e4cd1ae8012acd -704c10cbcd7010e4d5ae02672e723879 -10efabf701e4cdedefd5af10e1cf1510 -6e01e4d5b0f5cf66613e675e6801612a -7210e4d5ad10f7afda026d2e72327510 -f2cbe610f2cdc810e2d5ac116ef7a565 -046138654c68526c78721174e9d5aa01 -6c2a7510e3ad5510eda54c1172edd5a8 -02612e6c326e10f8c94310e7d5a901e9 -c7ecf0c7ed1172e4b3f3026a306f3675 -116ef2c5ac116ee7d5ab1168e7cb714d -9a4ea2b34f05722272307344751167f2 -c7d8016b2a7910e1c7ac10e8c7c90167 -2a6d10e1d5a710e5c7bc67306c366e11 -61efd5a61161edd5a51163ebcbe00772 -2e725a7460756679116df2032aa9d249 -2e4d325410c8d59e10ceb92210cda9d2 -116fefc1c11165e9d59c116cf4d59d61 -4265746c9a6f01642a6e10e7af5110e9 -d59b0368326b366e3a7210e3d59710ea -d59410e1d59501e4c368e9d596026434 -6e387201e3d599efd59a10e6af1f10e4 -d5981179edc1280461386258655e6b64 -731168f5d5a402672e6e327210e2d5a1 -10edd59f10e4d5a01161f4a54b1177e1 -d5a2116fef012aafd04d10ccd5a347c4 -614ac36d4aa6f14ba80a4c03614665a6 -cd69a6cf7901632a6410e9d59310e9d5 -92026ea6aa6fa6ab7410ee001d4ac15f -53a1571757ace458ace8592a5a10d7cd -d202c4d56cc5d56cd4d52e534854a245 -55a2705603c1d529c5d52bced52ad5a7 -a70ece1ad40cd4d51ed5bb18d6d51fd9 -d58dced51bcfcde7d2d51cd3d58cc90c -c9cdaccad519cbcd93cdd51ac3d518c4 -d56bc5cf670ccd17d20cd2d1e7d6d342 -d7d1fbdacf6ecdd15dced590cfd1b4c8 -09c8d58fcbd165ccd524c4d58ec6d522 -c7d52304c1d591c7d526d3afd9d9d527 -dad5284d8f4d484ea24f50a2645203c5 -d517cfc16cd5bb18d7cbc80011cf1dd5 -0fd5d505d6d589d8d506d9bf37dad507 -cfd587d1d503d2d588d4c1e3c60fc6d5 -02c7bfb3cbd586cca905cdb777c1d585 -c3d500c4d501c5cd0406c90cc9d50bcc -af83cfc395d0d58ac1d508c3d509c5d5 -0a0bcc14d409d4d515d7c7f4d9b31acc -c96acdd512d2d513c7c5c1c7d1d0c8b1 -30cbd58b4a564b5a4c06d30cd3d3fcd4 -bdeed5d3fdd6bf0dc2d583c9d3fbcbd5 -8410cfd58002c5d3f5cdd581dad58242 -c0ee465b4662477248a2444907d10cd1 -d57ed2d57fd3b568d4b5d7c3d3f2c4b5 -6bccd57cced57d02c9b12ccfb144d2b1 -4d0ace0cd2c62cd2d57ad4d3efd7d3f0 -c1d3eac5d579c6d3ebc8a3b9ccb97604 -cbd57bced3f1d2b51fd4b530d5b53642 -5e43a24544a2794506c70cc7d577d2d5 -78d3aff6d4d56ac1d3e6c3d3e7c5afbd -0ecc0fd2c643d2c9e1d4d572d5b777d6 -d3d7c60cc6d3d0c7d571c9cb9acad3d2 -c1a993c4d570c5d3cf0fce1ad60cd6d3 -e1d7c7f0d9d575daad44ced574cfd3de -d2d3dfd5d3e0c80cc8d3dac9d3dbccd3 -dccdd3ddc3d573c4d3d8c6cd47c7d3d9 -04c5adbccad3e3cbad85cfd3e4dad576 -343d34aea2377c3882410bd214d709d7 -d3cdd8d3cedaa5ded2d3cad3d3cbd4d3 -cccc09cca3cfcdd56fcfd3c9c4d3c6c5 -d56dc6d56e1133b6d56b1138b6d56c2a -afd9312c321133b0d56a1137b2bb1810 -e1c5a410ef012abdbd4c10c1bdbd1170 -e3bd30026d2e6e327310f5bd6610e2bd -5c01e1bbe4e2b31801613a701161ee01 -2ab5f94a10d0b5f9016d2a7610e1d565 -10efd564066e256e346f3a7254741168 -e9d5691164e1b9ae1172e5012ab9c74b -01d0d3f7d2b9c71161e9a5f761306850 -691174f3d568026c2e6e327710e9d567 -10e9afc310e1d56602612e6d326f10ea -cd1910f2c9c510f2012ab9914b10c8b9 -91473448a26a49127461ecb105056f45 -6f4a726475026a2e6b327210f5c7e110 -f2b36510e8d55a016e2a7410e8b34101 -e7d558edaff80161506510eb032aafc4 -432e47325410d2a78b10d9d3e210d2af -c410eed559613065366c1161e7ad6411 -72e1d557116ff2012ab1c34710c5b1c3 -056c186c306d3675116ee7d5631175f7 -b3f0106e01e7b508f0b507613265a247 -691172e1d562016e2a7410f2a54a05ef -2defd55df35ef4042aabaa4332483c4d -405410d7abaa01c1d55eced55f10cbab -a210cfaba4012aab9e4310ceab9ee2ab -afe7d55be9d55c1162f2032ab3ca4934 -53385501c1b72bd3d56110ccb3ca10c5 -d56043c135437444a2ee450267446c4a -741168e9012aa3e54501d2d3e9d4a3e5 -1179f0afb301622a7910edd55610e1d5 -550461a28e68a29d6fa2ac70a2ae7911 -72ec0e4b48541d5432553c58465910d5 -cd0201cad114d2d54d01c1d3a1dad54e -10cbd54f4b324d3c52525310cbd54c01 -c7bbb2dad3f903c4d549c5d54acbbf26 -ceaf5002cfd54bd3cd02d5cbb9421f42 -32434247464910d2d54802c1d546c7a7 -78d9a74b10d3cd0201c551d2d5472acb -b938364102c6d543ccd544dad5451139 -b0cd02026b2e6e327210e9d54010edab -7c10f3b59402612e65327210f3d54110 -edabce10f2abb81170f4ad1a016d2a72 -10f4afaa10eed54203653469866f8c75 -1170ecd5541176e106491749324d364e -3a5010cba9bd10ceb3d610d5d55110d0 -c3d82ab3d6422a4610cab3da10d4d550 -1161ebd5521167f2d5532aa25441a8a3 -42056f1f6f3e72447501672a6810e4d5 -3f10e9d53e1170efabae106101e8c961 -e9d53d6130655c68116bf3d53c036c32 -6d36733a7410ebd53b10e9d53a10f5a5 -fe10f3a9a2116ee7012aa91e4210c4a9 -1e00204ac1ba52c0cf5638563c575858 -6259665a01d2d3d8d7cdd204c1d529c4 -d52ac5d52bced52ad5a7a701c6d52cd3 -cdbd10cbd52d03c4d3c5c5d3c5d4d52e -d5cd025246536c54a25a5503c1d3a1c7 -d526d9d527dad52805d309d3cd02d5cb -b9d7cbc8c5d517c8cdd2cfc16c0fce1a -d40cd4d51ed5cbb9d6d51fd9d520ced5 -1bcfcde7d2d51cd3d51dc90cc9cdacca -d519cbcd93cdd51ac1d50cc3d518c4d3 -c4c5cf670ecd1ad20cd2d1e7d6d342d7 -abaadacf6ecdd15dced525cfd1b4d0d5 -24c80cc8d12bcad114cbd165ccd524c4 -d521c6d522c7d5234e5b4e344fa80c50 -665110c1d51608c90fc9d50bccaf83cf -c395d0c3d8d4d50cc1d508c3d509c5d5 -0ac8a7a70dcd17d40cd4d515d7c7f4d9 -b31adad50ecdd512d2d513d3d514c70c -c7d1d0c8b130cbd511ccc96ac1d50ec5 -d50fc6d5104aa2484ba24c4ca2644d00 -12ce20d50fd5d505d6af8ad8d506d9bf -37dad507ceaf50cfaba4d1d503d2d504 -d4c1e3c60fc6d502c7bfb3cbbf26cca9 -05cda9d2c1d3ffc3d500c4d501c5cd04 -01cfd3f4d0b5f907d00cd0d3f7d2b9c7 -d7d3f8dad3f9c5d3f5c7bbb2c8b991cd -d3f608d30fd3d3fcd4bdeed5d3fdd6bf -0dd9d3fec1bdbdc2d3fac9d3fbcbcd70 -42c11f466b4662477848a24f4907d10c -d1d3f3d2b113d3b568d4b5d7c3d3f2c4 -b56bccb3caceb3d603c9b12ccfb144d2 -b14dd8b14d0ace14d209d2afc4d4d3ef -d7d3f0ced3ecd0d3edd1d3eec1d3eac5 -b1c3c6d3ebc8a3b9ccb97605d409d4b5 -30d5b536d6d3d0cbaba2ced3f1d2b51f -426443a25a44a2924507c80cc8d3e8d2 -d3e9d3aff6d4a3e5c1d3e6c3d3e7c5af -bdc7a5480010cc1dd20fd2c9e1d4a34f -d5a9d2d6d3d7d9a74bccd3d3ced3d4cf -d3d5d1d3d6c70cc7a778c8d3d1c9cb9a -cad3d2c1a993c4a91ec5d3cfc6d3d000 -10ce1dd50fd5d3e0d6d3e1d7c7f0d9d3 -e2daad44ceab9ecfd3ded2d3dfd3cd02 -c80cc8d3dac9d3dbccd3dccdd3ddc3bf -38c4d3d8c6cd47c7d3d906cb0ccbad85 -cfd3e4d9d3d2dad3e5c4adbcc5adbcca -d3e3354b3586378c3892410ccf17d40c -d4d3ccd7d3cdd8d3cedaa5decfd3c9d2 -d3cad3d3cbcc09cca3cfcda554cec7f0 -c4d3c6c5d3c7c6d3c81133b2c7f01133 -b6d3c401382a3910b0cd0210b6d3c52a -afd931303236341131b9d3c31137b2cb -b902302e33323810b0adbc10b0ad4410 -b0a3e5046438673e6844724a761173f4 -a358116cedb1281168e2d52f116feda3 -9601613e6d01e9a549ee012aa5544110 -cda55410e200134c665135513c534054 -5655725901c5d3c5d4cf6f10c1d51603 -c1d50cc4d3c4d3d51dd9d52004c4d521 -c8bf9acad538ced525d2d53910cbd533 -4c3c4d464e624f665001cbd511d3d514 -01c2d3fad9d3fe04c1d3ffcdd532ceb9 -5cd2d504d5d53610c7d53710cdd50d45 -2f4542474c49504a664b02c8abc9cdd3 -f6d7d3f801c7a548c8d3e810c2d53303 -c4d534ced535d1d3f3d2b11310cfd3f4 -2aa5484132424243524410dad3e502c5 -d3c7c6d3c8dad53002c8d3d1ced531d5 -d53201c3bf38ced394002574c1f5e534 -f223f2a548f3a560f6a5a3f9a5cafa01 -2a2e41127261e2a5e0022aa5de49a2b5 -5210d5a5e1e5a358e6a366eba3b9eda3 -e5eea3fc78a67832795e7aa260e125e2 -5106eb0ceba5c6eca5c7eda5c8f8a5c9 -e2a5c3e5a5c4e7a5c50013ee20f30ff3 -a5d9f4a5daf5a5dbf8a5dcfaa5ddeea5 -d5efa5d6f0a5d7f1a5d8f2a5cae70fe7 -a5d0e8a5d1e9a5d2eba5d3eca5d4e1a5 -cbe2a5cce3a5cde4a5cee5a5cf08ed0f -eda5e5eea5e6efa5e7f4a5e8faa5e9e2 -a5e2e4a5e3e7a5e4ea012a2e41127261 -e2a5e0032aa5de312e49345310d5a5e1 -1137b2a5e101d1a5dfd2a5e074a24875 -a29d76a2e3770012ee20f50ff5a5bef6 -a5bff7a5c0f8a5c1f9a5c2eea5b9efa5 -baf2a5bbf3a5bcf4a5bde70fe7a5b4e8 -a5b5e9a5b6eba5b7eda5b8e1a5b0e2a5 -b1e3a5b2e5a5b30017ef2af514f809f8 -a58bf9a58cfaa58df5a588f6a589f7a5 -8af209f2a585f3a586f4a587efa582f0 -a583f1a584e914ec09eca57feda580ee -a581e9a57ceaa57deba57ee409e4a579 -e5a57ae7a57be1a576e2a577e3a57800 -14ed25f214f709f7a5a0f9a5a1faa5a2 -f2a59df4a59ef5a59feda598eea599ef -a59af0a59bf1a59ce80fe8a593e9a594 -eaa595eba596eca597e1a58ee3a58fe4 -a590e5a591e7a5920bee14f409f4a5ad -f5a5aef6a5afeea5aaefa5abf3a5aceb -09eba5a7eca5a8eda5a9e2a5a4e4a5a5 -e9a5a66ac2e86fc16d6fa25370a28e71 -a2e372a2fe730014ec25f414f809f8a5 -73f9a574faa575f4a570f5a571f6a572 -eca56beea56cefa56df2a56ef3a56fe7 -0fe7a566e8a567e9a568eaa569eba56a -e1a561e2a562e3a563e4a564e5a56500 -11eb1df20ff2a524f3a525f4a526f8a5 -27faa528eba520eca521eda522eea523 -e50fe5a51be6a51ce7a51de9a51eeaa5 -1fe1a517e2a518e3a519e4a51a0017ee -2af514f809f8a53cf9a53dfaa53ef5a5 -39f6a53af7a53bf209f2a536f3a537f4 -a538eea533efa534f0a535e814eb09eb -a530eca531eda532e8a52de9a52eeaa5 -2fe509e5a52be6a382e7a52ce2a529e3 -a3b5e4a52a08ed0feda543eea544f2a5 -45f4a546faa547e3a53fe4a540e7a541 -eba5420014ee25f314f809f8a55df9a5 -5efaa55ff3a55af5a55bf7a55ceea555 -efa556f0a557f1a558f2a559e90fe9a5 -50eaa551eba552eca553eda554e2a548 -e332e4a54de5a54ee8a54f032aa54948 -324e3a5012616ceda54c126174f2a54a -126261f4a54b6aa2686ba2836ca2c46d -a4196e0019ee2df417f70cf7a513f8a5 -14f9a515faa516f4a510f5a511f6a512 -f109f1a50df2a50ef3a50feea50aefa5 -0bf0a50ce717ea0ceaa506eba507eca5 -08eda509e7a503e8a504e9a505e409e4 -a500e5a501e6a502e1a3fde2a3fee3a3 -ff08f00ff0a3b5f4a35af5a3b6f7a3b7 -faa3b8e1a3b1e7a3b2e9a3b3eea3b400 -13ef20f40ff4a3c9f5a3caf6a3cbf7a3 -ccfaa3cdefa3c4f0a3c5f1a3c6f2a3c7 -f3a3c8e70fe7a3bfe8a3c0e9a3c1eba3 -c2eca3c3e2a3bae3a3bbe4a3bce5a3bd -e6a3be0017ee2af414f809f8a3e2f9a3 -e3faa3e4f4a3dff5a3e0f7a3e1f109f1 -a3ddf2a3def3a3cfeea3daefa3dbf0a3 -dce814eb09eba3d7eca3d8eda3d9e8a3 -d4e9a3d5eaa3d6e409e4a3d1e5a3d2e6 -a3d3e1a3cee2a3cfe3a3d00016ef2af5 -14f809f8a3f9f9a3fafaa3fbf5a3f6f6 -a3f7f7a3f8f209f2a3f3f3a3f4f4a3f5 -efa3f0f0a3f1f1a3f2e714eb09eba3ed -eda3eeeea3efe7a3ebe9a3aceaa3ece1 -a3e6e2a3e7e3a3e8e5a3e9e6a3ea65c1 -4365a25866a28367a2ab68a406690015 -ed25f214f709f7a3aef8a3aff9a3b0f2 -a3abf3a3acf4a3adeda3a6eea3a7efa3 -a8f0a3a9f1a3aae614ea09eaa3a3eba3 -a4eca3a5e6a3a0e7a3a1e9a3a2e1a39b -e2a39ce3a39de4a39ee5a39f0ced17f5 -0cf5a362f7a363f9a364faa365eda35f -f1a360f2a361e509e5a35ceba35deca3 -5ee1a359e2a35ae3a35b0bee14f309f3 -a370f5a371faa372eea36defa36ef0a3 -6fe809e8a36ae9a36beba36ce2a367e4 -a368e5a3690019ee2df417f70cf7a389 -f8a38af9a38bfaa38cf4a386f5a387f6 -a388f109f1a383f2a384f3a385eea380 -efa381f0a382e717ea0ceaa37ceba37d -eca37eeda37fe7a379e8a37ae9a37be4 -09e4a376e5a377e6a378e1a373e2a374 -e3a3750ded17f00cf0a397f2a398f3a3 -99f4a39aeda394eea395efa396e80ce8 -a390e9a391eba392eca393e1a38de2a3 -8ee7a38f61a25062a28563a2be640014 -ee25f414f809f8a355f9a356faa357f4 -a352f5a353f7a354eea34defa34ef0a3 -4ff1a350f2a351e70fe7a348e8a349e9 -a34aeaa34beca34ce1a343e2a344e4a3 -45e5a346e6a3470015ed1af30ef706f7 -4bf84dfa4ff33df447f549ed3dee3fef -41f043f145e60ee906e937eb39ec3be6 -31e733e835e127e229e32be42de52f00 -16ee1ef50ef806f87bf97dfa7ff575f6 -77f779f206f26ff371f473ee69ef6bf0 -6de60ee906e963ec65ed67e65de75fe8 -61e153e255e357e459e55b0012f118f6 -0cf69df79ff8a1f9a341faa342f193f2 -95f397f499f59be60ae689e88bed8dee -8ff091e181e283e485e587 +bb473248d8712a4910c4aba301c2abab +c6aba1754e776c7904e2d573e7d91d3d +ead91d3eeed91d3ff0d91d4003e8d91d +38edd91d39eed91d3af9d91d3b10e1d9 +1d3c7263729673a24d740bf11af50cf5 +d91d34f8d91d35f9d91d36f1d91d31f3 +d91d32f4d91d33ed0cedd91d2eeed91d +2ff0d91d30e5d91d2be7d91d2cecd91d +2d04e7d91d23eed91d24efd91d25f0d9 +1d26f3d91d2703e1d91d28edd831b0f2 +d91d29f5d91d2a6f30706a7110e5d91d +2206ef10efd91d04f1d91d05f2d91d06 +f3d91d07e3d91d02e8d91d03edd91c6b +0019ee3af41ef710f7d91d1ef8d91d1f +f9d91d20fad91d21f4d91d1bf5d91d1c +f6d91d1df10cf1d91d18f2d91d19f3d9 +1d1aeed91d15efd91d16f0d91d17e71e +ea10ead91d11ebd91d12ecd91d13edd9 +1d14e7d91d0ee8d91d0fe9d91d10e40c +e4d91d0be5d91d0ce6d91d0de1d91d08 +e2d91d09e3d91d0a68c10a6cad6c506d +826e04e1d91cfde5d91cfee7d91cffeb +d91d00f3d91d0105ee0ceed91ce0f1d9 +1ce1f5d91ce2e1d91cddead91cdeedd9 +1cdf0019ee3af41ef710f7d91cf9f8d9 +1cfaf9d91cfbfad91cfcf4d91cf6f5d9 +1cf7f6d91cf8f10cf1d91cf3f2d91cf4 +f3d91cf5eed91cf0efd91cf1f0d91cf2 +e71eea10ead91cecebd91cedecd91cee +edd91cefe7d91ce9e8d91ceae9d91ceb +e40ce4d91ce6e5d91ce7e6d91ce8e1d9 +1ce3e2d91ce4e3d91ce56866698a6b07 +f00ff0d91cdaf4d567f5d91cdbfad91c +dce1d91cd9e2b947e4b7c8efd91bb804 +e4d91ccee9d91ccfeed91cd0f7d91cd1 +f8d5a307ee0feed91cd6f2cd13f7d91c +d7fad91cd8e1d91cd2ebd91cd3ecd91c +d4edd91cd56439645a65606705ed0ced +d91ccbeed91cccf2d91ccde1d91cc9e2 +d91ccae8d5b310ead91cc304e1d91cc4 +e7d91cc5e8d91cc6edd91cc7eed91cc8 +613a62a27a6301e1d91cc1e8d91cc200 +17ef36f51af80cf8d91cb8f9d91cb9fa +d91cbaf5d91cb5f6d91cb6f7d91cb7f2 +0cf2d91cb2f3d91cb3f4d91cb4efd91c +b0f0d91cacf1d91cb1e71aea0cead91c +adebd91caeedd91cafe7d91caae8d91c +abe9d91cace40ce4d91ca7e5d91ca8e6 +d91ca9e1d91ca4e2d91ca5e3d91ca605 +f40cf4d91cbef5d91cbff7d91cc0e1d9 +1cbbe3d91cbce5d91cbd00186dc19074 +95782a78307936e1d74befd51a10f7d9 +1b1105ee0ceed91b15f2d91b16f9d91b +17e2d91b12e9d91b13edd91b14745075 +7c7704e1d91b0ce2d91b0defd91b0ef2 +d91b0ff7d91b1006e90ce9d7fcebd7fd +edd7fef7d7ffe2d7f9e6d7fae8d7fb0b +f21af60cf6d91b09f8d91b0af9d91b0b +f2d91b06f4d91b07f5d91b08ec0cecd9 +1b03edd91b04eed91b05e1d91b00e2d9 +1b01e4d91b02705b705c72607307f20c +f2d7f5f3d7f6f5d7f7f6d7f8e1d7f2e7 +d557e9d7f3ebd7f410e3d7e20ff01af6 +0cf6d7eef7d7eff8d7f0fad7f1f0d7ea +f2d7ebf3d7ecf5d7edeb0cebd7e7ecd7 +e8edd7e9efd5c4e2d7e3e7d7e4e8d7e5 +e9d7e66d906ea2666f0ee91aef0cefd7 +def2d7dff3d7e0f7d7e1e9d7daebd7db +edd7dceed7dde40ce4d7d6e5d7d7e6d7 +d8e7d7d9e1d7d3e2d7d4e3d7d50ded17 +f30cf3d7c3f4d7c4f7d7c5f8d7c6edd7 +c0eed7c1efd7c2e40ce4d7bce5d7bde8 +d7bee9d7bfe1d7b9e2d7bae3d7bb0ded +17f00cf0d7d0f5d7d1f7d7d2f9b186ed +d7ceeec165efd7cfe50ce5d7cae7d7cb +e9d7ccebd7cde2d7c7e3d7c8e4d7c967 +b56a4a6a826b8c6c0cef17f50cf5d7b5 +f6d7b6f7d7b7f8d7b8efd7b2f2d7b3f3 +d7b4e809e8d7afe9d7b0edd7b1e1d7ac +e5d7ade7d7ae01e1d7a5e9d7a604e1d7 +a7e4d7a8f2d7a9f7d7aaf9d7ab679e68 +a257690010eb1df20ff2d7a1f5d7a2f6 +d7a3f7c718f9d7a4ebd79decd79eedd7 +9feed7a0e70ce7d799e8d79ae9d79bea +d79ce2d795e3d796e5d797e6d79807ef +0cefd78ef5d78ff7d78bf9d790e1d78a +e2d78be7d78ce9d78d03e1d791e7d792 +ebd793f5d7946452642e655a6610e7d7 +8906eb0cebd779f4d77af5d77bf9d77c +e4d776e7d777ead7780def17f30cf3d7 +85f4d786f5d787f7d788efd183f0d783 +f2d784e80ce8d780e9d781ecad7dedd7 +82e3d77de4d77ee7d77f613662a26063 +01e1d774e9d7750017ee2af514f809f8 +d761f9d762fad763f5d75ef6d75ff7d7 +60f209f2d75bf3d75cf4d75deed758f0 +d759f1d75ae714ea09ead755ecd756ed +d757e7d752e8d753e9d754e409e4d74f +e5d750e6d751e1d74ce2d74de3d74e0f +ec1af20cf2d770f4d771f6d772f7d773 +ecd76cedd76df0d76ef1d76fe80ce8d7 +68e9d769ead76aebd76be1d764e2d765 +e5d766e6d76700186ec25875b6784778 +3079567a90e8d91b4704e2d91be6ebd9 +1be7edd91be8f2d91be9f4d91bea06eb +10ebd91beeecd91beff4d91bf0f9d91b +f1e1d91bebe2d91becead91bed01e8d9 +1bf2f0d91bf3757e76a2537709ec14ec +d91be1efd91be2f2d91be3f4d91be4f7 +d91be5e1d91bdce4d91bdde5d91bdeea +d91bdfebd91be008ed14edd91bd2eed9 +1bd3efd91bd4f4d91bd5f5d91bd6e2d9 +1bcee4d91bcfead91bd0ecd91bd104e5 +d91bd7e9d91bd8eed91bd9efd91bdaf3 +d91bdb72c0d172a25873a28b740012ed +2af414f4d91bc9f5d91bcaf6d91bcbf7 +d91bccf9d91bcdedd91bc4eed91bc5f0 +d91bc6f1d91bc7f3d91bc8e514e5d91b +bfe8d91bc0e9d91bc1ead91bc2ecd91b +c3e1d91bbbe2d91bbce3d91bbde4d91b +be0bed19f20cf2d91bacf5d91badf7d9 +1baeedd91baaeed91babf1af29e50ce5 +d91ba7e7d91ba8e9d91ba9e1d91ba4e2 +d91ba5e4d91ba60eed22f210f2d91bb7 +f3d91bb8f5d91bb9f9d91bbaedd91bb3 +eed91bb4f0d91bb5f1d91bb6e80ee8d9 +1bb1e9d91bb2eacf5aecadc7e1d5abe2 +d91bafe5d91bb06ea2606fa295700014 +ec2ff219f70cf7d91ba1f8d91ba2fad9 +1ba3f2d5a9f4d91b9ff6d91ba0ecd91b +9aedd91b9beed91b9cefd91b9df1d91b +9ee714e7d91b95e8d91b96e9d91b97ea +d91b98ebd91b99e1d91b91e2d91b92e4 +d91b93e5b9dfe6d91b940cee1cf40ef4 +c171f5d91b84f9c381fad91b85eed91b +81f1d91b82f2d91b83ea0cead91b7eeb +d91b7fedd91b80e1d5a0e2d91b7ce9d9 +1b7d0aed1af00cf0d91b8ef2d91b8ff7 +d91b90edd91b8beed91b8cefd91b8de3 +d91b86e4d91b87e7d91b88e9d91b89eb +d91b8a68c10c6bc0d56ba2606ca2c06d +0014ef2ff51af80cf8d91b79f9d91b7a +fad91b7bf5d91b76f6d91b77f7d91b78 +efd91b72f0d91b73f1d91b74f2d598f4 +d91b75e713e7d91b6ee8d91b6fead91b +70edd91b71eed595e1d91b69e2d91b6a +e3d91b6be4d91b6ce6d91b6d0015f030 +f51af80cf8d91b64f9d91b65fad91b66 +f5d91b61f6d91b62f7d91b63f0d91b5c +f1d91b5df2d91b5ef3d91b5ff4d91b60 +e619ea0cead91b59ecd91b5aeed91b5b +e6d91b57e7d91b58e8d760e1d91b52e2 +d91b53e3d91b54e4d91b55e5d91b5603 +e1d91b67e3d591e4d592f9d91b686838 +694e6a01e2d91b50f4d91b5102e5d91b +48edd91b49f6d91b4a05f20cf2d91b4d +f3d91b4ef9d91b4fe18fe9d91b4beed9 +1b4c64586464658a6706e910e9d91b43 +edd91b44f5d91b45f7d91b46e2d91b40 +e4d91b41e7d91b4204e1d91b34ebd91b +35efd91b36f1d91b37f9d91b3806f210 +f2d91b3cf3d91b3df4d91b3ef5d91b3f +e4d91b39e7d91b3aedd91b3b613c62a2 +566302e8abf9efd540f2d53f0010ee26 +f414f4d91b23f5d91b24f6d91b25f7d9 +1b26f9d91b27eed91b1fefd91b20f2d9 +1b21f3d91b22ea10ead91b1bebd91b1c +ecd91b1dedd91b1ee1d91b18e2d91b19 +e7d52ee9d91b1a0cea1ef010f0d91b30 +f2d91b31f7d91b32f9d91b33ead91b2d +edd91b2eeed91b2fe50ce5d91b2ae7d9 +1b2be9d91b2ce1ab5ee2d91b28e4d91b +2900166ec175765c7912792ee9b72bef +d91c6301f2d91ca2f5d91ca3765c776a +7805ed0cedd91c9ff5d91ca0f9d91ca1 +e1d91c9ce7d91c9decd91c9e01e1d91c +93f4d91c9406f110f1d91c98f2d91c99 +f5d91c9af7d91c9be1d91c95e7d91c96 +eed91c97739673a26f74a287750013ed +2af414f4d91c8ff5d91c86f7d91c90f8 +d91c91fad91c92edd91c8aeed91c8bf0 +d91c8cf1d91c8df2d91c8ee614e6d91c +85e7d91c86e9d91c87ead91c88ecd91c +89e1d91c7fe2d91c80e3d91c81e4d91c +82e5012a304812616ef3d91c84012ad9 +1c834310ced91c8405f20cf2d91c7af3 +d91c7bf9d91c7ce4d91c77eed91c78f0 +d91c7901f7d91c7df9d91c7e6e7e6fa2 +4f7209ed14edd91c40efd91c73f3d91c +74f7d91c75f9d91c76e1d91c6ee2d91c +6fe5d91c70ebd91c71ecd91c7207ec10 +ecd91c60f1d91c26f3d91c61f5d91c62 +e1d91c5ce4d91c5de7d91c5eebd91c5f +09ed14edd91c69eed91c6af3d91c6bf4 +d91c6cf9d91c6de2d91c64e7d91c65e9 +d91c66ebd91c67ecd91c6867c0df6b7e +6b7c6ca2526d09ed13edd91c58eed91c +59efd91c5af0d91c5bf4c1f0e2d91c53 +e5d91c54e7d91c55ebd91c56ecd91c57 +08eb14ebd91c45edd91c46efd91c47f2 +d91c48f9d91c49e1d91c41e7d91c42e8 +d91c43e9d91c4408e914e9d91c4eecd9 +1c4ff2d91c50f5d91c51f9d91c52e1d9 +1c4ae2d91c4be5d91c4ce7d91c4d678a +68a255690aec1af30cf3d91c3ef6d91c +3ff9d91c40ecd91c3bedd91c3cf2d91c +3de1d91c36e7d91c37e8d91c38e9d91c +39ead91c3a07f010f0d91c31f2d91c32 +f5d91c33f7d91c34e1d91c2de9d91c2e +ecd91c2fedd91c3010e4d91c3561a245 +62a2b963a2f064a2fa650cee1ef410f4 +d91c29f5d91c2af6d91c2bf9d91c2cee +d91c26f2d91c27f3d91c28e90ce9d91c +23ead91c24ecd91c25e1d91c20e3d91c +21e5d91c220019ee3af41ef710f7d91c +09f8d91c0af9d91c0bfad91c0cf4d91c +06f5d91c07f6d91c08f10cf1d91c03f2 +d91c04f3d91c05eed91c00efd91c01f0 +d91c02e71dea0fead91bfdebd91bfeec +d91bffedbb95e7d91bfae8d91bfbe9d9 +1bfce40ce4d91bf7e5d91bf8e6d91bf9 +e1d91bf4e2d91bf5e3d91bf60cea1eee +10eed91c15efd91c16f8d91c17f9d91c +18ead91c12ecd91c13edd91c14e50ce5 +d91c0fe8d91c10e9d91c11e1d91c0de2 +d91c0ee4ab7d02ecd91c19eed91c1af2 +d91c1b04e1d91c1ce4b72be5d91c1de7 +d91c1eebd91c1f74a45675b285760011 +6e46751b75367746e5d709e9d529efd7 +3f02edd747eed748f4d74910e1d74a6e +326f42724c7410efd74602ebd73cedd7 +3df0d73e01f2d740f4d74103e1d742ef +d743f3d744f4d74569a769a2586aa270 +6ba2716ca2946d0015ec25f314f809f8 +d739f9d73afad73bf3d736f5d737f7d7 +38ecd731edd732f0d733f1d734f2d735 +e614e909e9d72eead72febd730e6d72b +e7d72ce8d72de1d726e2d727e3d728e4 +d729e5d72a07ec0cecd714eed715f4d7 +16f6d717e3d710e4d711e6d712e7d713 +10ebd7180aee14f409f4d721f5d722fa +d723eed71eefd71ff0d720e1d719ead7 +1aebd71becd71cedd71d01f0d724f3d7 +25613662a24365a2476710f2d70f0010 +ed1df20ff2d702f3d703f5d704f6d705 +f9d706edd5feeed5ffefd700f0d701e8 +0ce8d5fce9d5baeab1ccecd5fde1d5f8 +e5d5f9e6d5fae7d5fb01e2d707ebd708 +04e3d70aedd70befd70cf0d70df2d70e +002775c18ce920f20ff2d1e6f3d1fff4 +d311f7a3b9f9d36ae9d13cebd15cecd1 +6feed19defd1b37a387a36e1cf9ee5cf +f6e756e8d12a06ed0cedd37deed37eef +d37ff8d380e8d37aead37becd37c012a +2e41127261e2d114012ad1135010cbd1 +1475a24176a28777a2b578a2f3790ff2 +1af60cf6d376f8d377f9d378fad379f2 +d372f3d373f4d374f5d375ea0cead194 +ecd36feed370f0d371e1d36be5d36ce8 +d36de9d36e0014ec25f314f809f8d33a +f9d33bfad33cf3d337f5d338f6d339ec +d332edd333eed334efd335f1d336e60f +e6d32de7d32ee8d32fe9d330ead331e1 +d328e2d329e3d32ae4d32be5d32c0dee +17f40cf4d346f5d347f7d348f8d349ee +d343efd344f3d345e90ce9d33febd340 +ecd341edd342e1d33de4bba1e5d33e00 +12ee20f40ff4d357f5d358f7d359f8d3 +5af9d35beed352efd353f0d354f1d355 +f2d356e60fe6d34ee7d34fe8d350ecd3 +51edd163e1d34ae2d34be4d34ce5d34d +0def17f40cf4d366f5d367f8d368f9d3 +69efd363f1d364f3d365e90ce9d35fea +d360edd361eed362e1d35ce5d35de7d3 +5e6bc2e870c15870a25d71a29e72a2b9 +73a40e740016ee2af414f709f7d325f9 +d326fad327f4d322f5d323f6d324f109 +f1d18df2d320f3d321eed31defd31ef0 +d31fe814eb09ebd31aecd31bedd31ce8 +d317e9d318ead319e2d312e3d313e4d3 +14e5d315e6d3160013ee20f60ff6d1d9 +f7d1d4f8d1daf9d1dbfad1dceed1d4f0 +d1d5f2d1d6f4d1d7f5d1d8e90fe9d1cf +ead1d0ebd1d1ecd1d2edd1d3e1d1cae3 +d1cbe5d1cce6d1cde7d1ce08ef0fefd1 +e1f0d1e2f4d1e3f5d1e4f7d1e5e2d1dd +ecd1deedd1dfeed1e00017ef2af514f8 +09f8d1fcf9d1fdfad1fef5d1f9f6d1fa +f7d1fbf209f2d1f6f3d1f7f4d1f8efd1 +f3f0d1f4f1d1f5e814ec09ecd1f0edd1 +f1eed1f2e8d1ede9d1eeead1efe509e5 +d1eae6d1ebe7d1ece1d1e7e2d1e8e3d1 +e90011ec1df50ff5d30cf6d30df7d30e +f8d30ffad310ecd308f0d309f2d30af4 +d30be60fe6cfa6e7d304e8d305e9d306 +ead307e1d300e2d301e3d302e4d3036b +a2586ca2936da2de6ea4336f0015ef25 +f514f809f8d1c7f9d1c8fad1c9f5d1c4 +f6d1c5f7d1c6efd1bff0d1c0f1d1c1f2 +d1c2f3d1c3e814eb09ebd1bcecd1bded +d1bee8d1b9e9d1baead1bbe2d1b4e3d1 +b5e4d1b6e6d1b7e7d1b80011f11df50f +f5d16af6d16bf7d16cf8d16dfad16ef1 +d166f2d167f3d168f4d169e60fe6d161 +e7d162ebd163ecd164f0d165e1d15de2 +d15ee4d15fe5d1600015ee25f414f709 +f7d183f8d184f9d185f4d180f5d181f6 +d182eed17bf0d17cf1d17df2d17ef3d1 +7fe714eb09ebd178ecd179edd17ae7d1 +75e9d176ead177e1d170e2d171e3d172 +e4d173e6d1740017ed2af414f709f7d1 +9af9d19bfad19cf4d197f5d198f6d199 +f009f0d194f1d195f2d196edd191eed1 +92efd193e714ea09ead18febcfe6ecd1 +90e7d18ce8d18de9d18ee409e4d189e5 +d18ae6d18be1d186e2d187e3d1880015 +ee25f314f709f7d1b0f8d1b1f9d1b2f3 +d1adf4d1aef6d1afeed1a8efd1a9f0d1 +aaf1d1abf2d1ace714eb09ebd1a5ecd1 +a6edd1a7e7d1a2e8d1a3e9d1a4e1d19e +e2d19fe3d1a0e4d1a1e5b77d66c11b66 +7e679a68a28869a2c36a0aee14f309f3 +d159f5d15af7d15beed156efd157f0d1 +58e1d151e7d152e9d153ead154ecd155 +04e9d10eeed10fefd110f2d111f4d112 +0015ef25f514f809f8d127f9d128fad1 +29f5d124f6d125f7d126efd11ff0d120 +f1d121f3d122f4d123e614e909e9d11c +ead11deed11ee6d11ae7a7c9e8d11be1 +d115e2d116e3d117e4d118e5d1190011 +f11df50ff5d138f6d139f7c77ff9d13a +fad13bf1d134f2d135f3d136f4d137e9 +0fe9d12febd130ecd131edd132f0d133 +e4d12be5d12ce6d12de8d12e0015ee25 +f414f709f7d14ef8d14ff9d150f4d14b +f5d14cf6d14deed146efd147f0d148f1 +d149f3d14ae814eb09ebd143ecd144ed +d145e8d140e9d141ead142e2a936e3d1 +3de4b5d9e6d13ee7d13f61a25d62a2a8 +63a2f864a43e650016ef2af514f809f8 +d10bf9d10cfad10df5d108f6d109f7d1 +0af209f2d105f3d106f4d107efd102f0 +d103f1d104e714eb09ebcfffedd100ee +d101e7cffce8cffde9cffee1cff7e2cf +f8e3cff9e4cffae5cffb0015ef25f514 +f809f8cfb2f9cfb3facfb4f5cfaff6cf +b0f7cfb1efcfaaf0cfabf1cfacf2cfad +f3cfaee614eb09ebcfa7eccfa8eecfa9 +e6cfa4e7cfa5eacfa6e1cf9fe2cfa0e3 +cfa1e4cfa2e5cfa30016ed2af514f809 +f8cfc9f9cfcafacfcbf5cfc6f6cfc7f7 +cfc8f009f0cfc3f3cfc4f4cfc5edcfc0 +eecfc1efcfc2e714ea09eacfbdebcfbe +eccfbfe7cfbae8cfbbe9cfbce1cfb5e3 +cfb6e4cfb7e5cfb8e6cfb90014ed25f3 +14f809f8cfdef9cfdffacfe0f3cfdbf5 +cfdcf7cfddedcfd6eecfd7efcfd8f0cf +d9f1cfdae60fe6cfd1e7cfd2e8cfd3e9 +cfd4ebcfd5e1cfcce2cfcde3cfcee4cf +cfe5cfd00015ed25f314f609f6cff3f8 +cff4f9cff5f3cff1f4cff2f5af6aedcf +eceecfedefcfeef1cfeff2cff0e714ea +09eacfe9ebcfeaeccfebe7cfe6e8cfe7 +e9cfe8e1cfe1e2cfe2e3cfe3e4cfe4e5 +cfe5001a6fc101775ae72ce742ebd3a0 +f2d510fa012a8a41127261e2d5f5012a +2e43127972ecd394022ad3934b2a4d10 +ced39510dad394776479687a01ee26f3 +d5f7012a2e41127261e2d5f5022ad527 +412a4310ced5f610c6d5f510e1d5f310 +e1d5f47345733e746a75907602e5d5f0 +e8d5f1ecd5f206eb0cebd5e5f0d5e6f3 +d5e7f5d5e8e1d5e2e8d5e3e9d5e405f0 +09f0d5ebf2d5ecf5d5ede1d5e9e5d5ea +e8af7301edd5eef2d5ef6fa24d70a251 +720014ee25f514f809f8d5dff9d5e0fa +d5e1f5d5dcf6d5ddf7d5deeed5d7efd5 +d8f0d5d9f2d5daf4d5dbe70fe7d5d2e8 +d5d3e9d5d4ebd5d5edd5d6e1d5cde2d5 +cee3d5cfe5d5d0e6d5d101ebafcaeed5 +ca01e9d5cbf6d5cc68c0dc6bc0c26ba2 +436ca2666da28e6e0bee25f509f5d5c7 +f8d5c8fad5c9eed5c3f0d5c4f2012a2e +44126576e1d5c6012ad5c54e10d0d5c6 +e909e9d5c0ebd5c1edd5c2e1d3c1e5d5 +bee7d5bf0af014f609f6d3a9f7d3aaf9 +d3abf0d3a6f1d3a7f5d3a8e1d3a1e7d3 +a2e8d3a3e9d3a4ebd3a50beb14f509f5 +d3b5f7cf5cf9d3b6ebd3b2edd3b3eed3 +b4e509e5d3afe6d3b0e9d3b1e1d3ace2 +d3ade3d3ae0bee14f209f2d3bff3d3c0 +f5adc5eed3bcefd3bdf0d3bee709e7d3 +bae9cf96edd3bbe1d3b7e2d3b8e4d3b9 +682e69386a10e9d39f01e1d39beed39c +01f3d39df6d39e651d6546664a6704e1 +d396e2d397e5d398e8d399efd39a10f3 +d39110e9d392615c62666407ea0cead3 +8decd38eedd38ff5d390e1d389e5d38a +e7d38be9d38c01edd381f2d38205f209 +f2d386f5d387f9d388e1d383e9d384ec +d38570cedc70b00571b8d972baa27300 +2b77c11aec25f214f509f5cf53f6cf66 +f7cf6df2ae9af3cf28f4cf3deccdabed +cdbceecdd1efcde6f1a3cfe336e709e7 +cd46e9cd6febcd92e3cd00e426e5cd2a +032a3644444b4c5312696ee4cd19012a +cd164910cecd17126576e1cd1712686f +eacd18773878a24a79a25f7aa28ae1ab +f00012f020f50ff5cf7bf6cf7cf7cf7d +f8cf7ef9cf7ff0cf76f1cf77f2cf78f3 +cf79f4cf7ae90fe9cf71eacf72ebcf73 +edcf74efcf75e2cf6ee6cf6fe7cf70e8 +cf6d06f20cf2cf83f3cf84f5cf85f7cf +86e2cf80e5cf81eecf820ced17f20cf2 +abe7f3cf90f7cf91f8cf92edcf8deecf +8eefcf8fe909e9cf8aebcf8beccf8ce1 +cf87e2cf88e3cf890aec14f609f6cf9b +f7cf9cf9cf9deccf98eecf99f0cf9ae1 +cf93e2cf94e3cf95e4cf96e7cf976cc2 +c171c15d74a5745275a25f7605e509e5 +cf6aedcf6bf3cf6ce1cf67e2cf68e3cf +690014ed25f214f609f6cf50f7cf51f9 +cf52f2cf4df3cf4ef4cf4fedcf48eecf +49efcf4af0cf4bf1cf4ce80fe8cf43e9 +cf44eacf45ebcf46eccf47e1cf3ee2cf +3fe5cf40e6cf41e7cf420012ed20f40f +f4cf61f6cf62f7cf63f9cf64facf65ed +cf5cefcf5df1cf5ef2cf5ff3cf60e70f +e7cf58e9cf59eacf5aebcf5beccd4ae1 +cf54e2cf55e3cf56e5cf5771a24872a2 +5d730013ee20f50ff5cf38f6cf39f8cf +3af9cf3bfacf3ceecf33efcf34f1cf35 +f3cf36f4cf37e70fe7cf2ee8cf2feacf +30eccf31edcf32e2cf29e3cf2ae4cf2b +e5cf2ce6cf2d06ef0cefcf0ff1cf10f4 +cf11f5cf12e1cf0ce8cf0dedcf0e0016 +ee2af514f809f8b3e1f9cf26facf27f5 +cf23f6cf24f7cf25f209f2cf20f3cf21 +f4cf22eecf1defcf1ef1cf1fe714eb09 +ebcf1aeccf1bedcf1ce7cf17e8cf18e9 +cf19e1cf13e2cf14e3cd00e5cf15e6cf +166ca2486da2806ea2c66fa411700011 +ee1df20ff2cf08f3cf09f4cf0af6cf0b +f9b984eecf04efcf05f0cf06f1cf07e7 +0fe7cdffe9cf00ebcf01eccf02edcf03 +e2cdfbe3cdfce4cdfde5cdfe0010ee1d +f50ff5cdb7f7cdb8f8cdb9f9cdbafacd +bbeecdb4efcd92f0cdb5f2cdb6e90ce9 +cdb0eacdb1eccdb2edcdb3e3cdace4cd +ade7cdaee8cdaf0014ee25f414f809f8 +cdcef9cdcffacdd0f4cdcbf5cdccf7cd +cdeecdc6f0cdc7f1cdc8f2cdc9f3cdca +e70fe7cdc1e8cdc2eacdc3ebcdc4eccd +c5e1cdbde2cdbee3cdbfe4b993e6cdc0 +0015ef25f514f809f8cde4f9cde5faa5 +64f5cde1f6cde2f7cde3efcddcf0cddd +f1cddef2cddff3cde0e914ec09eccdd9 +edcddaeecddbe9cdd6eacdd7ebcdd8e2 +a7f3e3cdd2e5cdd3e6cdd4e7cdd50013 +f020f60ff6cdf6f7cdf7f8cdf8f9cdf9 +facdfaf0cdf1f1cdf2f2cdf3f3cdf4f5 +cdf5e70fe7cdece9cdedebcdeeeccdef +efcdf0e1cde7e2cde8e3cde9e4cdeae5 +cdeb66c17d69c0d869a25c6aa2a76b00 +17ef2af514f809f8cda8f9cda9facdaa +f5cda5f6cda6f7cda7f209f2cda2f3cd +a3f4cda4efcd9ff0cda0f1cda1e714ea +09eacd9cedcd9deecd9ee7cd99e8cd9a +e9cd9be409e4cd96e5cd97e6cd98e1cd +93e2cd94e3cd950015ed25f514f809f8 +cd83f9cd84facd85f5cd80f6cd81f7cd +82edcd7bf0cd7cf1cd7df2cd7ef3cd7f +e714ea09eacd78ebcd79eccd7ae7cd75 +e8cd76e9cd77e1cd70e2cd71e4cd72e5 +cd73e6cd740bed14f409f4cd8ff5cd90 +f7cd91edcd8cf0cd8df2cd8ee509e5cd +89e7cd8aeccd8be1cd86e2cd87e4cd88 +66a25767a25e680016ee2af414f709f7 +cd6cf9cd6dfacd6ef4cd69f5cd6af6cd +6bf109f1cd66f2cd67f3cd68eecd63ef +cd64f0cd65e714ea09eacd60ebcd61ed +cd62e7cd5de8cd5ee9cd5fe1cd58e2cd +59e3cd5ae4cd5be5cd5c02e5cd43edcd +44f7cd450011ed1df40ff4cd53f5cd54 +f7cd55f9cd56facd57edcd4ff0cd50f2 +cd51f3cd52e50fe5cd4be8cd4ce9cd4d +eacd4eecb5d1e1cd47e2cd48e3cd49e4 +cd4a61a26262a2ad63a40564a4586500 +17ee2af414f709f7cd40f9cd41facd42 +f4cd3df5cd3ef6cd3ff109f1cd3af2cd +3bf3cd3ceecd37efcd38f0cd39e714ea +09eacd34ebcd35eccd36e7cd31e8cd32 +e9cd33e409e4cd2ee5cd2fe6cd30e1cd +2be2cd2ce3cd2d0015f025f514f809f8 +cbe4f9cbe5facbe6f5cbe1f6cbe2f7cb +e3f0a546f1cbddf2cbdef3cbdff4cbe0 +e614eb09ebcbdaedcbdbefcbdce6cbd7 +e8cbd8eacbd9e1cbd2e2cbd3e3cbd4e4 +cbd5e5cbd60018ee2df417f70cf7cbfc +f8cbfdf9cbfefacbfff4cbf9f5cbfaf6 +cbfbf109f1cbf6f2cbf7f3cbf8eecbf3 +efcbf4f0cbf5e814eb09ebcbf0eccbf1 +edcbf2e8cbede9cbeeeacbefe409e4cb +eae5cbebe7cbece1cbe7e2cbe8e3cbe9 +0012ee20f40ff4cd11f5cd12f6cd13f7 +cd14f8cd15eecd0defcd0ef0cd0ff2b5 +1ff3cd10e70fe7cd08e8cd09e9cd0aeb +cd0beccd0ce2cd01e32ce5cd06e6cd07 +22032acd024d2e52325410d2cd0510c5 +cd0310cfcd040feb1af20cf2cd26f3cd +27f5cd28f8cd29ebcd22eecd23efcd24 +f1cd25e60ce6cd1ee7cd1fe8cd20eacd +21e1cd1ae2cd1be3cd1ce5cd1d001d70 +c17b784be90ce9c94aecc96af3c909f4 +c9e1785079547a7ae1012a2e41127261 +e2c7e2012ac7e15010cbc7e210edcb07 +05f509f5cb0bf8cb0cf9cb0de5cb08ed +cb09eecb0a02e5cb0ee8cb0feecb1073 +af736474a24575a2637707ee0ceecb03 +efcb04f2cb05f7cb06e1c9ffe2cb00e7 +cb01edcb020aee14f409f4c9def5c9df +f7c9e0eec9dbf1c9dcf3c9dde1c9d6e5 +c9d7e8c9d8e9c9d9edc9da09f00ff0c9 +e7f2c9e8f4c9e9f5c9eaf6c9ebe1c9e2 +e8c9e3e9c9e4eec9e5efc9e60013ef20 +f50ff5c9fbf7c9fcf8c9fdf9c9fefac9 +edefc9f6f0c9f7f1c9f8f2c9f9f4c9fa +e60fe6c9f1e7c9f2e9c9f3eac9f4edc9 +f5e1c9ece2c9ede3c9eee4c9efe5c9f0 +70a24571a270720012ed20f40ff4c9d2 +f5c9d3f7c9d4f8c9d5f9c9d2edc9ceef +c9cff0b365f1c9d0f2c9d1e60fe6c9c9 +e7c9cae8c9cbe9c9ccebc9cde1c9c5e3 +c9c6e4c9c7e5c9c80cee17f10cf1c9c0 +f2bd12f3c9c1f4c9c2eec9bdefc9bef0 +c9bfeb09ebc9baecc9bbedc9bce1a776 +e5c9b8e9c9b901e1c9c3edc9c468c1f7 +6cc14d6ca2426da27d6ea2c86f0010ee +1df30ff3c9b3f4c9b4f6c9b5f7c9b6f9 +c9b7eec9afefc9b0f0c9b1f1c9b2e80c +e8c9abe9c9acebc9adedc9aee3c9a7e5 +c9a8e6c9a9e7c9aa0011ee1df40ff4bf +b3f5b906f6c978f7c979fac97aeec974 +efc975f2c976f3c977e50fe5c96fe7c9 +70e8c971ebc972ecc973e1c96be2c96c +e3c96de4c96e0015ee25f414f809f8c9 +8cf9c98dfac98ef4c98af5c945f7c98b +eec985efc986f1c987f2c988f3c989e6 +14ea09eac982ecc983edc984e6c97fe8 +c980e9c981e1c97be2c97ce3b548e4c9 +7de5c97e0016ed53f33df709f7c9a4f9 +c9a5fac9a6f3c99ff426f6c9a3022a32 +435e4c126174eec9a2042ac9a0313252 +3853345410d2c9a21137b2c9a110d5c9 +a1127972ecc9a1f009f0c99cf1c99df2 +c99eedc999eec99aefc99be714ea09ea +c996ebc997ecc998e7c993e8c994e9c9 +95e1c98fe2bbe9e3c990e4c991e5c992 +686a69a2506aa29b6b08ee0feec965ef +c966f0c967f2c968f5c969e1c961e2c9 +62e7c963e8c9640cee17f40cf4c946f5 +c947f6c948f7c949eec943efc944f2c9 +45eb09ebc940ecc941edc942e4c93de7 +c93ee8c93f0015ef25f514f809f8c95d +f9c95efac95ff5c95af6c95bf7c95cef +c955f0c956f2c957f3c958f4c959e714 +ec09ecc952edc953eec954e7c950e8c9 +51eaad1fe1c94be2c94ce3c94de4c94e +e6c94f10f4c96064836468658e66a272 +6708eb0febc938ecc939eec93af3c93b +f5c93ce1c934e4c935e7c936e9c93705 +ef09efc91ef4c91ff5c920e1c91be3c9 +1ceec91d0011ef1df30ff3b113f6c92d +f8c92ef9c92ffac930efc92af0c92bf1 +c92cf2b113e70fe7c925e9c926ebc927 +ecc928edc929e1c921e2c922e4c923e5 +c92402e1c931e5c932ecc933619662a2 +95630fe91aee0ceec918f0c919f2a355 +f7c91ae9c914eac915ebc916edc917e5 +0ce5c910e6c911e7c912e8c913e1c90c +e2c90de3c90ee4c90f0016ef2af514f8 +09f8c7f7f9c7f8fac7f9f5c7f4f6c7f5 +f7c7f6f209f2c7f2f3c7f3f4bbabefc7 +eff0c7f0f1c7f1e71eeb13ebc7ebec26 +edc7ee012ac7ec5012686cf0c7ede7c7 +e8e8c7e9e9c7eae2c7e3e3c7e4e4c7e5 +e5c7e6e6c7e70011ee1df30ff3c907f4 +c908f5c909f6c90af9c90beec903efc9 +04f0c905f2c906e70fe7c7fee8c7ffe9 +c900ecc901edc902e2c7fae3c7fbe5c7 +fce6c7fd057839782a797cf5cb110bf0 +14f409f4cb42f5cb43f7cb44f0cb3ff1 +cb40f2cb41ec09eccb3ceecb3defcb3e +e1cb39e3cb3ae8cb3b01e1cb45f0cb46 +755276a25a7705ed09edcb36f3cb37f4 +cb38e1cb33e3cb34e8cb350013ee20f6 +0ff6cb21f7cb22f8cb23f9cb24facb11 +eecb1cf0cb1df1cb1ef2cb1ff3cb20e7 +0fe7cb17e9cb18ebcb19eccb1aedcb1b +e1cb12e2cb13e3cb14e4cb15e6cb160d +ed17f00cf0cb2ff3cb30f7cb31facb32 +edcb2ceecb2defcb2ee80ce8cb28e9cb +29eacb2aeccb2be1cb25e3cb26e5cb27 +0019709f7820ee0ceecb9aefc16cf5cb +b9f7cbc8782a7934edcb8401e4cbcff7 +cbd010f5cbd1745b745075667705ed09 +edcbccefcbcdf2cbcee1cbc9ebcbcaec +cbcb03e3cbb5e8cbb6edcbb7f7cbb80e +ed1af40cf4cbc4f5cbc5f9cbc6facbc7 +edc16cefcbc1f0cbc2f1cbc3e60ce6cb +bde7cbbee9cbbfebcbc0e2cbbae3cbbb +e5cbbc7034723e7301ebcbb3f7cbb401 +eecbadf4cbae03e9cbafedcbb0efcbb1 +f4cbb268c0ea6bb76b8a6da24a6ea29a +6f0cec17f00cf0cba9f2cbaaf5cbabf7 +cbaceccba7edcb98efcba8e509e5cba4 +e6cba5e7cba6e2cba1e3cba2e4cba306 +e90ce9ab7dedcb81f4cb82f7cb83e1cb +7ee2cb7fe8cb800016ed2af414f809f8 +bda3f9cb98facb99f4cb95f5cb96f7cb +97f009f0cb93f1cb94f2afd7edcb90ee +cb91efcb92e614e909e9cb8debcb8eec +cb8fe6cb8ae7cb8be8cb8ce1cb85e2cb +86e3cb87e4cb88e5cb8905ee09eecb9e +f2cb9ff7cba0e4cb9be7cb9ceccb9d68 +3a69446a02e7cb7be9cb7cf3cb7d01e7 +cb71f0cb7207ee0ceecb77f2cb78f4cb +79f5cb7ae1cb73e6cb74eccb75edcb76 +64446446654a6704e1cb6ceecb6df2cb +6ef3cb6ff5cb7010e2cb5f0bec14f309 +f3cb69f4cb6af9cb6beccb66edcb67ee +cb68e709e7cb63e9cb64eacb65e1cb60 +e2cb61e5cb62613062a2496310e6cb5e +0013ed20f60ff6cb55f7cb56f8cb57f9 +cb58facb59edcb50eecb51efcb52f0cb +53f2cb54e70fe7cb4ce8cb4de9cb4eea +c309ebcb4fe1cb47e2cb48e3cb49e4cb +4ae6cb4b03e2cb5aebcb5beccb5cf0cb +5d6da6596eb8666f001b70c0f27923ea +0ceac769edb183f2c7acf3c7bb792a7a +3ae3c75502e4c7ddedc7def9c7df10ed +c7e07462743c75a24976a2567701e9c7 +dbecc7dc0011f11df50ff5c7d1f7c7d2 +f8c7d3f9c7d4fac7d5f1c7cdf2c7cef3 +c7cff4c7d0e90fe9c7c8ebc7c9ecc7ca +edc7cbeec7cce1c7c4e2c7c5e4c7c6e5 +c7c704e2c7d6e5c7d7e9c7d8edc7d9ee +b1cc10e4c7da705c72827307f00cf0c7 +c0f4c7c1f5c7c2f8c7c3e1c7bce3c7bd +e9c7beefc7bf05ef09efc7a9f4c7aaf9 +c7abe1b560ebc7a7edc7a80ef31af70c +f7c7b8f8c7b9f9c7acfac7baf3c7b4f4 +c7b5f5c7b6f6c7b7e70ce7c7b0eec7b1 +efc7b2f2c7b3e1c7ade3c7aee5c7af69 +c0f06c926c406d786ea25a6f02e4c7a4 +eec7a5f2c7a608ed0fedc783efc784f2 +c785f4c786f5c787e1c77fe4c780e5c7 +81ebc7820def17f40cf4c792f5c793f7 +c794f8c795efc78ff0c790f2c791e70c +e7c78be9c78cebc78decc78ee1c788e2 +c789e3c78a0def17f30cf3c7a0f4c7a1 +f5c7a2f8c7a3efc79df0c79ef2c79fe9 +0ce9c799eac79aebc79beec79ce1c796 +e5c797e7c79869966aa2426b0fed1af5 +0cf5c77bf6c77cf8c77dfac77eedc777 +efc778f2c779f3c77ae50ce5c773e7c7 +74e9c775ebc776e1c76fe2c770e3c771 +e4c77202e1c766e5c767eec76805f309 +f3c76cf6c76df7c76ee2c76ae3c76be7 +c76964326438664e67586801f4c764f5 +c76503e1c759ebc75af4c75bf5c75c01 +f3c75df5c75e04e2c75fe3c760e7c761 +efc762f5c763613a62506302e1c756ef +c757f5c75803e1c749e3c74af2c74bf6 +c74c07ef0cefc751f2c752f4c753f5c7 +54e9c74debc74eecc74fedc750002473 +c2cae82aef0fefc16cf2c1b4f3b200f4 +c1e3f9a9d2e8bfcde9bf2febbf26ecc1 +28ee012ad833ed4d126f6ee7af5177c1 +4c773878a26179a2bc7aa2fde7bfb300 +17ed2af314f609f6c33af7c33bfac33c +f3c337f4c338f5c339f009f0c335f1c3 +36f2addfedc332eec333efc334e714ea +09eab1ccebc330ecc331e7c32de8c32e +e9c32fe409e4af29e5c32be6c32ce1c3 +28e2c329e3c32a0019ee2df417f70cf7 +c353f8c354f9c355fac356f4c350f5c3 +51f6c352f109f1c34df2c34ef3c34fee +c34aefc34bf0c34ce717ea0ceac346eb +c347ecc348edc349e7c343e8c344e9c3 +45e409e4c340e5c341e6c342e1c33de2 +c33ee3c33f0013ed20f60ff6c364f7c3 +65f8c366f9c367fac368edc360f0c361 +f2c362f4c1cbf5c363e70fe7c35be8c3 +5ceac35debc35eecc35fe2c357e3c358 +e4a51de5c359e6c35a0013ef20f50ff5 +c378f6c379f7c37af8c37bfac37cefc3 +73f0c374f1c375f2c376f4c377ea0fea +c36eebc36fecc370edc371eec372e1c3 +69e4c36ae5c36be8c36ce9c36d73a250 +74a2a075a2f8760014f025f514f809f8 +c325f9c326fac327f5c322f6c323f7c3 +24f0c31df1c31ef2c31ff3c320f4c321 +e80fe8c318ebc319ecc31aeec31befc3 +1ce1c313e4c314e5c315e6c316e7c317 +0016ee2af514f809f8c1e0f9c1e1fac1 +e2f5c1ddf6c1def7c1dff109f1c1dbf3 +c1dcf4c1cbeec1d8efc1d9f0c1dae814 +eb09ebc1d5ecc1d6edc1d7e8c1d2e9c1 +d3eac1d4e2c1cde3c1cee5c1cfe6c1d0 +e7c1d10018ed2df317f60cf6c1f9f7c1 +faf8c1fbf9c1fcf3c1f6f4c1f7f5c1f8 +f009f0c1f3f1c1f4f2c1f5edc1f0eec1 +f1efc1f2e714ea09eac1edebc1eeecc1 +efe7c1eae8c1ebe9c1ece409e4c1e7e5 +c1e8e6c1e9e1c1e4e2c1e5e3c1e60015 +ef25f414f809f8c310f9c311fac312f4 +c30df5c30ef6c30fefc308f0c309f1c3 +0af2c30bf3c30ce714ea09eac305ebc3 +06edc307e7c302e8c303e9c304e1c1fd +e2c1fee3c1ffe4c300e5c3016ac3076e +c1c76ea2626fa2bb70a40b71a4637200 +17ef2af514f809f8c1caf9c1cbfac1cc +f5c1c7f6c1c8f7c1c9f209f2c1c4f3c1 +c5f4c1c6efc1c1f0c1c2f1c1c3e814ec +09ecc1beedc1bfeec1c0e8c1bbeac1bc +ebc1bde409e4c1b8e6c1b9e7c1bae1c1 +b5e2c1b6e3c1b70018ed2df417f70cf7 +c168f8c169f9c16afac16bf4c165f5c1 +66f6c167f109f1c162f2c163f3c164ed +c15feec160f0c161e715ea0aeac15deb +d829caecc15ee7c15ae8c15be9c15ce4 +09e4c157e5c158e6c159e1c154e2c155 +e3c1560016ef2af514f809f8c180f9c1 +81fac182f5c17df6c17ef7c17ff209f2 +c17af3c17bf4c17cefc177f0c178f1c1 +79e714ea09eac175ebc176edabd2e7c1 +72e8c173e9c174e1c16de3c16ee4c16f +e5c170e6c1710018ee2df417f70cf7c1 +98f8c199f9c19afac19bf4c195f5c196 +f6c197f109f1c192f2c193f3c194eec1 +8fefc190f0c191e814eb09ebc18cecc1 +8dedc18ee8c189e9c18aeac18be409e4 +c186e5c187e7c188e1c183e2c184e3c1 +850017ee2af514f809f8c1b1f9c1b2fa +c1b3f5c1aef6c1aff7c1b0f109f1c1ab +f2c1acf3c1adeec1a8efc1a9f0c1aae8 +14eb09ebc1a5ecc1a6edc1a7e8c1a2e9 +c1a3eac1a4e509e5c19fe6c1a0e7c1a1 +e1c19ce2c19de3c19e6aa2556ba2a06c +a2eb6d0015ef25f514f809f8c151f9c1 +52fac153f5c14ef6c14ff7c150efc149 +f0c14af1c14bf2c14cf4c14de614e909 +e9c146edc147eec148e6c143e7c144e8 +c145e1c13ee2c13fe3c140e4c141e5c1 +420015ee25f514f809f8c10ff9c110fa +c111f5c10cf6c10df7c10eeec107f1c1 +08f2c109f3c10af4c10be814eb09ebc1 +04ecc105edc106e8c101e9c102eac103 +e2bffce3bffde4bffee5bfffe7c10000 +15ef25f514f809f8c125f9c126fac127 +f5c122f6c123f7c124efc11df0c11ef2 +c11ff3c120f4c121e914ec09ecc11aed +c11beec11ce9c117eac118ebc119e1c1 +12e2c113e3c114e5c115e6c1160014ee +25f314f709f7c13bf8c13cfac13df3c1 +38f5c139f6c13aeec133efc134f0c135 +f1c136f2c137e80fe8c12ee9c12feac1 +30ebc131ecc132e1c129e2c12ae3c12b +e5c12ce6c12d65c1c465a26266a2b267 +a40a68a465690017ed2af414f809f8bf +f9f9bffafabffbf4bff6f5bff7f7bff8 +f009f0bff3f1bff4f2bff5edbff0eebf +f1efbff2e714ea09eabfedebbfeeecbf +efe7bfeae8bfebe9bfece409e4bfe7e5 +bfe8e6bfe9e1bfe4e2bfe5e3bfe60016 +ee2af414f709f7bf97f9bf98fabf99f4 +bf94f5bf95f6bf96f109f1bf91f2bf92 +f3bf93eebf8eefbf8ff0bf90e714eb09 +ebbf8becbf8cedbf8de7abc6e8bf89ea +bf8ae1bf84e2bf85e3bf86e4bf87e5bf +880018ed2df417f70cf7bfaff8bfb0f9 +bfb1fabfb2f4bfacf5bfadf6bfaef009 +f0bfa9f1bfaaf2bfabedbfa6eebfa7ef +bfa8e714ea09eabfa3ebbfa4ecbfa5e7 +bfa0e8bfa1e9bfa2e409e4bf9de5bf9e +e6bf9fe1bf9ae2bf9be3bf9c0019ee2d +f417f70cf7bfcaf8b711f9bfcbfabfcc +f4bfc7f5bfc8f6bfc9f109f1bfc4f2bf +c5f3bfc6eebfc1efbfc2f0bfc3e717ea +0ceabfbdebbfbeecbfbfedbfc0e7bfba +e8bfbbe9bfbce409e4bfb7e5bfb8e6bf +b9e1bfb4e2bfb5e3bfb60016ee2af414 +f809f8bfe1f9bfe2fabfe3f4bfdef5bf +dff7bfe0f109f1bfdcf2abb3f3bfddee +bfd9efbfdaf0bfdbe714eb09ebbfd6ec +bfd7edbfd8e7bfd3e9bfd4eabfd5e2bf +cee3bfcfe4bfd0e5bfd1e6bfd261a25f +62a2b463a409640017ee2af514f809f8 +bf81f9bf82fabf83f5bf7ef6bf7ff7bf +80f209f2bf7bf3bf7cf4bf7deebf78f0 +bf79f1bf7ae714ea09eabf75ebbf76ed +bf77e7bf72e8bf73e9bf74e409e4bf6f +e5bf70e6bf71e1bf6ce2bf6de3bf6e00 +15ee2ff51df812f8bf36f926fabf3922 +012abf374310c3bf38f5bf33f6bf34f7 +bf35eed82517efbf2ff1bf30f3bf31f4 +bf32e614ea09eabf2cebbf2dedbf2ee6 +bf29e7bf2ae9bf2be1bf24e2bf25e3bf +26e4bf27e5bf280017ef2af514f809f8 +bf4ff9bf50fabf51f5bf4cf6bf4df7bf +4ef209f2bf49f3bf4af4bf4befbf46f0 +bf47f1bf48e914ec09ecbf43edbf44ee +bf45e9bf40eabf41ebbf42e409e4bf3d +e6bf3ee8bf3fe1bf3ae2bf3be3bf3c00 +19ee2df417f70cf7bf68f8bf69f9bf6a +fabf6bf4bf65f5bf66f6bf67f109f1bf +62f2bf63f3bf64eebf5fefbf60f0bf61 +e717ea0ceabf5bebbf5cecbf5dedbf5e +e7bf58e8bf59e9bf5ae409e4bf55e5bf +56e6bf57e1bf52e2bf53e3bf54002473 +c1dfe220ee0feec589efc5a1f2c5c8f6 +c70ff9c727e2c395e4c3bfe5c3d8e7c3 +f3ecaf8377c0d27736787479a2527aa2 +a7e1c37d09ed0fedc717efc718f2c719 +f7c71af8c71be2c712e3c713e5c714e7 +c715e9c7160bee14f209f2c725f5a958 +f8c726eec722efc723f1c724e709e7c7 +1fe9c720ecc721e1c71ce4c71de5c71e +0017ee2af414f709f7c73cf8c73df9c7 +3ef4c739f5c73af6c73bf109f1c736f2 +c737f3c738eec733efc734f0c735e814 +eb09ebc730ecc731edc732e8c72de9c7 +2eeac72fe509e5c72ae6c72be7c72ce2 +c728e3b364e4c72909ed0fedc744f2c7 +45f5c746f9c747fac748e1c73fe2c740 +e4c741e9c742ebc743734274a25775a2 +887602e8c710edc711efa7000014ee25 +f514f809f8c5e7f9c5e8fac5e9f5c5e4 +f6c5e5f7c5e6eec5dfefc5e0f1c5e1f3 +c5e2f4c5e3e60fe6c5dae7c5dbe8c5dc +ebc5ddedc5dee1c5d5e2c5d6e3c5d7e4 +c5d8e5c5d90eef1af50cf5c5f4f8c5f5 +f9c5f6fac5f7efc5f1f0c5f2f2c5f3f3 +ad1fe90ce9c5edeac5eeebc5efedc5f0 +e4c5eae5c5ebe7c5ec0017ef2af514f8 +09f8c70cf9c70dfac70ef5c709f6c70a +f7c70bf209f2c706f3c707f4c708efc7 +03f0c704f1c705e814eb09ebc701edc7 +02eea5dce8c5fee9c5ffeac700e509e5 +c5fbe6c5fce7c5fde1c5f8e3c5f9e4c5 +fa6ac2596ec1256e966fa29370a2d971 +a2fc720dec17f00cf0c5d2f5c39bf8c5 +d3fac5d4ecc5cfedc5d0eec5d1e60ce6 +c5cce7c5cde9c5ceebc569e1c5c9e2c5 +cae5c5cb0018ed2df417f70cf7c59ef8 +c506f9c59ffac5a0f4c59bf5c59cf6c5 +9df109f1c599f2c59af3c3a5edc596ee +c597f0c598e714ea09eac593ebc594ec +c595e7c590e8c591e9c592e409e4c58d +e5c58ee6c58fe1c58ae2c58be3c58c00 +14ed25f314f609f6c5b2f7c5b3f9c5b4 +f3c5aff4c5b0f5c5b1edab6ceec5acef +af64f0c5adf1c5aee70fe7c5a7e8c5a8 +e9c5a9eac5aaebc5abe1c5a2e3c5a3e4 +c5a4e5c5a5e6c5a60aee14f509f5c5bc +f8c5bdf9c5beeec5b9efc5baf3c5bbe2 +c5b5e7c5b6e8c5b7e9c3d8ecc5b808ee +0feec5c3efc5c4f1c5c5f4c5c6f9c5c7 +e7c5bfebc5c0ecc5c1edc5c26aa2626b +a29a6ca2ea6d0018ed2df317f60cf6c5 +85f7c586f8c587fac588f3c582f4c583 +f5c584f009f0c57ff1c580f2c581edc5 +7ceec57defc57ee714ea09eac579ebc5 +7aecc57be7c576e8c577e9c578e409e4 +c573e5c574e6c575e1c570e2c571e3c5 +720010ee1df40ff4c544f5c545f8c546 +f9c547faad93eec540efc541f2c542f3 +c543e90ce9c53ceac53decc53eedc53f +e1c538e2c539e4c53ae8c53b0016ed2a +f414f709f7c55cf8c55dfac55ef4c559 +f5c55af6c55bf109f1c556f2c557f3c5 +58edc553eec554efc555e614e909e9c5 +50eac551ebc552e6c54de7c54ee8c54f +e1c548e2c549e3c54ae4c54be5c54c00 +11ef1df60ff6c56bf7c56cf8c56df9c5 +6efac56fefc567f1c568f2c569f5c56a +e90fe9c563eac564ebc565edc566eea5 +e3e1c55fe3c560e5c561e7c56265c15f +65a25d66a2a367a2b068a405690016ee +2af514f809f8c535f9c536fac537f5c5 +32f6c533f7c534f209f2c52ff3c530f4 +c531eec52cefc52df1c52ee714ea09ea +c529ecc52aedc52be7c526e8c527e9c5 +28e1c521e2c522e4c523e5c524e6c525 +0014ed25f414f809f8c3ebf9c3ecfac3 +edf4c3e8f5c3e9f7c3eaedc3e3eec3e4 +efc3e5f1c3e6f2c3e7e70fe7c3dee8c3 +dfe9c3e0eac3e1ebc3e2e1c3d9e2c3da +e3c3dbe4c3dce5c3dd04e1c3eee4c3ef +ecc3f0f2c3f1f5c3f20017ee2af514f8 +09f8c508f9c509fac50af5c505f6c506 +f7c507f209f2c503f3c504f4bd92eec5 +00f0c501f1c502e814eb09ebc3fdecc3 +feedc3ffe8c3fae9c3fbeac3fce409e4 +c3f7e5c3f8e7c3f9e1c3f4e2c3f5e3c3 +f60015ef25f514f809f8c51ef9c51ffa +c520f5c51bf6c51cf7c51defc516f0c5 +17f1c518f2c519f4c51ae614eb09ebc5 +13edc514eec515e6c510e7c511e9c512 +e1c50be2c50ce3c50de4c50ee5c50f61 +a25f62a2bc63a407640017ee2af514f8 +09f8c3d5f9c3d6fac3d7f5c3d2f6c3d3 +f7c3d4f209f2c3cff3c3d0f4c3d1eec3 +ccf0c3cdf1c3cee814eb09ebc3c9ecc3 +caedc3cbe8c3c6e9c3c7eac3c8e409e4 +c3c3e6c3c4e7c3c5e1c3c0e2c3c1e3c3 +c20015ee37f314f809f8c392f9c393fa +c394f3c38ff4c390f7c391ee38efc38b +f0c38cf1c38df2c38e012a2e4812616e +f4c38a012ac3895410d7c38ae614eb09 +ebc386ecc387edc388e6c383e7c384ea +c385e1c37ee2c37fe3c380e4c381e5c3 +820015ee25f414f709f7c3a9f8b307f9 +c3aaf4c3a6f5c3a7f6c3a8eec3a1efc3 +a2f0c3a3f1c3a4f2c3a5e614ea09eac3 +9eebc39fedc3a0e6c39be8c39ce9c39d +e1c396e2c397e3c398e4c399e5c39a00 +15ec25f114f509f5c3bcf8c3bdfac3be +f1b7fff2c3baf4c3bbecc3b6edc3b7ee +c3b8efc3b9f0b7cce614e909e9c3b3ea +c3b4ebc3b5e6c3b0e7c3b1e8c3b2e1c3 +abe2c3ace3c3ade4c3aee5c3af66dbf4 +69d2ea69aade6ab05c6bb4406c002272 +c13ee11dee0feebdaeefbdbdf4bdeef5 +bdf7f6bf0de1bbe2e2bbf7e7bd3de9bd +557667766e779478a25579a2567a03e8 +bf1fecbf20eebf21fa012a2e4712656f +f2bf23012abf224710c5bf2305ec09ec +bf11f3bf0df5bf12e1bf0ee9bf0febbf +1008ec0fecbf17edbf18efbf19f4bf1a +f7bf1be1bf13e5bf14e7bf15e8bf1610 +edbf1c01e1bf1deebf1e72a25573a27d +74a292750015ef25f414f709f7bf0bf9 +ab12fabf0cf4bf08f5bf09f6bf0aefbf +03f0bf04f1bf05f2bf06f3bf07e914ec +09ecbf00edbf01eebf02e9bdfdeabdfe +ebbdffe1bdf8e3bdf9e4bdfae5bdfbe6 +bdfc0bed14f409f4bde4f6bde5fabde6 +edbde1eebde2efbde3e909e9bddeebbd +dfecbde0e1bddbe3bddce7bddd06e90c +e9bdeaedbdebf2bdecf3bdede1bde7e4 +bde8e5bde907ee0ceebdf3efbdf4f3bd +f5f5bdf6e3bdefe7bdf0e8bdf1e9bdf2 +69c1ed6dc0f76d3c6ea25e6fa28c70a2 +dc7110f2bdda0016ec2af214f709f7bd +abf8bdacf9bdadf2bda8f5bda9f6bdaa +ef09efbda5f0bda6f1bda7ecbda2edbd +a3eebda4e614e909e9bd9feabda0ebbd +a1e6bd9ce7bd9de8bd9ee1bd97e2bd98 +e3bd99e4bd9ae5bd9b0dec17f30cf3bd +b9f5bdbaf7bdbbfabdbcecbdb6edbdb7 +eebdb8e70ce7bdb2e8bdb3e9bdb4eabd +b5e1bdafe2bdb0e4bdb10016ee2af414 +f809f8bdd2f9bdd3fabdd4f4bdcff5bd +d0f7bdd1f109f1bdccf2bdcdf3bdceee +bdc9efbdcaf0bdcbe814eb09ebbdc6ec +bdc7edbdc8e8bdc3e9bdc4eabdc5e1bd +bee2bdbfe3bdc0e5bdc1e7bdc204e1bd +d5e5bdd6eebdd7efbdd8f8bdd969a245 +6aa29a6ba2af6c0011eb1def0fefbd92 +f0bd93f1bd94f5bd95f8bd96ebbd8eec +bd8fedbd90eebd91e50fe5bd89e6bd8a +e7bd8be9bd8ceabd8de1bd85e2bd86e3 +bd87e4bd880015ef25f514f809f8bd6a +f9bd6bfabd6cf5bd67f6bd68f7bd69ef +bd62f0bd63f1bd64f2bd65f3bd66e61e +ea09eabd5febbd60ecbd61e62ce7bd5d +e8bd5e012abd5b4c12696de2bd5ce1bd +56e2bd57e3bd58e4bd59e5bd5a06ec0c +ecbd70f0bd71f7bd72f8bd73e1bd6de5 +bd6ee9bd6f0010ec1df20ff2bd80f3bd +81f4bd82f5bd83f9bd84ecbd7cedbd7d +eebd7eefbd7fe50ce5bd78e8bd79e9bd +7aeabd7be1bd74e2bd75e3bd76e4bd77 +65bd656466a27d67a2816807ee0ceebd +51f3bd52f4bd53f5bd54e1bd4de8bd4e +e9bd4fedbd500019ee2df417f70cf7bd +37f8bd38f9bd39fabd3af4bd34f5bd35 +f6bd36f109f1bd31f2bd32f3bd33eebd +2eefbd2ff0bd30e717ea0ceabd2aebbd +2becbd2cedbd2de7afe1e8bd28e9bd29 +e409e4bd25e5bd26e6bd27e1bd22e2bd +23e3bd2401e1bd3beebd3c0eed1af20c +f2bd49f4bd4af5bd4bfabd4cedbd45ee +bd46efbd47f1bd48e80ce8bd41e9bd42 +ebbd43ecbd44e1bd3ee2bd3fe7bd4061 +9062a27e63a2bc640deb17ee0ceebd1e +efbd1ff0bd20f1bd21ebbd1becbd1ced +bd1de70ce7bd17e8bd18e9bd19eabd1a +e1bd14e2bd15e4bd160014ec25f214f7 +09f7bbf4f8bbf5fabbf6f2bbf1f3bbf2 +f5bbf3ecbbecedbbedeebbeef0bbeff1 +bbf0e70fe7bbe8e8bbe9e9bbeaeabbeb +ebbb33e1bbe3e2bbe4e3bbe5e4bbe6e5 +bbe70012ef20f60ff6bd05f7bd06f8bd +07f9bd08fabd09efbd00f1bd01f2bd02 +f4bd03f5bd04ea0feabbfceba921ecbb +fdedbbfeeebbffe2bbf8e5bbf9e6bbfa +e9bbfb09ec0fecbd0fedbd10f0bd11f1 +bd12f3bd13e3bd0ae4bd0be5bd0ce6bd +0de8bd0e002474a9e520ef0fefb5bcf3 +b568f4b5d7f5b594f7b5ebe5b576e7b5 +7fe9b58debaffbeeb5b3782d7834793e +7a4ee1b557e4b56b01e3b5f0ecb5f102 +e1b5f2efb5f3f8b5f404e8b5f5e9b111 +edb5f6f2b5f7fab5f8744875a24876a2 +497703ebb5ecedb5edefb5eef3b5ef0f +f21af70cf7b5e4f8b5e5f9b5e6fab5e7 +f2b5e0f3b5e1f4b5e2f6b5e3eb0cebb5 +dcecb5ddedb5deefb5dfe2b5d8e4b5d9 +e5b5dae9b5db10edb5e801e2b5e9f6b5 +ea6bc0fc6f626f7a708a7194729e730a +eb14ef09efb5d4f4b5d5f5b5d6ebb5d1 +edb5d2eeb5d3e1b5cce3b5cde4b5cee8 +b5cfe9b5d002f2b5bdf5b5bef7b5bf01 +e9b5c0efb5c101f5b5c2f7b5c307ee0c +eeb5c8f5b5c9f8b5caf9b5cbe5b5c4e8 +b5c5e9b5c6ebb5c76b646ca24d6da275 +6e07ee0ceeb5b8efb5b9f0b5baf4b5bb +e2b5b4e7b5b5e8b5b6eab5b70cf017f6 +0cf6b59df7b59ef8b59ffab5a0f0b59a +f2b59bf4b59ceb09ebb597ecb598efb5 +99e5b594e8b595e9b5960bed14f509f5 +b5a9f6b5aaf7b176edb5a6efb5a7f0b5 +a8e909e9b5a4ebb5a5ecb5a6e1b5a1e2 +b5a2e7b5a307f20cf2b5aff3b5b0f4b5 +b1f9b5b2e9b5abecb5aceeb5adefb5ae +66656652678468a24d69a2576a04e3b5 +8fe5b590eab591eeb592f3b59307eb0c +ebb57bedb57cf5b57df9b57ee1b577e2 +b578e5b579e6b57a08ed0fedb584eeb5 +85efb586f3b587f7b588e2b580e5b581 +e7b582ecb58303e2b589e9b58af0b58b +f7b58c10eeb58e616e627e63a25a6409 +e90fe9b571f2b572f3b573f4b574f5b5 +75e1b56ce2b56de3b56ee4b56fe5b570 +02e9b558eeb559f2b55a0ce917ee0cee +b563f2b564f5b565f9b566e9b560ecb5 +61edb562e509e5b55de7b55ee8b55fe1 +a7f3e2b55be4b55c03e1b567e5b568e8 +b569f2b56a00186eb07628e10ce1b5f9 +e9b72bf6b76df7b770763a77447902e1 +b772e5b773f9b77401e4b76eeeb76f10 +e9b771715071947298750fee1af40cf4 +b769f5b76af7b76bf9b76ceeb765efb7 +66f0b767f2b768e90ce9b761ebb762ec +b763edb764e1b75de2b75ee4b75fe8b7 +6010f2b75804e1b759e2a3b6f2b75af4 +b75bf5b75c6e346f607001e1b756f2b7 +5706e90ce9b74deab74eecb74ff3b750 +e1b74ae4b74be7b74c04e2b751e4b752 +e7b753f2b754f7b75568796b3c6b726c +886d0aec14f309f3b747f7b748f8b749 +ecb744eeb745f2b746e1b73fe2b740e3 +b741e4b742e9b74303e1b73aedb73bef +b73cf5b73d10e5b73e683469386a01e5 +b738f2b73910e9b72a0bec14f509f5b7 +35f6b736f9b737ecb732edb733f4b734 +e409e4b72fe5b730e7b731e1b72ce2b7 +2de3b72e643d644065506703e2b727e5 +b728ebb707efb72902e1b71ae7b71bf4 +b71c09ec0fecb722eeb723f2b724f4b7 +25f5b726e2b71de5b71ee8b71fe9b720 +ebb721613062a24e6310f4b7190014ed +25f314f809f8b70bf9b70cfab70df3b7 +08f4b709f5b70aedb703eeb704efb705 +f1b706f2b707e60fe6b5ffe8b700eab7 +01ebb702ecb527e1b5fae2b5fbe3b5fc +e4b5fde5b5fe0aee14f409f4b716f5b7 +17f7b718eeb713efb714f2b715e5b70e +e9b70feab710ebb711edb712002875c2 +9feb74f23ff628f6b9eff7bb84f9022a +32414c4c126174eebbb4022abbb2432a +5410d2bbb410cebbb3127261e2bbb3f2 +b9b1f3bb24f5022aac7d41ac83591265 +7ae9b9a5eb38ecb976edb991eeb9aeef +b9c7012a2e41127261e2b95a042ab958 +41324336493a4d10ceb95c10c6b95910 +ceb95a10d2b95b7a667a38e1b1c3e7b7 +fce9b929eab9400017ee2af514f809f8 +bbdff9bbe0fabbe1f5bbdcf6bbddf7bb +def209f2bbdaf3bbdbf4af6aeebbd7ef +bbd8f0bbd9e814eb09ebaf56ecbbd5ed +bbd6e8add6e9bbd4eaaf6ae409e4bbd1 +e5bbd2e6bbd3e1bbcee2bbcfe3bbd075 +a26576a2ba77a40f78a467790018ed2d +f417f70cf7bbcaf8bbcbf9bbccfabbcd +f4bbc7f5bbc8f6bbc9f109f1bbc4f2bb +c5f3bbc6edbbc1eebbc2efbbc3e714ea +09eabbbeebbbbfecbbc0e7bbbbe8bbbc +e9bbbde409e4bbb8e5bbb9e6bbbae1bb +b5e2bbb6e3bbb70017ee2af514f809f8 +bb6af9bb6bfabb6cf5bb67f6bb68f7bb +69f109f1bb64f3bb65f4bb66eebb61ef +bb62f0bb63e814eb09ebbb5eecbb5fed +bb60e8bb5be9bb5ceabb5de509e5bb58 +e6bb59e7bb5ae2bb55e3bb56e4bb5700 +17ee2af414f809f8bb81f9bb82fabb83 +f4bb7ef6bb7ff7bb80f109f1bb7cf2bb +7df3b1adeebb79efbb7af0bb7be714ea +09eabb76ecbb77edbb78e7bb73e8bb74 +e9bb75e409e4bb70e5bb71e6bb72e1bb +6de2bb6ee3bb6f0018ed2df317f60cf6 +b9d0f7bb9af9bb9bfabb9cf3bb97f4bb +98f5bb99f009f0bb94f1bb95f2bb96ed +bb91eebb92efbb93e714ea09eabb8eeb +bb8fecbb90e7bb8be8bb8ce9bb8de409 +e4bb88e5bb89e6bb8ae1bb85e2bb86e3 +bb870015ee25f414f809f8bbaff9bbb0 +fabbb1f4bbacf6bbadf7bbaeeebba7ef +bba8f0bba9f1bbaaf2bbabe614eb09eb +bba5ecbb1eedbba6e6bba2e9bba3eabb +a4e1bb9de2bb9ee3bb9fe4bba0e5bba1 +6bc3b470c1cf70a26871a2c072a41b73 +a46b740019ee2df417f70cf7bb52f8bb +53f9bb54faa591f4bb4ff5bb50f6bb51 +f109f1bb4df2af6af3bb4eeebb4aefbb +4bf0bb4ce717ea0ceabb46ebbb47ecbb +48edbb49e7bb43e8bb44e9bb45e409e4 +bb40e5bb41e6bb42e1bb3de2bb3ee3bb +3f0018ee2df417f70cf7b9f0f8b9f1f9 +b9f2fab9f3f4b9edf5b9eef6b9eff109 +f1b9eaf2b9ebf3b9eceeb9e8efb9e9f0 +b73be814eb09ebb9e5ecb9e6edb9e7e8 +b9e2e9b9e3eab9e4e509e5b9dfe6b9e0 +e7b9e1e1b9dce3b9dde4b9de0019ee2d +f417f70cf7bb0af8bb0bf9bb0cfabb0d +f4bb07f5bb08f6bb09f109f1bb04f2bb +05f3bb06eebb01efbb02f0bb03e717ea +0ceab9fdebb9feecb9ffedbb00e7b9fa +e8b9fbe9b9fce409e4b9f7e5b9f8e6b9 +f9e1b9f4e2b9f5e3b9f60016ed2af514 +f809f8bb21f9bb22fabb23f5bb1ef6bb +1ff7bb20f209f2bb1bf3bb1cf4bb1ded +a90beebb19f0bb1ae614ea09eabb16eb +bb17ecbb18e6bb13e8bb14e9bb15e1bb +0ee2bb0fe3bb10e4bb11e5bb120017ee +2af414f709f7bb3af8bb3bfabb3cf4bb +37f5bb38f6bb39f109f1bb34f2bb35f3 +bb36eebb31efbb32f0bb33e814eb09eb +bb2eecbb2fedbb30e8bb2be9bb2ceabb +2de509e5bb28e6bb29e7bb2ae2bb25e3 +bb26e4bb276ba2536ca2ab6da4066ea4 +7b6f0014ec25f414f709f7b9d9f9b9da +fab9dbf4b9d6f5b9d7f6b9d8ecb9d1ef +b9d2f0b9d3f1b9d4f3b9d5e70fe7b9cd +e8b9cee9b9cfeab9d0ebb33be1b9c8e3 +b9c9e4b9cae5b9cbe6b9cc0018ed2df4 +17f70cf7b972f8b973f9b974fab975f4 +b96ff5b970f6b971f109f1b96cf2b96d +f3b96eedb969efb96af0b96be714ea09 +eab966ebb967ecb968e7b963e8b964e9 +b965e409e4b960e5b961e6b962e1b95d +e2b95ee3b95f0019ee2df417f70cf7b9 +8df8b98ef9b98ffab990f4b98af5b98b +f6b98cf109f1b987f2b988f3b989eeb9 +84efb985f0b986e717ea0ceab980ebb9 +81ecb982edb983e7b97de8b97ee9b97f +e409e4b97ae5b97be6b97ce1b977e2b9 +78e3b9790019ee47f417f70cf7b9aaf8 +b9abf9b9acfab9adf4b9a7f5b9a8f6b9 +a9f123f1b9a1f226f3b9a6022a324140 +5912657ae9b9a5012ab9a24c10c2b9a3 +127261e2b9a4eeb99eefb99ff0b9a0e7 +17ea0ceab99bebb99cecb902edb99de7 +b998e8b999e9b99ae409e4b995e5b996 +e6b997e1b992e2b993e3b9940018ee2d +f417f70cf7b9c3f8b9c4f9b9c5fab9c6 +f4b9c0f5b9c1f6b9c2f109f1b9bdf2b9 +bef3b9bfeeb9baefb9bbf0b9bce714eb +09ebb9b7ecb9b8edb9b9e7b7fce9b9b5 +eab9b6e409e4b9b2e5b9b3e6b9b4e1b9 +afe2b9b0e3b9b166c1a766a25d67a2b2 +68a2f869a44d6a0016ed2af314f809f8 +b955f9b956fab957f3b952f4b953f5b9 +54f009f0b94ff1b950f2b951edb94cee +b94defb94ee714ea09eab949ebb94aec +b94be7b946e8b947e9b948e1b941e2b9 +42e3b943e4b944e5b9450017ee2af514 +f809f8b7f9f9b7fafab7fbf5b7f6f6b7 +f7f7b7f8f109f1b7f3f2b7f4f3b7f5ee +b7f0efb7f1f0b7f2e714eb09ebb7edec +b7eeedb7efe7b7eae8b7ebe9b7ece409 +e4b7e7e5b7e8e6b7e9e1b7e4e2b7e5e3 +b7e60014ef25f414f709f7b90ff8b910 +f9b911f4b90cf5b90df6b90eefb907f0 +b908f1b909f2b90af3b90be80fe8b902 +eab903ebb904ecb905edb906e1b7fde2 +b7fee4b7ffe5b900e6b9010017ef2af5 +14f809f8b926f9b927fab928f5b923f6 +b924f7b925f209f2b920f3b921f4b922 +efb91df0b91ef1b91fe714eb09ebc81a +ecb91beeb91ce7b918e8b919eab91ae4 +09e4b915e5b916e6b917e1b912e2b913 +e3b9140015ef25f514f809f8b93df9b9 +3efab93ff5b93af6b93bf7b93cefb935 +f0b936f1b937f3b938f4b939e614ea09 +eab932ecb933edb934e6b92fe7b930e8 +b931e1b92ae2b92be3b92ce4b92de5b9 +2e61a25d62a29563a2ed64a442650016 +ed2af514f809f8b7e1f9b7e2fab7e3f5 +b7def6b7dff7b7e0f209f2b7dbf3b7dc +f4b7ddedb7d8eeb7d9efb7dae614e909 +e9b7d5ebb7d6ecb7d7e6b7d2e7b7d3e8 +b7d4e1b7cde2b7cee3b7cfe4b7d0e5b7 +d10010eb1df10ff1b781f6b782f7b783 +f8b784f9b785ebb77dedb77eefb77ff0 +b780e70ce7b779e8b77ae9b77beab77c +e1b775e2b776e3b777e4b7780018ee2d +f417f70cf7b79bf8b79cf9b79dfab79e +f4b798f5b799f6b79af109f1b795f2b7 +96f3b797eeb792efb793f0b794e814eb +09ebb78fecb790edb791e8b78ce9b78d +eab78ee409e4b789e5b78ae7b78be1b7 +86e2b787e3b7880017ed2af414f709f7 +b7b4f9b7b5fab7b6f4b7b1f5b7b2f6b7 +b3f009f0b7aef1b7aff3b7b0edb7abee +b7acefb7ade714ea09eab7a8ebb7a9ec +b7aae7b7a5e8b7a6e9b7a7e409e4b7a2 +e5b7a3e6b7a4e1b79fe2b7a0e3b7a100 +15ed25f414f809f8b7caf9b7cbfab7cc +f4b7c7f6b7c8f7b7c9edb7c2eeb7c3f0 +b7c4f1b7c5f2b7c6e714ea09eab7bfeb +b7c0ecb7c1e7b7bce8b7bde9b7bee1b7 +b7e3b7b8e4b7b9e5b7bae6b7bb66a6c5 +67aa3268001e72c0f8e51af40cf4b530 +f5b536f9a554fab556e5b3cae9b3d6ef +b50cf2b51f763f765877747984e12203 +2ab3a9372e43345310c4b3aa1133b6b3 +aa10cdb3ab04e3b54ce5b54debb54eee +b54ff6b55002e1b551e3b552efb55301 +e1b554f7b55572a25073a27b74a28275 +0014ed25f514f809f8b549f9b54afab5 +4bf5b546f6b547f7b548edb541f0b542 +f2b543f3b544f4b545e70fe7b53ce8b5 +3de9b53eebb53fecb540e2b537e3b538 +e4b539e5b53ae6b53b0cf017f50cf5b5 +29f7b52af8b52bfab52cf0b526f2b527 +f4b528eb09ebb523edb524efb525e1b5 +20e3b521e5b52202e2b52deeb52ef3b5 +2f04e9b531efb532f3b533f5b534f8b5 +3569c1116dae6d366ea2436fa26b7010 +efb51e0010f11df50ff5b3fcf6b3fdf7 +b3fef9b3fffab500f1b3f8f2b3f9f3b3 +faf4b3fbea0ceab3f5edb3f6eeb3cbf0 +b3f7e1b3f1e2b3f2e4b3f3e6b3f409e9 +19e9b506ea32eeb509efb50af3b50b01 +2ab50748126d6ee7b508e1b501e4b502 +e5b503e7b504e8b5050010ec1df20ff2 +b519f4b51af6b51bf7b51cf9b51decb5 +15edb516efb517f0b518e50ce5b511e8 +b512e9b513eab514e1b50de2b50ee3b5 +0fe4b510694e6aa24b6ba24c6c04e1b3 +ece2b3ede4b3eef4b3eff5b3f00feb1a +f20cf2b3e3f4b3e4f7b3e5f8b3e6ebb3 +dfecb3e0edb3e1efb3e2e70ce7b3dbe8 +b3dce9b3ddeab3dee1b3d7e2b3d8e4b3 +d9e6b3da10e9b3e703e1b3e8e5b3e9e8 +b3eaebb3eb6434643e6548676e6802e9 +b3d3f2b3d4f9b3d501eeb3b2f9b3c905 +e809e8b3cee9b3cfedb3d0e1b3cbe4b3 +cce7b3cd01edb3d1f7b3d2613062a265 +6310e8b3c80015ee25f314f809f8b3c0 +f9b3c1fab3c2f3b3bdf6b3bef7b3bfee +b3b8efb3b9f0b3baf1b3bbf2b3bce826 +eb1beb2cecb3b6edb3b7012a2e481261 +6ef4b3b5012ab3b45410d7b3b5e8b3b1 +e9b3b2eab3b3e1b3ace3b3ade4b3aee5 +b3afe7b3b004e1b3c3e2b3c4eeb3c5ef +b3c6f5b3c700177199e614ef09efb144 +f2b14df9b169e6a254e9b12ceab13576 +12762a772ee1b11310f2b16601e1b167 +e5b16871a24272a243750eed1af40cf4 +b162f5b163f6b164f9b165edb15eeeb1 +5ff1b160f2b161e50ce5b15ae6b15be8 +b15ce9b15de2b158e326e4b159012ab1 +274112646cedb12810f3b14c0aef14f2 +09f2b155f3b156f4b157efb152f0b153 +f1b154e3b14ee4b14fe5b14debb150ed +b1516b556e286e2e6f3e7010e5b14b02 +e2b141e7b142e9b14305ee09eeb148f2 +b149f3b14ae4b145e9b146edb1476b34 +6c3e6d01f0b13ff5b14001ebb136f6b1 +3706ec0cecb13beeb13cf2b13df9b13e +e1b138e8b139e9b13a662b665c676669 +07f00cf0b131f2b132f4b133f7b134e1 +b12de5b12ee6b12fecb13001e9b129ed +b12a10f2b12b613062a2466510f2b126 +0012ec20f40ff4a3b9f5b122f8b123f9 +b124fab125ecb11dedb11eeeb11ff0b1 +20f2b121e70fe7b118e8b119e9b11aea +b11bebb11ce1b114e2b115e4b116e6b1 +1710eca799001f71c18a7953ec0cecb3 +00eeb31af5b365f6b37b79307a8ee1b1 +6ae4b1a40dec17ef0cefb3a2f2b3a3f9 +b3a4fab3a5ecb39fedb3a0eeb3a1e50c +e5b39be6b39ce7b39de9b39ee1b184e2 +b399e4b39a02e1b3a6e9b3a7eeb3a875 +c0c5753676a25b77a2867810f8b39800 +16ed2af414f709f7b378f8b379fab37a +f4b376f5b377f6af89f009f0b373f1b3 +74f2b375edb370eeb371efb372e614e9 +09e9b36debb36eecb36fe6b36be7b31a +e8b36ce1b366e2b367e3b368e4b369e5 +b36a0ced17f00cf0b385f2b1d4f3b386 +f9b387edb382eeb383efb384e609e6b3 +7feab380ecb381e1b37ce3b37de5b37e +0fea1af40cf4b394f5b395f7b396f8b3 +97eab390edb391eeb392f2b393e50ce5 +b38ce6b38de7b38ee9b38fe1b388e2b3 +89e3b38ae4b38b7140725073a2567402 +e1b363e9b364f5b1d502e1b34aeeb34b +f2b34c0012ed20f60ff6b359f7b35af8 +b35bf9b35cfab35dedb354f1b355f3b3 +56f4b357f5b358e50fe5afc4e7b350e8 +b351e9b352eab353e1b34de2b192e3b3 +4ee4b34f04ecb35eeeb35fefb360f0b3 +61f7b36269c17f6dc0e26d406e9e6fa2 +807002e1b347e5b348eeb3490dee17f6 +0cf6b316f8b317f9b318fab319eeb313 +f2b314f5b315e70ce7b30fe8b310ecb3 +11edb312e1b30ce2b30de4b30e0013ec +20f20ff2b32af4b32bf5b32cf7b32dfa +b32eecb325edb326eeb327efb328f1b3 +29e70fe7b320e8b321e9b322eab323eb +b324e1b31be2b31ce3b31de4b31ee5b3 +1f0018ed2df317f60cf6b343f7b344f8 +b345f9b346f3b340f4b341f5b342f009 +f0b33df1b33ef2b33fedb33beeb328ef +b33ce714ea09eab338ebb339ecb33ae7 +b335e8b336e9b337e409e4b332e5b333 +e6b334e1b32fe2b330e3b33169846aa2 +6d6ba27a6c0beb14f209f2b309f5b30a +f7b30bebb306ecb307efb308e809e8b3 +04e9af56eab305e2b301e3b302e4b303 +0011ee1df30ff3b1eff4b1f0f8b1f1f9 +b1f2fab1f3eeb1ebf0b1ecf1b1edf2b1 +eee50fe5b1e6e7b1e7e8b1e8ecb1e9ed +b1eae1b1e2e2b1e3e3b1e4e4b1e504eb +b1f4edb1f5eeb1f6f2b1f7f5b1f806ee +0ceeb1fcefb1fdf0b1fef5b1ffe1b1f9 +e4b1fae5b1fb65a0656a66a26667a26a +6808ee0feeb1ddefb1def2b1dff3b1e0 +f4b1e1e1b1d9e3b1dae5b1dbebb1dc00 +13ec20f60ff6b1c6f7b1c7f8b1c8f9b1 +c9fab1caecb1c2efb1c3f1b1c4f2adbc +f3b1c5e70fe7b1bde8b1bee9b1bfeab1 +c0ebb1c1e1b1b8e2b1b9e3b1bae4b1bb +e6b1bc01ebb1cbf8b1cc0cec17f20cf2 +b1d5f4b1d6f5b1d7f7b1d8ecb1d3eeb1 +d4efaff8e509e5b1d0e7b1d1ebb1d2e1 +b1cde2b1cee4b1cf61a24862a2a363a2 +fb640012eb20f10ff1b1b3f2b1b4f4b1 +b5f5b1b6f8b1b7ebb1aeecb1afedb1b0 +eeb1b1efb1b2e60fe6b1a9e7b1aae8b1 +abe9b1aceab1ade2b1a5e3b1a6e4b1a7 +e5b1a80019ee2df417f70cf7b180f8b1 +81f9b182fab183f4b17ef5b17ff6adcb +f109f1b17bf2b17cf3b17deeb178efb1 +79f0b17ae717ea0ceab174ebb175ecb1 +76edb177e7b171e8b172e9b173e409e4 +b16ee5b16fe6b170e1b16be2b16ce3b1 +6d0018ed2df317f70cf7b199f8b19af9 +b19bfab19cf3b196f5b197f6b198f009 +f0b193f1b194f2b195edb190eeb191ef +b192e714ea09eab18debb18eecb18fe7 +b18ae8b18be9b18ce409e4b187e5b188 +e6b189e1b184e2b185e3b18606ec0cec +b1a0eeb1a1f2b1a2f4b1a3e3b19de4b1 +9ee6b19f63cb0463a4dc64aea765001d +73927a29ef0cefafeaf3aff6f4afbdf5 +a5f87a44e5afabecafc4ee012aafd953 +126861f7afda01e1b111e5b112762076 +387748784c7901e1b10fefb11002e5b1 +0ae8b10beeb10c10efb10d10f4b10e73 +2e74667510e4b10908eb0febaffbedaf +fcf3affdf5affef9afffe5aff7e7aff8 +e8aff9e9affa08f30ff3b104f4b105f5 +b106f8b107fab108e2b100eeb101efb1 +02f2b1036ac0e96e636e6a6fa25670a2 +577208eb0febaff1f2aff2f3aff3f4af +f4f7aff5e1afede7afeee8afefe9aff0 +0eed1af20cf2afe6f6afe7f7afe8f8af +e9edafe2eeafe3efafe4f1afe5e40ce4 +afdee6afdfe8afe0ecafe1e1afdbe2af +dce3afdd10f4afeb10e9afec6aa2426b +a2436ca2666d0dee17f50cf5afd5f7af +d6f8afd7faafd8eeafd2f0afd3f3afd4 +e716e7afcde9afceeb26edafd1012aaf +cf4e126b6fefafd0e1afcae2afcbe5af +cc10e1afb80aec14f009f0afc1f2afc2 +f9afc3ecafbeedafbfefafc0e1afb9e5 +afbae7afbbe9afbcebafbd05ef09efaf +c8f0a3f2f5afc9e5afc5ebafc6edafc7 +662f663e674e686a6902f0afb5f4afb6 +f6afb702e1aface5afade9afae04e1af +afecafb0edafb1efafb2f9afb310f5af +b4613462386301f2afa9f9afaa10e1af +a305ef09efafa6f2afa7f5afa8e3afa4 +e7afa5eba7d5002272c161e127f219f2 +ad2df3ad44f52cf6ad74f9ad7d012aad +6347126c61e7ad64e1ab49e5ab88e8ab +98efad0c7643764e7758787e79827a04 +e5ad44e8ad81ebad82eead83f4ad8401 +e7ad75eead7605e509e5ad79e7ad7af4 +ad7be1ad77e2ad78e4ad2d10e8ad7c02 +e1ad7ee2ad7fefad80729673a28674a2 +b4750eec1af50cf5ad70f6ad71f8ad72 +f9ad73ecad6cefad6df0ad6ef4ad6fe8 +0ce8ad68e9ad69eaad6aebad6be1ad65 +e2ad66e3ad670015ed25f414f809f8ad +41f9ad42faad43f4ad3ef6ad3ff7ad40 +edad39eead3aefad3bf1ad3cf3ad3de7 +14ea09eaad36ebad37ecad38e7ad33e8 +ad34e9ad35e1ad2ee2ad2fe3ad30e4ad +31e6ad320df017f60cf6ad4ff7ad50f9 +ad51faad52f0ad4cf3ad4df4ad4eea0c +eaad48ebad49edad4aefad4be1ad45e2 +ad46e8ad470fee1af40cf4ad5ff5ad60 +f9ad61faad62eead5befad5cf0ad5df3 +ad5ee70ce7ad57e8ad58ecad59edad5a +e1ad53e3ad54e4ad55e5ad5669c19b6d +c0d06d3a6e826fa25f70a2a07110e4ad +2c0aec14f209f2abd6f3abfcf4abfdec +abfaeea4b6efabfbe1abf5e5abf6e7ab +f7e9abf8ebabf90dec17f30cf3ad08f4 +ad09f7ad0af8ad0becad05f0ad06f1ad +07e70ce7ad01e8ad02e9ad03ebad04e1 +abfee2abffe3ad000013ec20f40ff4ad +1cf5ad1df8ad1ef9ad1ffaad20ecad17 +edad18efad19f0ad1af1ad1be60fe6ad +12e7ad13e8ad14eaad15ebad16e1ad0d +e2ad0ee3ad0fe4ad10e5ad110aee14f5 +09f5ad29f8ad2af9ad2beead26efad27 +f3ad28e1ad21e2ad22e3ad23e7ad24e9 +ad25699c6aa2616ba28c6c0fec1af40c +f4abf1f5abf2f7abf3f9abf4ecabeded +abeeefabeff3abf0e80ce8abe9e9abea +eaabebebabece1abe5e3abe6e4abe7e5 +abe80aed14f209f2abc6f7abc7f9abc8 +edabc3eeabc4f0abc5e1abbee2abbfe3 +abc0e5abc1e8abc20cee17f20cf2abd2 +f3abd3f6abd4f9abd5eeabcfefabd0f0 +abd1e909e9abccebabcdedabcee1abc9 +e5abcae8abcb0ef21af60cf6abe1f8ab +e2f9abe3faabe4f2abddf3abdef4abdf +f5abe0ed0cedabd9eeabdaefabdbf1ab +dce1abd6e2abd7ecabd865c0e465a2af +66a2c467a2ce680013ee20f40ff4abb9 +f7abbaf8abbbf9abbcfaabbdeeabb4ef +abb5f0abb6f1abb7f2abb8e973e938ea +abb0ebabb1ecabb2edabb3022a3c42a2 +594811616e01e2abaff4abaa0b4d2d54 +17542e55385610c4abad01c8aba9d7ab +aa01cbababd3abac4dcc9a502a5310d2 +aba802c6aba5c8aba6daaba7470e4730 +48cc7e4910c4aba310c6aba12aab9e41 +2a4210ceaba010d5ab9f126f70efabae +e2ab99e4ab9ae6ab9be7ab9ce8ab9d06 +eb0cebab8ceeab8df4ab8ef9ab8fe1ab +89e2ab8ae7ab8b03e1ab90e4ab91e7ab +92edab9303e1ab94e3ab95e7ab96ebab +97616a62a27563a2b06408ea0feaab83 +edab84efab85f2ab86faab87e5ab7fe6 +ab80e8ab81e9ab820016ed2af314f809 +f8ab5ef9ab5ffaab60f3ab5bf6ab5cf7 +ab5df009f0ab58f1ab59f2ab5aedab55 +eeab56efab57e614ea09eaab52ebab53 +ecab54e6ab4fe7ab50e8ab51e1ab4ae2 +ab4be3ab4ce4ab4de5ab4e0011ef1df4 +0ff4ab6ef5ab6ff6ab70f7ab71f9ab72 +efab6af1ab6bf2ab6cf3ab6de90fe9ab +65eaab66ebab67ecab68eeab69e2ab61 +e3ab62e4ab63e7ab640bec14f009f0ab +7cf1ab7df2ab7eecab79edab7aefab7b +e709e7ab76e8ab77eaab78e3ab73e4ab +74e5ab75001a6fc1b2776ce10ce1ad85 +e5adbcf6af8afaa34f775079887a05e7 +09e7afa0ecafa1eeafa2e1af9ee4af9f +e5af0a08f30ff3af8ff5af79f7af90f9 +af91faaf92e1af8cebaf8decadaaf2af +8e0aed14f209f2af9bf5af9cf9af9ded +af98eeaf99efaf9ae1af93e2af94e4af +95e7af96e9af9773b37334746075a24e +7610e1af8b06eb0cebaf5eeeaf5fefaf +60f1af61e2af5be8af5ce9af5d0def17 +f30cf3af6cf4af6df5af6ef9af6fefaf +69f0af6af2af6be80ce8af65e9af66eb +af67edaf68e1af62e2af63e4af640019 +ee2df417f70cf7af86f8af87f9af88fa +af89f4af83f5af84f6af85f109f1af80 +f2af81f3af82eeaf7defaf7ef0af7fe7 +17ea0ceaaf79ebaf7aecaf7bedaf7ce7 +af76e8af77e9af78e409e4af73e5af74 +e6af75e1af70e2af71e3af726fa24770 +a285720def17f30cf3af57f4af58f5af +59f9af5aefaf54f1af55f2af56e81ee8 +32e9af52eca7beeeaf53012a2e4d126f +6ee7af51012aaf504310ceaf51e3af4d +e5af4ee7af4f0012ee20f40ff4af47f6 +af48f7af49f8af4af9af4beeaf42efaf +43f0af44f2af45f3af46e60fe6af3ee8 +af3fe9add8ebaf40ecaf41e1af3ae2af +3be3af3ce5af3d10f0af4c68c15d6b9d +6b966ca2506da2576e0eee1af50cf5af +36f6af37f7af38f9af39eeaf32efaf33 +f2af34f4af35e70ce7af2fe9af30eaad +8aebaf31e1af2ce4af2de5af2e06ec0c +eca540f2af14f3af15f8af16e1af11e7 +af12ebaf1302e7af17edaf18eeaf1900 +11ed1df50ff5af27f6af28f7af29f8af +2af9af2bedaf23efaf24f2af25f3af26 +e50fe5af1ee6af1fe7af20ebaf21ecaf +22e1af1ae2af1be3af1ce4af1d689669 +a2666a0feb1aef0cefaf0df2af0ef5af +0ff7af10ebaf09ecaf0aedaf0beeaf0c +e50ce5af05e6af06e9af07eaaf08e1af +01e2af02e3af03e4af040cef17f50cf5 +ade8f6ade9f7adeaf8adebefade5f2ad +e6f3ade7ec09ecade2edade3eeade4e4 +addfe7ade0e9ade10016ee2af414f809 +f8adfef9adfffaaf00f4adf0f5adfcf7 +adfdf109f1adf9f2adfaf3adfbeeadf5 +efadf7f0adf8e714ea09eaadf4ebadf5 +ecadf6e7adf1e8adf2e9adf3e1adece2 +adede3adeee4adefe6adf064a264a242 +65a265670011ec1df30ff3addaf4addb +f7addcf8adddfaaddeecadd6eeadd7ef +add8f2add9e50fe5add1e7add2e8add3 +e9add4ebadd5e1adcde2adcee3adcfe4 +add00aea14f209f2adb9f3adbaf7adbb +eaadb6eeadb7efadb8e1adb1e4adb2e5 +adb3e7adb4e9adb50fec1af20cf2adc9 +f3adcaf6adcbfaadccecadc5edadc6ee +adc7f1adc8e70ce7adc1e8adc2e9adc3 +ebadc4e3adbde4adbee5adbfe6adc061 +3662a2566301e3adaff2adb00015ed25 +f314f709f7ad99f8ad9afaad9bf3ad96 +f5ad97f6ad98edad91efad92f0ad93f1 +ad94f2ad95e714ea09eaad8eebad8fec +ad90e7ad8be8ad8ce9ad8de1ad86e3ad +87e4ad88e5ad89e6ad8a0012ed20f40f +f4adaaf5adabf6adacf7adadf9adaeed +ada5eeada6efada7f0ada8f1ada9e60f +e6ada0e7ada1e9ada2eaada3ecada4e1 +ad9ce2ad9de4ad9ee5ad9f2ab40061cc +ec62002373c2d0e51ded0feda905eea9 +1eefa936f2a979f3a993e5a74be7a778 +e8a78ee9a7a777c14b773878a26179a2 +a77aa2e8e1a5ea0017ed2af414f809f8 +ab07f9ab08faab09f4ab04f5ab05f7ab +06f109f1ab01f2ab02f3ab03eda9feef +a9fff0ab00e714ea09eaa9fbeba9fcec +a9fde7a9f8e8a9f9e9a9fae409e4a9f5 +e5a9f6e6a9f7e1a9f2e2a9f3e3a9f400 +14ed25f214f609f6ab1bf7ab1cfaab1d +f2a9c2f3ab19f5ab1aedab14eeab15ef +ab16f0ab17f1ab18e80fe8ab0fe9ab10 +eaab11ebab12ecab13e1ab0ae2ab0be3 +ab0ce6ab0de7ab0e0013ec20f30ff3ab +2df6ab2ef7ab2ff8ab30faab31ecab28 +edab29eeab2af0ab2bf2ab2ce60fe6ab +23e8ab24e9ab25eaab26ebab27e1ab1e +e2ab1fe3ab20e4ab21e5ab220017ee2a +f514f809f8ab46f9ab47faab48f5ab43 +f6ab44f7ab45f109f1ab40f2ab41f4ab +42eeab3defab3ef0ab3fe814eb09ebab +3aecab3bedab3ce8ab37e9ab38eaab39 +e409e4ab34e5ab35e6ab36e1ab32e2ab +33e3a7ca73a25a74a2aa75a2ff760016 +ed2af514f809f8a9eff9a9f0faa9f1f5 +a9ecf6a9edf7a9eef109f1a9e9f2a9ea +f4a9ebeda9e6eea9e7efa9e8e614e909 +e9a9e3eaa9e4eba9e5e6a9e0e7a9e1e8 +a9e2e1a9dbe2a9dce3a9dde4a9dee5a9 +df0016ee2af414f709f7a9a8f8a9a9f9 +a9aaf4a9a5f5a9a6f6a9a7f109f1a9a2 +f2a9a3f3a9a4eea99fefa9a0f0a9a1e8 +14eb09eba99ceca99deda99ee8a999e9 +a99aeaa99be1a994e2a995e3a996e5a9 +97e6a9980017ef2af514f809f8a9bff9 +a9c0faa9c1f5a9bcf6a9bdf7a9bef209 +f2a9b9f3a9baf4a9bbefa9b6f0a9b7f1 +a9b8e714ea09eaa9b3eda9b4eea9b5e7 +a9b0e8a9b1e9a9b2e409e4a9ade5a9ae +e6a9afe1a9abe2a74de3a9ac0018ee2d +f417f70cf7a9d7f8a9d8f9a9d9faa9da +f4a9d4f5a9d5f6a9d6f109f1a9d1f2a9 +d2f3a9d3eea9ceefa9cff0a9d0e714ea +09eaa9cbeba9cceda9cde7a9c8e8a9c9 +e9a9cae409e4a9c5e5a9c6e6a9c7e1a9 +c2e2a9c3e3a9c46ac3186ec1a56ea265 +6fa2b570a2fb71a44b720018ee2df417 +f70cf7a98ff8a990f9a991faa992f4a9 +8cf5a98df6a98ef109f1a989f2a98af3 +a98beea986efa987f0a988e814eb09eb +a983eca984eda985e8a980e9a981eaa9 +82e409e4a97de6a97ee7a97fe1a97ae2 +a97be3a97c0016ee2af514f809f8a933 +f9a934faa935f5a930f6a931f7a932f1 +09f1a92df2a92ef3a92feea92aefa92b +f0a92ce614ea09eaa927eba928eda929 +e6a924e7a925e9a926e1a91fe2a920e3 +a921e4a922e5a9230014ef25f514f809 +f8a949f9a94afaa94bf5a946f6a947f7 +a948efa941f0a942f1a943f2a944f4a9 +45ea0feaa93ceba93deca93eeda93fee +a940e1a937e2a938e5a939e6a93ae8a9 +3b0016ef2af514f809f8a960f9a961fa +a962f5a95df6a95ef7a95ff209f2a95a +f3a95bf4a95cefa957f0a958f1a959e8 +14eb09eba954eca955eda956e8a951e9 +a952eaa953e1a94ce3a94de4a94ee5a9 +4fe7a9500015ef25f414f709f7a976f8 +a977faa978f4a973f5a974f6a975efa9 +6ef0a96ff1a970f2a971f3a972e714eb +09eba96beca96ceda96de7a968e9a969 +eaa96ae1a963e2a964e3a965e4a966e6 +a9676aa25f6ba2b76ca40f6d0017ed2a +f314f709f7a91bf8a91cfaa91df3a918 +f5a919f6a91af009f0a915f1a916f2a9 +17eda912eea913efa914e714ea09eaa9 +0feba910eca911e7a90ce8a90de9a90e +e409e4a909e5a90ae6a90be1a906e2a9 +07e3a9080018ee2df417f70cf7a7d0f8 +a7d1f9a7d2faa7d3f4a7cdf5a7cef6a7 +cff109f1a7caf2a7cbf3a7cceea7c7ef +a7c8f0a7c9e814eb09eba7c4eca7c5ed +a7c6e8a7c1e9a7c2eaa7c3e409e4a7be +e6a7bfe7a7c0e1a7bbe2a7bce3a7bd00 +18ee2df417f70cf7a7e9f8a7eaf9a7eb +faa7ecf4a7e6f5a7e7f6a7e8f109f1a7 +e3f2a7e4f3a7e5eea7e0efa7e1f0a7e2 +e814eb09eba7ddeca7deeda7dfe8a7da +e9a7dbeaa7dce409e4a7d7e6a7d8e7a7 +d9e1a7d4e2a7d5e3a7d60017ee2af414 +f809f8a902f9a903faa904f4a7fff6a9 +00f7a901f109f1a7fcf2a7fdf3a7feee +a7f9efa7faf0a7fbe714ea09eaa7f6eb +a7f7eda7f8e7a7f3e8a7f4e9a7f5e409 +e4a7f0e5a7f1e6a7f2e1a7ede2a7eee3 +a7ef65c19b65a25366a29e67a2e968a4 +34690014ee25f414f709f7a7b8f9a7b9 +faa7baf4a7b5f5a7b6f6a7b7eea7b1ef +a7b2f0a7b3f1a7b4f2a7aae60fe6a7ad +e7a7aeeba723eca7afeda7b0e1a7a8e2 +a7a9e3a7aae4a7abe5a7ac0015ef25f5 +14f809f8a75ff9a760faa761f5a75cf6 +a75df7a75eefa757f0a758f1a759f3a7 +5af4a75be614ea09eaa754eba755eda7 +56e6a751e8a752e9a753e1a74ce2a74d +e3a74ee4a74fe5a7500015ee25f414f8 +09f8a775f9a776faa777f4a772f5a773 +f7a774eea76defa76ef0a76ff1a770f3 +a771e614ea09eaa76aeca76beda76ce6 +a767e7a768e8a769e1a762e2a763e3a7 +64e4a765e5a7660015f025f514f809f8 +a78bf9a78cfaa78df5a788f6a789f7a7 +8af0a783f1a784f2a785f3a786f4a787 +e714ed09eda71eeea781efa782e7a77e +e9a77feaa780e1a779e2a77ae3a77be4 +a77ce6a77d0018ed2df317f60cf6a7a3 +f7a7a4f9a7a5faa7a6f3a7a0f4a7a1f5 +a7a2f009f0a79df1a79ef2a79feda79b +eea79cefa78ee714ea09eaa798eba799 +eca79ae7a795e8a796e9a797e409e4a7 +92e5a793e6a794e1a78fe2a790e3a791 +61a26562a2b563a40a640019ee2df417 +f70cf7a747f8a748f9a749faa74af4a7 +44f5a745f6a746f109f1a741f2a742f3 +a743eea73eefa73ff0a740e717ea0cea +a73aeba73beca73ceda73de7a737e8a7 +38e9a739e409e4a734e5a735e6a736e1 +a731e2a732e3a7330014ef2ff514f809 +f8a5fef9a5fffaa700f5a5fbf6a5fcf7 +a5fdefa5f5f032f1a5f8f2a5f9f3a5fa +012aa5f64b127261e9a5f7e70fe7a5f0 +e8a5f1eaa5f2eca5f3eea5f4e1a5ebe2 +a5ece3a5ede5a5eee6a5ef0017ee2af4 +14f709f7a716f8a717f9a718f4a713f5 +a714f6a715f109f1a710f2a711f3a712 +eea70defa70ef0a70fe714eb09eba70a +eca70beda70ce7a707e9a708eaa709e4 +09e4a704e5a705e6a706e1a701e2a702 +e3a7030018ed2df317f60cf6a72df7a7 +2ef9a72ffaa730f3a72af4a72bf5a72c +f009f0a727f1a728f2a729eda724eea7 +25efa726e714ea09eaa721eba722eca7 +23e7a71ee8a71fe9a720e409e4a71be5 +a71ce6a71de1a719e2a71ae3a5f30018 +4dc2af54c0f257375736584e59665a12 +616ee2d5bd01612c631168efc5981172 +e1d5bc01702c731175f8a3c21165efc9 +2a01652c691169e9b58d117ae9b9a554 +4455a2ae5601612c691174e8d5bb1169 +e9d5ba08685e683c698c6ea2466fa248 +751174e7d5b9106101e158e9042ad12a +43324b364c3a5410c8d12a10cebd1110 +c8d5b510c1d5b6012aaf8a4d10d6af8a +01622a7210e8d5b710f4012aa9364210 +d4a34f1173e1c5e301642a7410efd363 +10f2d5b861346580668667116ce7d5b4 +056d116d2e6e327610f4a7ff10eccf9e +10e7d35e67346b386c01e5cfe4f5b913 +10e2d5b110f2d5b2116cf5cff6116ee7 +d5b3126761f2d39650c0c850a27652a2 +ad5306694769426f6a759079016c2a72 +10e3abe710efd5b001643e6e01e4cd19 +e8012acd6f4c10cbcd6f10e4d5ad0267 +2e72387910efabf701e4cdecefd5ae10 +e1cf14106e01e4d5aff5cf65613e675e +6801612a7210e4d5ac10f7afda026d2e +72327510f2cbe610f2cdc710e2d5ab11 +6ef7a565046138654c68526c78721174 +e9d5a9016c2a7510e3ad5510eda54c11 +72edd5a702612e6c326e10f8c94310e7 +d5a801e9c7ecf0c7ed1172e4b3f3026a +306f3675116ef2c5ac116ee7d5aa1168 +e7cb714d9a4ea2b34f05722272307344 +751167f2c7d8016b2a7910e1c7ac10e8 +c7c901672a6d10e1d5a610e5c7bc6730 +6c366e1161efd5a51161edd5a41163eb +cbe007722e725a7460756679116df203 +2aa9d2492e4d325410c8d59d10ceb922 +10cda9d2116fefc1c11165e9d59b116c +f4d59c614265746c9a6f01642a6e10e7 +af5110e9d59a0368326b366e3a7210e3 +d59610ead59310e1d59401e4c368e9d5 +950264346e387201e3d598efd59910e6 +af1f10e4d5971179edc1280461386258 +655e6b64731168f5d5a302672e6e3272 +10e2d5a010edd59e10e4d59f1161f4a5 +4b1177e1d5a1116fef012aafd04d10cc +d5a247c4614ac36d4aa6f14ba80a4c03 +614665a6cd69a6cf7901632a6410e9d5 +9210e9d591026ea6aa6fa6ab7410ee00 +1d4ac15f53a1571757ace458ace8592a +5a10d7cdd102c4d56bc5d56bd4d52d53 +4854a24555a2705603c1d528c5d52ace +d529d5a7a70ece1ad40cd4d51dd5bb18 +d6d51ed9d58cced51acfcde6d2d51bd3 +d58bc90cc9cdabcad518cbcd92cdd519 +c3d517c4d56ac5cf660ccd17d20cd2d1 +e6d6d341d7d1fadacf6dcdd15cced58f +cfd1b3c809c8d58ecbd164ccd523c4d5 +8dc6d521c7d52204c1d590c7d525d3af +d9d9d526dad5274d8f4d484ea24f50a2 +645203c5d516cfc16cd5bb18d7cbc800 +11cf1dd50fd5d504d6d588d8d505d9bf +37dad506cfd586d1d502d2d587d4c1e3 +c60fc6d501c7bfb3cbd585cca905cdb7 +77c1d584c3d3ffc4d500c5cd0306c90c +c9d50accaf83cfc395d0d589c1d507c3 +d508c5d5090bcc14d409d4d514d7c7f4 +d9b31accc96acdd511d2d512c7c5c1c7 +d1cfc8b130cbd58a4a564b5a4c06d30c +d3d3fbd4bdeed5d3fcd6bf0dc2d582c9 +d3facbd58310cfd57f02c5d3f4cdd580 +dad58142c0ee465b4662477248a24449 +07d10cd1d57dd2d57ed3b568d4b5d7c3 +d3f1c4b56bccd57bced57c02c9b12ccf +b144d2b14d0ace0cd2c62cd2d579d4d3 +eed7d3efc1d3e9c5d578c6d3eac8a3b9 +ccb97604cbd57aced3f0d2b51fd4b530 +d5b536425e43a24544a2794506c70cc7 +d576d2d577d3aff6d4d569c1d3e5c3d3 +e6c5afbd0ecc0fd2c643d2c9e1d4d571 +d5b777d6d3d6c60cc6d3cfc7d570c9cb +9acad3d1c1a993c4d56fc5d3ce0fce1a +d60cd6d3e0d7c7f0d9d574daad44ced5 +73cfd3ddd2d3ded5d3dfc80cc8d3d9c9 +d3daccd3dbcdd3dcc3d572c4d3d7c6cd +46c7d3d804c5adbccad3e2cbad85cfd3 +e3dad575343d34aea2377c3882410bd2 +14d709d7d3ccd8d3cddaa5ded2d3c9d3 +d3cad4d3cbcc09cca3cfcdd56ecfd3c8 +c4d3c5c5d56cc6d56d1133b6d56a1138 +b6d56b2aafd9312c321133b0d5691137 +b2bb1810e1c5a410ef012abdbd4c10c1 +bdbd1170e3bd30026d2e6e327310f5bd +6610e2bd5c01e1bbe4e2b31801613a70 +1161ee012ab5f94a10d0b5f9016d2a76 +10e1d56410efd563066e256e346f3a72 +54741168e9d5681164e1b9ae1172e501 +2ab9c74b01d0d3f6d2b9c71161e9a5f7 +61306850691174f3d567026c2e6e3277 +10e9d56610e9afc310e1d56502612e6d +326f10eacd1810f2c9c510f2012ab991 +4b10c8b991473448a26a49127461ecb1 +05056f456f4a726475026a2e6b327210 +f5c7e110f2b36510e8d559016e2a7410 +e8b34101e7d557edaff80161506510eb +032aafc4432e47325410d2a78b10d9d3 +e110d2afc410eed558613065366c1161 +e7ad641172e1d556116ff2012ab1c347 +10c5b1c3056c186c306d3675116ee7d5 +621175f7b3f0106e01e7b508f0b50761 +3265a247691172e1d561016e2a7410f2 +a54a05ef2defd55cf35ef4042aabaa43 +32483c4d405410d7abaa01c1d55dced5 +5e10cbaba210cfaba4012aab9e4310ce +ab9ee2abafe7d55ae9d55b1162f2032a +b3ca493453385501c1b72bd3d56010cc +b3ca10c5d55f43c135437444a2ee4502 +67446c4a741168e9012aa3e54501d2d3 +e8d4a3e51179f0afb301622a7910edd5 +5510e1d5540461a28e68a29d6fa2ac70 +a2ae791172ec0e4b48541d5432553c58 +465910d5cd0201cad113d2d54c01c1d3 +a0dad54d10cbd54e4b324d3c52525310 +cbd54b01c7bbb2dad3f803c4d548c5d5 +49cbbf26ceaf5002cfd54ad3cd02d5cb +b9421f4232434247464910d2d54702c1 +d545c7a778d9a74b10d3cd0201c551d2 +d5462acbb938364102c6d542ccd543da +d5441139b0cd02026b2e6e327210e9d5 +3f10edab7c10f3b59402612e65327210 +f3d54010edabce10f2abb81170f4ad1a +016d2a7210f4afaa10eed54103653469 +866f8c751170ecd5531176e106491749 +324d364e3a5010cba9bd10ceb3d610d5 +d55010d0c3d82ab3d6422a4610cab3da +10d4d54f1161ebd5511167f2d5522aa2 +5441a8a342056f1f6f3e72447501672a +6810e4d53e10e9d53d1170efabae1061 +01e8c961e9d53c6130655c68116bf3d5 +3b036c326d36733a7410ebd53a10e9d5 +3910f5a5fe10f3a9a2116ee7012aa91e +4210c4a91e00204ac1ba52c0cf563856 +3c5758586259665a01d2d3d7d7cdd104 +c1d528c4d529c5d52aced529d5a7a701 +c6d52bd3cdbc10cbd52c03c4d3c4c5d3 +c4d4d52dd5cd025246536c54a25a5503 +c1d3a0c7d525d9d526dad52705d309d3 +cd02d5cbb9d7cbc8c5d516c8cdd1cfc1 +6c0fce1ad40cd4d51dd5cbb9d6d51ed9 +d51fced51acfcde6d2d51bd3d51cc90c +c9cdabcad518cbcd92cdd519c1d50bc3 +d517c4d3c3c5cf660ecd1ad20cd2d1e6 +d6d341d7abaadacf6dcdd15cced524cf +d1b3d0d523c80cc8d12acad113cbd164 +ccd523c4d520c6d521c7d5224e5b4e34 +4fa80c50665110c1d51508c90fc9d50a +ccaf83cfc395d0c3d8d4d50bc1d507c3 +d508c5d509c8a7a70dcd17d40cd4d514 +d7c7f4d9b31adad50dcdd511d2d512d3 +d513c70cc7d1cfc8b130cbd510ccc96a +c1d50dc5d50ec6d50f4aa2484ba24c4c +a2644d0012ce20d50fd5d504d6af8ad8 +d505d9bf37dad506ceaf50cfaba4d1d5 +02d2d503d4c1e3c60fc6d501c7bfb3cb +bf26cca905cda9d2c1d3fec3d3ffc4d5 +00c5cd0301cfd3f3d0b5f907d00cd0d3 +f6d2b9c7d7d3f7dad3f8c5d3f4c7bbb2 +c8b991cdd3f508d30fd3d3fbd4bdeed5 +d3fcd6bf0dd9d3fdc1bdbdc2d3f9c9d3 +facbcd6f42c11f466b4662477848a24f +4907d10cd1d3f2d2b113d3b568d4b5d7 +c3d3f1c4b56bccb3caceb3d603c9b12c +cfb144d2b14dd8b14d0ace14d209d2af +c4d4d3eed7d3efced3ebd0d3ecd1d3ed +c1d3e9c5b1c3c6d3eac8a3b9ccb97605 +d409d4b530d5b536d6d3cfcbaba2ced3 +f0d2b51f426443a25a44a2924507c80c +c8d3e7d2d3e8d3aff6d4a3e5c1d3e5c3 +d3e6c5afbdc7a5480010cc1dd20fd2c9 +e1d4a34fd5a9d2d6d3d6d9a74bccd3d2 +ced3d3cfd3d4d1d3d5c70cc7a778c8d3 +d0c9cb9acad3d1c1a993c4a91ec5d3ce +c6d3cf0010ce1dd50fd5d3dfd6d3e0d7 +c7f0d9d3e1daad44ceab9ecfd3ddd2d3 +ded3cd02c80cc8d3d9c9d3daccd3dbcd +d3dcc3bf38c4d3d7c6cd46c7d3d806cb +0ccbad85cfd3e3d9d3d1dad3e4c4adbc +c5adbccad3e2354b3586378c3892410c +cf17d40cd4d3cbd7d3ccd8d3cddaa5de +cfd3c8d2d3c9d3d3cacc09cca3cfcda5 +54cec7f0c4d3c5c5d3c6c6d3c71133b2 +c7f01133b6d3c301382a3910b0cd0210 +b6d3c42aafd931303236341131b9d3c2 +1137b2cbb902302e33323810b0adbc10 +b0ad4410b0a3e5046438673e6844724a +761173f4a358116cedb1281168e2d52e +116feda39601613e6d01e9a549ee012a +a5544110cda55410e200134c66513551 +3c5340545655725901c5d3c4d4cf6e10 +c1d51503c1d50bc4d3c3d3d51cd9d51f +04c4d520c8bf9acad537ced524d2d538 +10cbd5324c3c4d464e624f665001cbd5 +10d3d51301c2d3f9d9d3fd04c1d3fecd +d531ceb95cd2d503d5d53510c7d53610 +cdd50c452f4542474c49504a664b02c8 +abc9cdd3f5d7d3f701c7a548c8d3e710 +c2d53203c4d533ced534d1d3f2d2b113 +10cfd3f32aa5484132424243524410da +d3e402c5d3c6c6d3c7dad52f02c8d3d0 +ced530d5d53101c3bf38ced393002574 +c1f5e534f223f2a548f3a560f6a5a3f9 +a5cafa012a2e41127261e2a5e0022aa5 +de49a2b55210d5a5e1e5a358e6a366eb +a3b9eda3e5eea3fc78a67832795e7aa2 +60e125e25106eb0ceba5c6eca5c7eda5 +c8f8a5c9e2a5c3e5a5c4e7a5c50013ee +20f30ff3a5d9f4a5daf5a5dbf8a5dcfa +a5ddeea5d5efa5d6f0a5d7f1a5d8f2a5 +cae70fe7a5d0e8a5d1e9a5d2eba5d3ec +a5d4e1a5cbe2a5cce3a5cde4a5cee5a5 +cf08ed0feda5e5eea5e6efa5e7f4a5e8 +faa5e9e2a5e2e4a5e3e7a5e4ea012a2e +41127261e2a5e0032aa5de312e493453 +10d5a5e11137b2a5e101d1a5dfd2a5e0 +74a24875a29d76a2e3770012ee20f50f +f5a5bef6a5bff7a5c0f8a5c1f9a5c2ee +a5b9efa5baf2a5bbf3a5bcf4a5bde70f +e7a5b4e8a5b5e9a5b6eba5b7eda5b8e1 +a5b0e2a5b1e3a5b2e5a5b30017ef2af5 +14f809f8a58bf9a58cfaa58df5a588f6 +a589f7a58af209f2a585f3a586f4a587 +efa582f0a583f1a584e914ec09eca57f +eda580eea581e9a57ceaa57deba57ee4 +09e4a579e5a57ae7a57be1a576e2a577 +e3a5780014ed25f214f709f7a5a0f9a5 +a1faa5a2f2a59df4a59ef5a59feda598 +eea599efa59af0a59bf1a59ce80fe8a5 +93e9a594eaa595eba596eca597e1a58e +e3a58fe4a590e5a591e7a5920bee14f4 +09f4a5adf5a5aef6a5afeea5aaefa5ab +f3a5aceb09eba5a7eca5a8eda5a9e2a5 +a4e4a5a5e9a5a66ac2e86fc16d6fa253 +70a28e71a2e372a2fe730014ec25f414 +f809f8a573f9a574faa575f4a570f5a5 +71f6a572eca56beea56cefa56df2a56e +f3a56fe70fe7a566e8a567e9a568eaa5 +69eba56ae1a561e2a562e3a563e4a564 +e5a5650011eb1df20ff2a524f3a525f4 +a526f8a527faa528eba520eca521eda5 +22eea523e50fe5a51be6a51ce7a51de9 +a51eeaa51fe1a517e2a518e3a519e4a5 +1a0017ee2af514f809f8a53cf9a53dfa +a53ef5a539f6a53af7a53bf209f2a536 +f3a537f4a538eea533efa534f0a535e8 +14eb09eba530eca531eda532e8a52de9 +a52eeaa52fe509e5a52be6a382e7a52c +e2a529e3a3b5e4a52a08ed0feda543ee +a544f2a545f4a546faa547e3a53fe4a5 +40e7a541eba5420014ee25f314f809f8 +a55df9a55efaa55ff3a55af5a55bf7a5 +5ceea555efa556f0a557f1a558f2a559 +e90fe9a550eaa551eba552eca553eda5 +54e2a548e332e4a54de5a54ee8a54f03 +2aa54948324e3a5012616ceda54c1261 +74f2a54a126261f4a54b6aa2686ba283 +6ca2c46da4196e0019ee2df417f70cf7 +a513f8a514f9a515faa516f4a510f5a5 +11f6a512f109f1a50df2a50ef3a50fee +a50aefa50bf0a50ce717ea0ceaa506eb +a507eca508eda509e7a503e8a504e9a5 +05e409e4a500e5a501e6a502e1a3fde2 +a3fee3a3ff08f00ff0a3b5f4a35af5a3 +b6f7a3b7faa3b8e1a3b1e7a3b2e9a3b3 +eea3b40013ef20f40ff4a3c9f5a3caf6 +a3cbf7a3ccfaa3cdefa3c4f0a3c5f1a3 +c6f2a3c7f3a3c8e70fe7a3bfe8a3c0e9 +a3c1eba3c2eca3c3e2a3bae3a3bbe4a3 +bce5a3bde6a3be0017ee2af414f809f8 +a3e2f9a3e3faa3e4f4a3dff5a3e0f7a3 +e1f109f1a3ddf2a3def3a3cfeea3daef +a3dbf0a3dce814eb09eba3d7eca3d8ed +a3d9e8a3d4e9a3d5eaa3d6e409e4a3d1 +e5a3d2e6a3d3e1a3cee2a3cfe3a3d000 +16ef2af514f809f8a3f9f9a3fafaa3fb +f5a3f6f6a3f7f7a3f8f209f2a3f3f3a3 +f4f4a3f5efa3f0f0a3f1f1a3f2e714eb +09eba3ededa3eeeea3efe7a3ebe9a3ac +eaa3ece1a3e6e2a3e7e3a3e8e5a3e9e6 +a3ea65c14365a25866a28367a2ab68a4 +06690015ed25f214f709f7a3aef8a3af +f9a3b0f2a3abf3a3acf4a3adeda3a6ee +a3a7efa3a8f0a3a9f1a3aae614ea09ea +a3a3eba3a4eca3a5e6a3a0e7a3a1e9a3 +a2e1a39be2a39ce3a39de4a39ee5a39f +0ced17f50cf5a362f7a363f9a364faa3 +65eda35ff1a360f2a361e509e5a35ceb +a35deca35ee1a359e2a35ae3a35b0bee +14f309f3a370f5a371faa372eea36def +a36ef0a36fe809e8a36ae9a36beba36c +e2a367e4a368e5a3690019ee2df417f7 +0cf7a389f8a38af9a38bfaa38cf4a386 +f5a387f6a388f109f1a383f2a384f3a3 +85eea380efa381f0a382e717ea0ceaa3 +7ceba37deca37eeda37fe7a379e8a37a +e9a37be409e4a376e5a377e6a378e1a3 +73e2a374e3a3750ded17f00cf0a397f2 +a398f3a399f4a39aeda394eea395efa3 +96e80ce8a390e9a391eba392eca393e1 +a38de2a38ee7a38f61a25062a28563a2 +be640014ee25f414f809f8a355f9a356 +faa357f4a352f5a353f7a354eea34def +a34ef0a34ff1a350f2a351e70fe7a348 +e8a349e9a34aeaa34beca34ce1a343e2 +a344e4a345e5a346e6a3470015ed1af3 +0ef706f74bf84dfa4ff33df447f549ed +3dee3fef41f043f145e60ee906e937eb +39ec3be631e733e835e127e229e32be4 +2de52f0016ee1ef50ef806f87bf97dfa +7ff575f677f779f206f26ff371f473ee +69ef6bf06de60ee906e963ec65ed67e6 +5de75fe861e153e255e357e459e55b00 +12f118f60cf69df79ff8a1f9a341faa3 +42f193f295f397f499f59be60ae689e8 +8bed8dee8ff091e181e283e485e587 } } match{ diff --git a/icu4c/source/data/misc/supplementalData.txt b/icu4c/source/data/misc/supplementalData.txt index b0909b70d671..a95f79e8aaa5 100644 --- a/icu4c/source/data/misc/supplementalData.txt +++ b/icu4c/source/data/misc/supplementalData.txt @@ -29570,7 +29570,7 @@ supplementalData:table(nofallback){ populationShareF:int{49230000} } man_Nkoo{ - literacyShareF:int{49500000} + literacyShareF:int{49250000} populationShareF:int{49230000} } nqo{ @@ -32631,8 +32631,8 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47320000} } - sr_Latn{ - populationShareF:int{45360000} + sr{ + populationShareF:int{45410000} } territoryF:intvector{ 62581600, From 19dd858b6aa372597f571e1c398cbef1854c0f87 Mon Sep 17 00:00:00 2001 From: DraganBesevic Date: Wed, 26 Feb 2025 09:04:17 -0800 Subject: [PATCH 06/19] ICU-22923 Integrate CLDR 47 release beta2, part 3, source and test files --- icu4c/source/test/intltest/dtfmttst.cpp | 87 +++---- icu4c/source/test/intltest/dtifmtts.cpp | 2 +- .../cldr/localeIdentifiers/likelySubtags.txt | 19 +- .../localeCanonicalization.txt | 1 + .../localeIdentifiers/localeDisplayName.txt | 213 +++++++++--------- .../icu/dev/test/format/DateFormatTest.java | 83 +++---- .../ibm/icu/dev/test/util/ULocaleTest.java | 4 +- .../test/format/DateIntervalFormatTest.java | 2 +- .../cldr/localeIdentifiers/likelySubtags.txt | 19 +- .../localeCanonicalization.txt | 1 + .../localeIdentifiers/localeDisplayName.txt | 213 +++++++++--------- 11 files changed, 330 insertions(+), 314 deletions(-) diff --git a/icu4c/source/test/intltest/dtfmttst.cpp b/icu4c/source/test/intltest/dtfmttst.cpp index 72cb41835ca6..82db5413ac72 100644 --- a/icu4c/source/test/intltest/dtfmttst.cpp +++ b/icu4c/source/test/intltest/dtfmttst.cpp @@ -5189,9 +5189,9 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm:ss BBB")); // assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBB | 12:00:00", "12:00:00 noon", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5199,27 +5199,27 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBB")); // assertEquals("hh:mm BBB | 00:00:00", "12:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBB | 00:00:30", "12:00 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBB")); // assertEquals("hh BBB | 00:00:00", "12 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBB | 00:00:30", "12 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBB | 00:30:00", "12 midnight", sdf.format(k003000, out.remove())); - assertEquals("hh BBB | 00:30:00", "12 at night", sdf.format(k003000, out.remove())); + assertEquals("hh BBB | 00:30:00", "12 in the morning", sdf.format(k003000, out.remove())); // Wide. sdf.applyPattern(UnicodeString("hh:mm:ss BBBB")); // assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBBB | 12:00:00", "12:00:00 noon", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5227,27 +5227,27 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBBB")); // assertEquals("hh:mm BBBB | 00:00:00", "12:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBBB | 00:00:30", "12:00 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBB | 00:00:30", "12:00 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm BBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBBB")); // assertEquals("hh BBBB | 00:00:00", "12 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBB | 00:00:30", "12 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBB | 00:80:00", "12 midnight", sdf.format(k003000, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // Narrow. sdf.applyPattern(UnicodeString("hh:mm:ss BBBBB")); // assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 mi", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBBBB | 12:00:00", "12:00:00 n", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5255,19 +5255,19 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBBBB")); // assertEquals("hh:mm BBBBB | 00:00:00", "12:00 mi", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBBBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBBBB | 00:00:30", "12:00 mi", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBBB | 00:00:30", "12:00 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm BBBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBBBB")); // assertEquals("hh BBBBB | 00:00:00", "12 mi", sdf.format(k000000, out.remove())); - assertEquals("hh BBBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBBB | 00:00:30", "12 mi", sdf.format(k000030, out.remove())); - assertEquals("hh BBBBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBBBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBBBB | 00:30:00", "12 mi", sdf.format(k003000, out.remove())); - assertEquals("hh BBBBB | 00:30:00", "12 at night", sdf.format(k003000, out.remove())); + assertEquals("hh BBBBB | 00:30:00", "12 in the morning", sdf.format(k003000, out.remove())); } void DateFormatTest::TestDayPeriodWithLocales() { @@ -5344,9 +5344,9 @@ void DateFormatTest::TestDayPeriodWithLocales() { // assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 midnight", // sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 at night", + assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 in the morning", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 at night", + assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 in the morning", sdf.format(k010000, out.remove())); assertEquals("hh:mm:ss BBBB | 12:00:00 | en_US", "12:00:00 noon", sdf.format(k120000, out.remove())); @@ -5374,7 +5374,7 @@ void DateFormatTest::TestDayPeriodWithLocales() { sdf.setTimeZone(*tz); sdf.applyPattern(UnicodeString("hh:mm:ss BBBB")); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 at night", + assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 in the morning", sdf.format(k010000, out.remove())); } @@ -5414,7 +5414,7 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss midnight", // sdf.format(k000030, out.remove())); - assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss at night", + assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss in the morning", sdf.format(k000030, out.remove())); assertEquals("hh:mm 'ss' BBBB | 06:00:30", "06:00 ss in the morning", sdf.format(k060030, out.remove())); @@ -5433,7 +5433,7 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss midnight", // sdf.format(k003000, out.remove())); - assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss at night", + assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss in the morning", sdf.format(k003000, out.remove())); assertEquals("hh 'mm ss' BBBB | 06:30:00", "06 mm ss in the morning", sdf.format(k063000, out.remove())); @@ -5454,28 +5454,28 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("BBBB hh:mm:ss | 00:00:00", "midnight 12:00:00", // sdf.format(k000000, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:00:00", "at night 12:00:00", + assertEquals("BBBB hh:mm:ss | 00:00:00", "in the morning 12:00:00", sdf.format(k000000, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:30:00", "at night 12:30:00", + assertEquals("BBBB hh:mm:ss | 00:30:00", "in the morning 12:30:00", sdf.format(k003000, out.remove())); // Confirm applyPattern() reparses the pattern string. sdf.applyPattern(UnicodeString("BBBB hh")); // assertEquals("BBBB hh | 00:00:30", "midnight 12", // sdf.format(k000030, out.remove())); - assertEquals("BBBB hh | 00:00:30", "at night 12", + assertEquals("BBBB hh | 00:00:30", "in the morning 12", sdf.format(k000030, out.remove())); sdf.applyPattern(UnicodeString("BBBB hh:mm:'ss'")); // assertEquals("BBBB hh:mm:'ss' | 00:00:30", "midnight 12:00:ss", // sdf.format(k000030, out.remove())); - assertEquals("BBBB hh | 00:00:30", "at night 12:00:ss", + assertEquals("BBBB hh | 00:00:30", "in the morning 12:00:ss", sdf.format(k000030, out.remove())); sdf.applyPattern(UnicodeString("BBBB hh:mm:ss")); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030, out.remove())); } @@ -5495,6 +5495,7 @@ void DateFormatTest::TestDayPeriodParsing() { UDate k193000 = 1447443000000.0; UDate k200000 = 1447444800000.0; UDate k210000 = 1447448400000.0; + UDate k223000 = 1447453800000.0; UErrorCode errorCode = U_ZERO_ERROR; SimpleDateFormat sdf(UnicodeString(), errorCode); @@ -5518,7 +5519,7 @@ void DateFormatTest::TestDayPeriodParsing() { assertEquals("yyyy-MM-dd B | 2015-11-13 in the evening", k193000, sdf.parse(UnicodeString("2015-11-13 in the evening"), errorCode)); assertEquals("yyyy-MM-dd B | 2015-11-13 at night", - k013000, sdf.parse(UnicodeString("2015-11-13 at night"), errorCode)); + k223000, sdf.parse(UnicodeString("2015-11-13 at night"), errorCode)); // If time and day period are consistent with each other then time is parsed accordingly. sdf.applyPattern(UnicodeString("yyyy-MM-dd hh:mm B")); @@ -5526,8 +5527,8 @@ void DateFormatTest::TestDayPeriodParsing() { k000000, sdf.parse(UnicodeString("2015-11-13 12:00 midnight"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse(UnicodeString("2015-11-13 12:00 noon"), errorCode)); - assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 at night", - k010000, sdf.parse(UnicodeString("2015-11-13 01:00 at night"), errorCode)); + assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the morning", + k010000, sdf.parse(UnicodeString("2015-11-13 01:00 in the morning"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse(UnicodeString("2015-11-13 01:00 in the afternoon"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 in the morning", @@ -5581,8 +5582,8 @@ void DateFormatTest::TestDayPeriodParsing() { k000000, sdf.parse(UnicodeString("2015-11-13 12:00 midnight"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse(UnicodeString("2015-11-13 12:00 noon"), errorCode)); - assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 at night", - k010000, sdf.parse(UnicodeString("2015-11-13 01:00 at night"), errorCode)); + assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the morning", + k010000, sdf.parse(UnicodeString("2015-11-13 01:00 in the morning"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse(UnicodeString("2015-11-13 01:00 in the afternoon"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 in the morning", diff --git a/icu4c/source/test/intltest/dtifmtts.cpp b/icu4c/source/test/intltest/dtifmtts.cpp index 8f08d4e72781..15dede67f512 100644 --- a/icu4c/source/test/intltest/dtifmtts.cpp +++ b/icu4c/source/test/intltest/dtifmtts.cpp @@ -1149,7 +1149,7 @@ void DateIntervalFormatTest::testHourMetacharacters() { "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hbbbbb", "10\\u202Fa\\u2009\\u2013\\u200912\\u202Fn", "en", "CE 2010 09 27 13:00:00", "CE 2010 09 27 14:00:00", "hb", "1\\u2009\\u2013\\u20092\\u202FPM", "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "10 in the morning\\u2009\\u2013\\u20091 in the afternoon", - "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 at night", + "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 in the morning", // J "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10\\u2009\\u2013\\u20091", diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt index 4b9d59049bbe..f9f149d3cc87 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt @@ -235,16 +235,19 @@ en-CK ; en-Latn-CK ; en-CK ; en-CM ; en-Latn-CM ; en-CM ; en-CX ; en-Latn-CX ; en-CX ; en-CY ; en-Latn-CY ; en-CY ; +en-CZ ; en-Latn-CZ ; en-CZ ; en-DE ; en-Latn-DE ; en-DE ; en-DG ; en-Latn-DG ; en-DG ; en-DK ; en-Latn-DK ; en-DK ; en-DM ; en-Latn-DM ; en-DM ; en-ER ; en-Latn-ER ; en-ER ; +en-ES ; en-Latn-ES ; en-ES ; en-Egyp ; en-Egyp-US ; en-Egyp ; en-FI ; en-Latn-FI ; en-FI ; en-FJ ; en-Latn-FJ ; en-FJ ; en-FK ; en-Latn-FK ; en-FK ; en-FM ; en-Latn-FM ; en-FM ; +en-FR ; en-Latn-FR ; en-FR ; en-GB ; en-Latn-GB ; en-GB ; en-GD ; en-Latn-GD ; en-GD ; en-GG ; en-Latn-GG ; en-GG ; @@ -255,12 +258,14 @@ en-GS ; en-Latn-GS ; en-GS ; en-GU ; en-Latn-GU ; en-GU ; en-GY ; en-Latn-GY ; en-GY ; en-HK ; en-Latn-HK ; en-HK ; +en-HU ; en-Latn-HU ; en-HU ; en-ID ; en-Latn-ID ; en-ID ; en-IE ; en-Latn-IE ; en-IE ; en-IL ; en-Latn-IL ; en-IL ; en-IM ; en-Latn-IM ; en-IM ; en-IN ; en-Latn-IN ; en-IN ; en-IO ; en-Latn-IO ; en-IO ; +en-IT ; en-Latn-IT ; en-IT ; en-JE ; en-Latn-JE ; en-JE ; en-JM ; en-Latn-JM ; en-JM ; en-KE ; en-Latn-KE ; en-KE ; @@ -285,15 +290,19 @@ en-NA ; en-Latn-NA ; en-NA ; en-NF ; en-Latn-NF ; en-NF ; en-NG ; en-Latn-NG ; en-NG ; en-NL ; en-Latn-NL ; en-NL ; +en-NO ; en-Latn-NO ; en-NO ; en-NR ; en-Latn-NR ; en-NR ; en-NU ; en-Latn-NU ; en-NU ; en-NZ ; en-Latn-NZ ; en-NZ ; en-PG ; en-Latn-PG ; en-PG ; en-PH ; en-Latn-PH ; en-PH ; en-PK ; en-Latn-PK ; en-PK ; +en-PL ; en-Latn-PL ; en-PL ; en-PN ; en-Latn-PN ; en-PN ; en-PR ; en-Latn-PR ; en-PR ; +en-PT ; en-Latn-PT ; en-PT ; en-PW ; en-Latn-PW ; en-PW ; +en-RO ; en-Latn-RO ; en-RO ; en-RW ; en-Latn-RW ; en-RW ; en-SB ; en-Latn-SB ; en-SB ; en-SC ; en-Latn-SC ; en-SC ; @@ -302,6 +311,7 @@ en-SE ; en-Latn-SE ; en-SE ; en-SG ; en-Latn-SG ; en-SG ; en-SH ; en-Latn-SH ; en-SH ; en-SI ; en-Latn-SI ; en-SI ; +en-SK ; en-Latn-SK ; en-SK ; en-SL ; en-Latn-SL ; en-SL ; en-SS ; en-Latn-SS ; en-SS ; en-SX ; en-Latn-SX ; en-SX ; @@ -802,11 +812,6 @@ pl-AQ ; pl-Latn-AQ ; pl-AQ ; pl-Egyp ; pl-Egyp-PL ; pl-Egyp ; pl-Latn ; pl-Latn-PL ; pl ; pl-PL ; pl-Latn-PL ; pl ; -prg ; prg-Latn-PL ; prg ; -prg-AQ ; prg-Latn-AQ ; prg-AQ ; -prg-Egyp ; prg-Egyp-PL ; prg-Egyp ; -prg-Latn ; prg-Latn-PL ; prg ; -prg-PL ; prg-Latn-PL ; prg ; ps ; ps-Arab-AF ; ps ; ps-AF ; ps-Arab-AF ; ps ; ps-AQ ; ps-Arab-AQ ; ps-AQ ; @@ -1575,9 +1580,9 @@ und-NP ; ne-Deva-NP ; ne ; und-NR ; en-Latn-NR ; en-NR ; und-NU ; en-Latn-NU ; en-NU ; und-NZ ; en-Latn-NZ ; en-NZ ; -und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; und-Nkoo-AQ ; man-Nkoo-AQ ; ; -und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; und-OM ; ar-Arab-OM ; ar-OM ; und-Olck ; sat-Olck-IN ; sat ; und-Olck-AQ ; sat-Olck-AQ ; sat-AQ ; diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt index 30fc66445aa1..18ae4443dbff 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale identifier canonicalization # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt index 0f919bd35074..54563a0f2663 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale display name generation # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html @@ -356,7 +357,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Nederlands (België) nl-Latn-BE; Nederlands (Latyn, België) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=af @@ -369,7 +370,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Vlaams nl-Latn-BE; Vlaams (Latyn) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=am @@ -382,7 +383,7 @@ es-Cyrl-MX; ስፓኒሽ (ሲይሪልክ፣ ሜክሲኮ) hi-Latn; ሕንድኛ (ላቲን) nl-BE; ደች (ቤልጄም) nl-Latn-BE; ደች (ላቲን፣ ቤልጄም) -zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ fonipa) @locale=am @@ -395,7 +396,7 @@ es-Cyrl-MX; የሜክሲኮ ስፓኒሽ (ሲይሪልክ) hi-Latn; ሕንድኛ [ላቲን] nl-BE; ፍሌሚሽ nl-Latn-BE; ፍሌሚሽ (ላቲን) -zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (fonipa) @locale=ar @@ -408,7 +409,7 @@ es-Cyrl-MX; الإسبانية (السيريلية، المكسيك) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية (المبسطة، FONIPA) +zh-Hans-fonipa; الصينية (المبسطة، fonipa) @locale=ar @@ -421,7 +422,7 @@ es-Cyrl-MX; الإسبانية المكسيكية (السيريلية) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية المبسطة (FONIPA) +zh-Hans-fonipa; الصينية المبسطة (fonipa) @locale=as @@ -434,7 +435,7 @@ es-Cyrl-MX; স্পেনিচ (চিৰিলিক, মেক্সিক hi-Latn; হিন্দী (লেটিন) nl-BE; ডাচ (বেলজিয়াম) nl-Latn-BE; ডাচ (লেটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সৰলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সৰলীকৃত, fonipa) @locale=as @@ -447,7 +448,7 @@ es-Cyrl-MX; মেক্সিকান স্পেনিচ (চিৰিল hi-Latn; হিন্দী (লেটিন) nl-BE; ফ্লেমিচ nl-Latn-BE; ফ্লেমিচ (লেটিন) -zh-Hans-fonipa; সৰলীকৃত চীনা (FONIPA) +zh-Hans-fonipa; সৰলীকৃত চীনা (fonipa) @locale=az @@ -460,7 +461,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az @@ -473,7 +474,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=az_Latn @@ -486,7 +487,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az_Latn @@ -499,7 +500,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=be @@ -512,7 +513,7 @@ es-Cyrl-MX; іспанская (кірыліца, Мексіка) hi-Latn; хіндзі (лацініца) nl-BE; нідэрландская (Бельгія) nl-Latn-BE; нідэрландская (лацініца, Бельгія) -zh-Hans-fonipa; кітайская (спрошчанае кітайскае, FONIPA) +zh-Hans-fonipa; кітайская (спрошчанае кітайскае, fonipa) @locale=be @@ -525,7 +526,7 @@ es-Cyrl-MX; мексіканская іспанская (кірыліца) hi-Latn; хіндзі (лацініца) nl-BE; фламандская nl-Latn-BE; фламандская (лацініца) -zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (FONIPA) +zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (fonipa) @locale=bg @@ -564,7 +565,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ওলন্দাজ (বেলজিয়াম) nl-Latn-BE; ওলন্দাজ (ল্যাটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bn @@ -577,7 +578,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ফ্লেমিশ nl-Latn-BE; ফ্লেমিশ (ল্যাটিন) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bs @@ -668,7 +669,7 @@ es-Cyrl-MX; ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ, ᎠᏂᏍᏆᏂ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏛᏥ (ᏇᎵᏥᎥᎻ) nl-Latn-BE; ᏛᏥ (ᎳᏘᏂ, ᏇᎵᏥᎥᎻ) -zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, FONIPA) +zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, fonipa) @locale=chr @@ -681,7 +682,7 @@ es-Cyrl-MX; ᏍᏆᏂᏱ ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏊᎵᏥᎥᎻ ᏛᏥ nl-Latn-BE; ᏊᎵᏥᎥᎻ ᏛᏥ (ᎳᏘᏂ) -zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (FONIPA) +zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (fonipa) @locale=cs @@ -694,7 +695,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; nizozemština (Belgie) nl-Latn-BE; nizozemština (latinka, Belgie) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=cs @@ -707,7 +708,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; vlámština nl-Latn-BE; vlámština (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=cy @@ -798,7 +799,7 @@ es-Cyrl-MX; špańšćina (kyriliski, Mexiko) hi-Latn; hindišćina (łatyński) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łatyński, Belgiska) -zh-Hans-fonipa; chinšćina (zjadnorjone, FONIPA) +zh-Hans-fonipa; chinšćina (zjadnorjone, fonipa) @locale=dsb @@ -811,7 +812,7 @@ es-Cyrl-MX; mexikańska špańšćina (kyriliski) hi-Latn; hindišćina (łatyński) nl-BE; flamšćina nl-Latn-BE; flamšćina (łatyński) -zh-Hans-fonipa; chinšćina [zjadnorjona] (FONIPA) +zh-Hans-fonipa; chinšćina [zjadnorjona] (fonipa) @locale=el @@ -1006,7 +1007,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chinese (Pinasimple, FONIPA) +zh-Hans-fonipa; Chinese (Pinasimple, fonipa) @locale=fil @@ -1019,7 +1020,7 @@ es-Cyrl-MX; Mexican na Espanyol (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Pinasimpleng Chinese (FONIPA) +zh-Hans-fonipa; Pinasimpleng Chinese (fonipa) @locale=fr @@ -1110,7 +1111,7 @@ es-Cyrl-MX; español (cirílico, México) hi-Latn; hindi (latino) nl-BE; neerlandés (Bélxica) nl-Latn-BE; neerlandés (latino, Bélxica) -zh-Hans-fonipa; chinés (simplificado, FONIPA) +zh-Hans-fonipa; chinés (simplificado, fonipa) @locale=gl @@ -1123,7 +1124,7 @@ es-Cyrl-MX; español de México (cirílico) hi-Latn; hindi [alfabeto latino] nl-BE; flamengo nl-Latn-BE; flamengo (latino) -zh-Hans-fonipa; chinés simplificado (FONIPA) +zh-Hans-fonipa; chinés simplificado (fonipa) @locale=gu @@ -1136,7 +1137,7 @@ es-Cyrl-MX; સ્પેનિશ (સિરિલિક, મેક્સિક hi-Latn; હિન્દી (લેટિન) nl-BE; ડચ (બેલ્જીયમ) nl-Latn-BE; ડચ (લેટિન, બેલ્જીયમ) -zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, FONIPA) +zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, fonipa) @locale=gu @@ -1149,7 +1150,7 @@ es-Cyrl-MX; મેક્સિકન સ્પેનિશ (સિરિલિ hi-Latn; હિન્દી (લેટિન) nl-BE; ફ્લેમિશ nl-Latn-BE; ફ્લેમિશ (લેટિન) -zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (FONIPA) +zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (fonipa) @locale=ha @@ -1162,7 +1163,7 @@ es-Cyrl-MX; Sifaniyanci (Cyrillic, Mesiko) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, FONIPA) +zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, fonipa) @locale=ha @@ -1175,7 +1176,7 @@ es-Cyrl-MX; Sifaniyanci Mesiko (Cyrillic) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (FONIPA) +zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (fonipa) @locale=he @@ -1214,7 +1215,7 @@ es-Cyrl-MX; स्पेनिश (सिरिलिक, मैक्सिक hi-Latn; हिन्दी (लैटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लैटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=hi @@ -1227,7 +1228,7 @@ es-Cyrl-MX; मैक्सिकन स्पेनिश (सिरिलि hi-Latn; हिन्दी (लैटिन) nl-BE; फ़्लेमिश nl-Latn-BE; फ़्लेमिश (लैटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=hi_Latn @@ -1292,7 +1293,7 @@ es-Cyrl-MX; španišćina (kyrilisce, Mexiko) hi-Latn; hindišćina (łaćonsce) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łaćonsce, Belgiska) -zh-Hans-fonipa; chinšćina (zjednorjene, FONIPA) +zh-Hans-fonipa; chinšćina (zjednorjene, fonipa) @locale=hsb @@ -1305,7 +1306,7 @@ es-Cyrl-MX; mexiska španišćina (kyrilisce) hi-Latn; hindišćina (łaćonsce) nl-BE; flamšćina nl-Latn-BE; flamšćina (łaćonsce) -zh-Hans-fonipa; chinšćina [zjednorjena] (FONIPA) +zh-Hans-fonipa; chinšćina [zjednorjena] (fonipa) @locale=ht @@ -1370,7 +1371,7 @@ es-Cyrl-MX; իսպաներեն (կյուրեղագիր, Մեքսիկա) hi-Latn; հինդի (լատինական) nl-BE; հոլանդերեն (Բելգիա) nl-Latn-BE; հոլանդերեն (լատինական, Բելգիա) -zh-Hans-fonipa; չինարեն (պարզեցված, FONIPA) +zh-Hans-fonipa; չինարեն (պարզեցված, fonipa) @locale=hy @@ -1383,7 +1384,7 @@ es-Cyrl-MX; մեքսիկական իսպաներեն (կյուրեղագիր) hi-Latn; հինդի [լատինատառ] nl-BE; ֆլամանդերեն nl-Latn-BE; ֆլամանդերեն (լատինական) -zh-Hans-fonipa; պարզեցված չինարեն (FONIPA) +zh-Hans-fonipa; պարզեցված չինարեն (fonipa) @locale=id @@ -1422,7 +1423,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chaịniiz (Nke dị mfe, FONIPA) +zh-Hans-fonipa; Chaịniiz (Nke dị mfe, fonipa) @locale=ig @@ -1435,7 +1436,7 @@ es-Cyrl-MX; Spanish ndị Mexico (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (FONIPA) +zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (fonipa) @locale=is @@ -1448,7 +1449,7 @@ es-Cyrl-MX; spænska (kyrillískt, Mexíkó) hi-Latn; hindí (latneskt) nl-BE; hollenska (Belgía) nl-Latn-BE; hollenska (latneskt, Belgía) -zh-Hans-fonipa; kínverska (einfaldað, FONIPA) +zh-Hans-fonipa; kínverska (einfaldað, fonipa) @locale=is @@ -1461,7 +1462,7 @@ es-Cyrl-MX; mexíkósk spænska (kyrillískt) hi-Latn; hindí (latneskt) nl-BE; flæmska nl-Latn-BE; flæmska (latneskt) -zh-Hans-fonipa; kínverska [einfölduð] (FONIPA) +zh-Hans-fonipa; kínverska [einfölduð] (fonipa) @locale=it @@ -1526,7 +1527,7 @@ es-Cyrl-MX; Spanyol (Sirilik, Mèksiko) hi-Latn; India (Latin) nl-BE; Walanda (Bèlgi) nl-Latn-BE; Walanda (Latin, Bèlgi) -zh-Hans-fonipa; Tyonghwa (Prasaja, FONIPA) +zh-Hans-fonipa; Tyonghwa (Prasaja, fonipa) @locale=jv @@ -1539,7 +1540,7 @@ es-Cyrl-MX; Spanyol [Meksiko] (Sirilik) hi-Latn; India (Latin) nl-BE; Flemis nl-Latn-BE; Flemis (Latin) -zh-Hans-fonipa; Tyonghwa [Ringkes] (FONIPA) +zh-Hans-fonipa; Tyonghwa [Ringkes] (fonipa) @locale=ka @@ -1552,7 +1553,7 @@ es-Cyrl-MX; ესპანური (კირილიცა, მექსი hi-Latn; ჰინდი (ლათინური) nl-BE; ნიდერლანდური (ბელგია) nl-Latn-BE; ნიდერლანდური (ლათინური, ბელგია) -zh-Hans-fonipa; ჩინური (გამარტივებული, FONIPA) +zh-Hans-fonipa; ჩინური (გამარტივებული, fonipa) @locale=ka @@ -1565,7 +1566,7 @@ es-Cyrl-MX; მექსიკური ესპანური (კირი hi-Latn; ჰინდი (ლათინური) nl-BE; ფლამანდიური nl-Latn-BE; ფლამანდიური (ლათინური) -zh-Hans-fonipa; გამარტივებული ჩინური (FONIPA) +zh-Hans-fonipa; გამარტივებული ჩინური (fonipa) @locale=kk @@ -1630,7 +1631,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ហូឡង់ (បែលហ្ស៊ិក) nl-Latn-BE; ហូឡង់ (ឡាតាំង, បែលហ្ស៊ិក) -zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, FONIPA) +zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, fonipa) @locale=km @@ -1643,7 +1644,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ផ្លាមីស nl-Latn-BE; ផ្លាមីស (ឡាតាំង) -zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (FONIPA) +zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (fonipa) @locale=kn @@ -1656,7 +1657,7 @@ es-Cyrl-MX; ಸ್ಪ್ಯಾನಿಷ್ (ಸಿರಿಲಿಕ್, ಮೆಕ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಡಚ್ (ಬೆಲ್ಜಿಯಮ್) nl-Latn-BE; ಡಚ್ (ಲ್ಯಾಟಿನ್, ಬೆಲ್ಜಿಯಮ್) -zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, FONIPA) +zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, fonipa) @locale=kn @@ -1669,7 +1670,7 @@ es-Cyrl-MX; ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ (ಸಿ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಫ್ಲೆಮಿಷ್ nl-Latn-BE; ಫ್ಲೆಮಿಷ್ (ಲ್ಯಾಟಿನ್) -zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (FONIPA) +zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (fonipa) @locale=ko @@ -1682,7 +1683,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 네덜란드어(벨기에) nl-Latn-BE; 네덜란드어(로마자, 벨기에) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=ko @@ -1695,7 +1696,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 플라망어 nl-Latn-BE; 플라망어(로마자) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=kok @@ -1708,7 +1709,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok @@ -1721,7 +1722,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=kok_Deva @@ -1734,7 +1735,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok_Deva @@ -1747,7 +1748,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=ky @@ -1760,7 +1761,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; голландча (Бельгия) nl-Latn-BE; голландча (Латын, Бельгия) -zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, FONIPA) +zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, fonipa) @locale=ky @@ -1773,7 +1774,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; фламандча nl-Latn-BE; фламандча (Латын) -zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (FONIPA) +zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (fonipa) @locale=lo @@ -1864,7 +1865,7 @@ es-Cyrl-MX; шпански (кирилско писмо, Мексико) hi-Latn; хинди (латинично писмо) nl-BE; холандски (Белгија) nl-Latn-BE; холандски (латинично писмо, Белгија) -zh-Hans-fonipa; кинески (поедноставено, FONIPA) +zh-Hans-fonipa; кинески (поедноставено, fonipa) @locale=mk @@ -1877,7 +1878,7 @@ es-Cyrl-MX; мексикански шпански (кирилско писмо) hi-Latn; хинди (латинично писмо) nl-BE; фламански nl-Latn-BE; фламански (латинично писмо) -zh-Hans-fonipa; поедноставен кинески (FONIPA) +zh-Hans-fonipa; поедноставен кинески (fonipa) @locale=ml @@ -1916,7 +1917,7 @@ es-Cyrl-MX; испани (кирилл, Мексик) hi-Latn; хинди (латин) nl-BE; нидерланд (Бельги) nl-Latn-BE; нидерланд (латин, Бельги) -zh-Hans-fonipa; хятад (хялбаршуулсан, FONIPA) +zh-Hans-fonipa; хятад (хялбаршуулсан, fonipa) @locale=mn @@ -1929,7 +1930,7 @@ es-Cyrl-MX; испани хэл [Мексик] (кирилл) hi-Latn; хинди (латин) nl-BE; фламанд nl-Latn-BE; фламанд (латин) -zh-Hans-fonipa; хялбаршуулсан хятад (FONIPA) +zh-Hans-fonipa; хялбаршуулсан хятад (fonipa) @locale=mr @@ -1942,7 +1943,7 @@ es-Cyrl-MX; स्पॅनिश (सीरिलिक, मेक्सिक hi-Latn; हिंदी (लॅटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=mr @@ -1955,7 +1956,7 @@ es-Cyrl-MX; मेक्सिकन स्पॅनिश (सीरिलि hi-Latn; हिंदी (लॅटिन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=ms @@ -2046,7 +2047,7 @@ es-Cyrl-MX; स्पेनी (सिरिलिक, मेक्सिको) hi-Latn; हिन्दी (ल्याटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (ल्याटिन, बेल्जियम) -zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, FONIPA) +zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, fonipa) @locale=ne @@ -2059,7 +2060,7 @@ es-Cyrl-MX; मेक्सिकन स्पेनी (सिरिलिक) hi-Latn; हिन्दी (ल्याटिन) nl-BE; फ्लेमिस nl-Latn-BE; फ्लेमिस (ल्याटिन) -zh-Hans-fonipa; सरलिकृत चिनियाँ (FONIPA) +zh-Hans-fonipa; सरलिकृत चिनियाँ (fonipa) @locale=nl @@ -2150,7 +2151,7 @@ es-Cyrl-MX; ସ୍ପାନିସ୍‌ (ସିରିଲିକ୍, ମେକ୍ hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଡଚ୍ (ବେଲଜିୟମ୍) nl-Latn-BE; ଡଚ୍ (ଲାଟିନ୍, ବେଲଜିୟମ୍) -zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, FONIPA) +zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, fonipa) @locale=or @@ -2163,7 +2164,7 @@ es-Cyrl-MX; ମେକ୍ସିକାନ ସ୍ପାନିସ୍‌ (ସିର hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଫ୍ଲେମିଶ୍ nl-Latn-BE; ଫ୍ଲେମିଶ୍ (ଲାଟିନ୍) -zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (FONIPA) +zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (fonipa) @locale=pa @@ -2176,7 +2177,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa @@ -2189,7 +2190,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2202,7 +2203,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2215,7 +2216,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pcm @@ -2228,7 +2229,7 @@ es-Cyrl-MX; Spánish Lángwej (Sírílik, Mẹ́ksíko) hi-Latn; Híndi Lángwej (Látin) nl-BE; Dọch Lángwej (Bẹ́ljọm) nl-Latn-BE; Dọch Lángwej (Látin, Bẹ́ljọm) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pcm @@ -2241,7 +2242,7 @@ es-Cyrl-MX; Mẹ́ksiko Spánish (Sírílik) hi-Latn; Híndi [Látin] nl-BE; Flẹ́mish Lángwej nl-Latn-BE; Flẹ́mish Lángwej (Látin) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pl @@ -2280,7 +2281,7 @@ es-Cyrl-MX; هسپانوي (سیریلیک, میکسیکو) hi-Latn; هندي (لاتين/لاتيني) nl-BE; هالېنډي (بیلجیم) nl-Latn-BE; هالېنډي (لاتين/لاتيني, بیلجیم) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=ps @@ -2293,7 +2294,7 @@ es-Cyrl-MX; ميکسيکي هسپانوي (سیریلیک) hi-Latn; هندي [لاتيني] nl-BE; فلېمېشي nl-Latn-BE; فلېمېشي (لاتين/لاتيني) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=pt @@ -2358,7 +2359,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=root @@ -2371,7 +2372,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=ru @@ -2410,7 +2411,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd @@ -2423,7 +2424,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2436,7 +2437,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2449,7 +2450,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=si @@ -2462,7 +2463,7 @@ es-Cyrl-MX; ස්පාඤ්ඤ (සිරිලික්, මෙක්සි hi-Latn; හින්දි (ලතින්) nl-BE; ලන්දේසි (බෙල්ජියම) nl-Latn-BE; ලන්දේසි (ලතින්, බෙල්ජියම) -zh-Hans-fonipa; චීන (සුළුකළ, FONIPA) +zh-Hans-fonipa; චීන (සුළුකළ, fonipa) @locale=si @@ -2475,7 +2476,7 @@ es-Cyrl-MX; මෙක්සිකානු ස්පාඤ්ඤ (සිරි hi-Latn; හින්දි (ලතින්) nl-BE; ෆ්ලෙමිශ් nl-Latn-BE; ෆ්ලෙමිශ් (ලතින්) -zh-Hans-fonipa; සරල චීන (FONIPA) +zh-Hans-fonipa; සරල චීන (fonipa) @locale=sk @@ -2488,7 +2489,7 @@ es-Cyrl-MX; španielčina (cyrilika, Mexiko) hi-Latn; hindčina (latinka) nl-BE; holandčina (Belgicko) nl-Latn-BE; holandčina (latinka, Belgicko) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=sk @@ -2501,7 +2502,7 @@ es-Cyrl-MX; španielčina [mexická] (cyrilika) hi-Latn; hindčina (latinka) nl-BE; flámčina nl-Latn-BE; flámčina (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=sl @@ -2540,7 +2541,7 @@ es-Cyrl-MX; Isbaanish (Siriylik, Meksiko) hi-Latn; Hindi (Laatiin) nl-BE; Holandays (Biljam) nl-Latn-BE; Holandays (Laatiin, Biljam) -zh-Hans-fonipa; Shinees (La fududeeyay, FONIPA) +zh-Hans-fonipa; Shinees (La fududeeyay, fonipa) @locale=so @@ -2553,7 +2554,7 @@ es-Cyrl-MX; Isbaanishka Mexico (Siriylik) hi-Latn; Hindi [Latin] nl-BE; Af faleemi nl-Latn-BE; Af faleemi (Laatiin) -zh-Hans-fonipa; Shiinaha Rasmiga ah (FONIPA) +zh-Hans-fonipa; Shiinaha Rasmiga ah (fonipa) @locale=sq @@ -2566,7 +2567,7 @@ es-Cyrl-MX; spanjisht (cirilik, Meksikë) hi-Latn; indisht (latin) nl-BE; holandisht (Belgjikë) nl-Latn-BE; holandisht (latin, Belgjikë) -zh-Hans-fonipa; kinezisht (i thjeshtuar, FONIPA) +zh-Hans-fonipa; kinezisht (i thjeshtuar, fonipa) @locale=sq @@ -2579,7 +2580,7 @@ es-Cyrl-MX; spanjishte meksikane (cirilik) hi-Latn; hindisht [latine] nl-BE; flamandisht nl-Latn-BE; flamandisht (latin) -zh-Hans-fonipa; kinezishte e thjeshtuar (FONIPA) +zh-Hans-fonipa; kinezishte e thjeshtuar (fonipa) @locale=sr @@ -2696,7 +2697,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiholanzi (Ubelgiji) nl-Latn-BE; Kiholanzi (Kilatini, Ubelgiji) -zh-Hans-fonipa; Kichina (Rahisi, FONIPA) +zh-Hans-fonipa; Kichina (Rahisi, fonipa) @locale=sw @@ -2709,7 +2710,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiflemi nl-Latn-BE; Kiflemi (Kilatini) -zh-Hans-fonipa; Kichina [Kilichorahisishwa] (FONIPA) +zh-Hans-fonipa; Kichina [Kilichorahisishwa] (fonipa) @locale=ta @@ -2722,7 +2723,7 @@ es-Cyrl-MX; ஸ்பானிஷ் (சிரிலிக், மெக்ச hi-Latn; இந்தி (லத்தின்) nl-BE; டச்சு (பெல்ஜியம்) nl-Latn-BE; டச்சு (லத்தின், பெல்ஜியம்) -zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, FONIPA) +zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, fonipa) @locale=ta @@ -2735,7 +2736,7 @@ es-Cyrl-MX; மெக்ஸிகன் ஸ்பானிஷ் (சிரி hi-Latn; இந்தி (லத்தின்) nl-BE; ஃப்லெமிஷ் nl-Latn-BE; ஃப்லெமிஷ் (லத்தின்) -zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (FONIPA) +zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (fonipa) @locale=te @@ -2748,7 +2749,7 @@ es-Cyrl-MX; స్పానిష్ (సిరిలిక్, మెక్స hi-Latn; హిందీ (లాటిన్) nl-BE; డచ్ (బెల్జియం) nl-Latn-BE; డచ్ (లాటిన్, బెల్జియం) -zh-Hans-fonipa; చైనీస్ (సరళీకృతం, FONIPA) +zh-Hans-fonipa; చైనీస్ (సరళీకృతం, fonipa) @locale=te @@ -2761,7 +2762,7 @@ es-Cyrl-MX; మెక్సికన్ స్పానిష్ (సిరి hi-Latn; హిందీ (లాటిన్) nl-BE; ఫ్లెమిష్ nl-Latn-BE; ఫ్లెమిష్ (లాటిన్) -zh-Hans-fonipa; సరళీకృత చైనీస్ (FONIPA) +zh-Hans-fonipa; సరళీకృత చైనీస్ (fonipa) @locale=th @@ -2800,7 +2801,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ዳች (ቤልጅዩም) nl-Latn-BE; ዳች (ላቲን፣ ቤልጅዩም) -zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ fonipa) @locale=ti @@ -2813,7 +2814,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ፍላሚሽ nl-Latn-BE; ፍላሚሽ (ላቲን) -zh-Hans-fonipa; ቀሊል ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀሊል ቻይንኛ (fonipa) @locale=tk @@ -2826,7 +2827,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; niderland dili (Belgiýa) nl-Latn-BE; niderland dili (Latyn elipbiýi, Belgiýa) -zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, FONIPA) +zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, fonipa) @locale=tk @@ -2839,7 +2840,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; flamand dili nl-Latn-BE; flamand dili (Latyn elipbiýi) -zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (FONIPA) +zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (fonipa) @locale=tr @@ -2904,7 +2905,7 @@ es-Cyrl-MX; ہسپانوی (سیریلک،میکسیکو) hi-Latn; ہندی (لاطینی) nl-BE; ڈچ (بیلجیم) nl-Latn-BE; ڈچ (لاطینی،بیلجیم) -zh-Hans-fonipa; چینی (آسان،FONIPA) +zh-Hans-fonipa; چینی (آسان،fonipa) @locale=ur @@ -2917,7 +2918,7 @@ es-Cyrl-MX; میکسیکن ہسپانوی (سیریلک) hi-Latn; ہندی (لاطینی) nl-BE; فلیمِش nl-Latn-BE; فلیمِش (لاطینی) -zh-Hans-fonipa; چینی [آسان کردہ] (FONIPA) +zh-Hans-fonipa; چینی [آسان کردہ] (fonipa) @locale=uz @@ -2930,7 +2931,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz @@ -2943,7 +2944,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=uz_Latn @@ -2956,7 +2957,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz_Latn @@ -2969,7 +2970,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=vi @@ -3008,7 +3009,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì (èdè ilẹ̀ Rọ́ṣíà, Mesiko) hi-Latn; Èdè Híńdì (Èdè Látìn) nl-BE; Èdè Dọ́ọ̀ṣì (Bégíọ́mù) nl-Latn-BE; Èdè Dọ́ọ̀ṣì (Èdè Látìn, Bégíọ́mù) -zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., FONIPA) +zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., fonipa) @locale=yo @@ -3021,7 +3022,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì [orílẹ̀-èdè Mẹ́síkò] (èdè ilẹ hi-Latn; Èdè Híndì [Látìnì] nl-BE; Èdè Flemiṣi nl-Latn-BE; Èdè Flemiṣi (Èdè Látìn) -zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (FONIPA) +zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (fonipa) @locale=yue diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java index b0cd3e47d934..cf6e2ee420ff 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java @@ -5168,9 +5168,9 @@ public void TestFlexibleDayPeriod() { // For ICU 57 output of "midnight" is temporarily suppressed. // assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBB | 12:00:00", "12:00:00 noon", sdf.format(k120000)); assertEquals("hh:mm:ss BBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5178,27 +5178,27 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBB"); // assertEquals("hh:mm BBB | 00:00:00", "12:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBB | 00:00:30", "12:00 midnight", sdf.format(k000030)); - assertEquals("hh:mm BBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBB"); // assertEquals("hh BBB | 00:00:00", "12 midnight", sdf.format(k000000)); - assertEquals("hh BBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBB | 00:00:30", "12 midnight", sdf.format(k000030)); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBB | 00:30:00", "12 midnight", sdf.format(k003000)); - assertEquals("hh BBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBB | 00:30:00", "12 in the morning", sdf.format(k003000)); // Wide sdf.applyPattern("hh:mm:ss BBBB"); // assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBBB | 12:00:00", "12:00:00 noon", sdf.format(k120000)); assertEquals("hh:mm:ss BBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5206,27 +5206,27 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBBB"); // assertEquals("hh:mm BBBB | 00:00:00", "12:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm BBBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBBB | 00:00:30", "12:00 midnight", sdf.format(k000030)); - assertEquals("hh:mm BBBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBBB"); // assertEquals("hh BBBB | 00:00:00", "12 midnight", sdf.format(k000000)); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBBB | 00:00:30", "12 midnight", sdf.format(k000030)); - assertEquals("hh BBBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBBB | 00:30:00", "12 midnight", sdf.format(k003000)); - assertEquals("hh BBBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBBB | 00:30:00", "12 in the morning", sdf.format(k003000)); // Narrow sdf.applyPattern("hh:mm:ss BBBBB"); // assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 mi", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBBBB | 12:00:00", "12:00:00 n", sdf.format(k120000)); assertEquals("hh:mm:ss BBBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5234,19 +5234,19 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBBBB"); // assertEquals("hh:mm BBBBB | 00:00:00", "12:00 mi", sdf.format(k000000)); - assertEquals("hh:mm BBBBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBBBB | 00:00:30", "12:00 mi", sdf.format(k000030)); - assertEquals("hh:mm BBBBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBBBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBBBB"); // assertEquals("hh BBBBB | 00:00:00", "12 mi", sdf.format(k000000)); - assertEquals("hh BBBBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBBBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBBBB | 00:00:30", "12 mi", sdf.format(k000030)); - assertEquals("hh BBBBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBBBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBBBB | 00:30:00", "12 mi", sdf.format(k003000)); - assertEquals("hh BBBBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBBBB | 00:30:00", "12 in the morning", sdf.format(k003000)); } @Test @@ -5305,8 +5305,8 @@ public void TestDayPeriodWithLocales() { sdf.applyPattern("hh:mm:ss BBBB"); // assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 at night", sdf.format(k010000)); + assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 in the morning", sdf.format(k010000)); assertEquals("hh:mm:ss BBBB | 12:00:00 | en_US", "12:00:00 noon", sdf.format(k120000)); // Locale es_CO should not fall back to es and should have a @@ -5330,7 +5330,7 @@ public void TestDayPeriodWithLocales() { sdf.setTimeZone(TimeZone.GMT_ZONE); sdf.applyPattern("hh:mm:ss BBBB"); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 at night", sdf.format(k010000)); + assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 in the morning", sdf.format(k010000)); } @Test @@ -5357,7 +5357,7 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("hh:mm 'ss' BBBB"); // assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss midnight", sdf.format(k000030)); - assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss at night", sdf.format(k000030)); + assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss in the morning", sdf.format(k000030)); assertEquals("hh:mm 'ss' BBBB | 06:00:30", "06:00 ss in the morning", sdf.format(k060030)); // Minutes field is not present. @@ -5370,7 +5370,7 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("hh 'mm ss' BBBB"); // assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss midnight", sdf.format(k003000)); - assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss at night", sdf.format(k003000)); + assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss in the morning", sdf.format(k003000)); assertEquals("hh 'mm ss' BBBB | 06:30:00", "06 mm ss in the morning", sdf.format(k063000)); // Minutes and seconds fields appear after day periods. @@ -5384,21 +5384,21 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("BBBB hh:mm:ss"); // assertEquals("BBBB hh:mm:ss | 00:00:00", "midnight 12:00:00", sdf.format(k000000)); - assertEquals("BBBB hh:mm:ss | 00:00:00", "at night 12:00:00", sdf.format(k000000)); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", sdf.format(k000030)); - assertEquals("BBBB hh:mm:ss | 00:30:00", "at night 12:30:00", sdf.format(k003000)); + assertEquals("BBBB hh:mm:ss | 00:00:00", "in the morning 12:00:00", sdf.format(k000000)); + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030)); + assertEquals("BBBB hh:mm:ss | 00:30:00", "in the morning 12:30:00", sdf.format(k003000)); // Confirm applyPattern() reparses the pattern string. sdf.applyPattern("BBBB hh"); // assertEquals("BBBB hh | 00:00:30", "midnight 12", sdf.format(k000030)); - assertEquals("BBBB hh | 00:00:30", "at night 12", sdf.format(k000030)); + assertEquals("BBBB hh | 00:00:30", "in the morning 12", sdf.format(k000030)); sdf.applyPattern("BBBB hh:mm:'ss'"); // assertEquals("BBBB hh:mm:'ss' | 00:00:30", "midnight 12:00:ss", sdf.format(k000030)); - assertEquals("BBBB hh:mm:'ss' | 00:00:30", "at night 12:00:ss", sdf.format(k000030)); + assertEquals("BBBB hh:mm:'ss' | 00:00:30", "in the morning 12:00:ss", sdf.format(k000030)); sdf.applyPattern("BBBB hh:mm:ss"); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", sdf.format(k000030)); + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030)); } @Test @@ -5418,6 +5418,7 @@ public void TestDayPeriodParsing() throws ParseException { Date k193000 = new Date(1447443000000L); Date k200000 = new Date(1447444800000L); Date k210000 = new Date(1447448400000L); + Date k223000 = new Date(1447453800000L); SimpleDateFormat sdf = new SimpleDateFormat(""); sdf.setTimeZone(TimeZone.GMT_ZONE); @@ -5429,13 +5430,13 @@ public void TestDayPeriodParsing() throws ParseException { assertEquals("yyyy-MM-dd B | 2015-11-13 noon", k120000, sdf.parse("2015-11-13 noon")); assertEquals("yyyy-MM-dd B | 2015-11-13 in the afternoon", k150000, sdf.parse("2015-11-13 in the afternoon")); assertEquals("yyyy-MM-dd B | 2015-11-13 in the evening", k193000, sdf.parse("2015-11-13 in the evening")); - assertEquals("yyyy-MM-dd B | 2015-11-13 at night", k013000, sdf.parse("2015-11-13 at night")); + assertEquals("yyyy-MM-dd B | 2015-11-13 at night", k223000, sdf.parse("2015-11-13 at night")); // If time and day period are consistent with each other then time is parsed accordingly. sdf.applyPattern("yyyy-MM-dd hh:mm B"); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 midnight", k000000, sdf.parse("2015-11-13 12:00 midnight")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse("2015-11-13 12:00 noon")); - assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 at night", k010000, sdf.parse("2015-11-13 01:00 at night")); + assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the morning", k010000, sdf.parse("2015-11-13 01:00 in the morning")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse("2015-11-13 01:00 in the afternoon")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 in the morning", k090000, sdf.parse("2015-11-13 09:00 in the morning")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 at night", k210000, sdf.parse("2015-11-13 09:00 at night")); @@ -5471,7 +5472,7 @@ public void TestDayPeriodParsing() throws ParseException { sdf.applyPattern("yyyy-MM-dd HH:mm B"); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 midnight", k000000, sdf.parse("2015-11-13 12:00 midnight")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse("2015-11-13 12:00 noon")); - assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 at night", k010000, sdf.parse("2015-11-13 01:00 at night")); + assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the morning", k010000, sdf.parse("2015-11-13 01:00 in the morning")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse("2015-11-13 01:00 in the afternoon")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 in the morning", k090000, sdf.parse("2015-11-13 09:00 in the morning")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 at night", k210000, sdf.parse("2015-11-13 09:00 at night")); diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java index 91b1e3174606..f673b8bad6f0 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java @@ -1824,8 +1824,8 @@ public void TestMinimize() { {"en_Cyrl-RU", "en-Cyrl-RU", "en-Cyrl-RU"}, {"en_Latn-RU", "en-RU", "en-RU"}, {"sr_Cyrl-US", "sr-US", "sr-US"}, - {"sr_Cyrl-RU", "sr-Cyrl-RU", "sr-Cyrl-RU"}, - {"sr_Latn-RU", "sr-RU", "sr-RU"}, + {"sr_Cyrl-RU", "sr-RU", "sr-RU"}, + {"sr_Latn-RU", "sr_Latn-RU", "sr_Latn-RU"}, }; for (String[] test : data) { ULocale source = new ULocale(test[0]); diff --git a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java index 1a0ad786498b..106916f8e2e7 100644 --- a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java +++ b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java @@ -794,7 +794,7 @@ public void TestHourMetacharacters() { "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hbbbbb", "10\\u202Fa\\u2009\\u2013\\u200912\\u202Fn", "en", "CE 2010 09 27 13:00:00", "CE 2010 09 27 14:00:00", "hb", "1\\u2009\\u2013\\u20092\\u202FPM", "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "10 in the morning\\u2009\\u2013\\u20091 in the afternoon", - "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 at night", + "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 in the morning", // J "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10\\u2009\\u2013\\u20091", diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt index 4b9d59049bbe..f9f149d3cc87 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt @@ -235,16 +235,19 @@ en-CK ; en-Latn-CK ; en-CK ; en-CM ; en-Latn-CM ; en-CM ; en-CX ; en-Latn-CX ; en-CX ; en-CY ; en-Latn-CY ; en-CY ; +en-CZ ; en-Latn-CZ ; en-CZ ; en-DE ; en-Latn-DE ; en-DE ; en-DG ; en-Latn-DG ; en-DG ; en-DK ; en-Latn-DK ; en-DK ; en-DM ; en-Latn-DM ; en-DM ; en-ER ; en-Latn-ER ; en-ER ; +en-ES ; en-Latn-ES ; en-ES ; en-Egyp ; en-Egyp-US ; en-Egyp ; en-FI ; en-Latn-FI ; en-FI ; en-FJ ; en-Latn-FJ ; en-FJ ; en-FK ; en-Latn-FK ; en-FK ; en-FM ; en-Latn-FM ; en-FM ; +en-FR ; en-Latn-FR ; en-FR ; en-GB ; en-Latn-GB ; en-GB ; en-GD ; en-Latn-GD ; en-GD ; en-GG ; en-Latn-GG ; en-GG ; @@ -255,12 +258,14 @@ en-GS ; en-Latn-GS ; en-GS ; en-GU ; en-Latn-GU ; en-GU ; en-GY ; en-Latn-GY ; en-GY ; en-HK ; en-Latn-HK ; en-HK ; +en-HU ; en-Latn-HU ; en-HU ; en-ID ; en-Latn-ID ; en-ID ; en-IE ; en-Latn-IE ; en-IE ; en-IL ; en-Latn-IL ; en-IL ; en-IM ; en-Latn-IM ; en-IM ; en-IN ; en-Latn-IN ; en-IN ; en-IO ; en-Latn-IO ; en-IO ; +en-IT ; en-Latn-IT ; en-IT ; en-JE ; en-Latn-JE ; en-JE ; en-JM ; en-Latn-JM ; en-JM ; en-KE ; en-Latn-KE ; en-KE ; @@ -285,15 +290,19 @@ en-NA ; en-Latn-NA ; en-NA ; en-NF ; en-Latn-NF ; en-NF ; en-NG ; en-Latn-NG ; en-NG ; en-NL ; en-Latn-NL ; en-NL ; +en-NO ; en-Latn-NO ; en-NO ; en-NR ; en-Latn-NR ; en-NR ; en-NU ; en-Latn-NU ; en-NU ; en-NZ ; en-Latn-NZ ; en-NZ ; en-PG ; en-Latn-PG ; en-PG ; en-PH ; en-Latn-PH ; en-PH ; en-PK ; en-Latn-PK ; en-PK ; +en-PL ; en-Latn-PL ; en-PL ; en-PN ; en-Latn-PN ; en-PN ; en-PR ; en-Latn-PR ; en-PR ; +en-PT ; en-Latn-PT ; en-PT ; en-PW ; en-Latn-PW ; en-PW ; +en-RO ; en-Latn-RO ; en-RO ; en-RW ; en-Latn-RW ; en-RW ; en-SB ; en-Latn-SB ; en-SB ; en-SC ; en-Latn-SC ; en-SC ; @@ -302,6 +311,7 @@ en-SE ; en-Latn-SE ; en-SE ; en-SG ; en-Latn-SG ; en-SG ; en-SH ; en-Latn-SH ; en-SH ; en-SI ; en-Latn-SI ; en-SI ; +en-SK ; en-Latn-SK ; en-SK ; en-SL ; en-Latn-SL ; en-SL ; en-SS ; en-Latn-SS ; en-SS ; en-SX ; en-Latn-SX ; en-SX ; @@ -802,11 +812,6 @@ pl-AQ ; pl-Latn-AQ ; pl-AQ ; pl-Egyp ; pl-Egyp-PL ; pl-Egyp ; pl-Latn ; pl-Latn-PL ; pl ; pl-PL ; pl-Latn-PL ; pl ; -prg ; prg-Latn-PL ; prg ; -prg-AQ ; prg-Latn-AQ ; prg-AQ ; -prg-Egyp ; prg-Egyp-PL ; prg-Egyp ; -prg-Latn ; prg-Latn-PL ; prg ; -prg-PL ; prg-Latn-PL ; prg ; ps ; ps-Arab-AF ; ps ; ps-AF ; ps-Arab-AF ; ps ; ps-AQ ; ps-Arab-AQ ; ps-AQ ; @@ -1575,9 +1580,9 @@ und-NP ; ne-Deva-NP ; ne ; und-NR ; en-Latn-NR ; en-NR ; und-NU ; en-Latn-NU ; en-NU ; und-NZ ; en-Latn-NZ ; en-NZ ; -und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; und-Nkoo-AQ ; man-Nkoo-AQ ; ; -und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; und-OM ; ar-Arab-OM ; ar-OM ; und-Olck ; sat-Olck-IN ; sat ; und-Olck-AQ ; sat-Olck-AQ ; sat-AQ ; diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt index 30fc66445aa1..18ae4443dbff 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale identifier canonicalization # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt index 0f919bd35074..54563a0f2663 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale display name generation # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html @@ -356,7 +357,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Nederlands (België) nl-Latn-BE; Nederlands (Latyn, België) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=af @@ -369,7 +370,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Vlaams nl-Latn-BE; Vlaams (Latyn) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=am @@ -382,7 +383,7 @@ es-Cyrl-MX; ስፓኒሽ (ሲይሪልክ፣ ሜክሲኮ) hi-Latn; ሕንድኛ (ላቲን) nl-BE; ደች (ቤልጄም) nl-Latn-BE; ደች (ላቲን፣ ቤልጄም) -zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ fonipa) @locale=am @@ -395,7 +396,7 @@ es-Cyrl-MX; የሜክሲኮ ስፓኒሽ (ሲይሪልክ) hi-Latn; ሕንድኛ [ላቲን] nl-BE; ፍሌሚሽ nl-Latn-BE; ፍሌሚሽ (ላቲን) -zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (fonipa) @locale=ar @@ -408,7 +409,7 @@ es-Cyrl-MX; الإسبانية (السيريلية، المكسيك) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية (المبسطة، FONIPA) +zh-Hans-fonipa; الصينية (المبسطة، fonipa) @locale=ar @@ -421,7 +422,7 @@ es-Cyrl-MX; الإسبانية المكسيكية (السيريلية) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية المبسطة (FONIPA) +zh-Hans-fonipa; الصينية المبسطة (fonipa) @locale=as @@ -434,7 +435,7 @@ es-Cyrl-MX; স্পেনিচ (চিৰিলিক, মেক্সিক hi-Latn; হিন্দী (লেটিন) nl-BE; ডাচ (বেলজিয়াম) nl-Latn-BE; ডাচ (লেটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সৰলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সৰলীকৃত, fonipa) @locale=as @@ -447,7 +448,7 @@ es-Cyrl-MX; মেক্সিকান স্পেনিচ (চিৰিল hi-Latn; হিন্দী (লেটিন) nl-BE; ফ্লেমিচ nl-Latn-BE; ফ্লেমিচ (লেটিন) -zh-Hans-fonipa; সৰলীকৃত চীনা (FONIPA) +zh-Hans-fonipa; সৰলীকৃত চীনা (fonipa) @locale=az @@ -460,7 +461,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az @@ -473,7 +474,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=az_Latn @@ -486,7 +487,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az_Latn @@ -499,7 +500,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=be @@ -512,7 +513,7 @@ es-Cyrl-MX; іспанская (кірыліца, Мексіка) hi-Latn; хіндзі (лацініца) nl-BE; нідэрландская (Бельгія) nl-Latn-BE; нідэрландская (лацініца, Бельгія) -zh-Hans-fonipa; кітайская (спрошчанае кітайскае, FONIPA) +zh-Hans-fonipa; кітайская (спрошчанае кітайскае, fonipa) @locale=be @@ -525,7 +526,7 @@ es-Cyrl-MX; мексіканская іспанская (кірыліца) hi-Latn; хіндзі (лацініца) nl-BE; фламандская nl-Latn-BE; фламандская (лацініца) -zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (FONIPA) +zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (fonipa) @locale=bg @@ -564,7 +565,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ওলন্দাজ (বেলজিয়াম) nl-Latn-BE; ওলন্দাজ (ল্যাটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bn @@ -577,7 +578,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ফ্লেমিশ nl-Latn-BE; ফ্লেমিশ (ল্যাটিন) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bs @@ -668,7 +669,7 @@ es-Cyrl-MX; ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ, ᎠᏂᏍᏆᏂ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏛᏥ (ᏇᎵᏥᎥᎻ) nl-Latn-BE; ᏛᏥ (ᎳᏘᏂ, ᏇᎵᏥᎥᎻ) -zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, FONIPA) +zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, fonipa) @locale=chr @@ -681,7 +682,7 @@ es-Cyrl-MX; ᏍᏆᏂᏱ ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏊᎵᏥᎥᎻ ᏛᏥ nl-Latn-BE; ᏊᎵᏥᎥᎻ ᏛᏥ (ᎳᏘᏂ) -zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (FONIPA) +zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (fonipa) @locale=cs @@ -694,7 +695,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; nizozemština (Belgie) nl-Latn-BE; nizozemština (latinka, Belgie) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=cs @@ -707,7 +708,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; vlámština nl-Latn-BE; vlámština (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=cy @@ -798,7 +799,7 @@ es-Cyrl-MX; špańšćina (kyriliski, Mexiko) hi-Latn; hindišćina (łatyński) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łatyński, Belgiska) -zh-Hans-fonipa; chinšćina (zjadnorjone, FONIPA) +zh-Hans-fonipa; chinšćina (zjadnorjone, fonipa) @locale=dsb @@ -811,7 +812,7 @@ es-Cyrl-MX; mexikańska špańšćina (kyriliski) hi-Latn; hindišćina (łatyński) nl-BE; flamšćina nl-Latn-BE; flamšćina (łatyński) -zh-Hans-fonipa; chinšćina [zjadnorjona] (FONIPA) +zh-Hans-fonipa; chinšćina [zjadnorjona] (fonipa) @locale=el @@ -1006,7 +1007,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chinese (Pinasimple, FONIPA) +zh-Hans-fonipa; Chinese (Pinasimple, fonipa) @locale=fil @@ -1019,7 +1020,7 @@ es-Cyrl-MX; Mexican na Espanyol (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Pinasimpleng Chinese (FONIPA) +zh-Hans-fonipa; Pinasimpleng Chinese (fonipa) @locale=fr @@ -1110,7 +1111,7 @@ es-Cyrl-MX; español (cirílico, México) hi-Latn; hindi (latino) nl-BE; neerlandés (Bélxica) nl-Latn-BE; neerlandés (latino, Bélxica) -zh-Hans-fonipa; chinés (simplificado, FONIPA) +zh-Hans-fonipa; chinés (simplificado, fonipa) @locale=gl @@ -1123,7 +1124,7 @@ es-Cyrl-MX; español de México (cirílico) hi-Latn; hindi [alfabeto latino] nl-BE; flamengo nl-Latn-BE; flamengo (latino) -zh-Hans-fonipa; chinés simplificado (FONIPA) +zh-Hans-fonipa; chinés simplificado (fonipa) @locale=gu @@ -1136,7 +1137,7 @@ es-Cyrl-MX; સ્પેનિશ (સિરિલિક, મેક્સિક hi-Latn; હિન્દી (લેટિન) nl-BE; ડચ (બેલ્જીયમ) nl-Latn-BE; ડચ (લેટિન, બેલ્જીયમ) -zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, FONIPA) +zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, fonipa) @locale=gu @@ -1149,7 +1150,7 @@ es-Cyrl-MX; મેક્સિકન સ્પેનિશ (સિરિલિ hi-Latn; હિન્દી (લેટિન) nl-BE; ફ્લેમિશ nl-Latn-BE; ફ્લેમિશ (લેટિન) -zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (FONIPA) +zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (fonipa) @locale=ha @@ -1162,7 +1163,7 @@ es-Cyrl-MX; Sifaniyanci (Cyrillic, Mesiko) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, FONIPA) +zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, fonipa) @locale=ha @@ -1175,7 +1176,7 @@ es-Cyrl-MX; Sifaniyanci Mesiko (Cyrillic) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (FONIPA) +zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (fonipa) @locale=he @@ -1214,7 +1215,7 @@ es-Cyrl-MX; स्पेनिश (सिरिलिक, मैक्सिक hi-Latn; हिन्दी (लैटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लैटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=hi @@ -1227,7 +1228,7 @@ es-Cyrl-MX; मैक्सिकन स्पेनिश (सिरिलि hi-Latn; हिन्दी (लैटिन) nl-BE; फ़्लेमिश nl-Latn-BE; फ़्लेमिश (लैटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=hi_Latn @@ -1292,7 +1293,7 @@ es-Cyrl-MX; španišćina (kyrilisce, Mexiko) hi-Latn; hindišćina (łaćonsce) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łaćonsce, Belgiska) -zh-Hans-fonipa; chinšćina (zjednorjene, FONIPA) +zh-Hans-fonipa; chinšćina (zjednorjene, fonipa) @locale=hsb @@ -1305,7 +1306,7 @@ es-Cyrl-MX; mexiska španišćina (kyrilisce) hi-Latn; hindišćina (łaćonsce) nl-BE; flamšćina nl-Latn-BE; flamšćina (łaćonsce) -zh-Hans-fonipa; chinšćina [zjednorjena] (FONIPA) +zh-Hans-fonipa; chinšćina [zjednorjena] (fonipa) @locale=ht @@ -1370,7 +1371,7 @@ es-Cyrl-MX; իսպաներեն (կյուրեղագիր, Մեքսիկա) hi-Latn; հինդի (լատինական) nl-BE; հոլանդերեն (Բելգիա) nl-Latn-BE; հոլանդերեն (լատինական, Բելգիա) -zh-Hans-fonipa; չինարեն (պարզեցված, FONIPA) +zh-Hans-fonipa; չինարեն (պարզեցված, fonipa) @locale=hy @@ -1383,7 +1384,7 @@ es-Cyrl-MX; մեքսիկական իսպաներեն (կյուրեղագիր) hi-Latn; հինդի [լատինատառ] nl-BE; ֆլամանդերեն nl-Latn-BE; ֆլամանդերեն (լատինական) -zh-Hans-fonipa; պարզեցված չինարեն (FONIPA) +zh-Hans-fonipa; պարզեցված չինարեն (fonipa) @locale=id @@ -1422,7 +1423,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chaịniiz (Nke dị mfe, FONIPA) +zh-Hans-fonipa; Chaịniiz (Nke dị mfe, fonipa) @locale=ig @@ -1435,7 +1436,7 @@ es-Cyrl-MX; Spanish ndị Mexico (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (FONIPA) +zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (fonipa) @locale=is @@ -1448,7 +1449,7 @@ es-Cyrl-MX; spænska (kyrillískt, Mexíkó) hi-Latn; hindí (latneskt) nl-BE; hollenska (Belgía) nl-Latn-BE; hollenska (latneskt, Belgía) -zh-Hans-fonipa; kínverska (einfaldað, FONIPA) +zh-Hans-fonipa; kínverska (einfaldað, fonipa) @locale=is @@ -1461,7 +1462,7 @@ es-Cyrl-MX; mexíkósk spænska (kyrillískt) hi-Latn; hindí (latneskt) nl-BE; flæmska nl-Latn-BE; flæmska (latneskt) -zh-Hans-fonipa; kínverska [einfölduð] (FONIPA) +zh-Hans-fonipa; kínverska [einfölduð] (fonipa) @locale=it @@ -1526,7 +1527,7 @@ es-Cyrl-MX; Spanyol (Sirilik, Mèksiko) hi-Latn; India (Latin) nl-BE; Walanda (Bèlgi) nl-Latn-BE; Walanda (Latin, Bèlgi) -zh-Hans-fonipa; Tyonghwa (Prasaja, FONIPA) +zh-Hans-fonipa; Tyonghwa (Prasaja, fonipa) @locale=jv @@ -1539,7 +1540,7 @@ es-Cyrl-MX; Spanyol [Meksiko] (Sirilik) hi-Latn; India (Latin) nl-BE; Flemis nl-Latn-BE; Flemis (Latin) -zh-Hans-fonipa; Tyonghwa [Ringkes] (FONIPA) +zh-Hans-fonipa; Tyonghwa [Ringkes] (fonipa) @locale=ka @@ -1552,7 +1553,7 @@ es-Cyrl-MX; ესპანური (კირილიცა, მექსი hi-Latn; ჰინდი (ლათინური) nl-BE; ნიდერლანდური (ბელგია) nl-Latn-BE; ნიდერლანდური (ლათინური, ბელგია) -zh-Hans-fonipa; ჩინური (გამარტივებული, FONIPA) +zh-Hans-fonipa; ჩინური (გამარტივებული, fonipa) @locale=ka @@ -1565,7 +1566,7 @@ es-Cyrl-MX; მექსიკური ესპანური (კირი hi-Latn; ჰინდი (ლათინური) nl-BE; ფლამანდიური nl-Latn-BE; ფლამანდიური (ლათინური) -zh-Hans-fonipa; გამარტივებული ჩინური (FONIPA) +zh-Hans-fonipa; გამარტივებული ჩინური (fonipa) @locale=kk @@ -1630,7 +1631,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ហូឡង់ (បែលហ្ស៊ិក) nl-Latn-BE; ហូឡង់ (ឡាតាំង, បែលហ្ស៊ិក) -zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, FONIPA) +zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, fonipa) @locale=km @@ -1643,7 +1644,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ផ្លាមីស nl-Latn-BE; ផ្លាមីស (ឡាតាំង) -zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (FONIPA) +zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (fonipa) @locale=kn @@ -1656,7 +1657,7 @@ es-Cyrl-MX; ಸ್ಪ್ಯಾನಿಷ್ (ಸಿರಿಲಿಕ್, ಮೆಕ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಡಚ್ (ಬೆಲ್ಜಿಯಮ್) nl-Latn-BE; ಡಚ್ (ಲ್ಯಾಟಿನ್, ಬೆಲ್ಜಿಯಮ್) -zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, FONIPA) +zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, fonipa) @locale=kn @@ -1669,7 +1670,7 @@ es-Cyrl-MX; ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ (ಸಿ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಫ್ಲೆಮಿಷ್ nl-Latn-BE; ಫ್ಲೆಮಿಷ್ (ಲ್ಯಾಟಿನ್) -zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (FONIPA) +zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (fonipa) @locale=ko @@ -1682,7 +1683,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 네덜란드어(벨기에) nl-Latn-BE; 네덜란드어(로마자, 벨기에) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=ko @@ -1695,7 +1696,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 플라망어 nl-Latn-BE; 플라망어(로마자) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=kok @@ -1708,7 +1709,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok @@ -1721,7 +1722,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=kok_Deva @@ -1734,7 +1735,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok_Deva @@ -1747,7 +1748,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=ky @@ -1760,7 +1761,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; голландча (Бельгия) nl-Latn-BE; голландча (Латын, Бельгия) -zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, FONIPA) +zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, fonipa) @locale=ky @@ -1773,7 +1774,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; фламандча nl-Latn-BE; фламандча (Латын) -zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (FONIPA) +zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (fonipa) @locale=lo @@ -1864,7 +1865,7 @@ es-Cyrl-MX; шпански (кирилско писмо, Мексико) hi-Latn; хинди (латинично писмо) nl-BE; холандски (Белгија) nl-Latn-BE; холандски (латинично писмо, Белгија) -zh-Hans-fonipa; кинески (поедноставено, FONIPA) +zh-Hans-fonipa; кинески (поедноставено, fonipa) @locale=mk @@ -1877,7 +1878,7 @@ es-Cyrl-MX; мексикански шпански (кирилско писмо) hi-Latn; хинди (латинично писмо) nl-BE; фламански nl-Latn-BE; фламански (латинично писмо) -zh-Hans-fonipa; поедноставен кинески (FONIPA) +zh-Hans-fonipa; поедноставен кинески (fonipa) @locale=ml @@ -1916,7 +1917,7 @@ es-Cyrl-MX; испани (кирилл, Мексик) hi-Latn; хинди (латин) nl-BE; нидерланд (Бельги) nl-Latn-BE; нидерланд (латин, Бельги) -zh-Hans-fonipa; хятад (хялбаршуулсан, FONIPA) +zh-Hans-fonipa; хятад (хялбаршуулсан, fonipa) @locale=mn @@ -1929,7 +1930,7 @@ es-Cyrl-MX; испани хэл [Мексик] (кирилл) hi-Latn; хинди (латин) nl-BE; фламанд nl-Latn-BE; фламанд (латин) -zh-Hans-fonipa; хялбаршуулсан хятад (FONIPA) +zh-Hans-fonipa; хялбаршуулсан хятад (fonipa) @locale=mr @@ -1942,7 +1943,7 @@ es-Cyrl-MX; स्पॅनिश (सीरिलिक, मेक्सिक hi-Latn; हिंदी (लॅटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=mr @@ -1955,7 +1956,7 @@ es-Cyrl-MX; मेक्सिकन स्पॅनिश (सीरिलि hi-Latn; हिंदी (लॅटिन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=ms @@ -2046,7 +2047,7 @@ es-Cyrl-MX; स्पेनी (सिरिलिक, मेक्सिको) hi-Latn; हिन्दी (ल्याटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (ल्याटिन, बेल्जियम) -zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, FONIPA) +zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, fonipa) @locale=ne @@ -2059,7 +2060,7 @@ es-Cyrl-MX; मेक्सिकन स्पेनी (सिरिलिक) hi-Latn; हिन्दी (ल्याटिन) nl-BE; फ्लेमिस nl-Latn-BE; फ्लेमिस (ल्याटिन) -zh-Hans-fonipa; सरलिकृत चिनियाँ (FONIPA) +zh-Hans-fonipa; सरलिकृत चिनियाँ (fonipa) @locale=nl @@ -2150,7 +2151,7 @@ es-Cyrl-MX; ସ୍ପାନିସ୍‌ (ସିରିଲିକ୍, ମେକ୍ hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଡଚ୍ (ବେଲଜିୟମ୍) nl-Latn-BE; ଡଚ୍ (ଲାଟିନ୍, ବେଲଜିୟମ୍) -zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, FONIPA) +zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, fonipa) @locale=or @@ -2163,7 +2164,7 @@ es-Cyrl-MX; ମେକ୍ସିକାନ ସ୍ପାନିସ୍‌ (ସିର hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଫ୍ଲେମିଶ୍ nl-Latn-BE; ଫ୍ଲେମିଶ୍ (ଲାଟିନ୍) -zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (FONIPA) +zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (fonipa) @locale=pa @@ -2176,7 +2177,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa @@ -2189,7 +2190,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2202,7 +2203,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2215,7 +2216,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pcm @@ -2228,7 +2229,7 @@ es-Cyrl-MX; Spánish Lángwej (Sírílik, Mẹ́ksíko) hi-Latn; Híndi Lángwej (Látin) nl-BE; Dọch Lángwej (Bẹ́ljọm) nl-Latn-BE; Dọch Lángwej (Látin, Bẹ́ljọm) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pcm @@ -2241,7 +2242,7 @@ es-Cyrl-MX; Mẹ́ksiko Spánish (Sírílik) hi-Latn; Híndi [Látin] nl-BE; Flẹ́mish Lángwej nl-Latn-BE; Flẹ́mish Lángwej (Látin) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pl @@ -2280,7 +2281,7 @@ es-Cyrl-MX; هسپانوي (سیریلیک, میکسیکو) hi-Latn; هندي (لاتين/لاتيني) nl-BE; هالېنډي (بیلجیم) nl-Latn-BE; هالېنډي (لاتين/لاتيني, بیلجیم) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=ps @@ -2293,7 +2294,7 @@ es-Cyrl-MX; ميکسيکي هسپانوي (سیریلیک) hi-Latn; هندي [لاتيني] nl-BE; فلېمېشي nl-Latn-BE; فلېمېشي (لاتين/لاتيني) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=pt @@ -2358,7 +2359,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=root @@ -2371,7 +2372,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=ru @@ -2410,7 +2411,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd @@ -2423,7 +2424,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2436,7 +2437,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2449,7 +2450,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=si @@ -2462,7 +2463,7 @@ es-Cyrl-MX; ස්පාඤ්ඤ (සිරිලික්, මෙක්සි hi-Latn; හින්දි (ලතින්) nl-BE; ලන්දේසි (බෙල්ජියම) nl-Latn-BE; ලන්දේසි (ලතින්, බෙල්ජියම) -zh-Hans-fonipa; චීන (සුළුකළ, FONIPA) +zh-Hans-fonipa; චීන (සුළුකළ, fonipa) @locale=si @@ -2475,7 +2476,7 @@ es-Cyrl-MX; මෙක්සිකානු ස්පාඤ්ඤ (සිරි hi-Latn; හින්දි (ලතින්) nl-BE; ෆ්ලෙමිශ් nl-Latn-BE; ෆ්ලෙමිශ් (ලතින්) -zh-Hans-fonipa; සරල චීන (FONIPA) +zh-Hans-fonipa; සරල චීන (fonipa) @locale=sk @@ -2488,7 +2489,7 @@ es-Cyrl-MX; španielčina (cyrilika, Mexiko) hi-Latn; hindčina (latinka) nl-BE; holandčina (Belgicko) nl-Latn-BE; holandčina (latinka, Belgicko) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=sk @@ -2501,7 +2502,7 @@ es-Cyrl-MX; španielčina [mexická] (cyrilika) hi-Latn; hindčina (latinka) nl-BE; flámčina nl-Latn-BE; flámčina (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=sl @@ -2540,7 +2541,7 @@ es-Cyrl-MX; Isbaanish (Siriylik, Meksiko) hi-Latn; Hindi (Laatiin) nl-BE; Holandays (Biljam) nl-Latn-BE; Holandays (Laatiin, Biljam) -zh-Hans-fonipa; Shinees (La fududeeyay, FONIPA) +zh-Hans-fonipa; Shinees (La fududeeyay, fonipa) @locale=so @@ -2553,7 +2554,7 @@ es-Cyrl-MX; Isbaanishka Mexico (Siriylik) hi-Latn; Hindi [Latin] nl-BE; Af faleemi nl-Latn-BE; Af faleemi (Laatiin) -zh-Hans-fonipa; Shiinaha Rasmiga ah (FONIPA) +zh-Hans-fonipa; Shiinaha Rasmiga ah (fonipa) @locale=sq @@ -2566,7 +2567,7 @@ es-Cyrl-MX; spanjisht (cirilik, Meksikë) hi-Latn; indisht (latin) nl-BE; holandisht (Belgjikë) nl-Latn-BE; holandisht (latin, Belgjikë) -zh-Hans-fonipa; kinezisht (i thjeshtuar, FONIPA) +zh-Hans-fonipa; kinezisht (i thjeshtuar, fonipa) @locale=sq @@ -2579,7 +2580,7 @@ es-Cyrl-MX; spanjishte meksikane (cirilik) hi-Latn; hindisht [latine] nl-BE; flamandisht nl-Latn-BE; flamandisht (latin) -zh-Hans-fonipa; kinezishte e thjeshtuar (FONIPA) +zh-Hans-fonipa; kinezishte e thjeshtuar (fonipa) @locale=sr @@ -2696,7 +2697,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiholanzi (Ubelgiji) nl-Latn-BE; Kiholanzi (Kilatini, Ubelgiji) -zh-Hans-fonipa; Kichina (Rahisi, FONIPA) +zh-Hans-fonipa; Kichina (Rahisi, fonipa) @locale=sw @@ -2709,7 +2710,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiflemi nl-Latn-BE; Kiflemi (Kilatini) -zh-Hans-fonipa; Kichina [Kilichorahisishwa] (FONIPA) +zh-Hans-fonipa; Kichina [Kilichorahisishwa] (fonipa) @locale=ta @@ -2722,7 +2723,7 @@ es-Cyrl-MX; ஸ்பானிஷ் (சிரிலிக், மெக்ச hi-Latn; இந்தி (லத்தின்) nl-BE; டச்சு (பெல்ஜியம்) nl-Latn-BE; டச்சு (லத்தின், பெல்ஜியம்) -zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, FONIPA) +zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, fonipa) @locale=ta @@ -2735,7 +2736,7 @@ es-Cyrl-MX; மெக்ஸிகன் ஸ்பானிஷ் (சிரி hi-Latn; இந்தி (லத்தின்) nl-BE; ஃப்லெமிஷ் nl-Latn-BE; ஃப்லெமிஷ் (லத்தின்) -zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (FONIPA) +zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (fonipa) @locale=te @@ -2748,7 +2749,7 @@ es-Cyrl-MX; స్పానిష్ (సిరిలిక్, మెక్స hi-Latn; హిందీ (లాటిన్) nl-BE; డచ్ (బెల్జియం) nl-Latn-BE; డచ్ (లాటిన్, బెల్జియం) -zh-Hans-fonipa; చైనీస్ (సరళీకృతం, FONIPA) +zh-Hans-fonipa; చైనీస్ (సరళీకృతం, fonipa) @locale=te @@ -2761,7 +2762,7 @@ es-Cyrl-MX; మెక్సికన్ స్పానిష్ (సిరి hi-Latn; హిందీ (లాటిన్) nl-BE; ఫ్లెమిష్ nl-Latn-BE; ఫ్లెమిష్ (లాటిన్) -zh-Hans-fonipa; సరళీకృత చైనీస్ (FONIPA) +zh-Hans-fonipa; సరళీకృత చైనీస్ (fonipa) @locale=th @@ -2800,7 +2801,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ዳች (ቤልጅዩም) nl-Latn-BE; ዳች (ላቲን፣ ቤልጅዩም) -zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ fonipa) @locale=ti @@ -2813,7 +2814,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ፍላሚሽ nl-Latn-BE; ፍላሚሽ (ላቲን) -zh-Hans-fonipa; ቀሊል ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀሊል ቻይንኛ (fonipa) @locale=tk @@ -2826,7 +2827,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; niderland dili (Belgiýa) nl-Latn-BE; niderland dili (Latyn elipbiýi, Belgiýa) -zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, FONIPA) +zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, fonipa) @locale=tk @@ -2839,7 +2840,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; flamand dili nl-Latn-BE; flamand dili (Latyn elipbiýi) -zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (FONIPA) +zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (fonipa) @locale=tr @@ -2904,7 +2905,7 @@ es-Cyrl-MX; ہسپانوی (سیریلک،میکسیکو) hi-Latn; ہندی (لاطینی) nl-BE; ڈچ (بیلجیم) nl-Latn-BE; ڈچ (لاطینی،بیلجیم) -zh-Hans-fonipa; چینی (آسان،FONIPA) +zh-Hans-fonipa; چینی (آسان،fonipa) @locale=ur @@ -2917,7 +2918,7 @@ es-Cyrl-MX; میکسیکن ہسپانوی (سیریلک) hi-Latn; ہندی (لاطینی) nl-BE; فلیمِش nl-Latn-BE; فلیمِش (لاطینی) -zh-Hans-fonipa; چینی [آسان کردہ] (FONIPA) +zh-Hans-fonipa; چینی [آسان کردہ] (fonipa) @locale=uz @@ -2930,7 +2931,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz @@ -2943,7 +2944,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=uz_Latn @@ -2956,7 +2957,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz_Latn @@ -2969,7 +2970,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=vi @@ -3008,7 +3009,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì (èdè ilẹ̀ Rọ́ṣíà, Mesiko) hi-Latn; Èdè Híńdì (Èdè Látìn) nl-BE; Èdè Dọ́ọ̀ṣì (Bégíọ́mù) nl-Latn-BE; Èdè Dọ́ọ̀ṣì (Èdè Látìn, Bégíọ́mù) -zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., FONIPA) +zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., fonipa) @locale=yo @@ -3021,7 +3022,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì [orílẹ̀-èdè Mẹ́síkò] (èdè ilẹ hi-Latn; Èdè Híndì [Látìnì] nl-BE; Èdè Flemiṣi nl-Latn-BE; Èdè Flemiṣi (Èdè Látìn) -zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (FONIPA) +zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (fonipa) @locale=yue From d6ca2ba5dee1abe3278402b263d532084246d48f Mon Sep 17 00:00:00 2001 From: DraganBesevic Date: Wed, 26 Feb 2025 09:34:55 -0800 Subject: [PATCH 07/19] ICU-22923 Integrate CLDR 47 release beta2, part 4, remove unused variables in tests --- icu4c/source/test/intltest/dtfmttst.cpp | 1 - .../test/java/com/ibm/icu/dev/test/format/DateFormatTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/icu4c/source/test/intltest/dtfmttst.cpp b/icu4c/source/test/intltest/dtfmttst.cpp index 82db5413ac72..9cb0263ea617 100644 --- a/icu4c/source/test/intltest/dtfmttst.cpp +++ b/icu4c/source/test/intltest/dtfmttst.cpp @@ -5484,7 +5484,6 @@ void DateFormatTest::TestDayPeriodParsing() { UDate k000000 = 1447372800000.0; UDate k003700 = 1447375020000.0; UDate k010000 = 1447376400000.0; - UDate k013000 = 1447378200000.0; UDate k030000 = 1447383600000.0; UDate k090000 = 1447405200000.0; UDate k120000 = 1447416000000.0; diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java index cf6e2ee420ff..8efa15187154 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java @@ -5407,7 +5407,6 @@ public void TestDayPeriodParsing() throws ParseException { Date k000000 = new Date(1447372800000L); Date k003700 = new Date(1447375020000L); Date k010000 = new Date(1447376400000L); - Date k013000 = new Date(1447378200000L); Date k030000 = new Date(1447383600000L); Date k090000 = new Date(1447405200000L); Date k120000 = new Date(1447416000000L); From 53adb4bca86b75c4a77b60d9081e2e5ea4501ffa Mon Sep 17 00:00:00 2001 From: Frank Tang Date: Wed, 26 Feb 2025 18:53:57 -0800 Subject: [PATCH 08/19] ICU-23060 Fix TestLargeAppend Correct the test based on the kMaxCapacity setToBogus on error --- icu4c/source/common/unistr.cpp | 2 ++ icu4c/source/test/intltest/ustrtest.cpp | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp index 7b48addbe85b..4e29bad1d3b9 100644 --- a/icu4c/source/common/unistr.cpp +++ b/icu4c/source/common/unistr.cpp @@ -1946,9 +1946,11 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity, } else if(newCapacity <= US_STACKBUF_SIZE && growCapacity > US_STACKBUF_SIZE) { growCapacity = US_STACKBUF_SIZE; } else if(newCapacity > growCapacity) { + setToBogus(); return false; // bad inputs } if(growCapacity > kMaxCapacity) { + setToBogus(); return false; } diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp index 31cb65190511..f0466982cff2 100644 --- a/icu4c/source/test/intltest/ustrtest.cpp +++ b/icu4c/source/test/intltest/ustrtest.cpp @@ -2392,15 +2392,17 @@ void UnicodeStringTest::TestLargeAppend() { } dest.remove(); total = 0; + // Copy kMaxCapacity from common/unistr.cpp + const int32_t kMaxCapacity = 0x7ffffff5; for (int32_t i = 0; i < 16; i++) { dest.append(str); total += len; - if (total + len <= INT32_MAX) { + if (total + len <= kMaxCapacity) { assertFalse("dest is not bogus", dest.isBogus()); - } else if (total <= INT32_MAX) { + } else if (total <= kMaxCapacity) { // Check that a string of exactly the maximum size works UnicodeString str2; - int32_t remain = static_cast(INT32_MAX - total); + int32_t remain = static_cast(kMaxCapacity - total); char16_t *buf2 = str2.getBuffer(remain); if (buf2 == nullptr) { // if somehow memory allocation fail, return the test @@ -2410,14 +2412,19 @@ void UnicodeStringTest::TestLargeAppend() { str2.releaseBuffer(remain); dest.append(str2); total += remain; - assertEquals("When a string of exactly the maximum size works", static_cast(INT32_MAX), total); - assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length()); + assertEquals("When a string of exactly the maximum size works", static_cast(kMaxCapacity), total); + assertEquals("When a string of exactly the maximum size works", kMaxCapacity, dest.length()); assertFalse("dest is not bogus", dest.isBogus()); - // Check that a string size+1 goes bogus + // Check that a string size+1 does not go bogus (one more byte reserved for NUL) str2.truncate(1); dest.append(str2); total++; + assertFalse("dest should be not bogus", dest.isBogus()); + // Check that a string size+2 goes bogus (beyond the byte reserved + // for NUL) + dest.append(str2); + total++; assertTrue("dest should be bogus", dest.isBogus()); } else { assertTrue("dest should be bogus", dest.isBogus()); From 443c8c51879704efd6a1f975a0c3fc1d9e25b0c2 Mon Sep 17 00:00:00 2001 From: Mihai Nita Date: Thu, 27 Feb 2025 13:07:20 -0800 Subject: [PATCH 09/19] ICU-23064 Fix for POSIX_MADV_RANDOM undefined --- icu4c/source/common/umapfile.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/icu4c/source/common/umapfile.cpp b/icu4c/source/common/umapfile.cpp index ab8829d8c38a..3ba0251df9c5 100644 --- a/icu4c/source/common/umapfile.cpp +++ b/icu4c/source/common/umapfile.cpp @@ -238,7 +238,12 @@ typedef HANDLE MemoryMap; pData->pHeader=(const DataHeader *)data; pData->mapAddr = data; #if U_PLATFORM == U_PF_IPHONE || U_PLATFORM == U_PF_ANDROID + // Apparently supported from Android 23 and higher: + // https://github.com/ggml-org/llama.cpp/pull/3631 + // Checking for the flag itself is safer than checking for __ANDROID_API__. +# ifdef POSIX_MADV_RANDOM posix_madvise(data, length, POSIX_MADV_RANDOM); +# endif #endif return true; } From 9cc28a6428c8597cbeb2550867748c0e7ae23246 Mon Sep 17 00:00:00 2001 From: Elango Cheran Date: Wed, 26 Feb 2025 01:05:02 +0000 Subject: [PATCH 10/19] ICU-23056 Add workflow to generate commit checker report See #3413 --- .github/workflows/brs-commit-checker.yml | 64 +++++++++++++++++++ docs/processes/release/tasks/miscellaneous.md | 25 +++++++- 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/brs-commit-checker.yml diff --git a/.github/workflows/brs-commit-checker.yml b/.github/workflows/brs-commit-checker.yml new file mode 100644 index 000000000000..060cacd873f9 --- /dev/null +++ b/.github/workflows/brs-commit-checker.yml @@ -0,0 +1,64 @@ +name: BRS Commit Checker Report +on: + workflow_dispatch: + inputs: + fix_version: + type: string + required: true + description: The ICU Jira "Fix Version" semver + from_git_ref: + type: string + required: true + description: The git ref start of comparison range. Prefix branches with `origin/`. + end_git_ref: + type: string + required: true + description: The git ref end of comparison range. Must be descendant of `from_git_ref`. Prefix branches with `origin/`. + # Jira user name & API token is used for processing sensitive tickets comes from Github Secrets + # stored in the repository + +jobs: + commit-report: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-tags: true + fetch-depth: 0 + # workaround for bug in checkout action. this step should be redundant. + # https://github.com/actions/checkout/issues/1471 + # https://github.com/actions/checkout/issues/1781 + # https://github.com/actions/checkout/issues/701#issuecomment-1133937950 + - name: Fetch all tags + run: | + git fetch --tags origin + - name: Fetch all branches + run: | + git fetch origin + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12.8' + cache: 'pipenv' + cache-dependency-path: | + tools/commit-checker/Pipfile + tools/commit-checker/Pipfile.lock + - name: Install pipenv + run: | + sudo pip3 install pipenv + - name: Generate report + env: + JIRA_USERNAME: ${{ secrets.COMMIT_CHECKER_JIRA_EMAIL }} + JIRA_PASSWORD: ${{ secrets.COMMIT_CHECKER_JIRA_TOKEN }} + run: | + pushd ./tools/commit-checker + pipenv install + pipenv run python3 check.py \ + --jira-query "project=ICU AND fixVersion=${{ inputs.fix_version }}" \ + --rev-range "${{ inputs.from_git_ref }}..${{ inputs.end_git_ref }}" > REPORT.md + popd + # https://github.blog/news-insights/product-news/supercharging-github-actions-with-job-summaries/ + - name: Reproduce report as workflow job summary + run: | + cat ./tools/commit-checker/REPORT.md >> $GITHUB_STEP_SUMMARY + echo "View the Summary page of this GHA Workflow instance to view the rendered Markdown of this report." diff --git a/docs/processes/release/tasks/miscellaneous.md b/docs/processes/release/tasks/miscellaneous.md index e524964af274..ffa7e1e4821b 100644 --- a/docs/processes/release/tasks/miscellaneous.md +++ b/docs/processes/release/tasks/miscellaneous.md @@ -57,13 +57,34 @@ merging post RC fixes from trunk and others. Every commit being shipped in the next ICU release should be labeled with a Jira ticket that is marked as fixed with the correct fix version. Further, there should be no Jira tickets marked as fixed with the current fixVersion that do -not have commits. To check this, run the following tool: +not have commits. + +### Run locally + +To check this, run the following tool: -Follow the instructions in the README file to generate the report and send it +Follow the instructions in the README file to generate the report locally and send it for review. +### Run via CI + +Alternatively, you can run the "BRS Commit Checker Report" workflow directly from the project page CI +by: + +1. Go to the [Actions tab](https://github.com/unicode-org/icu/actions) +1. Click on the "BRS Commit Checker Report" workflow name on the left hand list of workflows +1. Click the "Run workflow" dropdown. + + The dropdown should reveal an input form in which to provide inputs + +1. Provide the same inputs in the form as you would for a local run of the tool, +as described in the tool's Readme in the instructions above. + + The only difference from the local run instructions is that git branch names in the +Actions workflow input form should be prefixed with `origin/`. + --- ## Fix Mis-ticketted commits From faa80a297236c5976a80429784ed91315adbc4c3 Mon Sep 17 00:00:00 2001 From: Rich Gillam Date: Tue, 4 Mar 2025 18:09:25 -0800 Subject: [PATCH 11/19] ICU-23062 Added null check in one spot in genrb where we know we've seen crashes. --- icu4c/source/tools/genrb/parse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icu4c/source/tools/genrb/parse.cpp b/icu4c/source/tools/genrb/parse.cpp index eb85d5157a6f..3a53e999ff15 100644 --- a/icu4c/source/tools/genrb/parse.cpp +++ b/icu4c/source/tools/genrb/parse.cpp @@ -297,7 +297,7 @@ static char *getInvariantString(ParseState* state, uint32_t *line, struct UStrin if(!uprv_isInvariantUString(tokenValue->fChars, tokenValue->fLength)) { *status = U_INVALID_FORMAT_ERROR; - error(*line, "invariant characters required for table keys, binary data, etc."); + error((line == nullptr) ? 0 : *line, "invariant characters required for table keys, binary data, etc."); return nullptr; } From 30e23b0d286f87fefb161dc56e90afac5df0dc43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Mar 2025 13:22:21 +0000 Subject: [PATCH 12/19] ICU-23054 Bump the github-actions group with 4 updates See #3424 --- .github/workflows/cifuzz.yml | 2 +- .github/workflows/icu4c.yml | 2 +- .github/workflows/icu_merge_ci.yml | 6 +++--- .github/workflows/scorecard.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 54d91d15e694..928316092302 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -55,7 +55,7 @@ jobs: path: ./out/artifacts - name: Upload Sarif if: always() && steps.build.outcome == 'success' - uses: github/codeql-action/upload-sarif@v3.28.9 + uses: github/codeql-action/upload-sarif@v3.28.10 with: # Path to SARIF file relative to the root of the repository sarif_file: cifuzz-sarif/results.sarif diff --git a/.github/workflows/icu4c.yml b/.github/workflows/icu4c.yml index 062aabb7f41e..7b187491fae0 100644 --- a/.github/workflows/icu4c.yml +++ b/.github/workflows/icu4c.yml @@ -740,7 +740,7 @@ jobs: runs-on: ubuntu-22.04 # Updated in BRS steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: bazel-contrib/setup-bazel@0.13.0 + - uses: bazel-contrib/setup-bazel@0.14.0 - name: Get CI Linux runner VM version id: linux-version run: | diff --git a/.github/workflows/icu_merge_ci.yml b/.github/workflows/icu_merge_ci.yml index feb36be4fc81..aa0c9cf70ee3 100644 --- a/.github/workflows/icu_merge_ci.yml +++ b/.github/workflows/icu_merge_ci.yml @@ -144,7 +144,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib @@ -218,7 +218,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib @@ -283,7 +283,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 77d5c562da82..8c4d7d715904 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -34,7 +34,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 with: results_file: results.sarif results_format: sarif @@ -59,6 +59,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@3d3d628990a5f99229dd9fa1821cc5a4f31b613b # v2.25.15 + uses: github/codeql-action/upload-sarif@83923549f688e42b34d0b90ee94725f7c30532fc # v2.25.15 with: sarif_file: results.sarif From 27cc39a620607f335aaa32b275908ad686f096dc Mon Sep 17 00:00:00 2001 From: yumaoka Date: Fri, 7 Mar 2025 19:11:20 -0300 Subject: [PATCH 13/19] ICU-23067 Add test option to ignore runtime time zone data sensitive test. --- icu4c/source/test/intltest/tztest.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/icu4c/source/test/intltest/tztest.cpp b/icu4c/source/test/intltest/tztest.cpp index db88a2e4ba2d..968f2473135f 100644 --- a/icu4c/source/test/intltest/tztest.cpp +++ b/icu4c/source/test/intltest/tztest.cpp @@ -152,18 +152,21 @@ TimeZoneTest::TestGenericAPI() if (hostZoneRawOffset != tzoffset * (-1000)) { UnicodeString id; hostZone->getID(id); - // Known issues in ICU-22274 we have issues in time zone - // Africa/Casablanca Europe/Dublin America/Godthab America/Nuuk - if (id == u"Africa/Casablanca" || id == u"Europe/Dublin" || - id == u"America/Godthab" || id == u"America/Nuuk" || - id == u"Africa/El_Aaiun" || - id == u"Asia/Qostanay" || // Due to changes in tz2024a - id == u"Asia/Almaty" || // Due to changes in tz2024a - id == u"America/Scoresbysund" // break after the update of tz2023d - ) { - logKnownIssue( "ICU-22274", "detectHostTimeZone()'s raw offset != host timezone's offset in TimeZone " + id); + + const char* ignoreRuntimeTZSensitiveTests = getProperty("IgnoreRuntimeTimeZoneSensitiveTests"); + UBool bWarnOnly = (ignoreRuntimeTZSensitiveTests && uprv_strcmp(ignoreRuntimeTZSensitiveTests, "true") == 0); + // TODO - enforce warning only until we update the CI env test + bWarnOnly = true; + + // Africa/Casablanca Europe/Dublin Africa/El_Aaiun uses negative DST offset on some runtime env + if (id == u"Africa/Casablanca" || id == u"Europe/Dublin" || id == u"Africa/El_Aaiun" || bWarnOnly) { + infoln("WARN: detectHostTimeZone()'s raw offset != host timezone's offset. Time zone version used by OS might be different from ICU.\n" + "hostZone->getRawOffset()=%d\n" + "but uprv_timezone() return %d and " + "uprv_timezone() * -1000=%d", + hostZoneRawOffset, tzoffset, tzoffset * -1000); } else { - errln("FAIL: detectHostTimeZone()'s raw offset != host timezone's offset.\n" + errln("FAIL: detectHostTimeZone()'s raw offset != host timezone's offset.\n" "hostZone->getRawOffset()=%d\n" "but uprv_timezone() return %d and " "uprv_timezone() * -1000=%d", From cc9adb6c32a9fa8e7c6275f61f1362a4ff27bdf6 Mon Sep 17 00:00:00 2001 From: Mihai Nita Date: Mon, 10 Mar 2025 20:22:09 +0000 Subject: [PATCH 14/19] ICU-22923 BRS_77_GA Update version number to 77.1 (No more -SNAPSHOT) --- docs/processes/release/tasks/versions.md | 2 +- icu4j/demos/pom.xml | 2 +- icu4j/main/charset/pom.xml | 2 +- icu4j/main/collate/pom.xml | 2 +- icu4j/main/common_tests/pom.xml | 2 +- icu4j/main/core/pom.xml | 2 +- icu4j/main/currdata/pom.xml | 2 +- icu4j/main/framework/pom.xml | 2 +- icu4j/main/icu4j/pom.xml | 2 +- icu4j/main/langdata/pom.xml | 2 +- icu4j/main/localespi/pom.xml | 2 +- icu4j/main/regiondata/pom.xml | 2 +- icu4j/main/translit/pom.xml | 2 +- icu4j/perf-tests/pom.xml | 2 +- icu4j/pom.xml | 2 +- icu4j/releases_tools/shared.sh | 4 ++-- icu4j/samples/pom.xml | 2 +- icu4j/tools/build/pom.xml | 2 +- icu4j/tools/misc/pom.xml | 2 +- tools/cldr/cldr-to-icu/pom.xml | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/processes/release/tasks/versions.md b/docs/processes/release/tasks/versions.md index 23f0ea940694..454c6b3ace4e 100644 --- a/docs/processes/release/tasks/versions.md +++ b/docs/processes/release/tasks/versions.md @@ -222,7 +222,7 @@ The command requires a version number string that follows the typical Java / Mav 6. cldr-to-icu build tool has a dependency on the icu4j packages which needs to be updated in [`tools/cldr/cldr-to-icu/pom.xml`](https://github.com/unicode-org/icu/blob/main/tools/cldr/cldr-to-icu/pom.xml). Please update it to match the version that was updated in `icu4j/pom.xml` in the steps above. ```xml -version>74.0.1-SNAPSHOT +74.0.1-SNAPSHOT ``` Since ICU 77 this moved to a property: diff --git a/icu4j/demos/pom.xml b/icu4j/demos/pom.xml index 74b8a1b82be8..eb3883db7ba9 100644 --- a/icu4j/demos/pom.xml +++ b/icu4j/demos/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 demos diff --git a/icu4j/main/charset/pom.xml b/icu4j/main/charset/pom.xml index 73d8ad1fdc41..e06a3a1a580f 100644 --- a/icu4j/main/charset/pom.xml +++ b/icu4j/main/charset/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/collate/pom.xml b/icu4j/main/collate/pom.xml index 63db7aee865f..56abb848fbe7 100644 --- a/icu4j/main/collate/pom.xml +++ b/icu4j/main/collate/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/common_tests/pom.xml b/icu4j/main/common_tests/pom.xml index 6aa7fc5b6c5b..f005ec3684f1 100644 --- a/icu4j/main/common_tests/pom.xml +++ b/icu4j/main/common_tests/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/core/pom.xml b/icu4j/main/core/pom.xml index d90e68dfffc3..70cfc138a6e4 100644 --- a/icu4j/main/core/pom.xml +++ b/icu4j/main/core/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/currdata/pom.xml b/icu4j/main/currdata/pom.xml index 8c28128ab5e2..23612a798820 100644 --- a/icu4j/main/currdata/pom.xml +++ b/icu4j/main/currdata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/framework/pom.xml b/icu4j/main/framework/pom.xml index ca769566d5b1..01e88658973d 100644 --- a/icu4j/main/framework/pom.xml +++ b/icu4j/main/framework/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/icu4j/pom.xml b/icu4j/main/icu4j/pom.xml index f99e73cc4d30..a99d4960138c 100644 --- a/icu4j/main/icu4j/pom.xml +++ b/icu4j/main/icu4j/pom.xml @@ -9,7 +9,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/langdata/pom.xml b/icu4j/main/langdata/pom.xml index ab9dadf9837d..bfe912bff8ec 100644 --- a/icu4j/main/langdata/pom.xml +++ b/icu4j/main/langdata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/localespi/pom.xml b/icu4j/main/localespi/pom.xml index 93e1b580297e..55f173067677 100644 --- a/icu4j/main/localespi/pom.xml +++ b/icu4j/main/localespi/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/regiondata/pom.xml b/icu4j/main/regiondata/pom.xml index 700e3510b398..8e5e51fec9d1 100644 --- a/icu4j/main/regiondata/pom.xml +++ b/icu4j/main/regiondata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/translit/pom.xml b/icu4j/main/translit/pom.xml index 663a8243f0bd..f040bce8c6ed 100644 --- a/icu4j/main/translit/pom.xml +++ b/icu4j/main/translit/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/perf-tests/pom.xml b/icu4j/perf-tests/pom.xml index f47e93729c2b..5c1d65e8cb07 100644 --- a/icu4j/perf-tests/pom.xml +++ b/icu4j/perf-tests/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 perf-tests diff --git a/icu4j/pom.xml b/icu4j/pom.xml index d31686a55b68..ffdcb995b194 100644 --- a/icu4j/pom.xml +++ b/icu4j/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 pom ${proj-title} (${project.artifactId}) diff --git a/icu4j/releases_tools/shared.sh b/icu4j/releases_tools/shared.sh index ca1cd90bddbc..abb320ec49fd 100755 --- a/icu4j/releases_tools/shared.sh +++ b/icu4j/releases_tools/shared.sh @@ -5,8 +5,8 @@ export MAVEN_ARGS='--no-transfer-progress' # Version update! -export artifact_version='77.1-SNAPSHOT' -export github_rel_version='77rc' +export artifact_version='77.1' +export github_rel_version='77_1' export api_report_version='77' export api_report_prev_version='76' export out_dir=target diff --git a/icu4j/samples/pom.xml b/icu4j/samples/pom.xml index 0d9d5877454d..6dee77371024 100644 --- a/icu4j/samples/pom.xml +++ b/icu4j/samples/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 samples diff --git a/icu4j/tools/build/pom.xml b/icu4j/tools/build/pom.xml index 4af9bec234ab..57a078e61ff9 100644 --- a/icu4j/tools/build/pom.xml +++ b/icu4j/tools/build/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/tools/misc/pom.xml b/icu4j/tools/misc/pom.xml index f0adec43568f..b4ee188eae75 100644 --- a/icu4j/tools/misc/pom.xml +++ b/icu4j/tools/misc/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/tools/cldr/cldr-to-icu/pom.xml b/tools/cldr/cldr-to-icu/pom.xml index 0e77ed0c8b4a..93accd02f32f 100644 --- a/tools/cldr/cldr-to-icu/pom.xml +++ b/tools/cldr/cldr-to-icu/pom.xml @@ -20,7 +20,7 @@ 11 11 - 77.1-SNAPSHOT + 77.1 47.0-SNAPSHOT 32.1.1-jre 1.4.4 From 457157a92aa053e632cc7fcfd0e12f8a943b2d11 Mon Sep 17 00:00:00 2001 From: Mihai Nita Date: Mon, 10 Mar 2025 19:11:46 +0000 Subject: [PATCH 15/19] ICU-22923 Workaround for addLikelySubtags(und-Latn-RS) bug --- icu4c/source/data/misc/langInfo.txt | 4058 +++++++++-------- icu4c/source/data/unit/da.txt | 6 +- icu4c/source/test/intltest/loctest.cpp | 5 - .../ibm/icu/dev/test/util/ULocaleTest.java | 10 +- .../com/ibm/icu/impl/data/icudata/icuver.res | Bin 144 -> 144 bytes .../ibm/icu/impl/data/icudata/langInfo.res | Bin 72240 -> 72240 bytes .../com/ibm/icu/impl/data/icudata/unit/da.res | Bin 18528 -> 18528 bytes .../localedistance/LikelySubtagsBuilder.java | 4 +- 8 files changed, 2039 insertions(+), 2044 deletions(-) diff --git a/icu4c/source/data/misc/langInfo.txt b/icu4c/source/data/misc/langInfo.txt index 7f11f4f7ccaa..87f66a4fe4f3 100644 --- a/icu4c/source/data/misc/langInfo.txt +++ b/icu4c/source/data/misc/langInfo.txt @@ -6787,6 +6787,7 @@ langInfo:table(nofallback){ 431378364, 428209401, 425591562, + 429882578, 429902139, 433090980, 421950316, @@ -7785,2035 +7786,2036 @@ langInfo:table(nofallback){ "ZR","CD", } trie:bin{ -001a6df03ab774d96977ce9b77a88b78 -aec479b81c7a00186fc19d75957a647a -32e1d573e838f5d91d3701e1adf9ead9 -1d41022a3e42d85c014811616e01e2ab -aff4abaa0b4d26540f54d85bad552a56 -10ceabad10d3abac4dd87149502a5310 +001a6df03ab874d96a77ce9c77a88b78 +aec579b81d7a00186fc19d75957a647a +32e1d573e838f5d91d3801e1adf9ead9 +1d42022a3e42d85c024811616e01e2ab +aff4abaa0b4d26540f54d85bae552a56 +10ceabad10d3abac4dd8714d502a5310 d2aba802c1aba7c6aba5c8aba647f05b -bb473248d8712a4910c4aba301c2abab -c6aba1754e776c7904e2d573e7d91d3d -ead91d3eeed91d3ff0d91d4003e8d91d -38edd91d39eed91d3af9d91d3b10e1d9 -1d3c7263729673a24d740bf11af50cf5 -d91d34f8d91d35f9d91d36f1d91d31f3 -d91d32f4d91d33ed0cedd91d2eeed91d -2ff0d91d30e5d91d2be7d91d2cecd91d -2d04e7d91d23eed91d24efd91d25f0d9 -1d26f3d91d2703e1d91d28edd831b0f2 -d91d29f5d91d2a6f30706a7110e5d91d -2206ef10efd91d04f1d91d05f2d91d06 -f3d91d07e3d91d02e8d91d03edd91c6b -0019ee3af41ef710f7d91d1ef8d91d1f -f9d91d20fad91d21f4d91d1bf5d91d1c -f6d91d1df10cf1d91d18f2d91d19f3d9 -1d1aeed91d15efd91d16f0d91d17e71e -ea10ead91d11ebd91d12ecd91d13edd9 -1d14e7d91d0ee8d91d0fe9d91d10e40c -e4d91d0be5d91d0ce6d91d0de1d91d08 -e2d91d09e3d91d0a68c10a6cad6c506d -826e04e1d91cfde5d91cfee7d91cffeb -d91d00f3d91d0105ee0ceed91ce0f1d9 -1ce1f5d91ce2e1d91cddead91cdeedd9 -1cdf0019ee3af41ef710f7d91cf9f8d9 -1cfaf9d91cfbfad91cfcf4d91cf6f5d9 -1cf7f6d91cf8f10cf1d91cf3f2d91cf4 -f3d91cf5eed91cf0efd91cf1f0d91cf2 -e71eea10ead91cecebd91cedecd91cee -edd91cefe7d91ce9e8d91ceae9d91ceb -e40ce4d91ce6e5d91ce7e6d91ce8e1d9 -1ce3e2d91ce4e3d91ce56866698a6b07 -f00ff0d91cdaf4d567f5d91cdbfad91c -dce1d91cd9e2b947e4b7c8efd91bb804 -e4d91ccee9d91ccfeed91cd0f7d91cd1 -f8d5a307ee0feed91cd6f2cd13f7d91c -d7fad91cd8e1d91cd2ebd91cd3ecd91c -d4edd91cd56439645a65606705ed0ced -d91ccbeed91cccf2d91ccde1d91cc9e2 -d91ccae8d5b310ead91cc304e1d91cc4 -e7d91cc5e8d91cc6edd91cc7eed91cc8 -613a62a27a6301e1d91cc1e8d91cc200 -17ef36f51af80cf8d91cb8f9d91cb9fa -d91cbaf5d91cb5f6d91cb6f7d91cb7f2 -0cf2d91cb2f3d91cb3f4d91cb4efd91c -b0f0d91cacf1d91cb1e71aea0cead91c -adebd91caeedd91cafe7d91caae8d91c -abe9d91cace40ce4d91ca7e5d91ca8e6 -d91ca9e1d91ca4e2d91ca5e3d91ca605 -f40cf4d91cbef5d91cbff7d91cc0e1d9 -1cbbe3d91cbce5d91cbd00186dc19074 -95782a78307936e1d74befd51a10f7d9 -1b1105ee0ceed91b15f2d91b16f9d91b -17e2d91b12e9d91b13edd91b14745075 -7c7704e1d91b0ce2d91b0defd91b0ef2 -d91b0ff7d91b1006e90ce9d7fcebd7fd -edd7fef7d7ffe2d7f9e6d7fae8d7fb0b -f21af60cf6d91b09f8d91b0af9d91b0b -f2d91b06f4d91b07f5d91b08ec0cecd9 -1b03edd91b04eed91b05e1d91b00e2d9 -1b01e4d91b02705b705c72607307f20c -f2d7f5f3d7f6f5d7f7f6d7f8e1d7f2e7 -d557e9d7f3ebd7f410e3d7e20ff01af6 -0cf6d7eef7d7eff8d7f0fad7f1f0d7ea -f2d7ebf3d7ecf5d7edeb0cebd7e7ecd7 -e8edd7e9efd5c4e2d7e3e7d7e4e8d7e5 -e9d7e66d906ea2666f0ee91aef0cefd7 -def2d7dff3d7e0f7d7e1e9d7daebd7db -edd7dceed7dde40ce4d7d6e5d7d7e6d7 -d8e7d7d9e1d7d3e2d7d4e3d7d50ded17 -f30cf3d7c3f4d7c4f7d7c5f8d7c6edd7 -c0eed7c1efd7c2e40ce4d7bce5d7bde8 -d7bee9d7bfe1d7b9e2d7bae3d7bb0ded -17f00cf0d7d0f5d7d1f7d7d2f9b186ed -d7ceeec165efd7cfe50ce5d7cae7d7cb -e9d7ccebd7cde2d7c7e3d7c8e4d7c967 -b56a4a6a826b8c6c0cef17f50cf5d7b5 -f6d7b6f7d7b7f8d7b8efd7b2f2d7b3f3 -d7b4e809e8d7afe9d7b0edd7b1e1d7ac -e5d7ade7d7ae01e1d7a5e9d7a604e1d7 -a7e4d7a8f2d7a9f7d7aaf9d7ab679e68 -a257690010eb1df20ff2d7a1f5d7a2f6 -d7a3f7c718f9d7a4ebd79decd79eedd7 -9feed7a0e70ce7d799e8d79ae9d79bea -d79ce2d795e3d796e5d797e6d79807ef -0cefd78ef5d78ff7d78bf9d790e1d78a -e2d78be7d78ce9d78d03e1d791e7d792 -ebd793f5d7946452642e655a6610e7d7 -8906eb0cebd779f4d77af5d77bf9d77c -e4d776e7d777ead7780def17f30cf3d7 -85f4d786f5d787f7d788efd183f0d783 -f2d784e80ce8d780e9d781ecad7dedd7 -82e3d77de4d77ee7d77f613662a26063 -01e1d774e9d7750017ee2af514f809f8 -d761f9d762fad763f5d75ef6d75ff7d7 -60f209f2d75bf3d75cf4d75deed758f0 -d759f1d75ae714ea09ead755ecd756ed -d757e7d752e8d753e9d754e409e4d74f -e5d750e6d751e1d74ce2d74de3d74e0f -ec1af20cf2d770f4d771f6d772f7d773 -ecd76cedd76df0d76ef1d76fe80ce8d7 -68e9d769ead76aebd76be1d764e2d765 -e5d766e6d76700186ec25875b6784778 -3079567a90e8d91b4704e2d91be6ebd9 -1be7edd91be8f2d91be9f4d91bea06eb -10ebd91beeecd91beff4d91bf0f9d91b -f1e1d91bebe2d91becead91bed01e8d9 -1bf2f0d91bf3757e76a2537709ec14ec -d91be1efd91be2f2d91be3f4d91be4f7 -d91be5e1d91bdce4d91bdde5d91bdeea -d91bdfebd91be008ed14edd91bd2eed9 -1bd3efd91bd4f4d91bd5f5d91bd6e2d9 -1bcee4d91bcfead91bd0ecd91bd104e5 -d91bd7e9d91bd8eed91bd9efd91bdaf3 -d91bdb72c0d172a25873a28b740012ed -2af414f4d91bc9f5d91bcaf6d91bcbf7 -d91bccf9d91bcdedd91bc4eed91bc5f0 -d91bc6f1d91bc7f3d91bc8e514e5d91b -bfe8d91bc0e9d91bc1ead91bc2ecd91b -c3e1d91bbbe2d91bbce3d91bbde4d91b -be0bed19f20cf2d91bacf5d91badf7d9 -1baeedd91baaeed91babf1af29e50ce5 -d91ba7e7d91ba8e9d91ba9e1d91ba4e2 -d91ba5e4d91ba60eed22f210f2d91bb7 -f3d91bb8f5d91bb9f9d91bbaedd91bb3 -eed91bb4f0d91bb5f1d91bb6e80ee8d9 -1bb1e9d91bb2eacf5aecadc7e1d5abe2 -d91bafe5d91bb06ea2606fa295700014 -ec2ff219f70cf7d91ba1f8d91ba2fad9 -1ba3f2d5a9f4d91b9ff6d91ba0ecd91b -9aedd91b9beed91b9cefd91b9df1d91b -9ee714e7d91b95e8d91b96e9d91b97ea -d91b98ebd91b99e1d91b91e2d91b92e4 -d91b93e5b9dfe6d91b940cee1cf40ef4 -c171f5d91b84f9c381fad91b85eed91b -81f1d91b82f2d91b83ea0cead91b7eeb -d91b7fedd91b80e1d5a0e2d91b7ce9d9 -1b7d0aed1af00cf0d91b8ef2d91b8ff7 -d91b90edd91b8beed91b8cefd91b8de3 -d91b86e4d91b87e7d91b88e9d91b89eb -d91b8a68c10c6bc0d56ba2606ca2c06d -0014ef2ff51af80cf8d91b79f9d91b7a -fad91b7bf5d91b76f6d91b77f7d91b78 -efd91b72f0d91b73f1d91b74f2d598f4 -d91b75e713e7d91b6ee8d91b6fead91b -70edd91b71eed595e1d91b69e2d91b6a -e3d91b6be4d91b6ce6d91b6d0015f030 -f51af80cf8d91b64f9d91b65fad91b66 -f5d91b61f6d91b62f7d91b63f0d91b5c -f1d91b5df2d91b5ef3d91b5ff4d91b60 -e619ea0cead91b59ecd91b5aeed91b5b -e6d91b57e7d91b58e8d760e1d91b52e2 -d91b53e3d91b54e4d91b55e5d91b5603 -e1d91b67e3d591e4d592f9d91b686838 -694e6a01e2d91b50f4d91b5102e5d91b -48edd91b49f6d91b4a05f20cf2d91b4d -f3d91b4ef9d91b4fe18fe9d91b4beed9 -1b4c64586464658a6706e910e9d91b43 -edd91b44f5d91b45f7d91b46e2d91b40 -e4d91b41e7d91b4204e1d91b34ebd91b -35efd91b36f1d91b37f9d91b3806f210 -f2d91b3cf3d91b3df4d91b3ef5d91b3f -e4d91b39e7d91b3aedd91b3b613c62a2 -566302e8abf9efd540f2d53f0010ee26 -f414f4d91b23f5d91b24f6d91b25f7d9 -1b26f9d91b27eed91b1fefd91b20f2d9 -1b21f3d91b22ea10ead91b1bebd91b1c -ecd91b1dedd91b1ee1d91b18e2d91b19 -e7d52ee9d91b1a0cea1ef010f0d91b30 -f2d91b31f7d91b32f9d91b33ead91b2d -edd91b2eeed91b2fe50ce5d91b2ae7d9 -1b2be9d91b2ce1ab5ee2d91b28e4d91b -2900166ec175765c7912792ee9b72bef -d91c6301f2d91ca2f5d91ca3765c776a -7805ed0cedd91c9ff5d91ca0f9d91ca1 -e1d91c9ce7d91c9decd91c9e01e1d91c -93f4d91c9406f110f1d91c98f2d91c99 -f5d91c9af7d91c9be1d91c95e7d91c96 -eed91c97739673a26f74a287750013ed -2af414f4d91c8ff5d91c86f7d91c90f8 -d91c91fad91c92edd91c8aeed91c8bf0 -d91c8cf1d91c8df2d91c8ee614e6d91c -85e7d91c86e9d91c87ead91c88ecd91c -89e1d91c7fe2d91c80e3d91c81e4d91c -82e5012a304812616ef3d91c84012ad9 -1c834310ced91c8405f20cf2d91c7af3 -d91c7bf9d91c7ce4d91c77eed91c78f0 -d91c7901f7d91c7df9d91c7e6e7e6fa2 -4f7209ed14edd91c40efd91c73f3d91c -74f7d91c75f9d91c76e1d91c6ee2d91c -6fe5d91c70ebd91c71ecd91c7207ec10 -ecd91c60f1d91c26f3d91c61f5d91c62 -e1d91c5ce4d91c5de7d91c5eebd91c5f -09ed14edd91c69eed91c6af3d91c6bf4 -d91c6cf9d91c6de2d91c64e7d91c65e9 -d91c66ebd91c67ecd91c6867c0df6b7e -6b7c6ca2526d09ed13edd91c58eed91c -59efd91c5af0d91c5bf4c1f0e2d91c53 -e5d91c54e7d91c55ebd91c56ecd91c57 -08eb14ebd91c45edd91c46efd91c47f2 -d91c48f9d91c49e1d91c41e7d91c42e8 -d91c43e9d91c4408e914e9d91c4eecd9 -1c4ff2d91c50f5d91c51f9d91c52e1d9 -1c4ae2d91c4be5d91c4ce7d91c4d678a -68a255690aec1af30cf3d91c3ef6d91c -3ff9d91c40ecd91c3bedd91c3cf2d91c -3de1d91c36e7d91c37e8d91c38e9d91c -39ead91c3a07f010f0d91c31f2d91c32 -f5d91c33f7d91c34e1d91c2de9d91c2e -ecd91c2fedd91c3010e4d91c3561a245 -62a2b963a2f064a2fa650cee1ef410f4 -d91c29f5d91c2af6d91c2bf9d91c2cee -d91c26f2d91c27f3d91c28e90ce9d91c -23ead91c24ecd91c25e1d91c20e3d91c -21e5d91c220019ee3af41ef710f7d91c -09f8d91c0af9d91c0bfad91c0cf4d91c -06f5d91c07f6d91c08f10cf1d91c03f2 -d91c04f3d91c05eed91c00efd91c01f0 -d91c02e71dea0fead91bfdebd91bfeec -d91bffedbb95e7d91bfae8d91bfbe9d9 -1bfce40ce4d91bf7e5d91bf8e6d91bf9 -e1d91bf4e2d91bf5e3d91bf60cea1eee -10eed91c15efd91c16f8d91c17f9d91c -18ead91c12ecd91c13edd91c14e50ce5 -d91c0fe8d91c10e9d91c11e1d91c0de2 -d91c0ee4ab7d02ecd91c19eed91c1af2 -d91c1b04e1d91c1ce4b72be5d91c1de7 -d91c1eebd91c1f74a45675b285760011 -6e46751b75367746e5d709e9d529efd7 -3f02edd747eed748f4d74910e1d74a6e -326f42724c7410efd74602ebd73cedd7 -3df0d73e01f2d740f4d74103e1d742ef -d743f3d744f4d74569a769a2586aa270 -6ba2716ca2946d0015ec25f314f809f8 -d739f9d73afad73bf3d736f5d737f7d7 -38ecd731edd732f0d733f1d734f2d735 -e614e909e9d72eead72febd730e6d72b -e7d72ce8d72de1d726e2d727e3d728e4 -d729e5d72a07ec0cecd714eed715f4d7 -16f6d717e3d710e4d711e6d712e7d713 -10ebd7180aee14f409f4d721f5d722fa -d723eed71eefd71ff0d720e1d719ead7 -1aebd71becd71cedd71d01f0d724f3d7 -25613662a24365a2476710f2d70f0010 -ed1df20ff2d702f3d703f5d704f6d705 -f9d706edd5feeed5ffefd700f0d701e8 -0ce8d5fce9d5baeab1ccecd5fde1d5f8 -e5d5f9e6d5fae7d5fb01e2d707ebd708 -04e3d70aedd70befd70cf0d70df2d70e -002775c18ce920f20ff2d1e6f3d1fff4 -d311f7a3b9f9d36ae9d13cebd15cecd1 -6feed19defd1b37a387a36e1cf9ee5cf -f6e756e8d12a06ed0cedd37deed37eef -d37ff8d380e8d37aead37becd37c012a -2e41127261e2d114012ad1135010cbd1 -1475a24176a28777a2b578a2f3790ff2 -1af60cf6d376f8d377f9d378fad379f2 -d372f3d373f4d374f5d375ea0cead194 -ecd36feed370f0d371e1d36be5d36ce8 -d36de9d36e0014ec25f314f809f8d33a -f9d33bfad33cf3d337f5d338f6d339ec -d332edd333eed334efd335f1d336e60f -e6d32de7d32ee8d32fe9d330ead331e1 -d328e2d329e3d32ae4d32be5d32c0dee -17f40cf4d346f5d347f7d348f8d349ee -d343efd344f3d345e90ce9d33febd340 -ecd341edd342e1d33de4bba1e5d33e00 -12ee20f40ff4d357f5d358f7d359f8d3 -5af9d35beed352efd353f0d354f1d355 -f2d356e60fe6d34ee7d34fe8d350ecd3 -51edd163e1d34ae2d34be4d34ce5d34d -0def17f40cf4d366f5d367f8d368f9d3 -69efd363f1d364f3d365e90ce9d35fea -d360edd361eed362e1d35ce5d35de7d3 -5e6bc2e870c15870a25d71a29e72a2b9 -73a40e740016ee2af414f709f7d325f9 -d326fad327f4d322f5d323f6d324f109 -f1d18df2d320f3d321eed31defd31ef0 -d31fe814eb09ebd31aecd31bedd31ce8 -d317e9d318ead319e2d312e3d313e4d3 -14e5d315e6d3160013ee20f60ff6d1d9 -f7d1d4f8d1daf9d1dbfad1dceed1d4f0 -d1d5f2d1d6f4d1d7f5d1d8e90fe9d1cf -ead1d0ebd1d1ecd1d2edd1d3e1d1cae3 -d1cbe5d1cce6d1cde7d1ce08ef0fefd1 -e1f0d1e2f4d1e3f5d1e4f7d1e5e2d1dd -ecd1deedd1dfeed1e00017ef2af514f8 -09f8d1fcf9d1fdfad1fef5d1f9f6d1fa -f7d1fbf209f2d1f6f3d1f7f4d1f8efd1 -f3f0d1f4f1d1f5e814ec09ecd1f0edd1 -f1eed1f2e8d1ede9d1eeead1efe509e5 -d1eae6d1ebe7d1ece1d1e7e2d1e8e3d1 -e90011ec1df50ff5d30cf6d30df7d30e -f8d30ffad310ecd308f0d309f2d30af4 -d30be60fe6cfa6e7d304e8d305e9d306 -ead307e1d300e2d301e3d302e4d3036b -a2586ca2936da2de6ea4336f0015ef25 -f514f809f8d1c7f9d1c8fad1c9f5d1c4 -f6d1c5f7d1c6efd1bff0d1c0f1d1c1f2 -d1c2f3d1c3e814eb09ebd1bcecd1bded -d1bee8d1b9e9d1baead1bbe2d1b4e3d1 -b5e4d1b6e6d1b7e7d1b80011f11df50f -f5d16af6d16bf7d16cf8d16dfad16ef1 -d166f2d167f3d168f4d169e60fe6d161 -e7d162ebd163ecd164f0d165e1d15de2 -d15ee4d15fe5d1600015ee25f414f709 -f7d183f8d184f9d185f4d180f5d181f6 -d182eed17bf0d17cf1d17df2d17ef3d1 -7fe714eb09ebd178ecd179edd17ae7d1 -75e9d176ead177e1d170e2d171e3d172 -e4d173e6d1740017ed2af414f709f7d1 -9af9d19bfad19cf4d197f5d198f6d199 -f009f0d194f1d195f2d196edd191eed1 -92efd193e714ea09ead18febcfe6ecd1 -90e7d18ce8d18de9d18ee409e4d189e5 -d18ae6d18be1d186e2d187e3d1880015 -ee25f314f709f7d1b0f8d1b1f9d1b2f3 -d1adf4d1aef6d1afeed1a8efd1a9f0d1 -aaf1d1abf2d1ace714eb09ebd1a5ecd1 -a6edd1a7e7d1a2e8d1a3e9d1a4e1d19e -e2d19fe3d1a0e4d1a1e5b77d66c11b66 -7e679a68a28869a2c36a0aee14f309f3 -d159f5d15af7d15beed156efd157f0d1 -58e1d151e7d152e9d153ead154ecd155 -04e9d10eeed10fefd110f2d111f4d112 -0015ef25f514f809f8d127f9d128fad1 -29f5d124f6d125f7d126efd11ff0d120 -f1d121f3d122f4d123e614e909e9d11c -ead11deed11ee6d11ae7a7c9e8d11be1 -d115e2d116e3d117e4d118e5d1190011 -f11df50ff5d138f6d139f7c77ff9d13a -fad13bf1d134f2d135f3d136f4d137e9 -0fe9d12febd130ecd131edd132f0d133 -e4d12be5d12ce6d12de8d12e0015ee25 -f414f709f7d14ef8d14ff9d150f4d14b -f5d14cf6d14deed146efd147f0d148f1 -d149f3d14ae814eb09ebd143ecd144ed -d145e8d140e9d141ead142e2a936e3d1 -3de4b5d9e6d13ee7d13f61a25d62a2a8 -63a2f864a43e650016ef2af514f809f8 -d10bf9d10cfad10df5d108f6d109f7d1 -0af209f2d105f3d106f4d107efd102f0 -d103f1d104e714eb09ebcfffedd100ee -d101e7cffce8cffde9cffee1cff7e2cf -f8e3cff9e4cffae5cffb0015ef25f514 -f809f8cfb2f9cfb3facfb4f5cfaff6cf -b0f7cfb1efcfaaf0cfabf1cfacf2cfad -f3cfaee614eb09ebcfa7eccfa8eecfa9 -e6cfa4e7cfa5eacfa6e1cf9fe2cfa0e3 -cfa1e4cfa2e5cfa30016ed2af514f809 -f8cfc9f9cfcafacfcbf5cfc6f6cfc7f7 -cfc8f009f0cfc3f3cfc4f4cfc5edcfc0 -eecfc1efcfc2e714ea09eacfbdebcfbe -eccfbfe7cfbae8cfbbe9cfbce1cfb5e3 -cfb6e4cfb7e5cfb8e6cfb90014ed25f3 -14f809f8cfdef9cfdffacfe0f3cfdbf5 -cfdcf7cfddedcfd6eecfd7efcfd8f0cf -d9f1cfdae60fe6cfd1e7cfd2e8cfd3e9 -cfd4ebcfd5e1cfcce2cfcde3cfcee4cf -cfe5cfd00015ed25f314f609f6cff3f8 -cff4f9cff5f3cff1f4cff2f5af6aedcf -eceecfedefcfeef1cfeff2cff0e714ea -09eacfe9ebcfeaeccfebe7cfe6e8cfe7 -e9cfe8e1cfe1e2cfe2e3cfe3e4cfe4e5 -cfe5001a6fc101775ae72ce742ebd3a0 -f2d510fa012a8a41127261e2d5f5012a -2e43127972ecd394022ad3934b2a4d10 -ced39510dad394776479687a01ee26f3 -d5f7012a2e41127261e2d5f5022ad527 -412a4310ced5f610c6d5f510e1d5f310 -e1d5f47345733e746a75907602e5d5f0 -e8d5f1ecd5f206eb0cebd5e5f0d5e6f3 -d5e7f5d5e8e1d5e2e8d5e3e9d5e405f0 -09f0d5ebf2d5ecf5d5ede1d5e9e5d5ea -e8af7301edd5eef2d5ef6fa24d70a251 -720014ee25f514f809f8d5dff9d5e0fa -d5e1f5d5dcf6d5ddf7d5deeed5d7efd5 -d8f0d5d9f2d5daf4d5dbe70fe7d5d2e8 -d5d3e9d5d4ebd5d5edd5d6e1d5cde2d5 -cee3d5cfe5d5d0e6d5d101ebafcaeed5 -ca01e9d5cbf6d5cc68c0dc6bc0c26ba2 -436ca2666da28e6e0bee25f509f5d5c7 -f8d5c8fad5c9eed5c3f0d5c4f2012a2e -44126576e1d5c6012ad5c54e10d0d5c6 -e909e9d5c0ebd5c1edd5c2e1d3c1e5d5 -bee7d5bf0af014f609f6d3a9f7d3aaf9 -d3abf0d3a6f1d3a7f5d3a8e1d3a1e7d3 -a2e8d3a3e9d3a4ebd3a50beb14f509f5 -d3b5f7cf5cf9d3b6ebd3b2edd3b3eed3 -b4e509e5d3afe6d3b0e9d3b1e1d3ace2 -d3ade3d3ae0bee14f209f2d3bff3d3c0 -f5adc5eed3bcefd3bdf0d3bee709e7d3 -bae9cf96edd3bbe1d3b7e2d3b8e4d3b9 -682e69386a10e9d39f01e1d39beed39c -01f3d39df6d39e651d6546664a6704e1 -d396e2d397e5d398e8d399efd39a10f3 -d39110e9d392615c62666407ea0cead3 -8decd38eedd38ff5d390e1d389e5d38a -e7d38be9d38c01edd381f2d38205f209 -f2d386f5d387f9d388e1d383e9d384ec -d38570cedc70b00571b8d972baa27300 -2b77c11aec25f214f509f5cf53f6cf66 -f7cf6df2ae9af3cf28f4cf3deccdabed -cdbceecdd1efcde6f1a3cfe336e709e7 -cd46e9cd6febcd92e3cd00e426e5cd2a -032a3644444b4c5312696ee4cd19012a -cd164910cecd17126576e1cd1712686f -eacd18773878a24a79a25f7aa28ae1ab -f00012f020f50ff5cf7bf6cf7cf7cf7d -f8cf7ef9cf7ff0cf76f1cf77f2cf78f3 -cf79f4cf7ae90fe9cf71eacf72ebcf73 -edcf74efcf75e2cf6ee6cf6fe7cf70e8 -cf6d06f20cf2cf83f3cf84f5cf85f7cf -86e2cf80e5cf81eecf820ced17f20cf2 -abe7f3cf90f7cf91f8cf92edcf8deecf -8eefcf8fe909e9cf8aebcf8beccf8ce1 -cf87e2cf88e3cf890aec14f609f6cf9b -f7cf9cf9cf9deccf98eecf99f0cf9ae1 -cf93e2cf94e3cf95e4cf96e7cf976cc2 -c171c15d74a5745275a25f7605e509e5 -cf6aedcf6bf3cf6ce1cf67e2cf68e3cf -690014ed25f214f609f6cf50f7cf51f9 -cf52f2cf4df3cf4ef4cf4fedcf48eecf -49efcf4af0cf4bf1cf4ce80fe8cf43e9 -cf44eacf45ebcf46eccf47e1cf3ee2cf -3fe5cf40e6cf41e7cf420012ed20f40f -f4cf61f6cf62f7cf63f9cf64facf65ed -cf5cefcf5df1cf5ef2cf5ff3cf60e70f -e7cf58e9cf59eacf5aebcf5beccd4ae1 -cf54e2cf55e3cf56e5cf5771a24872a2 -5d730013ee20f50ff5cf38f6cf39f8cf -3af9cf3bfacf3ceecf33efcf34f1cf35 -f3cf36f4cf37e70fe7cf2ee8cf2feacf -30eccf31edcf32e2cf29e3cf2ae4cf2b -e5cf2ce6cf2d06ef0cefcf0ff1cf10f4 -cf11f5cf12e1cf0ce8cf0dedcf0e0016 -ee2af514f809f8b3e1f9cf26facf27f5 -cf23f6cf24f7cf25f209f2cf20f3cf21 -f4cf22eecf1defcf1ef1cf1fe714eb09 -ebcf1aeccf1bedcf1ce7cf17e8cf18e9 -cf19e1cf13e2cf14e3cd00e5cf15e6cf -166ca2486da2806ea2c66fa411700011 -ee1df20ff2cf08f3cf09f4cf0af6cf0b -f9b984eecf04efcf05f0cf06f1cf07e7 -0fe7cdffe9cf00ebcf01eccf02edcf03 -e2cdfbe3cdfce4cdfde5cdfe0010ee1d -f50ff5cdb7f7cdb8f8cdb9f9cdbafacd -bbeecdb4efcd92f0cdb5f2cdb6e90ce9 -cdb0eacdb1eccdb2edcdb3e3cdace4cd -ade7cdaee8cdaf0014ee25f414f809f8 -cdcef9cdcffacdd0f4cdcbf5cdccf7cd -cdeecdc6f0cdc7f1cdc8f2cdc9f3cdca -e70fe7cdc1e8cdc2eacdc3ebcdc4eccd -c5e1cdbde2cdbee3cdbfe4b993e6cdc0 -0015ef25f514f809f8cde4f9cde5faa5 -64f5cde1f6cde2f7cde3efcddcf0cddd -f1cddef2cddff3cde0e914ec09eccdd9 -edcddaeecddbe9cdd6eacdd7ebcdd8e2 -a7f3e3cdd2e5cdd3e6cdd4e7cdd50013 -f020f60ff6cdf6f7cdf7f8cdf8f9cdf9 -facdfaf0cdf1f1cdf2f2cdf3f3cdf4f5 -cdf5e70fe7cdece9cdedebcdeeeccdef -efcdf0e1cde7e2cde8e3cde9e4cdeae5 -cdeb66c17d69c0d869a25c6aa2a76b00 -17ef2af514f809f8cda8f9cda9facdaa -f5cda5f6cda6f7cda7f209f2cda2f3cd -a3f4cda4efcd9ff0cda0f1cda1e714ea -09eacd9cedcd9deecd9ee7cd99e8cd9a -e9cd9be409e4cd96e5cd97e6cd98e1cd -93e2cd94e3cd950015ed25f514f809f8 -cd83f9cd84facd85f5cd80f6cd81f7cd -82edcd7bf0cd7cf1cd7df2cd7ef3cd7f -e714ea09eacd78ebcd79eccd7ae7cd75 -e8cd76e9cd77e1cd70e2cd71e4cd72e5 -cd73e6cd740bed14f409f4cd8ff5cd90 -f7cd91edcd8cf0cd8df2cd8ee509e5cd -89e7cd8aeccd8be1cd86e2cd87e4cd88 -66a25767a25e680016ee2af414f709f7 -cd6cf9cd6dfacd6ef4cd69f5cd6af6cd -6bf109f1cd66f2cd67f3cd68eecd63ef -cd64f0cd65e714ea09eacd60ebcd61ed -cd62e7cd5de8cd5ee9cd5fe1cd58e2cd -59e3cd5ae4cd5be5cd5c02e5cd43edcd -44f7cd450011ed1df40ff4cd53f5cd54 -f7cd55f9cd56facd57edcd4ff0cd50f2 -cd51f3cd52e50fe5cd4be8cd4ce9cd4d -eacd4eecb5d1e1cd47e2cd48e3cd49e4 -cd4a61a26262a2ad63a40564a4586500 -17ee2af414f709f7cd40f9cd41facd42 -f4cd3df5cd3ef6cd3ff109f1cd3af2cd -3bf3cd3ceecd37efcd38f0cd39e714ea -09eacd34ebcd35eccd36e7cd31e8cd32 -e9cd33e409e4cd2ee5cd2fe6cd30e1cd -2be2cd2ce3cd2d0015f025f514f809f8 -cbe4f9cbe5facbe6f5cbe1f6cbe2f7cb -e3f0a546f1cbddf2cbdef3cbdff4cbe0 -e614eb09ebcbdaedcbdbefcbdce6cbd7 -e8cbd8eacbd9e1cbd2e2cbd3e3cbd4e4 -cbd5e5cbd60018ee2df417f70cf7cbfc -f8cbfdf9cbfefacbfff4cbf9f5cbfaf6 -cbfbf109f1cbf6f2cbf7f3cbf8eecbf3 -efcbf4f0cbf5e814eb09ebcbf0eccbf1 -edcbf2e8cbede9cbeeeacbefe409e4cb -eae5cbebe7cbece1cbe7e2cbe8e3cbe9 -0012ee20f40ff4cd11f5cd12f6cd13f7 -cd14f8cd15eecd0defcd0ef0cd0ff2b5 -1ff3cd10e70fe7cd08e8cd09e9cd0aeb -cd0beccd0ce2cd01e32ce5cd06e6cd07 -22032acd024d2e52325410d2cd0510c5 -cd0310cfcd040feb1af20cf2cd26f3cd -27f5cd28f8cd29ebcd22eecd23efcd24 -f1cd25e60ce6cd1ee7cd1fe8cd20eacd -21e1cd1ae2cd1be3cd1ce5cd1d001d70 -c17b784be90ce9c94aecc96af3c909f4 -c9e1785079547a7ae1012a2e41127261 -e2c7e2012ac7e15010cbc7e210edcb07 -05f509f5cb0bf8cb0cf9cb0de5cb08ed -cb09eecb0a02e5cb0ee8cb0feecb1073 -af736474a24575a2637707ee0ceecb03 -efcb04f2cb05f7cb06e1c9ffe2cb00e7 -cb01edcb020aee14f409f4c9def5c9df -f7c9e0eec9dbf1c9dcf3c9dde1c9d6e5 -c9d7e8c9d8e9c9d9edc9da09f00ff0c9 -e7f2c9e8f4c9e9f5c9eaf6c9ebe1c9e2 -e8c9e3e9c9e4eec9e5efc9e60013ef20 -f50ff5c9fbf7c9fcf8c9fdf9c9fefac9 -edefc9f6f0c9f7f1c9f8f2c9f9f4c9fa -e60fe6c9f1e7c9f2e9c9f3eac9f4edc9 -f5e1c9ece2c9ede3c9eee4c9efe5c9f0 -70a24571a270720012ed20f40ff4c9d2 -f5c9d3f7c9d4f8c9d5f9c9d2edc9ceef -c9cff0b365f1c9d0f2c9d1e60fe6c9c9 -e7c9cae8c9cbe9c9ccebc9cde1c9c5e3 -c9c6e4c9c7e5c9c80cee17f10cf1c9c0 -f2bd12f3c9c1f4c9c2eec9bdefc9bef0 -c9bfeb09ebc9baecc9bbedc9bce1a776 -e5c9b8e9c9b901e1c9c3edc9c468c1f7 -6cc14d6ca2426da27d6ea2c86f0010ee -1df30ff3c9b3f4c9b4f6c9b5f7c9b6f9 -c9b7eec9afefc9b0f0c9b1f1c9b2e80c -e8c9abe9c9acebc9adedc9aee3c9a7e5 -c9a8e6c9a9e7c9aa0011ee1df40ff4bf -b3f5b906f6c978f7c979fac97aeec974 -efc975f2c976f3c977e50fe5c96fe7c9 -70e8c971ebc972ecc973e1c96be2c96c -e3c96de4c96e0015ee25f414f809f8c9 -8cf9c98dfac98ef4c98af5c945f7c98b -eec985efc986f1c987f2c988f3c989e6 -14ea09eac982ecc983edc984e6c97fe8 -c980e9c981e1c97be2c97ce3b548e4c9 -7de5c97e0016ed53f33df709f7c9a4f9 -c9a5fac9a6f3c99ff426f6c9a3022a32 -435e4c126174eec9a2042ac9a0313252 -3853345410d2c9a21137b2c9a110d5c9 -a1127972ecc9a1f009f0c99cf1c99df2 -c99eedc999eec99aefc99be714ea09ea -c996ebc997ecc998e7c993e8c994e9c9 -95e1c98fe2bbe9e3c990e4c991e5c992 -686a69a2506aa29b6b08ee0feec965ef -c966f0c967f2c968f5c969e1c961e2c9 -62e7c963e8c9640cee17f40cf4c946f5 -c947f6c948f7c949eec943efc944f2c9 -45eb09ebc940ecc941edc942e4c93de7 -c93ee8c93f0015ef25f514f809f8c95d -f9c95efac95ff5c95af6c95bf7c95cef -c955f0c956f2c957f3c958f4c959e714 -ec09ecc952edc953eec954e7c950e8c9 -51eaad1fe1c94be2c94ce3c94de4c94e -e6c94f10f4c96064836468658e66a272 -6708eb0febc938ecc939eec93af3c93b -f5c93ce1c934e4c935e7c936e9c93705 -ef09efc91ef4c91ff5c920e1c91be3c9 -1ceec91d0011ef1df30ff3b113f6c92d -f8c92ef9c92ffac930efc92af0c92bf1 -c92cf2b113e70fe7c925e9c926ebc927 -ecc928edc929e1c921e2c922e4c923e5 -c92402e1c931e5c932ecc933619662a2 -95630fe91aee0ceec918f0c919f2a355 -f7c91ae9c914eac915ebc916edc917e5 -0ce5c910e6c911e7c912e8c913e1c90c -e2c90de3c90ee4c90f0016ef2af514f8 -09f8c7f7f9c7f8fac7f9f5c7f4f6c7f5 -f7c7f6f209f2c7f2f3c7f3f4bbabefc7 -eff0c7f0f1c7f1e71eeb13ebc7ebec26 -edc7ee012ac7ec5012686cf0c7ede7c7 -e8e8c7e9e9c7eae2c7e3e3c7e4e4c7e5 -e5c7e6e6c7e70011ee1df30ff3c907f4 -c908f5c909f6c90af9c90beec903efc9 -04f0c905f2c906e70fe7c7fee8c7ffe9 -c900ecc901edc902e2c7fae3c7fbe5c7 -fce6c7fd057839782a797cf5cb110bf0 -14f409f4cb42f5cb43f7cb44f0cb3ff1 -cb40f2cb41ec09eccb3ceecb3defcb3e -e1cb39e3cb3ae8cb3b01e1cb45f0cb46 -755276a25a7705ed09edcb36f3cb37f4 -cb38e1cb33e3cb34e8cb350013ee20f6 -0ff6cb21f7cb22f8cb23f9cb24facb11 -eecb1cf0cb1df1cb1ef2cb1ff3cb20e7 -0fe7cb17e9cb18ebcb19eccb1aedcb1b -e1cb12e2cb13e3cb14e4cb15e6cb160d -ed17f00cf0cb2ff3cb30f7cb31facb32 -edcb2ceecb2defcb2ee80ce8cb28e9cb -29eacb2aeccb2be1cb25e3cb26e5cb27 -0019709f7820ee0ceecb9aefc16cf5cb -b9f7cbc8782a7934edcb8401e4cbcff7 -cbd010f5cbd1745b745075667705ed09 -edcbccefcbcdf2cbcee1cbc9ebcbcaec -cbcb03e3cbb5e8cbb6edcbb7f7cbb80e -ed1af40cf4cbc4f5cbc5f9cbc6facbc7 -edc16cefcbc1f0cbc2f1cbc3e60ce6cb -bde7cbbee9cbbfebcbc0e2cbbae3cbbb -e5cbbc7034723e7301ebcbb3f7cbb401 -eecbadf4cbae03e9cbafedcbb0efcbb1 -f4cbb268c0ea6bb76b8a6da24a6ea29a -6f0cec17f00cf0cba9f2cbaaf5cbabf7 -cbaceccba7edcb98efcba8e509e5cba4 -e6cba5e7cba6e2cba1e3cba2e4cba306 -e90ce9ab7dedcb81f4cb82f7cb83e1cb -7ee2cb7fe8cb800016ed2af414f809f8 -bda3f9cb98facb99f4cb95f5cb96f7cb -97f009f0cb93f1cb94f2afd7edcb90ee -cb91efcb92e614e909e9cb8debcb8eec -cb8fe6cb8ae7cb8be8cb8ce1cb85e2cb -86e3cb87e4cb88e5cb8905ee09eecb9e -f2cb9ff7cba0e4cb9be7cb9ceccb9d68 -3a69446a02e7cb7be9cb7cf3cb7d01e7 -cb71f0cb7207ee0ceecb77f2cb78f4cb -79f5cb7ae1cb73e6cb74eccb75edcb76 -64446446654a6704e1cb6ceecb6df2cb -6ef3cb6ff5cb7010e2cb5f0bec14f309 -f3cb69f4cb6af9cb6beccb66edcb67ee -cb68e709e7cb63e9cb64eacb65e1cb60 -e2cb61e5cb62613062a2496310e6cb5e -0013ed20f60ff6cb55f7cb56f8cb57f9 -cb58facb59edcb50eecb51efcb52f0cb -53f2cb54e70fe7cb4ce8cb4de9cb4eea -c309ebcb4fe1cb47e2cb48e3cb49e4cb -4ae6cb4b03e2cb5aebcb5beccb5cf0cb -5d6da6596eb8666f001b70c0f27923ea -0ceac769edb183f2c7acf3c7bb792a7a -3ae3c75502e4c7ddedc7def9c7df10ed -c7e07462743c75a24976a2567701e9c7 -dbecc7dc0011f11df50ff5c7d1f7c7d2 -f8c7d3f9c7d4fac7d5f1c7cdf2c7cef3 -c7cff4c7d0e90fe9c7c8ebc7c9ecc7ca -edc7cbeec7cce1c7c4e2c7c5e4c7c6e5 -c7c704e2c7d6e5c7d7e9c7d8edc7d9ee -b1cc10e4c7da705c72827307f00cf0c7 -c0f4c7c1f5c7c2f8c7c3e1c7bce3c7bd -e9c7beefc7bf05ef09efc7a9f4c7aaf9 -c7abe1b560ebc7a7edc7a80ef31af70c -f7c7b8f8c7b9f9c7acfac7baf3c7b4f4 -c7b5f5c7b6f6c7b7e70ce7c7b0eec7b1 -efc7b2f2c7b3e1c7ade3c7aee5c7af69 -c0f06c926c406d786ea25a6f02e4c7a4 -eec7a5f2c7a608ed0fedc783efc784f2 -c785f4c786f5c787e1c77fe4c780e5c7 -81ebc7820def17f40cf4c792f5c793f7 -c794f8c795efc78ff0c790f2c791e70c -e7c78be9c78cebc78decc78ee1c788e2 -c789e3c78a0def17f30cf3c7a0f4c7a1 -f5c7a2f8c7a3efc79df0c79ef2c79fe9 -0ce9c799eac79aebc79beec79ce1c796 -e5c797e7c79869966aa2426b0fed1af5 -0cf5c77bf6c77cf8c77dfac77eedc777 -efc778f2c779f3c77ae50ce5c773e7c7 -74e9c775ebc776e1c76fe2c770e3c771 -e4c77202e1c766e5c767eec76805f309 -f3c76cf6c76df7c76ee2c76ae3c76be7 -c76964326438664e67586801f4c764f5 -c76503e1c759ebc75af4c75bf5c75c01 -f3c75df5c75e04e2c75fe3c760e7c761 -efc762f5c763613a62506302e1c756ef -c757f5c75803e1c749e3c74af2c74bf6 -c74c07ef0cefc751f2c752f4c753f5c7 -54e9c74debc74eecc74fedc750002473 -c2cae82aef0fefc16cf2c1b4f3b200f4 -c1e3f9a9d2e8bfcde9bf2febbf26ecc1 -28ee012ad833ed4d126f6ee7af5177c1 -4c773878a26179a2bc7aa2fde7bfb300 -17ed2af314f609f6c33af7c33bfac33c -f3c337f4c338f5c339f009f0c335f1c3 -36f2addfedc332eec333efc334e714ea -09eab1ccebc330ecc331e7c32de8c32e -e9c32fe409e4af29e5c32be6c32ce1c3 -28e2c329e3c32a0019ee2df417f70cf7 -c353f8c354f9c355fac356f4c350f5c3 -51f6c352f109f1c34df2c34ef3c34fee -c34aefc34bf0c34ce717ea0ceac346eb -c347ecc348edc349e7c343e8c344e9c3 -45e409e4c340e5c341e6c342e1c33de2 -c33ee3c33f0013ed20f60ff6c364f7c3 -65f8c366f9c367fac368edc360f0c361 -f2c362f4c1cbf5c363e70fe7c35be8c3 -5ceac35debc35eecc35fe2c357e3c358 -e4a51de5c359e6c35a0013ef20f50ff5 -c378f6c379f7c37af8c37bfac37cefc3 -73f0c374f1c375f2c376f4c377ea0fea -c36eebc36fecc370edc371eec372e1c3 -69e4c36ae5c36be8c36ce9c36d73a250 -74a2a075a2f8760014f025f514f809f8 -c325f9c326fac327f5c322f6c323f7c3 -24f0c31df1c31ef2c31ff3c320f4c321 -e80fe8c318ebc319ecc31aeec31befc3 -1ce1c313e4c314e5c315e6c316e7c317 -0016ee2af514f809f8c1e0f9c1e1fac1 -e2f5c1ddf6c1def7c1dff109f1c1dbf3 -c1dcf4c1cbeec1d8efc1d9f0c1dae814 -eb09ebc1d5ecc1d6edc1d7e8c1d2e9c1 -d3eac1d4e2c1cde3c1cee5c1cfe6c1d0 -e7c1d10018ed2df317f60cf6c1f9f7c1 -faf8c1fbf9c1fcf3c1f6f4c1f7f5c1f8 -f009f0c1f3f1c1f4f2c1f5edc1f0eec1 -f1efc1f2e714ea09eac1edebc1eeecc1 -efe7c1eae8c1ebe9c1ece409e4c1e7e5 -c1e8e6c1e9e1c1e4e2c1e5e3c1e60015 -ef25f414f809f8c310f9c311fac312f4 -c30df5c30ef6c30fefc308f0c309f1c3 -0af2c30bf3c30ce714ea09eac305ebc3 -06edc307e7c302e8c303e9c304e1c1fd -e2c1fee3c1ffe4c300e5c3016ac3076e -c1c76ea2626fa2bb70a40b71a4637200 -17ef2af514f809f8c1caf9c1cbfac1cc -f5c1c7f6c1c8f7c1c9f209f2c1c4f3c1 -c5f4c1c6efc1c1f0c1c2f1c1c3e814ec -09ecc1beedc1bfeec1c0e8c1bbeac1bc -ebc1bde409e4c1b8e6c1b9e7c1bae1c1 -b5e2c1b6e3c1b70018ed2df417f70cf7 -c168f8c169f9c16afac16bf4c165f5c1 -66f6c167f109f1c162f2c163f3c164ed -c15feec160f0c161e715ea0aeac15deb -d829caecc15ee7c15ae8c15be9c15ce4 -09e4c157e5c158e6c159e1c154e2c155 -e3c1560016ef2af514f809f8c180f9c1 -81fac182f5c17df6c17ef7c17ff209f2 -c17af3c17bf4c17cefc177f0c178f1c1 -79e714ea09eac175ebc176edabd2e7c1 -72e8c173e9c174e1c16de3c16ee4c16f -e5c170e6c1710018ee2df417f70cf7c1 -98f8c199f9c19afac19bf4c195f5c196 -f6c197f109f1c192f2c193f3c194eec1 -8fefc190f0c191e814eb09ebc18cecc1 -8dedc18ee8c189e9c18aeac18be409e4 -c186e5c187e7c188e1c183e2c184e3c1 -850017ee2af514f809f8c1b1f9c1b2fa -c1b3f5c1aef6c1aff7c1b0f109f1c1ab -f2c1acf3c1adeec1a8efc1a9f0c1aae8 -14eb09ebc1a5ecc1a6edc1a7e8c1a2e9 -c1a3eac1a4e509e5c19fe6c1a0e7c1a1 -e1c19ce2c19de3c19e6aa2556ba2a06c -a2eb6d0015ef25f514f809f8c151f9c1 -52fac153f5c14ef6c14ff7c150efc149 -f0c14af1c14bf2c14cf4c14de614e909 -e9c146edc147eec148e6c143e7c144e8 -c145e1c13ee2c13fe3c140e4c141e5c1 -420015ee25f514f809f8c10ff9c110fa -c111f5c10cf6c10df7c10eeec107f1c1 -08f2c109f3c10af4c10be814eb09ebc1 -04ecc105edc106e8c101e9c102eac103 -e2bffce3bffde4bffee5bfffe7c10000 -15ef25f514f809f8c125f9c126fac127 -f5c122f6c123f7c124efc11df0c11ef2 -c11ff3c120f4c121e914ec09ecc11aed -c11beec11ce9c117eac118ebc119e1c1 -12e2c113e3c114e5c115e6c1160014ee -25f314f709f7c13bf8c13cfac13df3c1 -38f5c139f6c13aeec133efc134f0c135 -f1c136f2c137e80fe8c12ee9c12feac1 -30ebc131ecc132e1c129e2c12ae3c12b -e5c12ce6c12d65c1c465a26266a2b267 -a40a68a465690017ed2af414f809f8bf -f9f9bffafabffbf4bff6f5bff7f7bff8 -f009f0bff3f1bff4f2bff5edbff0eebf -f1efbff2e714ea09eabfedebbfeeecbf -efe7bfeae8bfebe9bfece409e4bfe7e5 -bfe8e6bfe9e1bfe4e2bfe5e3bfe60016 -ee2af414f709f7bf97f9bf98fabf99f4 -bf94f5bf95f6bf96f109f1bf91f2bf92 -f3bf93eebf8eefbf8ff0bf90e714eb09 -ebbf8becbf8cedbf8de7abc6e8bf89ea -bf8ae1bf84e2bf85e3bf86e4bf87e5bf -880018ed2df417f70cf7bfaff8bfb0f9 -bfb1fabfb2f4bfacf5bfadf6bfaef009 -f0bfa9f1bfaaf2bfabedbfa6eebfa7ef -bfa8e714ea09eabfa3ebbfa4ecbfa5e7 -bfa0e8bfa1e9bfa2e409e4bf9de5bf9e -e6bf9fe1bf9ae2bf9be3bf9c0019ee2d -f417f70cf7bfcaf8b711f9bfcbfabfcc -f4bfc7f5bfc8f6bfc9f109f1bfc4f2bf -c5f3bfc6eebfc1efbfc2f0bfc3e717ea -0ceabfbdebbfbeecbfbfedbfc0e7bfba -e8bfbbe9bfbce409e4bfb7e5bfb8e6bf -b9e1bfb4e2bfb5e3bfb60016ee2af414 -f809f8bfe1f9bfe2fabfe3f4bfdef5bf -dff7bfe0f109f1bfdcf2abb3f3bfddee -bfd9efbfdaf0bfdbe714eb09ebbfd6ec -bfd7edbfd8e7bfd3e9bfd4eabfd5e2bf -cee3bfcfe4bfd0e5bfd1e6bfd261a25f -62a2b463a409640017ee2af514f809f8 -bf81f9bf82fabf83f5bf7ef6bf7ff7bf -80f209f2bf7bf3bf7cf4bf7deebf78f0 -bf79f1bf7ae714ea09eabf75ebbf76ed -bf77e7bf72e8bf73e9bf74e409e4bf6f -e5bf70e6bf71e1bf6ce2bf6de3bf6e00 -15ee2ff51df812f8bf36f926fabf3922 -012abf374310c3bf38f5bf33f6bf34f7 -bf35eed82517efbf2ff1bf30f3bf31f4 -bf32e614ea09eabf2cebbf2dedbf2ee6 -bf29e7bf2ae9bf2be1bf24e2bf25e3bf -26e4bf27e5bf280017ef2af514f809f8 -bf4ff9bf50fabf51f5bf4cf6bf4df7bf -4ef209f2bf49f3bf4af4bf4befbf46f0 -bf47f1bf48e914ec09ecbf43edbf44ee -bf45e9bf40eabf41ebbf42e409e4bf3d -e6bf3ee8bf3fe1bf3ae2bf3be3bf3c00 -19ee2df417f70cf7bf68f8bf69f9bf6a -fabf6bf4bf65f5bf66f6bf67f109f1bf -62f2bf63f3bf64eebf5fefbf60f0bf61 -e717ea0ceabf5bebbf5cecbf5dedbf5e -e7bf58e8bf59e9bf5ae409e4bf55e5bf -56e6bf57e1bf52e2bf53e3bf54002473 -c1dfe220ee0feec589efc5a1f2c5c8f6 -c70ff9c727e2c395e4c3bfe5c3d8e7c3 -f3ecaf8377c0d27736787479a2527aa2 -a7e1c37d09ed0fedc717efc718f2c719 -f7c71af8c71be2c712e3c713e5c714e7 -c715e9c7160bee14f209f2c725f5a958 -f8c726eec722efc723f1c724e709e7c7 -1fe9c720ecc721e1c71ce4c71de5c71e -0017ee2af414f709f7c73cf8c73df9c7 -3ef4c739f5c73af6c73bf109f1c736f2 -c737f3c738eec733efc734f0c735e814 -eb09ebc730ecc731edc732e8c72de9c7 -2eeac72fe509e5c72ae6c72be7c72ce2 -c728e3b364e4c72909ed0fedc744f2c7 -45f5c746f9c747fac748e1c73fe2c740 -e4c741e9c742ebc743734274a25775a2 -887602e8c710edc711efa7000014ee25 -f514f809f8c5e7f9c5e8fac5e9f5c5e4 -f6c5e5f7c5e6eec5dfefc5e0f1c5e1f3 -c5e2f4c5e3e60fe6c5dae7c5dbe8c5dc -ebc5ddedc5dee1c5d5e2c5d6e3c5d7e4 -c5d8e5c5d90eef1af50cf5c5f4f8c5f5 -f9c5f6fac5f7efc5f1f0c5f2f2c5f3f3 -ad1fe90ce9c5edeac5eeebc5efedc5f0 -e4c5eae5c5ebe7c5ec0017ef2af514f8 -09f8c70cf9c70dfac70ef5c709f6c70a -f7c70bf209f2c706f3c707f4c708efc7 -03f0c704f1c705e814eb09ebc701edc7 -02eea5dce8c5fee9c5ffeac700e509e5 -c5fbe6c5fce7c5fde1c5f8e3c5f9e4c5 -fa6ac2596ec1256e966fa29370a2d971 -a2fc720dec17f00cf0c5d2f5c39bf8c5 -d3fac5d4ecc5cfedc5d0eec5d1e60ce6 -c5cce7c5cde9c5ceebc569e1c5c9e2c5 -cae5c5cb0018ed2df417f70cf7c59ef8 -c506f9c59ffac5a0f4c59bf5c59cf6c5 -9df109f1c599f2c59af3c3a5edc596ee -c597f0c598e714ea09eac593ebc594ec -c595e7c590e8c591e9c592e409e4c58d -e5c58ee6c58fe1c58ae2c58be3c58c00 -14ed25f314f609f6c5b2f7c5b3f9c5b4 -f3c5aff4c5b0f5c5b1edab6ceec5acef -af64f0c5adf1c5aee70fe7c5a7e8c5a8 -e9c5a9eac5aaebc5abe1c5a2e3c5a3e4 -c5a4e5c5a5e6c5a60aee14f509f5c5bc -f8c5bdf9c5beeec5b9efc5baf3c5bbe2 -c5b5e7c5b6e8c5b7e9c3d8ecc5b808ee -0feec5c3efc5c4f1c5c5f4c5c6f9c5c7 -e7c5bfebc5c0ecc5c1edc5c26aa2626b -a29a6ca2ea6d0018ed2df317f60cf6c5 -85f7c586f8c587fac588f3c582f4c583 -f5c584f009f0c57ff1c580f2c581edc5 -7ceec57defc57ee714ea09eac579ebc5 -7aecc57be7c576e8c577e9c578e409e4 -c573e5c574e6c575e1c570e2c571e3c5 -720010ee1df40ff4c544f5c545f8c546 -f9c547faad93eec540efc541f2c542f3 -c543e90ce9c53ceac53decc53eedc53f -e1c538e2c539e4c53ae8c53b0016ed2a -f414f709f7c55cf8c55dfac55ef4c559 -f5c55af6c55bf109f1c556f2c557f3c5 -58edc553eec554efc555e614e909e9c5 -50eac551ebc552e6c54de7c54ee8c54f -e1c548e2c549e3c54ae4c54be5c54c00 -11ef1df60ff6c56bf7c56cf8c56df9c5 -6efac56fefc567f1c568f2c569f5c56a -e90fe9c563eac564ebc565edc566eea5 -e3e1c55fe3c560e5c561e7c56265c15f -65a25d66a2a367a2b068a405690016ee -2af514f809f8c535f9c536fac537f5c5 -32f6c533f7c534f209f2c52ff3c530f4 -c531eec52cefc52df1c52ee714ea09ea -c529ecc52aedc52be7c526e8c527e9c5 -28e1c521e2c522e4c523e5c524e6c525 -0014ed25f414f809f8c3ebf9c3ecfac3 -edf4c3e8f5c3e9f7c3eaedc3e3eec3e4 -efc3e5f1c3e6f2c3e7e70fe7c3dee8c3 -dfe9c3e0eac3e1ebc3e2e1c3d9e2c3da -e3c3dbe4c3dce5c3dd04e1c3eee4c3ef -ecc3f0f2c3f1f5c3f20017ee2af514f8 -09f8c508f9c509fac50af5c505f6c506 -f7c507f209f2c503f3c504f4bd92eec5 -00f0c501f1c502e814eb09ebc3fdecc3 -feedc3ffe8c3fae9c3fbeac3fce409e4 -c3f7e5c3f8e7c3f9e1c3f4e2c3f5e3c3 -f60015ef25f514f809f8c51ef9c51ffa -c520f5c51bf6c51cf7c51defc516f0c5 -17f1c518f2c519f4c51ae614eb09ebc5 -13edc514eec515e6c510e7c511e9c512 -e1c50be2c50ce3c50de4c50ee5c50f61 -a25f62a2bc63a407640017ee2af514f8 -09f8c3d5f9c3d6fac3d7f5c3d2f6c3d3 -f7c3d4f209f2c3cff3c3d0f4c3d1eec3 -ccf0c3cdf1c3cee814eb09ebc3c9ecc3 -caedc3cbe8c3c6e9c3c7eac3c8e409e4 -c3c3e6c3c4e7c3c5e1c3c0e2c3c1e3c3 -c20015ee37f314f809f8c392f9c393fa -c394f3c38ff4c390f7c391ee38efc38b -f0c38cf1c38df2c38e012a2e4812616e -f4c38a012ac3895410d7c38ae614eb09 -ebc386ecc387edc388e6c383e7c384ea -c385e1c37ee2c37fe3c380e4c381e5c3 -820015ee25f414f709f7c3a9f8b307f9 -c3aaf4c3a6f5c3a7f6c3a8eec3a1efc3 -a2f0c3a3f1c3a4f2c3a5e614ea09eac3 -9eebc39fedc3a0e6c39be8c39ce9c39d -e1c396e2c397e3c398e4c399e5c39a00 -15ec25f114f509f5c3bcf8c3bdfac3be -f1b7fff2c3baf4c3bbecc3b6edc3b7ee -c3b8efc3b9f0b7cce614e909e9c3b3ea -c3b4ebc3b5e6c3b0e7c3b1e8c3b2e1c3 -abe2c3ace3c3ade4c3aee5c3af66dbf4 -69d2ea69aade6ab05c6bb4406c002272 -c13ee11dee0feebdaeefbdbdf4bdeef5 -bdf7f6bf0de1bbe2e2bbf7e7bd3de9bd -557667766e779478a25579a2567a03e8 -bf1fecbf20eebf21fa012a2e4712656f -f2bf23012abf224710c5bf2305ec09ec -bf11f3bf0df5bf12e1bf0ee9bf0febbf -1008ec0fecbf17edbf18efbf19f4bf1a -f7bf1be1bf13e5bf14e7bf15e8bf1610 -edbf1c01e1bf1deebf1e72a25573a27d -74a292750015ef25f414f709f7bf0bf9 -ab12fabf0cf4bf08f5bf09f6bf0aefbf -03f0bf04f1bf05f2bf06f3bf07e914ec -09ecbf00edbf01eebf02e9bdfdeabdfe -ebbdffe1bdf8e3bdf9e4bdfae5bdfbe6 -bdfc0bed14f409f4bde4f6bde5fabde6 -edbde1eebde2efbde3e909e9bddeebbd -dfecbde0e1bddbe3bddce7bddd06e90c -e9bdeaedbdebf2bdecf3bdede1bde7e4 -bde8e5bde907ee0ceebdf3efbdf4f3bd -f5f5bdf6e3bdefe7bdf0e8bdf1e9bdf2 -69c1ed6dc0f76d3c6ea25e6fa28c70a2 -dc7110f2bdda0016ec2af214f709f7bd -abf8bdacf9bdadf2bda8f5bda9f6bdaa -ef09efbda5f0bda6f1bda7ecbda2edbd -a3eebda4e614e909e9bd9feabda0ebbd -a1e6bd9ce7bd9de8bd9ee1bd97e2bd98 -e3bd99e4bd9ae5bd9b0dec17f30cf3bd -b9f5bdbaf7bdbbfabdbcecbdb6edbdb7 -eebdb8e70ce7bdb2e8bdb3e9bdb4eabd -b5e1bdafe2bdb0e4bdb10016ee2af414 -f809f8bdd2f9bdd3fabdd4f4bdcff5bd -d0f7bdd1f109f1bdccf2bdcdf3bdceee -bdc9efbdcaf0bdcbe814eb09ebbdc6ec -bdc7edbdc8e8bdc3e9bdc4eabdc5e1bd -bee2bdbfe3bdc0e5bdc1e7bdc204e1bd -d5e5bdd6eebdd7efbdd8f8bdd969a245 -6aa29a6ba2af6c0011eb1def0fefbd92 -f0bd93f1bd94f5bd95f8bd96ebbd8eec -bd8fedbd90eebd91e50fe5bd89e6bd8a -e7bd8be9bd8ceabd8de1bd85e2bd86e3 -bd87e4bd880015ef25f514f809f8bd6a -f9bd6bfabd6cf5bd67f6bd68f7bd69ef -bd62f0bd63f1bd64f2bd65f3bd66e61e -ea09eabd5febbd60ecbd61e62ce7bd5d -e8bd5e012abd5b4c12696de2bd5ce1bd -56e2bd57e3bd58e4bd59e5bd5a06ec0c -ecbd70f0bd71f7bd72f8bd73e1bd6de5 -bd6ee9bd6f0010ec1df20ff2bd80f3bd -81f4bd82f5bd83f9bd84ecbd7cedbd7d -eebd7eefbd7fe50ce5bd78e8bd79e9bd -7aeabd7be1bd74e2bd75e3bd76e4bd77 -65bd656466a27d67a2816807ee0ceebd -51f3bd52f4bd53f5bd54e1bd4de8bd4e -e9bd4fedbd500019ee2df417f70cf7bd -37f8bd38f9bd39fabd3af4bd34f5bd35 -f6bd36f109f1bd31f2bd32f3bd33eebd -2eefbd2ff0bd30e717ea0ceabd2aebbd -2becbd2cedbd2de7afe1e8bd28e9bd29 -e409e4bd25e5bd26e6bd27e1bd22e2bd -23e3bd2401e1bd3beebd3c0eed1af20c -f2bd49f4bd4af5bd4bfabd4cedbd45ee -bd46efbd47f1bd48e80ce8bd41e9bd42 -ebbd43ecbd44e1bd3ee2bd3fe7bd4061 -9062a27e63a2bc640deb17ee0ceebd1e -efbd1ff0bd20f1bd21ebbd1becbd1ced -bd1de70ce7bd17e8bd18e9bd19eabd1a -e1bd14e2bd15e4bd160014ec25f214f7 -09f7bbf4f8bbf5fabbf6f2bbf1f3bbf2 -f5bbf3ecbbecedbbedeebbeef0bbeff1 -bbf0e70fe7bbe8e8bbe9e9bbeaeabbeb -ebbb33e1bbe3e2bbe4e3bbe5e4bbe6e5 -bbe70012ef20f60ff6bd05f7bd06f8bd -07f9bd08fabd09efbd00f1bd01f2bd02 -f4bd03f5bd04ea0feabbfceba921ecbb -fdedbbfeeebbffe2bbf8e5bbf9e6bbfa -e9bbfb09ec0fecbd0fedbd10f0bd11f1 -bd12f3bd13e3bd0ae4bd0be5bd0ce6bd -0de8bd0e002474a9e520ef0fefb5bcf3 -b568f4b5d7f5b594f7b5ebe5b576e7b5 -7fe9b58debaffbeeb5b3782d7834793e -7a4ee1b557e4b56b01e3b5f0ecb5f102 -e1b5f2efb5f3f8b5f404e8b5f5e9b111 -edb5f6f2b5f7fab5f8744875a24876a2 -497703ebb5ecedb5edefb5eef3b5ef0f -f21af70cf7b5e4f8b5e5f9b5e6fab5e7 -f2b5e0f3b5e1f4b5e2f6b5e3eb0cebb5 -dcecb5ddedb5deefb5dfe2b5d8e4b5d9 -e5b5dae9b5db10edb5e801e2b5e9f6b5 -ea6bc0fc6f626f7a708a7194729e730a -eb14ef09efb5d4f4b5d5f5b5d6ebb5d1 -edb5d2eeb5d3e1b5cce3b5cde4b5cee8 -b5cfe9b5d002f2b5bdf5b5bef7b5bf01 -e9b5c0efb5c101f5b5c2f7b5c307ee0c -eeb5c8f5b5c9f8b5caf9b5cbe5b5c4e8 -b5c5e9b5c6ebb5c76b646ca24d6da275 -6e07ee0ceeb5b8efb5b9f0b5baf4b5bb -e2b5b4e7b5b5e8b5b6eab5b70cf017f6 -0cf6b59df7b59ef8b59ffab5a0f0b59a -f2b59bf4b59ceb09ebb597ecb598efb5 -99e5b594e8b595e9b5960bed14f509f5 -b5a9f6b5aaf7b176edb5a6efb5a7f0b5 -a8e909e9b5a4ebb5a5ecb5a6e1b5a1e2 -b5a2e7b5a307f20cf2b5aff3b5b0f4b5 -b1f9b5b2e9b5abecb5aceeb5adefb5ae -66656652678468a24d69a2576a04e3b5 -8fe5b590eab591eeb592f3b59307eb0c -ebb57bedb57cf5b57df9b57ee1b577e2 -b578e5b579e6b57a08ed0fedb584eeb5 -85efb586f3b587f7b588e2b580e5b581 -e7b582ecb58303e2b589e9b58af0b58b -f7b58c10eeb58e616e627e63a25a6409 -e90fe9b571f2b572f3b573f4b574f5b5 -75e1b56ce2b56de3b56ee4b56fe5b570 -02e9b558eeb559f2b55a0ce917ee0cee -b563f2b564f5b565f9b566e9b560ecb5 -61edb562e509e5b55de7b55ee8b55fe1 -a7f3e2b55be4b55c03e1b567e5b568e8 -b569f2b56a00186eb07628e10ce1b5f9 -e9b72bf6b76df7b770763a77447902e1 -b772e5b773f9b77401e4b76eeeb76f10 -e9b771715071947298750fee1af40cf4 -b769f5b76af7b76bf9b76ceeb765efb7 -66f0b767f2b768e90ce9b761ebb762ec -b763edb764e1b75de2b75ee4b75fe8b7 -6010f2b75804e1b759e2a3b6f2b75af4 -b75bf5b75c6e346f607001e1b756f2b7 -5706e90ce9b74deab74eecb74ff3b750 -e1b74ae4b74be7b74c04e2b751e4b752 -e7b753f2b754f7b75568796b3c6b726c -886d0aec14f309f3b747f7b748f8b749 -ecb744eeb745f2b746e1b73fe2b740e3 -b741e4b742e9b74303e1b73aedb73bef -b73cf5b73d10e5b73e683469386a01e5 -b738f2b73910e9b72a0bec14f509f5b7 -35f6b736f9b737ecb732edb733f4b734 -e409e4b72fe5b730e7b731e1b72ce2b7 -2de3b72e643d644065506703e2b727e5 -b728ebb707efb72902e1b71ae7b71bf4 -b71c09ec0fecb722eeb723f2b724f4b7 -25f5b726e2b71de5b71ee8b71fe9b720 -ebb721613062a24e6310f4b7190014ed -25f314f809f8b70bf9b70cfab70df3b7 -08f4b709f5b70aedb703eeb704efb705 -f1b706f2b707e60fe6b5ffe8b700eab7 -01ebb702ecb527e1b5fae2b5fbe3b5fc -e4b5fde5b5fe0aee14f409f4b716f5b7 -17f7b718eeb713efb714f2b715e5b70e -e9b70feab710ebb711edb712002875c2 -9feb74f23ff628f6b9eff7bb84f9022a -32414c4c126174eebbb4022abbb2432a -5410d2bbb410cebbb3127261e2bbb3f2 -b9b1f3bb24f5022aac7d41ac83591265 -7ae9b9a5eb38ecb976edb991eeb9aeef -b9c7012a2e41127261e2b95a042ab958 -41324336493a4d10ceb95c10c6b95910 -ceb95a10d2b95b7a667a38e1b1c3e7b7 -fce9b929eab9400017ee2af514f809f8 -bbdff9bbe0fabbe1f5bbdcf6bbddf7bb -def209f2bbdaf3bbdbf4af6aeebbd7ef -bbd8f0bbd9e814eb09ebaf56ecbbd5ed -bbd6e8add6e9bbd4eaaf6ae409e4bbd1 -e5bbd2e6bbd3e1bbcee2bbcfe3bbd075 -a26576a2ba77a40f78a467790018ed2d -f417f70cf7bbcaf8bbcbf9bbccfabbcd -f4bbc7f5bbc8f6bbc9f109f1bbc4f2bb -c5f3bbc6edbbc1eebbc2efbbc3e714ea -09eabbbeebbbbfecbbc0e7bbbbe8bbbc -e9bbbde409e4bbb8e5bbb9e6bbbae1bb -b5e2bbb6e3bbb70017ee2af514f809f8 -bb6af9bb6bfabb6cf5bb67f6bb68f7bb -69f109f1bb64f3bb65f4bb66eebb61ef -bb62f0bb63e814eb09ebbb5eecbb5fed -bb60e8bb5be9bb5ceabb5de509e5bb58 -e6bb59e7bb5ae2bb55e3bb56e4bb5700 -17ee2af414f809f8bb81f9bb82fabb83 -f4bb7ef6bb7ff7bb80f109f1bb7cf2bb -7df3b1adeebb79efbb7af0bb7be714ea -09eabb76ecbb77edbb78e7bb73e8bb74 -e9bb75e409e4bb70e5bb71e6bb72e1bb -6de2bb6ee3bb6f0018ed2df317f60cf6 -b9d0f7bb9af9bb9bfabb9cf3bb97f4bb -98f5bb99f009f0bb94f1bb95f2bb96ed -bb91eebb92efbb93e714ea09eabb8eeb -bb8fecbb90e7bb8be8bb8ce9bb8de409 -e4bb88e5bb89e6bb8ae1bb85e2bb86e3 -bb870015ee25f414f809f8bbaff9bbb0 -fabbb1f4bbacf6bbadf7bbaeeebba7ef -bba8f0bba9f1bbaaf2bbabe614eb09eb -bba5ecbb1eedbba6e6bba2e9bba3eabb -a4e1bb9de2bb9ee3bb9fe4bba0e5bba1 -6bc3b470c1cf70a26871a2c072a41b73 -a46b740019ee2df417f70cf7bb52f8bb -53f9bb54faa591f4bb4ff5bb50f6bb51 -f109f1bb4df2af6af3bb4eeebb4aefbb -4bf0bb4ce717ea0ceabb46ebbb47ecbb -48edbb49e7bb43e8bb44e9bb45e409e4 -bb40e5bb41e6bb42e1bb3de2bb3ee3bb -3f0018ee2df417f70cf7b9f0f8b9f1f9 -b9f2fab9f3f4b9edf5b9eef6b9eff109 -f1b9eaf2b9ebf3b9eceeb9e8efb9e9f0 -b73be814eb09ebb9e5ecb9e6edb9e7e8 -b9e2e9b9e3eab9e4e509e5b9dfe6b9e0 -e7b9e1e1b9dce3b9dde4b9de0019ee2d -f417f70cf7bb0af8bb0bf9bb0cfabb0d -f4bb07f5bb08f6bb09f109f1bb04f2bb -05f3bb06eebb01efbb02f0bb03e717ea -0ceab9fdebb9feecb9ffedbb00e7b9fa -e8b9fbe9b9fce409e4b9f7e5b9f8e6b9 -f9e1b9f4e2b9f5e3b9f60016ed2af514 -f809f8bb21f9bb22fabb23f5bb1ef6bb -1ff7bb20f209f2bb1bf3bb1cf4bb1ded -a90beebb19f0bb1ae614ea09eabb16eb -bb17ecbb18e6bb13e8bb14e9bb15e1bb -0ee2bb0fe3bb10e4bb11e5bb120017ee -2af414f709f7bb3af8bb3bfabb3cf4bb -37f5bb38f6bb39f109f1bb34f2bb35f3 -bb36eebb31efbb32f0bb33e814eb09eb -bb2eecbb2fedbb30e8bb2be9bb2ceabb -2de509e5bb28e6bb29e7bb2ae2bb25e3 -bb26e4bb276ba2536ca2ab6da4066ea4 -7b6f0014ec25f414f709f7b9d9f9b9da -fab9dbf4b9d6f5b9d7f6b9d8ecb9d1ef -b9d2f0b9d3f1b9d4f3b9d5e70fe7b9cd -e8b9cee9b9cfeab9d0ebb33be1b9c8e3 -b9c9e4b9cae5b9cbe6b9cc0018ed2df4 -17f70cf7b972f8b973f9b974fab975f4 -b96ff5b970f6b971f109f1b96cf2b96d -f3b96eedb969efb96af0b96be714ea09 -eab966ebb967ecb968e7b963e8b964e9 -b965e409e4b960e5b961e6b962e1b95d -e2b95ee3b95f0019ee2df417f70cf7b9 -8df8b98ef9b98ffab990f4b98af5b98b -f6b98cf109f1b987f2b988f3b989eeb9 -84efb985f0b986e717ea0ceab980ebb9 -81ecb982edb983e7b97de8b97ee9b97f -e409e4b97ae5b97be6b97ce1b977e2b9 -78e3b9790019ee47f417f70cf7b9aaf8 -b9abf9b9acfab9adf4b9a7f5b9a8f6b9 -a9f123f1b9a1f226f3b9a6022a324140 -5912657ae9b9a5012ab9a24c10c2b9a3 -127261e2b9a4eeb99eefb99ff0b9a0e7 -17ea0ceab99bebb99cecb902edb99de7 -b998e8b999e9b99ae409e4b995e5b996 -e6b997e1b992e2b993e3b9940018ee2d -f417f70cf7b9c3f8b9c4f9b9c5fab9c6 -f4b9c0f5b9c1f6b9c2f109f1b9bdf2b9 -bef3b9bfeeb9baefb9bbf0b9bce714eb -09ebb9b7ecb9b8edb9b9e7b7fce9b9b5 -eab9b6e409e4b9b2e5b9b3e6b9b4e1b9 -afe2b9b0e3b9b166c1a766a25d67a2b2 -68a2f869a44d6a0016ed2af314f809f8 -b955f9b956fab957f3b952f4b953f5b9 -54f009f0b94ff1b950f2b951edb94cee -b94defb94ee714ea09eab949ebb94aec -b94be7b946e8b947e9b948e1b941e2b9 -42e3b943e4b944e5b9450017ee2af514 -f809f8b7f9f9b7fafab7fbf5b7f6f6b7 -f7f7b7f8f109f1b7f3f2b7f4f3b7f5ee -b7f0efb7f1f0b7f2e714eb09ebb7edec -b7eeedb7efe7b7eae8b7ebe9b7ece409 -e4b7e7e5b7e8e6b7e9e1b7e4e2b7e5e3 -b7e60014ef25f414f709f7b90ff8b910 -f9b911f4b90cf5b90df6b90eefb907f0 -b908f1b909f2b90af3b90be80fe8b902 -eab903ebb904ecb905edb906e1b7fde2 -b7fee4b7ffe5b900e6b9010017ef2af5 -14f809f8b926f9b927fab928f5b923f6 -b924f7b925f209f2b920f3b921f4b922 -efb91df0b91ef1b91fe714eb09ebc81a -ecb91beeb91ce7b918e8b919eab91ae4 -09e4b915e5b916e6b917e1b912e2b913 -e3b9140015ef25f514f809f8b93df9b9 -3efab93ff5b93af6b93bf7b93cefb935 -f0b936f1b937f3b938f4b939e614ea09 -eab932ecb933edb934e6b92fe7b930e8 -b931e1b92ae2b92be3b92ce4b92de5b9 -2e61a25d62a29563a2ed64a442650016 -ed2af514f809f8b7e1f9b7e2fab7e3f5 -b7def6b7dff7b7e0f209f2b7dbf3b7dc -f4b7ddedb7d8eeb7d9efb7dae614e909 -e9b7d5ebb7d6ecb7d7e6b7d2e7b7d3e8 -b7d4e1b7cde2b7cee3b7cfe4b7d0e5b7 -d10010eb1df10ff1b781f6b782f7b783 -f8b784f9b785ebb77dedb77eefb77ff0 -b780e70ce7b779e8b77ae9b77beab77c -e1b775e2b776e3b777e4b7780018ee2d -f417f70cf7b79bf8b79cf9b79dfab79e -f4b798f5b799f6b79af109f1b795f2b7 -96f3b797eeb792efb793f0b794e814eb -09ebb78fecb790edb791e8b78ce9b78d -eab78ee409e4b789e5b78ae7b78be1b7 -86e2b787e3b7880017ed2af414f709f7 -b7b4f9b7b5fab7b6f4b7b1f5b7b2f6b7 -b3f009f0b7aef1b7aff3b7b0edb7abee -b7acefb7ade714ea09eab7a8ebb7a9ec -b7aae7b7a5e8b7a6e9b7a7e409e4b7a2 -e5b7a3e6b7a4e1b79fe2b7a0e3b7a100 -15ed25f414f809f8b7caf9b7cbfab7cc -f4b7c7f6b7c8f7b7c9edb7c2eeb7c3f0 -b7c4f1b7c5f2b7c6e714ea09eab7bfeb -b7c0ecb7c1e7b7bce8b7bde9b7bee1b7 -b7e3b7b8e4b7b9e5b7bae6b7bb66a6c5 -67aa3268001e72c0f8e51af40cf4b530 -f5b536f9a554fab556e5b3cae9b3d6ef -b50cf2b51f763f765877747984e12203 -2ab3a9372e43345310c4b3aa1133b6b3 -aa10cdb3ab04e3b54ce5b54debb54eee -b54ff6b55002e1b551e3b552efb55301 -e1b554f7b55572a25073a27b74a28275 -0014ed25f514f809f8b549f9b54afab5 -4bf5b546f6b547f7b548edb541f0b542 -f2b543f3b544f4b545e70fe7b53ce8b5 -3de9b53eebb53fecb540e2b537e3b538 -e4b539e5b53ae6b53b0cf017f50cf5b5 -29f7b52af8b52bfab52cf0b526f2b527 -f4b528eb09ebb523edb524efb525e1b5 -20e3b521e5b52202e2b52deeb52ef3b5 -2f04e9b531efb532f3b533f5b534f8b5 -3569c1116dae6d366ea2436fa26b7010 -efb51e0010f11df50ff5b3fcf6b3fdf7 -b3fef9b3fffab500f1b3f8f2b3f9f3b3 -faf4b3fbea0ceab3f5edb3f6eeb3cbf0 -b3f7e1b3f1e2b3f2e4b3f3e6b3f409e9 -19e9b506ea32eeb509efb50af3b50b01 -2ab50748126d6ee7b508e1b501e4b502 -e5b503e7b504e8b5050010ec1df20ff2 -b519f4b51af6b51bf7b51cf9b51decb5 -15edb516efb517f0b518e50ce5b511e8 -b512e9b513eab514e1b50de2b50ee3b5 -0fe4b510694e6aa24b6ba24c6c04e1b3 -ece2b3ede4b3eef4b3eff5b3f00feb1a -f20cf2b3e3f4b3e4f7b3e5f8b3e6ebb3 -dfecb3e0edb3e1efb3e2e70ce7b3dbe8 -b3dce9b3ddeab3dee1b3d7e2b3d8e4b3 -d9e6b3da10e9b3e703e1b3e8e5b3e9e8 -b3eaebb3eb6434643e6548676e6802e9 -b3d3f2b3d4f9b3d501eeb3b2f9b3c905 -e809e8b3cee9b3cfedb3d0e1b3cbe4b3 -cce7b3cd01edb3d1f7b3d2613062a265 -6310e8b3c80015ee25f314f809f8b3c0 -f9b3c1fab3c2f3b3bdf6b3bef7b3bfee -b3b8efb3b9f0b3baf1b3bbf2b3bce826 -eb1beb2cecb3b6edb3b7012a2e481261 -6ef4b3b5012ab3b45410d7b3b5e8b3b1 -e9b3b2eab3b3e1b3ace3b3ade4b3aee5 -b3afe7b3b004e1b3c3e2b3c4eeb3c5ef -b3c6f5b3c700177199e614ef09efb144 -f2b14df9b169e6a254e9b12ceab13576 -12762a772ee1b11310f2b16601e1b167 -e5b16871a24272a243750eed1af40cf4 -b162f5b163f6b164f9b165edb15eeeb1 -5ff1b160f2b161e50ce5b15ae6b15be8 -b15ce9b15de2b158e326e4b159012ab1 -274112646cedb12810f3b14c0aef14f2 -09f2b155f3b156f4b157efb152f0b153 -f1b154e3b14ee4b14fe5b14debb150ed -b1516b556e286e2e6f3e7010e5b14b02 -e2b141e7b142e9b14305ee09eeb148f2 -b149f3b14ae4b145e9b146edb1476b34 -6c3e6d01f0b13ff5b14001ebb136f6b1 -3706ec0cecb13beeb13cf2b13df9b13e -e1b138e8b139e9b13a662b665c676669 -07f00cf0b131f2b132f4b133f7b134e1 -b12de5b12ee6b12fecb13001e9b129ed -b12a10f2b12b613062a2466510f2b126 -0012ec20f40ff4a3b9f5b122f8b123f9 -b124fab125ecb11dedb11eeeb11ff0b1 -20f2b121e70fe7b118e8b119e9b11aea -b11bebb11ce1b114e2b115e4b116e6b1 -1710eca799001f71c18a7953ec0cecb3 -00eeb31af5b365f6b37b79307a8ee1b1 -6ae4b1a40dec17ef0cefb3a2f2b3a3f9 -b3a4fab3a5ecb39fedb3a0eeb3a1e50c -e5b39be6b39ce7b39de9b39ee1b184e2 -b399e4b39a02e1b3a6e9b3a7eeb3a875 -c0c5753676a25b77a2867810f8b39800 -16ed2af414f709f7b378f8b379fab37a -f4b376f5b377f6af89f009f0b373f1b3 -74f2b375edb370eeb371efb372e614e9 -09e9b36debb36eecb36fe6b36be7b31a -e8b36ce1b366e2b367e3b368e4b369e5 -b36a0ced17f00cf0b385f2b1d4f3b386 -f9b387edb382eeb383efb384e609e6b3 -7feab380ecb381e1b37ce3b37de5b37e -0fea1af40cf4b394f5b395f7b396f8b3 -97eab390edb391eeb392f2b393e50ce5 -b38ce6b38de7b38ee9b38fe1b388e2b3 -89e3b38ae4b38b7140725073a2567402 -e1b363e9b364f5b1d502e1b34aeeb34b -f2b34c0012ed20f60ff6b359f7b35af8 -b35bf9b35cfab35dedb354f1b355f3b3 -56f4b357f5b358e50fe5afc4e7b350e8 -b351e9b352eab353e1b34de2b192e3b3 -4ee4b34f04ecb35eeeb35fefb360f0b3 -61f7b36269c17f6dc0e26d406e9e6fa2 -807002e1b347e5b348eeb3490dee17f6 -0cf6b316f8b317f9b318fab319eeb313 -f2b314f5b315e70ce7b30fe8b310ecb3 -11edb312e1b30ce2b30de4b30e0013ec -20f20ff2b32af4b32bf5b32cf7b32dfa -b32eecb325edb326eeb327efb328f1b3 -29e70fe7b320e8b321e9b322eab323eb -b324e1b31be2b31ce3b31de4b31ee5b3 -1f0018ed2df317f60cf6b343f7b344f8 -b345f9b346f3b340f4b341f5b342f009 -f0b33df1b33ef2b33fedb33beeb328ef -b33ce714ea09eab338ebb339ecb33ae7 -b335e8b336e9b337e409e4b332e5b333 -e6b334e1b32fe2b330e3b33169846aa2 -6d6ba27a6c0beb14f209f2b309f5b30a -f7b30bebb306ecb307efb308e809e8b3 -04e9af56eab305e2b301e3b302e4b303 -0011ee1df30ff3b1eff4b1f0f8b1f1f9 -b1f2fab1f3eeb1ebf0b1ecf1b1edf2b1 -eee50fe5b1e6e7b1e7e8b1e8ecb1e9ed -b1eae1b1e2e2b1e3e3b1e4e4b1e504eb -b1f4edb1f5eeb1f6f2b1f7f5b1f806ee -0ceeb1fcefb1fdf0b1fef5b1ffe1b1f9 -e4b1fae5b1fb65a0656a66a26667a26a -6808ee0feeb1ddefb1def2b1dff3b1e0 -f4b1e1e1b1d9e3b1dae5b1dbebb1dc00 -13ec20f60ff6b1c6f7b1c7f8b1c8f9b1 -c9fab1caecb1c2efb1c3f1b1c4f2adbc -f3b1c5e70fe7b1bde8b1bee9b1bfeab1 -c0ebb1c1e1b1b8e2b1b9e3b1bae4b1bb -e6b1bc01ebb1cbf8b1cc0cec17f20cf2 -b1d5f4b1d6f5b1d7f7b1d8ecb1d3eeb1 -d4efaff8e509e5b1d0e7b1d1ebb1d2e1 -b1cde2b1cee4b1cf61a24862a2a363a2 -fb640012eb20f10ff1b1b3f2b1b4f4b1 -b5f5b1b6f8b1b7ebb1aeecb1afedb1b0 -eeb1b1efb1b2e60fe6b1a9e7b1aae8b1 -abe9b1aceab1ade2b1a5e3b1a6e4b1a7 -e5b1a80019ee2df417f70cf7b180f8b1 -81f9b182fab183f4b17ef5b17ff6adcb -f109f1b17bf2b17cf3b17deeb178efb1 -79f0b17ae717ea0ceab174ebb175ecb1 -76edb177e7b171e8b172e9b173e409e4 -b16ee5b16fe6b170e1b16be2b16ce3b1 -6d0018ed2df317f70cf7b199f8b19af9 -b19bfab19cf3b196f5b197f6b198f009 -f0b193f1b194f2b195edb190eeb191ef -b192e714ea09eab18debb18eecb18fe7 -b18ae8b18be9b18ce409e4b187e5b188 -e6b189e1b184e2b185e3b18606ec0cec -b1a0eeb1a1f2b1a2f4b1a3e3b19de4b1 -9ee6b19f63cb0463a4dc64aea765001d -73927a29ef0cefafeaf3aff6f4afbdf5 -a5f87a44e5afabecafc4ee012aafd953 -126861f7afda01e1b111e5b112762076 -387748784c7901e1b10fefb11002e5b1 -0ae8b10beeb10c10efb10d10f4b10e73 -2e74667510e4b10908eb0febaffbedaf -fcf3affdf5affef9afffe5aff7e7aff8 -e8aff9e9affa08f30ff3b104f4b105f5 -b106f8b107fab108e2b100eeb101efb1 -02f2b1036ac0e96e636e6a6fa25670a2 -577208eb0febaff1f2aff2f3aff3f4af -f4f7aff5e1afede7afeee8afefe9aff0 -0eed1af20cf2afe6f6afe7f7afe8f8af -e9edafe2eeafe3efafe4f1afe5e40ce4 -afdee6afdfe8afe0ecafe1e1afdbe2af -dce3afdd10f4afeb10e9afec6aa2426b -a2436ca2666d0dee17f50cf5afd5f7af -d6f8afd7faafd8eeafd2f0afd3f3afd4 -e716e7afcde9afceeb26edafd1012aaf -cf4e126b6fefafd0e1afcae2afcbe5af -cc10e1afb80aec14f009f0afc1f2afc2 -f9afc3ecafbeedafbfefafc0e1afb9e5 -afbae7afbbe9afbcebafbd05ef09efaf -c8f0a3f2f5afc9e5afc5ebafc6edafc7 -662f663e674e686a6902f0afb5f4afb6 -f6afb702e1aface5afade9afae04e1af -afecafb0edafb1efafb2f9afb310f5af -b4613462386301f2afa9f9afaa10e1af -a305ef09efafa6f2afa7f5afa8e3afa4 -e7afa5eba7d5002272c161e127f219f2 -ad2df3ad44f52cf6ad74f9ad7d012aad -6347126c61e7ad64e1ab49e5ab88e8ab -98efad0c7643764e7758787e79827a04 -e5ad44e8ad81ebad82eead83f4ad8401 -e7ad75eead7605e509e5ad79e7ad7af4 -ad7be1ad77e2ad78e4ad2d10e8ad7c02 -e1ad7ee2ad7fefad80729673a28674a2 -b4750eec1af50cf5ad70f6ad71f8ad72 -f9ad73ecad6cefad6df0ad6ef4ad6fe8 -0ce8ad68e9ad69eaad6aebad6be1ad65 -e2ad66e3ad670015ed25f414f809f8ad -41f9ad42faad43f4ad3ef6ad3ff7ad40 -edad39eead3aefad3bf1ad3cf3ad3de7 -14ea09eaad36ebad37ecad38e7ad33e8 -ad34e9ad35e1ad2ee2ad2fe3ad30e4ad -31e6ad320df017f60cf6ad4ff7ad50f9 -ad51faad52f0ad4cf3ad4df4ad4eea0c -eaad48ebad49edad4aefad4be1ad45e2 -ad46e8ad470fee1af40cf4ad5ff5ad60 -f9ad61faad62eead5befad5cf0ad5df3 -ad5ee70ce7ad57e8ad58ecad59edad5a -e1ad53e3ad54e4ad55e5ad5669c19b6d -c0d06d3a6e826fa25f70a2a07110e4ad -2c0aec14f209f2abd6f3abfcf4abfdec -abfaeea4b6efabfbe1abf5e5abf6e7ab -f7e9abf8ebabf90dec17f30cf3ad08f4 -ad09f7ad0af8ad0becad05f0ad06f1ad -07e70ce7ad01e8ad02e9ad03ebad04e1 -abfee2abffe3ad000013ec20f40ff4ad -1cf5ad1df8ad1ef9ad1ffaad20ecad17 -edad18efad19f0ad1af1ad1be60fe6ad -12e7ad13e8ad14eaad15ebad16e1ad0d -e2ad0ee3ad0fe4ad10e5ad110aee14f5 -09f5ad29f8ad2af9ad2beead26efad27 -f3ad28e1ad21e2ad22e3ad23e7ad24e9 -ad25699c6aa2616ba28c6c0fec1af40c -f4abf1f5abf2f7abf3f9abf4ecabeded -abeeefabeff3abf0e80ce8abe9e9abea -eaabebebabece1abe5e3abe6e4abe7e5 -abe80aed14f209f2abc6f7abc7f9abc8 -edabc3eeabc4f0abc5e1abbee2abbfe3 -abc0e5abc1e8abc20cee17f20cf2abd2 -f3abd3f6abd4f9abd5eeabcfefabd0f0 -abd1e909e9abccebabcdedabcee1abc9 -e5abcae8abcb0ef21af60cf6abe1f8ab -e2f9abe3faabe4f2abddf3abdef4abdf -f5abe0ed0cedabd9eeabdaefabdbf1ab -dce1abd6e2abd7ecabd865c0e465a2af -66a2c467a2ce680013ee20f40ff4abb9 -f7abbaf8abbbf9abbcfaabbdeeabb4ef -abb5f0abb6f1abb7f2abb8e973e938ea -abb0ebabb1ecabb2edabb3022a3c42a2 -594811616e01e2abaff4abaa0b4d2d54 -17542e55385610c4abad01c8aba9d7ab -aa01cbababd3abac4dcc9a502a5310d2 -aba802c6aba5c8aba6daaba7470e4730 -48cc7e4910c4aba310c6aba12aab9e41 -2a4210ceaba010d5ab9f126f70efabae -e2ab99e4ab9ae6ab9be7ab9ce8ab9d06 -eb0cebab8ceeab8df4ab8ef9ab8fe1ab -89e2ab8ae7ab8b03e1ab90e4ab91e7ab -92edab9303e1ab94e3ab95e7ab96ebab -97616a62a27563a2b06408ea0feaab83 -edab84efab85f2ab86faab87e5ab7fe6 -ab80e8ab81e9ab820016ed2af314f809 -f8ab5ef9ab5ffaab60f3ab5bf6ab5cf7 -ab5df009f0ab58f1ab59f2ab5aedab55 -eeab56efab57e614ea09eaab52ebab53 -ecab54e6ab4fe7ab50e8ab51e1ab4ae2 -ab4be3ab4ce4ab4de5ab4e0011ef1df4 -0ff4ab6ef5ab6ff6ab70f7ab71f9ab72 -efab6af1ab6bf2ab6cf3ab6de90fe9ab -65eaab66ebab67ecab68eeab69e2ab61 -e3ab62e4ab63e7ab640bec14f009f0ab -7cf1ab7df2ab7eecab79edab7aefab7b -e709e7ab76e8ab77eaab78e3ab73e4ab -74e5ab75001a6fc1b2776ce10ce1ad85 -e5adbcf6af8afaa34f775079887a05e7 -09e7afa0ecafa1eeafa2e1af9ee4af9f -e5af0a08f30ff3af8ff5af79f7af90f9 -af91faaf92e1af8cebaf8decadaaf2af -8e0aed14f209f2af9bf5af9cf9af9ded -af98eeaf99efaf9ae1af93e2af94e4af -95e7af96e9af9773b37334746075a24e -7610e1af8b06eb0cebaf5eeeaf5fefaf -60f1af61e2af5be8af5ce9af5d0def17 -f30cf3af6cf4af6df5af6ef9af6fefaf -69f0af6af2af6be80ce8af65e9af66eb -af67edaf68e1af62e2af63e4af640019 -ee2df417f70cf7af86f8af87f9af88fa -af89f4af83f5af84f6af85f109f1af80 -f2af81f3af82eeaf7defaf7ef0af7fe7 -17ea0ceaaf79ebaf7aecaf7bedaf7ce7 -af76e8af77e9af78e409e4af73e5af74 -e6af75e1af70e2af71e3af726fa24770 -a285720def17f30cf3af57f4af58f5af -59f9af5aefaf54f1af55f2af56e81ee8 -32e9af52eca7beeeaf53012a2e4d126f -6ee7af51012aaf504310ceaf51e3af4d -e5af4ee7af4f0012ee20f40ff4af47f6 -af48f7af49f8af4af9af4beeaf42efaf -43f0af44f2af45f3af46e60fe6af3ee8 -af3fe9add8ebaf40ecaf41e1af3ae2af -3be3af3ce5af3d10f0af4c68c15d6b9d -6b966ca2506da2576e0eee1af50cf5af -36f6af37f7af38f9af39eeaf32efaf33 -f2af34f4af35e70ce7af2fe9af30eaad -8aebaf31e1af2ce4af2de5af2e06ec0c -eca540f2af14f3af15f8af16e1af11e7 -af12ebaf1302e7af17edaf18eeaf1900 -11ed1df50ff5af27f6af28f7af29f8af -2af9af2bedaf23efaf24f2af25f3af26 -e50fe5af1ee6af1fe7af20ebaf21ecaf -22e1af1ae2af1be3af1ce4af1d689669 -a2666a0feb1aef0cefaf0df2af0ef5af -0ff7af10ebaf09ecaf0aedaf0beeaf0c -e50ce5af05e6af06e9af07eaaf08e1af -01e2af02e3af03e4af040cef17f50cf5 -ade8f6ade9f7adeaf8adebefade5f2ad -e6f3ade7ec09ecade2edade3eeade4e4 -addfe7ade0e9ade10016ee2af414f809 -f8adfef9adfffaaf00f4adf0f5adfcf7 -adfdf109f1adf9f2adfaf3adfbeeadf5 -efadf7f0adf8e714ea09eaadf4ebadf5 -ecadf6e7adf1e8adf2e9adf3e1adece2 -adede3adeee4adefe6adf064a264a242 -65a265670011ec1df30ff3addaf4addb -f7addcf8adddfaaddeecadd6eeadd7ef -add8f2add9e50fe5add1e7add2e8add3 -e9add4ebadd5e1adcde2adcee3adcfe4 -add00aea14f209f2adb9f3adbaf7adbb -eaadb6eeadb7efadb8e1adb1e4adb2e5 -adb3e7adb4e9adb50fec1af20cf2adc9 -f3adcaf6adcbfaadccecadc5edadc6ee -adc7f1adc8e70ce7adc1e8adc2e9adc3 -ebadc4e3adbde4adbee5adbfe6adc061 -3662a2566301e3adaff2adb00015ed25 -f314f709f7ad99f8ad9afaad9bf3ad96 -f5ad97f6ad98edad91efad92f0ad93f1 -ad94f2ad95e714ea09eaad8eebad8fec -ad90e7ad8be8ad8ce9ad8de1ad86e3ad -87e4ad88e5ad89e6ad8a0012ed20f40f -f4adaaf5adabf6adacf7adadf9adaeed -ada5eeada6efada7f0ada8f1ada9e60f -e6ada0e7ada1e9ada2eaada3ecada4e1 -ad9ce2ad9de4ad9ee5ad9f2ab40061cc -ec62002373c2d0e51ded0feda905eea9 -1eefa936f2a979f3a993e5a74be7a778 -e8a78ee9a7a777c14b773878a26179a2 -a77aa2e8e1a5ea0017ed2af414f809f8 -ab07f9ab08faab09f4ab04f5ab05f7ab -06f109f1ab01f2ab02f3ab03eda9feef -a9fff0ab00e714ea09eaa9fbeba9fcec -a9fde7a9f8e8a9f9e9a9fae409e4a9f5 -e5a9f6e6a9f7e1a9f2e2a9f3e3a9f400 -14ed25f214f609f6ab1bf7ab1cfaab1d -f2a9c2f3ab19f5ab1aedab14eeab15ef -ab16f0ab17f1ab18e80fe8ab0fe9ab10 -eaab11ebab12ecab13e1ab0ae2ab0be3 -ab0ce6ab0de7ab0e0013ec20f30ff3ab -2df6ab2ef7ab2ff8ab30faab31ecab28 -edab29eeab2af0ab2bf2ab2ce60fe6ab -23e8ab24e9ab25eaab26ebab27e1ab1e -e2ab1fe3ab20e4ab21e5ab220017ee2a -f514f809f8ab46f9ab47faab48f5ab43 -f6ab44f7ab45f109f1ab40f2ab41f4ab -42eeab3defab3ef0ab3fe814eb09ebab -3aecab3bedab3ce8ab37e9ab38eaab39 -e409e4ab34e5ab35e6ab36e1ab32e2ab -33e3a7ca73a25a74a2aa75a2ff760016 -ed2af514f809f8a9eff9a9f0faa9f1f5 -a9ecf6a9edf7a9eef109f1a9e9f2a9ea -f4a9ebeda9e6eea9e7efa9e8e614e909 -e9a9e3eaa9e4eba9e5e6a9e0e7a9e1e8 -a9e2e1a9dbe2a9dce3a9dde4a9dee5a9 -df0016ee2af414f709f7a9a8f8a9a9f9 -a9aaf4a9a5f5a9a6f6a9a7f109f1a9a2 -f2a9a3f3a9a4eea99fefa9a0f0a9a1e8 -14eb09eba99ceca99deda99ee8a999e9 -a99aeaa99be1a994e2a995e3a996e5a9 -97e6a9980017ef2af514f809f8a9bff9 -a9c0faa9c1f5a9bcf6a9bdf7a9bef209 -f2a9b9f3a9baf4a9bbefa9b6f0a9b7f1 -a9b8e714ea09eaa9b3eda9b4eea9b5e7 -a9b0e8a9b1e9a9b2e409e4a9ade5a9ae -e6a9afe1a9abe2a74de3a9ac0018ee2d -f417f70cf7a9d7f8a9d8f9a9d9faa9da -f4a9d4f5a9d5f6a9d6f109f1a9d1f2a9 -d2f3a9d3eea9ceefa9cff0a9d0e714ea -09eaa9cbeba9cceda9cde7a9c8e8a9c9 -e9a9cae409e4a9c5e5a9c6e6a9c7e1a9 -c2e2a9c3e3a9c46ac3186ec1a56ea265 -6fa2b570a2fb71a44b720018ee2df417 -f70cf7a98ff8a990f9a991faa992f4a9 -8cf5a98df6a98ef109f1a989f2a98af3 -a98beea986efa987f0a988e814eb09eb -a983eca984eda985e8a980e9a981eaa9 -82e409e4a97de6a97ee7a97fe1a97ae2 -a97be3a97c0016ee2af514f809f8a933 -f9a934faa935f5a930f6a931f7a932f1 -09f1a92df2a92ef3a92feea92aefa92b -f0a92ce614ea09eaa927eba928eda929 -e6a924e7a925e9a926e1a91fe2a920e3 -a921e4a922e5a9230014ef25f514f809 -f8a949f9a94afaa94bf5a946f6a947f7 -a948efa941f0a942f1a943f2a944f4a9 -45ea0feaa93ceba93deca93eeda93fee -a940e1a937e2a938e5a939e6a93ae8a9 -3b0016ef2af514f809f8a960f9a961fa -a962f5a95df6a95ef7a95ff209f2a95a -f3a95bf4a95cefa957f0a958f1a959e8 -14eb09eba954eca955eda956e8a951e9 -a952eaa953e1a94ce3a94de4a94ee5a9 -4fe7a9500015ef25f414f709f7a976f8 -a977faa978f4a973f5a974f6a975efa9 -6ef0a96ff1a970f2a971f3a972e714eb -09eba96beca96ceda96de7a968e9a969 -eaa96ae1a963e2a964e3a965e4a966e6 -a9676aa25f6ba2b76ca40f6d0017ed2a -f314f709f7a91bf8a91cfaa91df3a918 -f5a919f6a91af009f0a915f1a916f2a9 -17eda912eea913efa914e714ea09eaa9 -0feba910eca911e7a90ce8a90de9a90e -e409e4a909e5a90ae6a90be1a906e2a9 -07e3a9080018ee2df417f70cf7a7d0f8 -a7d1f9a7d2faa7d3f4a7cdf5a7cef6a7 -cff109f1a7caf2a7cbf3a7cceea7c7ef -a7c8f0a7c9e814eb09eba7c4eca7c5ed -a7c6e8a7c1e9a7c2eaa7c3e409e4a7be -e6a7bfe7a7c0e1a7bbe2a7bce3a7bd00 -18ee2df417f70cf7a7e9f8a7eaf9a7eb -faa7ecf4a7e6f5a7e7f6a7e8f109f1a7 -e3f2a7e4f3a7e5eea7e0efa7e1f0a7e2 -e814eb09eba7ddeca7deeda7dfe8a7da -e9a7dbeaa7dce409e4a7d7e6a7d8e7a7 -d9e1a7d4e2a7d5e3a7d60017ee2af414 -f809f8a902f9a903faa904f4a7fff6a9 -00f7a901f109f1a7fcf2a7fdf3a7feee -a7f9efa7faf0a7fbe714ea09eaa7f6eb -a7f7eda7f8e7a7f3e8a7f4e9a7f5e409 -e4a7f0e5a7f1e6a7f2e1a7ede2a7eee3 -a7ef65c19b65a25366a29e67a2e968a4 -34690014ee25f414f709f7a7b8f9a7b9 -faa7baf4a7b5f5a7b6f6a7b7eea7b1ef -a7b2f0a7b3f1a7b4f2a7aae60fe6a7ad -e7a7aeeba723eca7afeda7b0e1a7a8e2 -a7a9e3a7aae4a7abe5a7ac0015ef25f5 -14f809f8a75ff9a760faa761f5a75cf6 -a75df7a75eefa757f0a758f1a759f3a7 -5af4a75be614ea09eaa754eba755eda7 -56e6a751e8a752e9a753e1a74ce2a74d -e3a74ee4a74fe5a7500015ee25f414f8 -09f8a775f9a776faa777f4a772f5a773 -f7a774eea76defa76ef0a76ff1a770f3 -a771e614ea09eaa76aeca76beda76ce6 -a767e7a768e8a769e1a762e2a763e3a7 -64e4a765e5a7660015f025f514f809f8 -a78bf9a78cfaa78df5a788f6a789f7a7 -8af0a783f1a784f2a785f3a786f4a787 -e714ed09eda71eeea781efa782e7a77e -e9a77feaa780e1a779e2a77ae3a77be4 -a77ce6a77d0018ed2df317f60cf6a7a3 -f7a7a4f9a7a5faa7a6f3a7a0f4a7a1f5 -a7a2f009f0a79df1a79ef2a79feda79b -eea79cefa78ee714ea09eaa798eba799 -eca79ae7a795e8a796e9a797e409e4a7 -92e5a793e6a794e1a78fe2a790e3a791 -61a26562a2b563a40a640019ee2df417 -f70cf7a747f8a748f9a749faa74af4a7 -44f5a745f6a746f109f1a741f2a742f3 -a743eea73eefa73ff0a740e717ea0cea -a73aeba73beca73ceda73de7a737e8a7 -38e9a739e409e4a734e5a735e6a736e1 -a731e2a732e3a7330014ef2ff514f809 -f8a5fef9a5fffaa700f5a5fbf6a5fcf7 -a5fdefa5f5f032f1a5f8f2a5f9f3a5fa -012aa5f64b127261e9a5f7e70fe7a5f0 -e8a5f1eaa5f2eca5f3eea5f4e1a5ebe2 -a5ece3a5ede5a5eee6a5ef0017ee2af4 -14f709f7a716f8a717f9a718f4a713f5 -a714f6a715f109f1a710f2a711f3a712 -eea70defa70ef0a70fe714eb09eba70a -eca70beda70ce7a707e9a708eaa709e4 -09e4a704e5a705e6a706e1a701e2a702 -e3a7030018ed2df317f60cf6a72df7a7 -2ef9a72ffaa730f3a72af4a72bf5a72c -f009f0a727f1a728f2a729eda724eea7 -25efa726e714ea09eaa721eba722eca7 -23e7a71ee8a71fe9a720e409e4a71be5 -a71ce6a71de1a719e2a71ae3a5f30018 -4dc2af54c0f257375736584e59665a12 -616ee2d5bd01612c631168efc5981172 -e1d5bc01702c731175f8a3c21165efc9 -2a01652c691169e9b58d117ae9b9a554 -4455a2ae5601612c691174e8d5bb1169 -e9d5ba08685e683c698c6ea2466fa248 -751174e7d5b9106101e158e9042ad12a -43324b364c3a5410c8d12a10cebd1110 -c8d5b510c1d5b6012aaf8a4d10d6af8a -01622a7210e8d5b710f4012aa9364210 -d4a34f1173e1c5e301642a7410efd363 -10f2d5b861346580668667116ce7d5b4 -056d116d2e6e327610f4a7ff10eccf9e -10e7d35e67346b386c01e5cfe4f5b913 -10e2d5b110f2d5b2116cf5cff6116ee7 -d5b3126761f2d39650c0c850a27652a2 -ad5306694769426f6a759079016c2a72 -10e3abe710efd5b001643e6e01e4cd19 -e8012acd6f4c10cbcd6f10e4d5ad0267 -2e72387910efabf701e4cdecefd5ae10 -e1cf14106e01e4d5aff5cf65613e675e -6801612a7210e4d5ac10f7afda026d2e -72327510f2cbe610f2cdc710e2d5ab11 -6ef7a565046138654c68526c78721174 -e9d5a9016c2a7510e3ad5510eda54c11 -72edd5a702612e6c326e10f8c94310e7 -d5a801e9c7ecf0c7ed1172e4b3f3026a -306f3675116ef2c5ac116ee7d5aa1168 -e7cb714d9a4ea2b34f05722272307344 -751167f2c7d8016b2a7910e1c7ac10e8 -c7c901672a6d10e1d5a610e5c7bc6730 -6c366e1161efd5a51161edd5a41163eb -cbe007722e725a7460756679116df203 -2aa9d2492e4d325410c8d59d10ceb922 -10cda9d2116fefc1c11165e9d59b116c -f4d59c614265746c9a6f01642a6e10e7 -af5110e9d59a0368326b366e3a7210e3 -d59610ead59310e1d59401e4c368e9d5 -950264346e387201e3d598efd59910e6 -af1f10e4d5971179edc1280461386258 -655e6b64731168f5d5a302672e6e3272 -10e2d5a010edd59e10e4d59f1161f4a5 -4b1177e1d5a1116fef012aafd04d10cc -d5a247c4614ac36d4aa6f14ba80a4c03 -614665a6cd69a6cf7901632a6410e9d5 -9210e9d591026ea6aa6fa6ab7410ee00 -1d4ac15f53a1571757ace458ace8592a -5a10d7cdd102c4d56bc5d56bd4d52d53 -4854a24555a2705603c1d528c5d52ace -d529d5a7a70ece1ad40cd4d51dd5bb18 -d6d51ed9d58cced51acfcde6d2d51bd3 -d58bc90cc9cdabcad518cbcd92cdd519 -c3d517c4d56ac5cf660ccd17d20cd2d1 -e6d6d341d7d1fadacf6dcdd15cced58f -cfd1b3c809c8d58ecbd164ccd523c4d5 -8dc6d521c7d52204c1d590c7d525d3af -d9d9d526dad5274d8f4d484ea24f50a2 -645203c5d516cfc16cd5bb18d7cbc800 -11cf1dd50fd5d504d6d588d8d505d9bf -37dad506cfd586d1d502d2d587d4c1e3 -c60fc6d501c7bfb3cbd585cca905cdb7 -77c1d584c3d3ffc4d500c5cd0306c90c -c9d50accaf83cfc395d0d589c1d507c3 -d508c5d5090bcc14d409d4d514d7c7f4 -d9b31accc96acdd511d2d512c7c5c1c7 -d1cfc8b130cbd58a4a564b5a4c06d30c -d3d3fbd4bdeed5d3fcd6bf0dc2d582c9 -d3facbd58310cfd57f02c5d3f4cdd580 -dad58142c0ee465b4662477248a24449 -07d10cd1d57dd2d57ed3b568d4b5d7c3 -d3f1c4b56bccd57bced57c02c9b12ccf -b144d2b14d0ace0cd2c62cd2d579d4d3 -eed7d3efc1d3e9c5d578c6d3eac8a3b9 -ccb97604cbd57aced3f0d2b51fd4b530 -d5b536425e43a24544a2794506c70cc7 -d576d2d577d3aff6d4d569c1d3e5c3d3 -e6c5afbd0ecc0fd2c643d2c9e1d4d571 -d5b777d6d3d6c60cc6d3cfc7d570c9cb -9acad3d1c1a993c4d56fc5d3ce0fce1a -d60cd6d3e0d7c7f0d9d574daad44ced5 -73cfd3ddd2d3ded5d3dfc80cc8d3d9c9 -d3daccd3dbcdd3dcc3d572c4d3d7c6cd -46c7d3d804c5adbccad3e2cbad85cfd3 -e3dad575343d34aea2377c3882410bd2 -14d709d7d3ccd8d3cddaa5ded2d3c9d3 -d3cad4d3cbcc09cca3cfcdd56ecfd3c8 -c4d3c5c5d56cc6d56d1133b6d56a1138 -b6d56b2aafd9312c321133b0d5691137 -b2bb1810e1c5a410ef012abdbd4c10c1 -bdbd1170e3bd30026d2e6e327310f5bd -6610e2bd5c01e1bbe4e2b31801613a70 -1161ee012ab5f94a10d0b5f9016d2a76 -10e1d56410efd563066e256e346f3a72 -54741168e9d5681164e1b9ae1172e501 -2ab9c74b01d0d3f6d2b9c71161e9a5f7 -61306850691174f3d567026c2e6e3277 -10e9d56610e9afc310e1d56502612e6d -326f10eacd1810f2c9c510f2012ab991 -4b10c8b991473448a26a49127461ecb1 -05056f456f4a726475026a2e6b327210 -f5c7e110f2b36510e8d559016e2a7410 -e8b34101e7d557edaff80161506510eb -032aafc4432e47325410d2a78b10d9d3 -e110d2afc410eed558613065366c1161 -e7ad641172e1d556116ff2012ab1c347 -10c5b1c3056c186c306d3675116ee7d5 -621175f7b3f0106e01e7b508f0b50761 -3265a247691172e1d561016e2a7410f2 -a54a05ef2defd55cf35ef4042aabaa43 -32483c4d405410d7abaa01c1d55dced5 -5e10cbaba210cfaba4012aab9e4310ce -ab9ee2abafe7d55ae9d55b1162f2032a -b3ca493453385501c1b72bd3d56010cc -b3ca10c5d55f43c135437444a2ee4502 -67446c4a741168e9012aa3e54501d2d3 -e8d4a3e51179f0afb301622a7910edd5 -5510e1d5540461a28e68a29d6fa2ac70 -a2ae791172ec0e4b48541d5432553c58 -465910d5cd0201cad113d2d54c01c1d3 -a0dad54d10cbd54e4b324d3c52525310 -cbd54b01c7bbb2dad3f803c4d548c5d5 -49cbbf26ceaf5002cfd54ad3cd02d5cb -b9421f4232434247464910d2d54702c1 -d545c7a778d9a74b10d3cd0201c551d2 -d5462acbb938364102c6d542ccd543da -d5441139b0cd02026b2e6e327210e9d5 -3f10edab7c10f3b59402612e65327210 -f3d54010edabce10f2abb81170f4ad1a -016d2a7210f4afaa10eed54103653469 -866f8c751170ecd5531176e106491749 -324d364e3a5010cba9bd10ceb3d610d5 -d55010d0c3d82ab3d6422a4610cab3da -10d4d54f1161ebd5511167f2d5522aa2 -5441a8a342056f1f6f3e72447501672a -6810e4d53e10e9d53d1170efabae1061 -01e8c961e9d53c6130655c68116bf3d5 -3b036c326d36733a7410ebd53a10e9d5 -3910f5a5fe10f3a9a2116ee7012aa91e -4210c4a91e00204ac1ba52c0cf563856 -3c5758586259665a01d2d3d7d7cdd104 -c1d528c4d529c5d52aced529d5a7a701 -c6d52bd3cdbc10cbd52c03c4d3c4c5d3 -c4d4d52dd5cd025246536c54a25a5503 -c1d3a0c7d525d9d526dad52705d309d3 -cd02d5cbb9d7cbc8c5d516c8cdd1cfc1 -6c0fce1ad40cd4d51dd5cbb9d6d51ed9 -d51fced51acfcde6d2d51bd3d51cc90c -c9cdabcad518cbcd92cdd519c1d50bc3 -d517c4d3c3c5cf660ecd1ad20cd2d1e6 -d6d341d7abaadacf6dcdd15cced524cf -d1b3d0d523c80cc8d12acad113cbd164 -ccd523c4d520c6d521c7d5224e5b4e34 -4fa80c50665110c1d51508c90fc9d50a -ccaf83cfc395d0c3d8d4d50bc1d507c3 -d508c5d509c8a7a70dcd17d40cd4d514 -d7c7f4d9b31adad50dcdd511d2d512d3 -d513c70cc7d1cfc8b130cbd510ccc96a -c1d50dc5d50ec6d50f4aa2484ba24c4c -a2644d0012ce20d50fd5d504d6af8ad8 -d505d9bf37dad506ceaf50cfaba4d1d5 -02d2d503d4c1e3c60fc6d501c7bfb3cb -bf26cca905cda9d2c1d3fec3d3ffc4d5 -00c5cd0301cfd3f3d0b5f907d00cd0d3 -f6d2b9c7d7d3f7dad3f8c5d3f4c7bbb2 -c8b991cdd3f508d30fd3d3fbd4bdeed5 -d3fcd6bf0dd9d3fdc1bdbdc2d3f9c9d3 -facbcd6f42c11f466b4662477848a24f -4907d10cd1d3f2d2b113d3b568d4b5d7 -c3d3f1c4b56bccb3caceb3d603c9b12c -cfb144d2b14dd8b14d0ace14d209d2af -c4d4d3eed7d3efced3ebd0d3ecd1d3ed -c1d3e9c5b1c3c6d3eac8a3b9ccb97605 -d409d4b530d5b536d6d3cfcbaba2ced3 -f0d2b51f426443a25a44a2924507c80c -c8d3e7d2d3e8d3aff6d4a3e5c1d3e5c3 -d3e6c5afbdc7a5480010cc1dd20fd2c9 -e1d4a34fd5a9d2d6d3d6d9a74bccd3d2 -ced3d3cfd3d4d1d3d5c70cc7a778c8d3 -d0c9cb9acad3d1c1a993c4a91ec5d3ce -c6d3cf0010ce1dd50fd5d3dfd6d3e0d7 -c7f0d9d3e1daad44ceab9ecfd3ddd2d3 -ded3cd02c80cc8d3d9c9d3daccd3dbcd -d3dcc3bf38c4d3d7c6cd46c7d3d806cb -0ccbad85cfd3e3d9d3d1dad3e4c4adbc -c5adbccad3e2354b3586378c3892410c -cf17d40cd4d3cbd7d3ccd8d3cddaa5de -cfd3c8d2d3c9d3d3cacc09cca3cfcda5 -54cec7f0c4d3c5c5d3c6c6d3c71133b2 -c7f01133b6d3c301382a3910b0cd0210 -b6d3c42aafd931303236341131b9d3c2 -1137b2cbb902302e33323810b0adbc10 -b0ad4410b0a3e5046438673e6844724a -761173f4a358116cedb1281168e2d52e -116feda39601613e6d01e9a549ee012a -a5544110cda55410e200134c66513551 -3c5340545655725901c5d3c4d4cf6e10 -c1d51503c1d50bc4d3c3d3d51cd9d51f -04c4d520c8bf9acad537ced524d2d538 -10cbd5324c3c4d464e624f665001cbd5 -10d3d51301c2d3f9d9d3fd04c1d3fecd -d531ceb95cd2d503d5d53510c7d53610 -cdd50c452f4542474c49504a664b02c8 -abc9cdd3f5d7d3f701c7a548c8d3e710 -c2d53203c4d533ced534d1d3f2d2b113 -10cfd3f32aa5484132424243524410da -d3e402c5d3c6c6d3c7dad52f02c8d3d0 -ced530d5d53101c3bf38ced393002574 -c1f5e534f223f2a548f3a560f6a5a3f9 -a5cafa012a2e41127261e2a5e0022aa5 -de49a2b55210d5a5e1e5a358e6a366eb -a3b9eda3e5eea3fc78a67832795e7aa2 -60e125e25106eb0ceba5c6eca5c7eda5 -c8f8a5c9e2a5c3e5a5c4e7a5c50013ee -20f30ff3a5d9f4a5daf5a5dbf8a5dcfa -a5ddeea5d5efa5d6f0a5d7f1a5d8f2a5 -cae70fe7a5d0e8a5d1e9a5d2eba5d3ec -a5d4e1a5cbe2a5cce3a5cde4a5cee5a5 -cf08ed0feda5e5eea5e6efa5e7f4a5e8 -faa5e9e2a5e2e4a5e3e7a5e4ea012a2e -41127261e2a5e0032aa5de312e493453 -10d5a5e11137b2a5e101d1a5dfd2a5e0 -74a24875a29d76a2e3770012ee20f50f -f5a5bef6a5bff7a5c0f8a5c1f9a5c2ee -a5b9efa5baf2a5bbf3a5bcf4a5bde70f -e7a5b4e8a5b5e9a5b6eba5b7eda5b8e1 -a5b0e2a5b1e3a5b2e5a5b30017ef2af5 -14f809f8a58bf9a58cfaa58df5a588f6 -a589f7a58af209f2a585f3a586f4a587 -efa582f0a583f1a584e914ec09eca57f -eda580eea581e9a57ceaa57deba57ee4 -09e4a579e5a57ae7a57be1a576e2a577 -e3a5780014ed25f214f709f7a5a0f9a5 -a1faa5a2f2a59df4a59ef5a59feda598 -eea599efa59af0a59bf1a59ce80fe8a5 -93e9a594eaa595eba596eca597e1a58e -e3a58fe4a590e5a591e7a5920bee14f4 -09f4a5adf5a5aef6a5afeea5aaefa5ab -f3a5aceb09eba5a7eca5a8eda5a9e2a5 -a4e4a5a5e9a5a66ac2e86fc16d6fa253 -70a28e71a2e372a2fe730014ec25f414 -f809f8a573f9a574faa575f4a570f5a5 -71f6a572eca56beea56cefa56df2a56e -f3a56fe70fe7a566e8a567e9a568eaa5 -69eba56ae1a561e2a562e3a563e4a564 -e5a5650011eb1df20ff2a524f3a525f4 -a526f8a527faa528eba520eca521eda5 -22eea523e50fe5a51be6a51ce7a51de9 -a51eeaa51fe1a517e2a518e3a519e4a5 -1a0017ee2af514f809f8a53cf9a53dfa -a53ef5a539f6a53af7a53bf209f2a536 -f3a537f4a538eea533efa534f0a535e8 -14eb09eba530eca531eda532e8a52de9 -a52eeaa52fe509e5a52be6a382e7a52c -e2a529e3a3b5e4a52a08ed0feda543ee -a544f2a545f4a546faa547e3a53fe4a5 -40e7a541eba5420014ee25f314f809f8 -a55df9a55efaa55ff3a55af5a55bf7a5 -5ceea555efa556f0a557f1a558f2a559 -e90fe9a550eaa551eba552eca553eda5 -54e2a548e332e4a54de5a54ee8a54f03 -2aa54948324e3a5012616ceda54c1261 -74f2a54a126261f4a54b6aa2686ba283 -6ca2c46da4196e0019ee2df417f70cf7 -a513f8a514f9a515faa516f4a510f5a5 -11f6a512f109f1a50df2a50ef3a50fee -a50aefa50bf0a50ce717ea0ceaa506eb -a507eca508eda509e7a503e8a504e9a5 -05e409e4a500e5a501e6a502e1a3fde2 -a3fee3a3ff08f00ff0a3b5f4a35af5a3 -b6f7a3b7faa3b8e1a3b1e7a3b2e9a3b3 -eea3b40013ef20f40ff4a3c9f5a3caf6 -a3cbf7a3ccfaa3cdefa3c4f0a3c5f1a3 -c6f2a3c7f3a3c8e70fe7a3bfe8a3c0e9 -a3c1eba3c2eca3c3e2a3bae3a3bbe4a3 -bce5a3bde6a3be0017ee2af414f809f8 -a3e2f9a3e3faa3e4f4a3dff5a3e0f7a3 -e1f109f1a3ddf2a3def3a3cfeea3daef -a3dbf0a3dce814eb09eba3d7eca3d8ed -a3d9e8a3d4e9a3d5eaa3d6e409e4a3d1 -e5a3d2e6a3d3e1a3cee2a3cfe3a3d000 -16ef2af514f809f8a3f9f9a3fafaa3fb -f5a3f6f6a3f7f7a3f8f209f2a3f3f3a3 -f4f4a3f5efa3f0f0a3f1f1a3f2e714eb -09eba3ededa3eeeea3efe7a3ebe9a3ac -eaa3ece1a3e6e2a3e7e3a3e8e5a3e9e6 -a3ea65c14365a25866a28367a2ab68a4 -06690015ed25f214f709f7a3aef8a3af -f9a3b0f2a3abf3a3acf4a3adeda3a6ee -a3a7efa3a8f0a3a9f1a3aae614ea09ea -a3a3eba3a4eca3a5e6a3a0e7a3a1e9a3 -a2e1a39be2a39ce3a39de4a39ee5a39f -0ced17f50cf5a362f7a363f9a364faa3 -65eda35ff1a360f2a361e509e5a35ceb -a35deca35ee1a359e2a35ae3a35b0bee -14f309f3a370f5a371faa372eea36def -a36ef0a36fe809e8a36ae9a36beba36c -e2a367e4a368e5a3690019ee2df417f7 -0cf7a389f8a38af9a38bfaa38cf4a386 -f5a387f6a388f109f1a383f2a384f3a3 -85eea380efa381f0a382e717ea0ceaa3 -7ceba37deca37eeda37fe7a379e8a37a -e9a37be409e4a376e5a377e6a378e1a3 -73e2a374e3a3750ded17f00cf0a397f2 -a398f3a399f4a39aeda394eea395efa3 -96e80ce8a390e9a391eba392eca393e1 -a38de2a38ee7a38f61a25062a28563a2 -be640014ee25f414f809f8a355f9a356 -faa357f4a352f5a353f7a354eea34def -a34ef0a34ff1a350f2a351e70fe7a348 -e8a349e9a34aeaa34beca34ce1a343e2 -a344e4a345e5a346e6a3470015ed1af3 -0ef706f74bf84dfa4ff33df447f549ed -3dee3fef41f043f145e60ee906e937eb -39ec3be631e733e835e127e229e32be4 -2de52f0016ee1ef50ef806f87bf97dfa -7ff575f677f779f206f26ff371f473ee -69ef6bf06de60ee906e963ec65ed67e6 -5de75fe861e153e255e357e459e55b00 -12f118f60cf69df79ff8a1f9a341faa3 -42f193f295f397f499f59be60ae689e8 -8bed8dee8ff091e181e283e485e587 +bc473248d8712e4910c4aba301c2abab +c6aba1754e776c7904e2d573e7d91d3e +ead91d3feed91d40f0d91d4103e8d91d +39edd91d3aeed91d3bf9d91d3c10e1d9 +1d3d7263729673a24d740bf11af50cf5 +d91d35f8d91d36f9d91d37f1d91d32f3 +d91d33f4d91d34ed0cedd91d2feed91d +30f0d91d31e5d91d2ce7d91d2decd91d +2e04e7d91d24eed91d25efd91d26f0d9 +1d27f3d91d2803e1d91d29edd831b1f2 +d91d2af5d91d2b6f30706a7110e5d91d +2306ef10efd91d05f1d91d06f2d91d07 +f3d91d08e3d91d03e8d91d04edd91c6c +0019ee3af41ef710f7d91d1ff8d91d20 +f9d91d21fad91d22f4d91d1cf5d91d1d +f6d91d1ef10cf1d91d19f2d91d1af3d9 +1d1beed91d16efd91d17f0d91d18e71e +ea10ead91d12ebd91d13ecd91d14edd9 +1d15e7d91d0fe8d91d10e9d91d11e40c +e4d91d0ce5d91d0de6d91d0ee1d91d09 +e2d91d0ae3d91d0b68c10a6cad6c506d +826e04e1d91cfee5d91cffe7d91d00eb +d91d01f3d91d0205ee0ceed91ce1f1d9 +1ce2f5d91ce3e1d91cdeead91cdfedd9 +1ce00019ee3af41ef710f7d91cfaf8d9 +1cfbf9d91cfcfad91cfdf4d91cf7f5d9 +1cf8f6d91cf9f10cf1d91cf4f2d91cf5 +f3d91cf6eed91cf1efd91cf2f0d91cf3 +e71eea10ead91cedebd91ceeecd91cef +edd91cf0e7d91ceae8d91cebe9d91cec +e40ce4d91ce7e5d91ce8e6d91ce9e1d9 +1ce4e2d91ce5e3d91ce66866698a6b07 +f00ff0d91cdbf4d567f5d91cdcfad91c +dde1d91cdae2b947e4b7c8efd91bb904 +e4d91ccfe9d91cd0eed91cd1f7d91cd2 +f8d5a407ee0feed91cd7f2cd13f7d91c +d8fad91cd9e1d91cd3ebd91cd4ecd91c +d5edd91cd66439645a65606705ed0ced +d91ccceed91ccdf2d91ccee1d91ccae2 +d91ccbe8d5b410ead91cc404e1d91cc5 +e7d91cc6e8d91cc7edd91cc8eed91cc9 +613a62a27a6301e1d91cc2e8d91cc300 +17ef36f51af80cf8d91cb9f9d91cbafa +d91cbbf5d91cb6f6d91cb7f7d91cb8f2 +0cf2d91cb3f3d91cb4f4d91cb5efd91c +b1f0d91cadf1d91cb2e71aea0cead91c +aeebd91cafedd91cb0e7d91cabe8d91c +ace9d91cade40ce4d91ca8e5d91ca9e6 +d91caae1d91ca5e2d91ca6e3d91ca705 +f40cf4d91cbff5d91cc0f7d91cc1e1d9 +1cbce3d91cbde5d91cbe00186dc19174 +96782a78307936e1d74cefd51a10f7d9 +1b1205ee0ceed91b16f2d91b17f9d91b +18e2d91b13e9d91b14edd91b15745075 +7e7704e1d91b0de2d91b0eefd91b0ff2 +d91b10f7d91b1106e90de9d7fdebd7fe +edd7fff7d91b00e2d7fae6d7fbe8d7fc +0bf21af60cf6d91b0af8d91b0bf9d91b +0cf2d91b07f4d91b08f5d91b09ec0cec +d91b04edd91b05eed91b06e1d91b01e2 +d91b02e4d91b03705b705c72607307f2 +0cf2d7f6f3d7f7f5d7f8f6d7f9e1d7f3 +e7d557e9d7f4ebd7f510e3d7e30ff01a +f60cf6d7eff7d7f0f8d7f1fad7f2f0d7 +ebf2d7ecf3d7edf5d7eeeb0cebd7e8ec +d7e9edd7eaefd5c5e2d7e4e7d7e5e8d7 +e6e9d7e76d906ea2666f0ee91aef0cef +d7dff2d7e0f3d7e1f7d7e2e9d7dbebd7 +dcedd7ddeed7dee40ce4d7d7e5d7d8e6 +d7d9e7d7dae1d7d4e2d7d5e3d7d60ded +17f30cf3d7c4f4d7c5f7d7c6f8d7c7ed +d7c1eed7c2efd7c3e40ce4d7bde5d7be +e8d7bfe9d7c0e1d7bae2d7bbe3d7bc0d +ed17f00cf0d7d1f5d7d2f7d7d3f9b186 +edd7cfeec165efd7d0e50ce5d7cbe7d7 +cce9d7cdebd7cee2d7c8e3d7c9e4d7ca +67b56a4a6a826b8c6c0cef17f50cf5d7 +b6f6d7b7f7d7b8f8d7b9efd7b3f2d7b4 +f3d7b5e809e8d7b0e9d7b1edd7b2e1d7 +ade5d7aee7d7af01e1d7a6e9d7a704e1 +d7a8e4d7a9f2d7aaf7d7abf9d7ac679e +68a257690010eb1df20ff2d7a2f5d7a3 +f6d7a4f7c718f9d7a5ebd79eecd79fed +d7a0eed7a1e70ce7d79ae8d79be9d79c +ead79de2d796e3d797e5d798e6d79907 +ef0cefd78ff5d790f7d78cf9d791e1d7 +8be2d78ce7d78de9d78e03e1d792e7d7 +93ebd794f5d7956452642e655a6610e7 +d78a06eb0cebd77af4d77bf5d77cf9d7 +7de4d777e7d778ead7790def17f30cf3 +d786f4d787f5d788f7d789efd183f0d7 +84f2d785e80ce8d781e9d782ecad7ded +d783e3d77ee4d77fe7d780613662a260 +6301e1d775e9d7760017ee2af514f809 +f8d762f9d763fad764f5d75ff6d760f7 +d761f209f2d75cf3d75df4d75eeed759 +f0d75af1d75be714ea09ead756ecd757 +edd758e7d753e8d754e9d755e409e4d7 +50e5d751e6d752e1d74de2d74ee3d74f +0fec1af20cf2d771f4d772f6d773f7d7 +74ecd76dedd76ef0d76ff1d770e80ce8 +d769e9d76aead76bebd76ce1d765e2d7 +66e5d767e6d76800186ec25875b67847 +783079567a90e8d91b4804e2d91be7eb +d91be8edd91be9f2d91beaf4d91beb06 +eb10ebd91befecd91bf0f4d91bf1f9d9 +1bf2e1d91bece2d91bedead91bee01e8 +d91bf3f0d91bf4757e76a2537709ec14 +ecd91be2efd91be3f2d91be4f4d91be5 +f7d91be6e1d91bdde4d91bdee5d91bdf +ead91be0ebd91be108ed14edd91bd3ee +d91bd4efd91bd5f4d91bd6f5d91bd7e2 +d91bcfe4d91bd0ead91bd1ecd91bd204 +e5d91bd8e9d91bd9eed91bdaefd91bdb +f3d91bdc72c0d172a25873a28b740012 +ed2af414f4d91bcaf5d91bcbf6d91bcc +f7d91bcdf9d91bceedd91bc5eed91bc6 +f0d91bc7f1d91bc8f3d91bc9e514e5d9 +1bc0e8d91bc1e9d91bc2ead91bc3ecd9 +1bc4e1d91bbce2d91bbde3d91bbee4d9 +1bbf0bed19f20cf2d91badf5d91baef7 +d91bafedd91babeed91bacf1af29e50c +e5d91ba8e7d91ba9e9d91baae1d91ba5 +e2d91ba6e4d91ba70eed22f210f2d91b +b8f3d91bb9f5d91bbaf9d91bbbedd91b +b4eed91bb5f0d91bb6f1d91bb7e80ee8 +d91bb2e9d91bb3eacf5aecadc7e1d5ac +e2d91bb0e5d91bb16ea2606fa2957000 +14ec2ff219f70cf7d91ba2f8d91ba3fa +d91ba4f2d5aaf4d91ba0f6d91ba1ecd9 +1b9bedd91b9ceed91b9defd91b9ef1d9 +1b9fe714e7d91b96e8d91b97e9d91b98 +ead91b99ebd91b9ae1d91b92e2d91b93 +e4d91b94e5b9dfe6d91b950cee1cf40e +f4c171f5d91b85f9c381fad91b86eed9 +1b82f1d91b83f2d91b84ea0cead91b7f +ebd91b80edd91b81e1d5a1e2d91b7de9 +d91b7e0aed1af00cf0d91b8ff2d91b90 +f7d91b91edd91b8ceed91b8defd91b8e +e3d91b87e4d91b88e7d91b89e9d91b8a +ebd91b8b68c10c6bc0d56ba2606ca2c0 +6d0014ef2ff51af80cf8d91b7af9d91b +7bfad91b7cf5d91b77f6d91b78f7d91b +79efd91b73f0d91b74f1d91b75f2d599 +f4d91b76e713e7d91b6fe8d91b70ead9 +1b71edd91b72eed596e1d91b6ae2d91b +6be3d91b6ce4d91b6de6d91b6e0015f0 +30f51af80cf8d91b65f9d91b66fad91b +67f5d91b62f6d91b63f7d91b64f0d91b +5df1d91b5ef2d91b5ff3d91b60f4d91b +61e619ea0cead91b5aecd91b5beed91b +5ce6d91b58e7d91b59e8d761e1d91b53 +e2d91b54e3d91b55e4d91b56e5d91b57 +03e1d91b68e3d592e4d593f9d91b6968 +38694e6a01e2d91b51f4d91b5202e5d9 +1b49edd91b4af6d91b4b05f20cf2d91b +4ef3d91b4ff9d91b50e18fe9d91b4cee +d91b4d64586464658a6706e910e9d91b +44edd91b45f5d91b46f7d91b47e2d91b +41e4d91b42e7d91b4304e1d91b35ebd9 +1b36efd91b37f1d91b38f9d91b3906f2 +10f2d91b3df3d91b3ef4d91b3ff5d91b +40e4d91b3ae7d91b3bedd91b3c613c62 +a2566302e8abf9efd540f2d53f0010ee +26f414f4d91b24f5d91b25f6d91b26f7 +d91b27f9d91b28eed91b20efd91b21f2 +d91b22f3d91b23ea10ead91b1cebd91b +1decd91b1eedd91b1fe1d91b19e2d91b +1ae7d52ee9d91b1b0cea1ef010f0d91b +31f2d91b32f7d91b33f9d91b34ead91b +2eedd91b2feed91b30e50ce5d91b2be7 +d91b2ce9d91b2de1ab5ee2d91b29e4d9 +1b2a00166ec175765c7912792ee9b72b +efd91c6401f2d91ca3f5d91ca4765c77 +6a7805ed0cedd91ca0f5d91ca1f9d91c +a2e1d91c9de7d91c9eecd91c9f01e1d9 +1c94f4d91c9506f110f1d91c99f2d91c +9af5d91c9bf7d91c9ce1d91c96e7d91c +97eed91c98739673a26f74a287750013 +ed2af414f4d91c90f5d91c87f7d91c91 +f8d91c92fad91c93edd91c8beed91c8c +f0d91c8df1d91c8ef2d91c8fe614e6d9 +1c86e7d91c87e9d91c88ead91c89ecd9 +1c8ae1d91c80e2d91c81e3d91c82e4d9 +1c83e5012a304812616ef3d91c85012a +d91c844310ced91c8505f20cf2d91c7b +f3d91c7cf9d91c7de4d91c78eed91c79 +f0d91c7a01f7d91c7ef9d91c7f6e7e6f +a24f7209ed14edd91c41efd91c74f3d9 +1c75f7d91c76f9d91c77e1d91c6fe2d9 +1c70e5d91c71ebd91c72ecd91c7307ec +10ecd91c61f1d91c27f3d91c62f5d91c +63e1d91c5de4d91c5ee7d91c5febd91c +6009ed14edd91c6aeed91c6bf3d91c6c +f4d91c6df9d91c6ee2d91c65e7d91c66 +e9d91c67ebd91c68ecd91c6967c0df6b +7e6b7c6ca2526d09ed13edd91c59eed9 +1c5aefd91c5bf0d91c5cf4c1f0e2d91c +54e5d91c55e7d91c56ebd91c57ecd91c +5808eb14ebd91c46edd91c47efd91c48 +f2d91c49f9d91c4ae1d91c42e7d91c43 +e8d91c44e9d91c4508e914e9d91c4fec +d91c50f2d91c51f5d91c52f9d91c53e1 +d91c4be2d91c4ce5d91c4de7d91c4e67 +8a68a255690aec1af30cf3d91c3ff6d9 +1c40f9d91c41ecd91c3cedd91c3df2d9 +1c3ee1d91c37e7d91c38e8d91c39e9d9 +1c3aead91c3b07f010f0d91c32f2d91c +33f5d91c34f7d91c35e1d91c2ee9d91c +2fecd91c30edd91c3110e4d91c3661a2 +4562a2b963a2f064a2fa650cee1ef410 +f4d91c2af5d91c2bf6d91c2cf9d91c2d +eed91c27f2d91c28f3d91c29e90ce9d9 +1c24ead91c25ecd91c26e1d91c21e3d9 +1c22e5d91c230019ee3af41ef710f7d9 +1c0af8d91c0bf9d91c0cfad91c0df4d9 +1c07f5d91c08f6d91c09f10cf1d91c04 +f2d91c05f3d91c06eed91c01efd91c02 +f0d91c03e71dea0fead91bfeebd91bff +ecd91c00edbb95e7d91bfbe8d91bfce9 +d91bfde40ce4d91bf8e5d91bf9e6d91b +fae1d91bf5e2d91bf6e3d91bf70cea1e +ee10eed91c16efd91c17f8d91c18f9d9 +1c19ead91c13ecd91c14edd91c15e50c +e5d91c10e8d91c11e9d91c12e1d91c0e +e2d91c0fe4ab7d02ecd91c1aeed91c1b +f2d91c1c04e1d91c1de4b72be5d91c1e +e7d91c1febd91c2074a45675b2857600 +116e46751b75367746e5d70ae9d529ef +d74002edd748eed749f4d74a10e1d74b +6e326f42724c7410efd74702ebd73ded +d73ef0d73f01f2d741f4d74203e1d743 +efd744f3d745f4d74669a769a2586aa2 +706ba2716ca2946d0015ec25f314f809 +f8d73af9d73bfad73cf3d737f5d738f7 +d739ecd732edd733f0d734f1d735f2d7 +36e614e909e9d72fead730ebd731e6d7 +2ce7d72de8d72ee1d727e2d728e3d729 +e4d72ae5d72b07ec0cecd715eed716f4 +d717f6d718e3d711e4d712e6d713e7d7 +1410ebd7190aee14f409f4d722f5d723 +fad724eed71fefd720f0d721e1d71aea +d71bebd71cecd71dedd71e01f0d725f3 +d726613662a24365a2476710f2d71000 +10ed1df20ff2d703f3d704f5d705f6d7 +06f9d707edd5ffeed700efd701f0d702 +e80ce8d5fde9d5bbeab1ccecd5fee1d5 +f9e5d5fae6d5fbe7d5fc01e2d708ebd7 +0904e3d70bedd70cefd70df0d70ef2d7 +0f002775c18ce920f20ff2d1e6f3d1ff +f4d311f7a3b9f9d36ae9d13cebd15cec +d16feed19defd1b37a387a36e1cf9ee5 +cff6e756e8d12a06ed0cedd37deed37e +efd37ff8d380e8d37aead37becd37c01 +2a2e41127261e2d114012ad1135010cb +d11475a24176a28777a2b578a2f3790f +f21af60cf6d376f8d377f9d378fad379 +f2d372f3d373f4d374f5d375ea0cead1 +94ecd36feed370f0d371e1d36be5d36c +e8d36de9d36e0014ec25f314f809f8d3 +3af9d33bfad33cf3d337f5d338f6d339 +ecd332edd333eed334efd335f1d336e6 +0fe6d32de7d32ee8d32fe9d330ead331 +e1d328e2d329e3d32ae4d32be5d32c0d +ee17f40cf4d346f5d347f7d348f8d349 +eed343efd344f3d345e90ce9d33febd3 +40ecd341edd342e1d33de4bba1e5d33e +0012ee20f40ff4d357f5d358f7d359f8 +d35af9d35beed352efd353f0d354f1d3 +55f2d356e60fe6d34ee7d34fe8d350ec +d351edd163e1d34ae2d34be4d34ce5d3 +4d0def17f40cf4d366f5d367f8d368f9 +d369efd363f1d364f3d365e90ce9d35f +ead360edd361eed362e1d35ce5d35de7 +d35e6bc2e870c15870a25d71a29e72a2 +b973a40e740016ee2af414f709f7d325 +f9d326fad327f4d322f5d323f6d324f1 +09f1d18df2d320f3d321eed31defd31e +f0d31fe814eb09ebd31aecd31bedd31c +e8d317e9d318ead319e2d312e3d313e4 +d314e5d315e6d3160013ee20f60ff6d1 +d9f7d1d4f8d1daf9d1dbfad1dceed1d4 +f0d1d5f2d1d6f4d1d7f5d1d8e90fe9d1 +cfead1d0ebd1d1ecd1d2edd1d3e1d1ca +e3d1cbe5d1cce6d1cde7d1ce08ef0fef +d1e1f0d1e2f4d1e3f5d1e4f7d1e5e2d1 +ddecd1deedd1dfeed1e00017ef2af514 +f809f8d1fcf9d1fdfad1fef5d1f9f6d1 +faf7d1fbf209f2d1f6f3d1f7f4d1f8ef +d1f3f0d1f4f1d1f5e814ec09ecd1f0ed +d1f1eed1f2e8d1ede9d1eeead1efe509 +e5d1eae6d1ebe7d1ece1d1e7e2d1e8e3 +d1e90011ec1df50ff5d30cf6d30df7d3 +0ef8d30ffad310ecd308f0d309f2d30a +f4d30be60fe6cfa6e7d304e8d305e9d3 +06ead307e1d300e2d301e3d302e4d303 +6ba2586ca2936da2de6ea4336f0015ef +25f514f809f8d1c7f9d1c8fad1c9f5d1 +c4f6d1c5f7d1c6efd1bff0d1c0f1d1c1 +f2d1c2f3d1c3e814eb09ebd1bcecd1bd +edd1bee8d1b9e9d1baead1bbe2d1b4e3 +d1b5e4d1b6e6d1b7e7d1b80011f11df5 +0ff5d16af6d16bf7d16cf8d16dfad16e +f1d166f2d167f3d168f4d169e60fe6d1 +61e7d162ebd163ecd164f0d165e1d15d +e2d15ee4d15fe5d1600015ee25f414f7 +09f7d183f8d184f9d185f4d180f5d181 +f6d182eed17bf0d17cf1d17df2d17ef3 +d17fe714eb09ebd178ecd179edd17ae7 +d175e9d176ead177e1d170e2d171e3d1 +72e4d173e6d1740017ed2af414f709f7 +d19af9d19bfad19cf4d197f5d198f6d1 +99f009f0d194f1d195f2d196edd191ee +d192efd193e714ea09ead18febcfe6ec +d190e7d18ce8d18de9d18ee409e4d189 +e5d18ae6d18be1d186e2d187e3d18800 +15ee25f314f709f7d1b0f8d1b1f9d1b2 +f3d1adf4d1aef6d1afeed1a8efd1a9f0 +d1aaf1d1abf2d1ace714eb09ebd1a5ec +d1a6edd1a7e7d1a2e8d1a3e9d1a4e1d1 +9ee2d19fe3d1a0e4d1a1e5b77d66c11b +667e679a68a28869a2c36a0aee14f309 +f3d159f5d15af7d15beed156efd157f0 +d158e1d151e7d152e9d153ead154ecd1 +5504e9d10eeed10fefd110f2d111f4d1 +120015ef25f514f809f8d127f9d128fa +d129f5d124f6d125f7d126efd11ff0d1 +20f1d121f3d122f4d123e614e909e9d1 +1cead11deed11ee6d11ae7a7c9e8d11b +e1d115e2d116e3d117e4d118e5d11900 +11f11df50ff5d138f6d139f7c77ff9d1 +3afad13bf1d134f2d135f3d136f4d137 +e90fe9d12febd130ecd131edd132f0d1 +33e4d12be5d12ce6d12de8d12e0015ee +25f414f709f7d14ef8d14ff9d150f4d1 +4bf5d14cf6d14deed146efd147f0d148 +f1d149f3d14ae814eb09ebd143ecd144 +edd145e8d140e9d141ead142e2a936e3 +d13de4b5d9e6d13ee7d13f61a25d62a2 +a863a2f864a43e650016ef2af514f809 +f8d10bf9d10cfad10df5d108f6d109f7 +d10af209f2d105f3d106f4d107efd102 +f0d103f1d104e714eb09ebcfffedd100 +eed101e7cffce8cffde9cffee1cff7e2 +cff8e3cff9e4cffae5cffb0015ef25f5 +14f809f8cfb2f9cfb3facfb4f5cfaff6 +cfb0f7cfb1efcfaaf0cfabf1cfacf2cf +adf3cfaee614eb09ebcfa7eccfa8eecf +a9e6cfa4e7cfa5eacfa6e1cf9fe2cfa0 +e3cfa1e4cfa2e5cfa30016ed2af514f8 +09f8cfc9f9cfcafacfcbf5cfc6f6cfc7 +f7cfc8f009f0cfc3f3cfc4f4cfc5edcf +c0eecfc1efcfc2e714ea09eacfbdebcf +beeccfbfe7cfbae8cfbbe9cfbce1cfb5 +e3cfb6e4cfb7e5cfb8e6cfb90014ed25 +f314f809f8cfdef9cfdffacfe0f3cfdb +f5cfdcf7cfddedcfd6eecfd7efcfd8f0 +cfd9f1cfdae60fe6cfd1e7cfd2e8cfd3 +e9cfd4ebcfd5e1cfcce2cfcde3cfcee4 +cfcfe5cfd00015ed25f314f609f6cff3 +f8cff4f9cff5f3cff1f4cff2f5af6aed +cfeceecfedefcfeef1cfeff2cff0e714 +ea09eacfe9ebcfeaeccfebe7cfe6e8cf +e7e9cfe8e1cfe1e2cfe2e3cfe3e4cfe4 +e5cfe5001a6fc101775ae72ce742ebd3 +a0f2d510fa012a8a41127261e2d5f601 +2a2e43127972ecd394022ad3934b2a4d +10ced39510dad394776479687a01ee26 +f3d5f8012a2e41127261e2d5f6022ad5 +27412a4310ced5f710c6d5f610e1d5f4 +10e1d5f57345733e746a75907602e5d5 +f1e8d5f2ecd5f306eb0cebd5e6f0d5e7 +f3d5e8f5d5e9e1d5e3e8d5e4e9d5e505 +f009f0d5ecf2d5edf5d5eee1d5eae5d5 +ebe8af7301edd5eff2d5f06fa24d70a2 +51720014ee25f514f809f8d5e0f9d5e1 +fad5e2f5d5ddf6d5def7d5dfeed5d8ef +d5d9f0d5daf2d5dbf4d5dce70fe7d5d3 +e8d5d4e9d5d5ebd5d6edd5d7e1d5cee2 +d5cfe3d5d0e5d5d1e6d5d201ebafcaee +d5cb01e9d5ccf6d5cd68c0dc6bc0c26b +a2436ca2666da28e6e0bee25f509f5d5 +c8f8d5c9fad5caeed5c4f0d5c5f2012a +2e44126576e1d5c7012ad5c64e10d0d5 +c7e909e9d5c1ebd5c2edd5c3e1d3c1e5 +d5bfe7d5c00af014f609f6d3a9f7d3aa +f9d3abf0d3a6f1d3a7f5d3a8e1d3a1e7 +d3a2e8d3a3e9d3a4ebd3a50beb14f509 +f5d3b5f7cf5cf9d3b6ebd3b2edd3b3ee +d3b4e509e5d3afe6d3b0e9d3b1e1d3ac +e2d3ade3d3ae0bee14f209f2d3bff3d3 +c0f5adc5eed3bcefd3bdf0d3bee709e7 +d3bae9cf96edd3bbe1d3b7e2d3b8e4d3 +b9682e69386a10e9d39f01e1d39beed3 +9c01f3d39df6d39e651d6546664a6704 +e1d396e2d397e5d398e8d399efd39a10 +f3d39110e9d392615c62666407ea0cea +d38decd38eedd38ff5d390e1d389e5d3 +8ae7d38be9d38c01edd381f2d38205f2 +09f2d386f5d387f9d388e1d383e9d384 +ecd38570cedc70b00571b8d972baa273 +002b77c11aec25f214f509f5cf53f6cf +66f7cf6df2ae9af3cf28f4cf3deccdab +edcdbceecdd1efcde6f1a3cfe336e709 +e7cd46e9cd6febcd92e3cd00e426e5cd +2a032a3644444b4c5312696ee4cd1901 +2acd164910cecd17126576e1cd171268 +6feacd18773878a24a79a25f7aa28ae1 +abf00012f020f50ff5cf7bf6cf7cf7cf +7df8cf7ef9cf7ff0cf76f1cf77f2cf78 +f3cf79f4cf7ae90fe9cf71eacf72ebcf +73edcf74efcf75e2cf6ee6cf6fe7cf70 +e8cf6d06f20cf2cf83f3cf84f5cf85f7 +cf86e2cf80e5cf81eecf820ced17f20c +f2abe7f3cf90f7cf91f8cf92edcf8dee +cf8eefcf8fe909e9cf8aebcf8beccf8c +e1cf87e2cf88e3cf890aec14f609f6cf +9bf7cf9cf9cf9deccf98eecf99f0cf9a +e1cf93e2cf94e3cf95e4cf96e7cf976c +c2c171c15d74a5745275a25f7605e509 +e5cf6aedcf6bf3cf6ce1cf67e2cf68e3 +cf690014ed25f214f609f6cf50f7cf51 +f9cf52f2cf4df3cf4ef4cf4fedcf48ee +cf49efcf4af0cf4bf1cf4ce80fe8cf43 +e9cf44eacf45ebcf46eccf47e1cf3ee2 +cf3fe5cf40e6cf41e7cf420012ed20f4 +0ff4cf61f6cf62f7cf63f9cf64facf65 +edcf5cefcf5df1cf5ef2cf5ff3cf60e7 +0fe7cf58e9cf59eacf5aebcf5beccd4a +e1cf54e2cf55e3cf56e5cf5771a24872 +a25d730013ee20f50ff5cf38f6cf39f8 +cf3af9cf3bfacf3ceecf33efcf34f1cf +35f3cf36f4cf37e70fe7cf2ee8cf2fea +cf30eccf31edcf32e2cf29e3cf2ae4cf +2be5cf2ce6cf2d06ef0cefcf0ff1cf10 +f4cf11f5cf12e1cf0ce8cf0dedcf0e00 +16ee2af514f809f8b3e1f9cf26facf27 +f5cf23f6cf24f7cf25f209f2cf20f3cf +21f4cf22eecf1defcf1ef1cf1fe714eb +09ebcf1aeccf1bedcf1ce7cf17e8cf18 +e9cf19e1cf13e2cf14e3cd00e5cf15e6 +cf166ca2486da2806ea2c66fa4117000 +11ee1df20ff2cf08f3cf09f4cf0af6cf +0bf9b984eecf04efcf05f0cf06f1cf07 +e70fe7cdffe9cf00ebcf01eccf02edcf +03e2cdfbe3cdfce4cdfde5cdfe0010ee +1df50ff5cdb7f7cdb8f8cdb9f9cdbafa +cdbbeecdb4efcd92f0cdb5f2cdb6e90c +e9cdb0eacdb1eccdb2edcdb3e3cdace4 +cdade7cdaee8cdaf0014ee25f414f809 +f8cdcef9cdcffacdd0f4cdcbf5cdccf7 +cdcdeecdc6f0cdc7f1cdc8f2cdc9f3cd +cae70fe7cdc1e8cdc2eacdc3ebcdc4ec +cdc5e1cdbde2cdbee3cdbfe4b993e6cd +c00015ef25f514f809f8cde4f9cde5fa +a564f5cde1f6cde2f7cde3efcddcf0cd +ddf1cddef2cddff3cde0e914ec09eccd +d9edcddaeecddbe9cdd6eacdd7ebcdd8 +e2a7f3e3cdd2e5cdd3e6cdd4e7cdd500 +13f020f60ff6cdf6f7cdf7f8cdf8f9cd +f9facdfaf0cdf1f1cdf2f2cdf3f3cdf4 +f5cdf5e70fe7cdece9cdedebcdeeeccd +efefcdf0e1cde7e2cde8e3cde9e4cdea +e5cdeb66c17d69c0d869a25c6aa2a76b +0017ef2af514f809f8cda8f9cda9facd +aaf5cda5f6cda6f7cda7f209f2cda2f3 +cda3f4cda4efcd9ff0cda0f1cda1e714 +ea09eacd9cedcd9deecd9ee7cd99e8cd +9ae9cd9be409e4cd96e5cd97e6cd98e1 +cd93e2cd94e3cd950015ed25f514f809 +f8cd83f9cd84facd85f5cd80f6cd81f7 +cd82edcd7bf0cd7cf1cd7df2cd7ef3cd +7fe714ea09eacd78ebcd79eccd7ae7cd +75e8cd76e9cd77e1cd70e2cd71e4cd72 +e5cd73e6cd740bed14f409f4cd8ff5cd +90f7cd91edcd8cf0cd8df2cd8ee509e5 +cd89e7cd8aeccd8be1cd86e2cd87e4cd +8866a25767a25e680016ee2af414f709 +f7cd6cf9cd6dfacd6ef4cd69f5cd6af6 +cd6bf109f1cd66f2cd67f3cd68eecd63 +efcd64f0cd65e714ea09eacd60ebcd61 +edcd62e7cd5de8cd5ee9cd5fe1cd58e2 +cd59e3cd5ae4cd5be5cd5c02e5cd43ed +cd44f7cd450011ed1df40ff4cd53f5cd +54f7cd55f9cd56facd57edcd4ff0cd50 +f2cd51f3cd52e50fe5cd4be8cd4ce9cd +4deacd4eecb5d1e1cd47e2cd48e3cd49 +e4cd4a61a26262a2ad63a40564a45865 +0017ee2af414f709f7cd40f9cd41facd +42f4cd3df5cd3ef6cd3ff109f1cd3af2 +cd3bf3cd3ceecd37efcd38f0cd39e714 +ea09eacd34ebcd35eccd36e7cd31e8cd +32e9cd33e409e4cd2ee5cd2fe6cd30e1 +cd2be2cd2ce3cd2d0015f025f514f809 +f8cbe4f9cbe5facbe6f5cbe1f6cbe2f7 +cbe3f0a546f1cbddf2cbdef3cbdff4cb +e0e614eb09ebcbdaedcbdbefcbdce6cb +d7e8cbd8eacbd9e1cbd2e2cbd3e3cbd4 +e4cbd5e5cbd60018ee2df417f70cf7cb +fcf8cbfdf9cbfefacbfff4cbf9f5cbfa +f6cbfbf109f1cbf6f2cbf7f3cbf8eecb +f3efcbf4f0cbf5e814eb09ebcbf0eccb +f1edcbf2e8cbede9cbeeeacbefe409e4 +cbeae5cbebe7cbece1cbe7e2cbe8e3cb +e90012ee20f40ff4cd11f5cd12f6cd13 +f7cd14f8cd15eecd0defcd0ef0cd0ff2 +b51ff3cd10e70fe7cd08e8cd09e9cd0a +ebcd0beccd0ce2cd01e32ce5cd06e6cd +0722032acd024d2e52325410d2cd0510 +c5cd0310cfcd040feb1af20cf2cd26f3 +cd27f5cd28f8cd29ebcd22eecd23efcd +24f1cd25e60ce6cd1ee7cd1fe8cd20ea +cd21e1cd1ae2cd1be3cd1ce5cd1d001d +70c17b784be90ce9c94aecc96af3c909 +f4c9e1785079547a7ae1012a2e411272 +61e2c7e2012ac7e15010cbc7e210edcb +0705f509f5cb0bf8cb0cf9cb0de5cb08 +edcb09eecb0a02e5cb0ee8cb0feecb10 +73af736474a24575a2637707ee0ceecb +03efcb04f2cb05f7cb06e1c9ffe2cb00 +e7cb01edcb020aee14f409f4c9def5c9 +dff7c9e0eec9dbf1c9dcf3c9dde1c9d6 +e5c9d7e8c9d8e9c9d9edc9da09f00ff0 +c9e7f2c9e8f4c9e9f5c9eaf6c9ebe1c9 +e2e8c9e3e9c9e4eec9e5efc9e60013ef +20f50ff5c9fbf7c9fcf8c9fdf9c9fefa +c9edefc9f6f0c9f7f1c9f8f2c9f9f4c9 +fae60fe6c9f1e7c9f2e9c9f3eac9f4ed +c9f5e1c9ece2c9ede3c9eee4c9efe5c9 +f070a24571a270720012ed20f40ff4c9 +d2f5c9d3f7c9d4f8c9d5f9c9d2edc9ce +efc9cff0b365f1c9d0f2c9d1e60fe6c9 +c9e7c9cae8c9cbe9c9ccebc9cde1c9c5 +e3c9c6e4c9c7e5c9c80cee17f10cf1c9 +c0f2bd12f3c9c1f4c9c2eec9bdefc9be +f0c9bfeb09ebc9baecc9bbedc9bce1a7 +76e5c9b8e9c9b901e1c9c3edc9c468c1 +f76cc14d6ca2426da27d6ea2c86f0010 +ee1df30ff3c9b3f4c9b4f6c9b5f7c9b6 +f9c9b7eec9afefc9b0f0c9b1f1c9b2e8 +0ce8c9abe9c9acebc9adedc9aee3c9a7 +e5c9a8e6c9a9e7c9aa0011ee1df40ff4 +bfb3f5b906f6c978f7c979fac97aeec9 +74efc975f2c976f3c977e50fe5c96fe7 +c970e8c971ebc972ecc973e1c96be2c9 +6ce3c96de4c96e0015ee25f414f809f8 +c98cf9c98dfac98ef4c98af5c945f7c9 +8beec985efc986f1c987f2c988f3c989 +e614ea09eac982ecc983edc984e6c97f +e8c980e9c981e1c97be2c97ce3b548e4 +c97de5c97e0016ed53f33df709f7c9a4 +f9c9a5fac9a6f3c99ff426f6c9a3022a +32435e4c126174eec9a2042ac9a03132 +523853345410d2c9a21137b2c9a110d5 +c9a1127972ecc9a1f009f0c99cf1c99d +f2c99eedc999eec99aefc99be714ea09 +eac996ebc997ecc998e7c993e8c994e9 +c995e1c98fe2bbe9e3c990e4c991e5c9 +92686a69a2506aa29b6b08ee0feec965 +efc966f0c967f2c968f5c969e1c961e2 +c962e7c963e8c9640cee17f40cf4c946 +f5c947f6c948f7c949eec943efc944f2 +c945eb09ebc940ecc941edc942e4c93d +e7c93ee8c93f0015ef25f514f809f8c9 +5df9c95efac95ff5c95af6c95bf7c95c +efc955f0c956f2c957f3c958f4c959e7 +14ec09ecc952edc953eec954e7c950e8 +c951eaad1fe1c94be2c94ce3c94de4c9 +4ee6c94f10f4c96064836468658e66a2 +726708eb0febc938ecc939eec93af3c9 +3bf5c93ce1c934e4c935e7c936e9c937 +05ef09efc91ef4c91ff5c920e1c91be3 +c91ceec91d0011ef1df30ff3b113f6c9 +2df8c92ef9c92ffac930efc92af0c92b +f1c92cf2b113e70fe7c925e9c926ebc9 +27ecc928edc929e1c921e2c922e4c923 +e5c92402e1c931e5c932ecc933619662 +a295630fe91aee0ceec918f0c919f2a3 +55f7c91ae9c914eac915ebc916edc917 +e50ce5c910e6c911e7c912e8c913e1c9 +0ce2c90de3c90ee4c90f0016ef2af514 +f809f8c7f7f9c7f8fac7f9f5c7f4f6c7 +f5f7c7f6f209f2c7f2f3c7f3f4bbabef +c7eff0c7f0f1c7f1e71eeb13ebc7ebec +26edc7ee012ac7ec5012686cf0c7ede7 +c7e8e8c7e9e9c7eae2c7e3e3c7e4e4c7 +e5e5c7e6e6c7e70011ee1df30ff3c907 +f4c908f5c909f6c90af9c90beec903ef +c904f0c905f2c906e70fe7c7fee8c7ff +e9c900ecc901edc902e2c7fae3c7fbe5 +c7fce6c7fd057839782a797cf5cb110b +f014f409f4cb42f5cb43f7cb44f0cb3f +f1cb40f2cb41ec09eccb3ceecb3defcb +3ee1cb39e3cb3ae8cb3b01e1cb45f0cb +46755276a25a7705ed09edcb36f3cb37 +f4cb38e1cb33e3cb34e8cb350013ee20 +f60ff6cb21f7cb22f8cb23f9cb24facb +11eecb1cf0cb1df1cb1ef2cb1ff3cb20 +e70fe7cb17e9cb18ebcb19eccb1aedcb +1be1cb12e2cb13e3cb14e4cb15e6cb16 +0ded17f00cf0cb2ff3cb30f7cb31facb +32edcb2ceecb2defcb2ee80ce8cb28e9 +cb29eacb2aeccb2be1cb25e3cb26e5cb +270019709f7820ee0ceecb9aefc16cf5 +cbb9f7cbc8782a7934edcb8401e4cbcf +f7cbd010f5cbd1745b745075667705ed +09edcbccefcbcdf2cbcee1cbc9ebcbca +eccbcb03e3cbb5e8cbb6edcbb7f7cbb8 +0eed1af40cf4cbc4f5cbc5f9cbc6facb +c7edc16cefcbc1f0cbc2f1cbc3e60ce6 +cbbde7cbbee9cbbfebcbc0e2cbbae3cb +bbe5cbbc7034723e7301ebcbb3f7cbb4 +01eecbadf4cbae03e9cbafedcbb0efcb +b1f4cbb268c0ea6bb76b8a6da24a6ea2 +9a6f0cec17f00cf0cba9f2cbaaf5cbab +f7cbaceccba7edcb98efcba8e509e5cb +a4e6cba5e7cba6e2cba1e3cba2e4cba3 +06e90ce9ab7dedcb81f4cb82f7cb83e1 +cb7ee2cb7fe8cb800016ed2af414f809 +f8bda3f9cb98facb99f4cb95f5cb96f7 +cb97f009f0cb93f1cb94f2afd7edcb90 +eecb91efcb92e614e909e9cb8debcb8e +eccb8fe6cb8ae7cb8be8cb8ce1cb85e2 +cb86e3cb87e4cb88e5cb8905ee09eecb +9ef2cb9ff7cba0e4cb9be7cb9ceccb9d +683a69446a02e7cb7be9cb7cf3cb7d01 +e7cb71f0cb7207ee0ceecb77f2cb78f4 +cb79f5cb7ae1cb73e6cb74eccb75edcb +7664446446654a6704e1cb6ceecb6df2 +cb6ef3cb6ff5cb7010e2cb5f0bec14f3 +09f3cb69f4cb6af9cb6beccb66edcb67 +eecb68e709e7cb63e9cb64eacb65e1cb +60e2cb61e5cb62613062a2496310e6cb +5e0013ed20f60ff6cb55f7cb56f8cb57 +f9cb58facb59edcb50eecb51efcb52f0 +cb53f2cb54e70fe7cb4ce8cb4de9cb4e +eac309ebcb4fe1cb47e2cb48e3cb49e4 +cb4ae6cb4b03e2cb5aebcb5beccb5cf0 +cb5d6da6596eb8666f001b70c0f27923 +ea0ceac769edb183f2c7acf3c7bb792a +7a3ae3c75502e4c7ddedc7def9c7df10 +edc7e07462743c75a24976a2567701e9 +c7dbecc7dc0011f11df50ff5c7d1f7c7 +d2f8c7d3f9c7d4fac7d5f1c7cdf2c7ce +f3c7cff4c7d0e90fe9c7c8ebc7c9ecc7 +caedc7cbeec7cce1c7c4e2c7c5e4c7c6 +e5c7c704e2c7d6e5c7d7e9c7d8edc7d9 +eeb1cc10e4c7da705c72827307f00cf0 +c7c0f4c7c1f5c7c2f8c7c3e1c7bce3c7 +bde9c7beefc7bf05ef09efc7a9f4c7aa +f9c7abe1b560ebc7a7edc7a80ef31af7 +0cf7c7b8f8c7b9f9c7acfac7baf3c7b4 +f4c7b5f5c7b6f6c7b7e70ce7c7b0eec7 +b1efc7b2f2c7b3e1c7ade3c7aee5c7af +69c0f06c926c406d786ea25a6f02e4c7 +a4eec7a5f2c7a608ed0fedc783efc784 +f2c785f4c786f5c787e1c77fe4c780e5 +c781ebc7820def17f40cf4c792f5c793 +f7c794f8c795efc78ff0c790f2c791e7 +0ce7c78be9c78cebc78decc78ee1c788 +e2c789e3c78a0def17f30cf3c7a0f4c7 +a1f5c7a2f8c7a3efc79df0c79ef2c79f +e90ce9c799eac79aebc79beec79ce1c7 +96e5c797e7c79869966aa2426b0fed1a +f50cf5c77bf6c77cf8c77dfac77eedc7 +77efc778f2c779f3c77ae50ce5c773e7 +c774e9c775ebc776e1c76fe2c770e3c7 +71e4c77202e1c766e5c767eec76805f3 +09f3c76cf6c76df7c76ee2c76ae3c76b +e7c76964326438664e67586801f4c764 +f5c76503e1c759ebc75af4c75bf5c75c +01f3c75df5c75e04e2c75fe3c760e7c7 +61efc762f5c763613a62506302e1c756 +efc757f5c75803e1c749e3c74af2c74b +f6c74c07ef0cefc751f2c752f4c753f5 +c754e9c74debc74eecc74fedc7500024 +73c2cae82aef0fefc16cf2c1b4f3b200 +f4c1e3f9a9d2e8bfcde9bf2febbf26ec +c128ee012ad833ed4d126f6ee7af5177 +c14c773878a26179a2bc7aa2fde7bfb3 +0017ed2af314f609f6c33af7c33bfac3 +3cf3c337f4c338f5c339f009f0c335f1 +c336f2addfedc332eec333efc334e714 +ea09eab1ccebc330ecc331e7c32de8c3 +2ee9c32fe409e4af29e5c32be6c32ce1 +c328e2c329e3c32a0019ee2df417f70c +f7c353f8c354f9c355fac356f4c350f5 +c351f6c352f109f1c34df2c34ef3c34f +eec34aefc34bf0c34ce717ea0ceac346 +ebc347ecc348edc349e7c343e8c344e9 +c345e409e4c340e5c341e6c342e1c33d +e2c33ee3c33f0013ed20f60ff6c364f7 +c365f8c366f9c367fac368edc360f0c3 +61f2c362f4c1cbf5c363e70fe7c35be8 +c35ceac35debc35eecc35fe2c357e3c3 +58e4a51de5c359e6c35a0013ef20f50f +f5c378f6c379f7c37af8c37bfac37cef +c373f0c374f1c375f2c376f4c377ea0f +eac36eebc36fecc370edc371eec372e1 +c369e4c36ae5c36be8c36ce9c36d73a2 +5074a2a075a2f8760014f025f514f809 +f8c325f9c326fac327f5c322f6c323f7 +c324f0c31df1c31ef2c31ff3c320f4c3 +21e80fe8c318ebc319ecc31aeec31bef +c31ce1c313e4c314e5c315e6c316e7c3 +170016ee2af514f809f8c1e0f9c1e1fa +c1e2f5c1ddf6c1def7c1dff109f1c1db +f3c1dcf4c1cbeec1d8efc1d9f0c1dae8 +14eb09ebc1d5ecc1d6edc1d7e8c1d2e9 +c1d3eac1d4e2c1cde3c1cee5c1cfe6c1 +d0e7c1d10018ed2df317f60cf6c1f9f7 +c1faf8c1fbf9c1fcf3c1f6f4c1f7f5c1 +f8f009f0c1f3f1c1f4f2c1f5edc1f0ee +c1f1efc1f2e714ea09eac1edebc1eeec +c1efe7c1eae8c1ebe9c1ece409e4c1e7 +e5c1e8e6c1e9e1c1e4e2c1e5e3c1e600 +15ef25f414f809f8c310f9c311fac312 +f4c30df5c30ef6c30fefc308f0c309f1 +c30af2c30bf3c30ce714ea09eac305eb +c306edc307e7c302e8c303e9c304e1c1 +fde2c1fee3c1ffe4c300e5c3016ac307 +6ec1c76ea2626fa2bb70a40b71a46372 +0017ef2af514f809f8c1caf9c1cbfac1 +ccf5c1c7f6c1c8f7c1c9f209f2c1c4f3 +c1c5f4c1c6efc1c1f0c1c2f1c1c3e814 +ec09ecc1beedc1bfeec1c0e8c1bbeac1 +bcebc1bde409e4c1b8e6c1b9e7c1bae1 +c1b5e2c1b6e3c1b70018ed2df417f70c +f7c168f8c169f9c16afac16bf4c165f5 +c166f6c167f109f1c162f2c163f3c164 +edc15feec160f0c161e715ea0aeac15d +ebd829caecc15ee7c15ae8c15be9c15c +e409e4c157e5c158e6c159e1c154e2c1 +55e3c1560016ef2af514f809f8c180f9 +c181fac182f5c17df6c17ef7c17ff209 +f2c17af3c17bf4c17cefc177f0c178f1 +c179e714ea09eac175ebc176edabd2e7 +c172e8c173e9c174e1c16de3c16ee4c1 +6fe5c170e6c1710018ee2df417f70cf7 +c198f8c199f9c19afac19bf4c195f5c1 +96f6c197f109f1c192f2c193f3c194ee +c18fefc190f0c191e814eb09ebc18cec +c18dedc18ee8c189e9c18aeac18be409 +e4c186e5c187e7c188e1c183e2c184e3 +c1850017ee2af514f809f8c1b1f9c1b2 +fac1b3f5c1aef6c1aff7c1b0f109f1c1 +abf2c1acf3c1adeec1a8efc1a9f0c1aa +e814eb09ebc1a5ecc1a6edc1a7e8c1a2 +e9c1a3eac1a4e509e5c19fe6c1a0e7c1 +a1e1c19ce2c19de3c19e6aa2556ba2a0 +6ca2eb6d0015ef25f514f809f8c151f9 +c152fac153f5c14ef6c14ff7c150efc1 +49f0c14af1c14bf2c14cf4c14de614e9 +09e9c146edc147eec148e6c143e7c144 +e8c145e1c13ee2c13fe3c140e4c141e5 +c1420015ee25f514f809f8c10ff9c110 +fac111f5c10cf6c10df7c10eeec107f1 +c108f2c109f3c10af4c10be814eb09eb +c104ecc105edc106e8c101e9c102eac1 +03e2bffce3bffde4bffee5bfffe7c100 +0015ef25f514f809f8c125f9c126fac1 +27f5c122f6c123f7c124efc11df0c11e +f2c11ff3c120f4c121e914ec09ecc11a +edc11beec11ce9c117eac118ebc119e1 +c112e2c113e3c114e5c115e6c1160014 +ee25f314f709f7c13bf8c13cfac13df3 +c138f5c139f6c13aeec133efc134f0c1 +35f1c136f2c137e80fe8c12ee9c12fea +c130ebc131ecc132e1c129e2c12ae3c1 +2be5c12ce6c12d65c1c465a26266a2b2 +67a40a68a465690017ed2af414f809f8 +bff9f9bffafabffbf4bff6f5bff7f7bf +f8f009f0bff3f1bff4f2bff5edbff0ee +bff1efbff2e714ea09eabfedebbfeeec +bfefe7bfeae8bfebe9bfece409e4bfe7 +e5bfe8e6bfe9e1bfe4e2bfe5e3bfe600 +16ee2af414f709f7bf97f9bf98fabf99 +f4bf94f5bf95f6bf96f109f1bf91f2bf +92f3bf93eebf8eefbf8ff0bf90e714eb +09ebbf8becbf8cedbf8de7abc6e8bf89 +eabf8ae1bf84e2bf85e3bf86e4bf87e5 +bf880018ed2df417f70cf7bfaff8bfb0 +f9bfb1fabfb2f4bfacf5bfadf6bfaef0 +09f0bfa9f1bfaaf2bfabedbfa6eebfa7 +efbfa8e714ea09eabfa3ebbfa4ecbfa5 +e7bfa0e8bfa1e9bfa2e409e4bf9de5bf +9ee6bf9fe1bf9ae2bf9be3bf9c0019ee +2df417f70cf7bfcaf8b711f9bfcbfabf +ccf4bfc7f5bfc8f6bfc9f109f1bfc4f2 +bfc5f3bfc6eebfc1efbfc2f0bfc3e717 +ea0ceabfbdebbfbeecbfbfedbfc0e7bf +bae8bfbbe9bfbce409e4bfb7e5bfb8e6 +bfb9e1bfb4e2bfb5e3bfb60016ee2af4 +14f809f8bfe1f9bfe2fabfe3f4bfdef5 +bfdff7bfe0f109f1bfdcf2abb3f3bfdd +eebfd9efbfdaf0bfdbe714eb09ebbfd6 +ecbfd7edbfd8e7bfd3e9bfd4eabfd5e2 +bfcee3bfcfe4bfd0e5bfd1e6bfd261a2 +5f62a2b463a409640017ee2af514f809 +f8bf81f9bf82fabf83f5bf7ef6bf7ff7 +bf80f209f2bf7bf3bf7cf4bf7deebf78 +f0bf79f1bf7ae714ea09eabf75ebbf76 +edbf77e7bf72e8bf73e9bf74e409e4bf +6fe5bf70e6bf71e1bf6ce2bf6de3bf6e +0015ee2ff51df812f8bf36f926fabf39 +22012abf374310c3bf38f5bf33f6bf34 +f7bf35eed82517efbf2ff1bf30f3bf31 +f4bf32e614ea09eabf2cebbf2dedbf2e +e6bf29e7bf2ae9bf2be1bf24e2bf25e3 +bf26e4bf27e5bf280017ef2af514f809 +f8bf4ff9bf50fabf51f5bf4cf6bf4df7 +bf4ef209f2bf49f3bf4af4bf4befbf46 +f0bf47f1bf48e914ec09ecbf43edbf44 +eebf45e9bf40eabf41ebbf42e409e4bf +3de6bf3ee8bf3fe1bf3ae2bf3be3bf3c +0019ee2df417f70cf7bf68f8bf69f9bf +6afabf6bf4bf65f5bf66f6bf67f109f1 +bf62f2bf63f3bf64eebf5fefbf60f0bf +61e717ea0ceabf5bebbf5cecbf5dedbf +5ee7bf58e8bf59e9bf5ae409e4bf55e5 +bf56e6bf57e1bf52e2bf53e3bf540024 +73c1dfe220ee0feec589efc5a1f2c5c8 +f6c70ff9c727e2c395e4c3bfe5c3d8e7 +c3f3ecaf8377c0d27736787479a2527a +a2a7e1c37d09ed0fedc717efc718f2c7 +19f7c71af8c71be2c712e3c713e5c714 +e7c715e9c7160bee14f209f2c725f5a9 +58f8c726eec722efc723f1c724e709e7 +c71fe9c720ecc721e1c71ce4c71de5c7 +1e0017ee2af414f709f7c73cf8c73df9 +c73ef4c739f5c73af6c73bf109f1c736 +f2c737f3c738eec733efc734f0c735e8 +14eb09ebc730ecc731edc732e8c72de9 +c72eeac72fe509e5c72ae6c72be7c72c +e2c728e3b364e4c72909ed0fedc744f2 +c745f5c746f9c747fac748e1c73fe2c7 +40e4c741e9c742ebc743734274a25775 +a2887602e8c710edc711efa7000014ee +25f514f809f8c5e7f9c5e8fac5e9f5c5 +e4f6c5e5f7c5e6eec5dfefc5e0f1c5e1 +f3c5e2f4c5e3e60fe6c5dae7c5dbe8c5 +dcebc5ddedc5dee1c5d5e2c5d6e3c5d7 +e4c5d8e5c5d90eef1af50cf5c5f4f8c5 +f5f9c5f6fac5f7efc5f1f0c5f2f2c5f3 +f3ad1fe90ce9c5edeac5eeebc5efedc5 +f0e4c5eae5c5ebe7c5ec0017ef2af514 +f809f8c70cf9c70dfac70ef5c709f6c7 +0af7c70bf209f2c706f3c707f4c708ef +c703f0c704f1c705e814eb09ebc701ed +c702eea5dce8c5fee9c5ffeac700e509 +e5c5fbe6c5fce7c5fde1c5f8e3c5f9e4 +c5fa6ac2596ec1256e966fa29370a2d9 +71a2fc720dec17f00cf0c5d2f5c39bf8 +c5d3fac5d4ecc5cfedc5d0eec5d1e60c +e6c5cce7c5cde9c5ceebc569e1c5c9e2 +c5cae5c5cb0018ed2df417f70cf7c59e +f8c506f9c59ffac5a0f4c59bf5c59cf6 +c59df109f1c599f2c59af3c3a5edc596 +eec597f0c598e714ea09eac593ebc594 +ecc595e7c590e8c591e9c592e409e4c5 +8de5c58ee6c58fe1c58ae2c58be3c58c +0014ed25f314f609f6c5b2f7c5b3f9c5 +b4f3c5aff4c5b0f5c5b1edab6ceec5ac +efaf64f0c5adf1c5aee70fe7c5a7e8c5 +a8e9c5a9eac5aaebc5abe1c5a2e3c5a3 +e4c5a4e5c5a5e6c5a60aee14f509f5c5 +bcf8c5bdf9c5beeec5b9efc5baf3c5bb +e2c5b5e7c5b6e8c5b7e9c3d8ecc5b808 +ee0feec5c3efc5c4f1c5c5f4c5c6f9c5 +c7e7c5bfebc5c0ecc5c1edc5c26aa262 +6ba29a6ca2ea6d0018ed2df317f60cf6 +c585f7c586f8c587fac588f3c582f4c5 +83f5c584f009f0c57ff1c580f2c581ed +c57ceec57defc57ee714ea09eac579eb +c57aecc57be7c576e8c577e9c578e409 +e4c573e5c574e6c575e1c570e2c571e3 +c5720010ee1df40ff4c544f5c545f8c5 +46f9c547faad93eec540efc541f2c542 +f3c543e90ce9c53ceac53decc53eedc5 +3fe1c538e2c539e4c53ae8c53b0016ed +2af414f709f7c55cf8c55dfac55ef4c5 +59f5c55af6c55bf109f1c556f2c557f3 +c558edc553eec554efc555e614e909e9 +c550eac551ebc552e6c54de7c54ee8c5 +4fe1c548e2c549e3c54ae4c54be5c54c +0011ef1df60ff6c56bf7c56cf8c56df9 +c56efac56fefc567f1c568f2c569f5c5 +6ae90fe9c563eac564ebc565edc566ee +a5e3e1c55fe3c560e5c561e7c56265c1 +5f65a25d66a2a367a2b068a405690016 +ee2af514f809f8c535f9c536fac537f5 +c532f6c533f7c534f209f2c52ff3c530 +f4c531eec52cefc52df1c52ee714ea09 +eac529ecc52aedc52be7c526e8c527e9 +c528e1c521e2c522e4c523e5c524e6c5 +250014ed25f414f809f8c3ebf9c3ecfa +c3edf4c3e8f5c3e9f7c3eaedc3e3eec3 +e4efc3e5f1c3e6f2c3e7e70fe7c3dee8 +c3dfe9c3e0eac3e1ebc3e2e1c3d9e2c3 +dae3c3dbe4c3dce5c3dd04e1c3eee4c3 +efecc3f0f2c3f1f5c3f20017ee2af514 +f809f8c508f9c509fac50af5c505f6c5 +06f7c507f209f2c503f3c504f4bd92ee +c500f0c501f1c502e814eb09ebc3fdec +c3feedc3ffe8c3fae9c3fbeac3fce409 +e4c3f7e5c3f8e7c3f9e1c3f4e2c3f5e3 +c3f60015ef25f514f809f8c51ef9c51f +fac520f5c51bf6c51cf7c51defc516f0 +c517f1c518f2c519f4c51ae614eb09eb +c513edc514eec515e6c510e7c511e9c5 +12e1c50be2c50ce3c50de4c50ee5c50f +61a25f62a2bc63a407640017ee2af514 +f809f8c3d5f9c3d6fac3d7f5c3d2f6c3 +d3f7c3d4f209f2c3cff3c3d0f4c3d1ee +c3ccf0c3cdf1c3cee814eb09ebc3c9ec +c3caedc3cbe8c3c6e9c3c7eac3c8e409 +e4c3c3e6c3c4e7c3c5e1c3c0e2c3c1e3 +c3c20015ee37f314f809f8c392f9c393 +fac394f3c38ff4c390f7c391ee38efc3 +8bf0c38cf1c38df2c38e012a2e481261 +6ef4c38a012ac3895410d7c38ae614eb +09ebc386ecc387edc388e6c383e7c384 +eac385e1c37ee2c37fe3c380e4c381e5 +c3820015ee25f414f709f7c3a9f8b307 +f9c3aaf4c3a6f5c3a7f6c3a8eec3a1ef +c3a2f0c3a3f1c3a4f2c3a5e614ea09ea +c39eebc39fedc3a0e6c39be8c39ce9c3 +9de1c396e2c397e3c398e4c399e5c39a +0015ec25f114f509f5c3bcf8c3bdfac3 +bef1b7fff2c3baf4c3bbecc3b6edc3b7 +eec3b8efc3b9f0b7cce614e909e9c3b3 +eac3b4ebc3b5e6c3b0e7c3b1e8c3b2e1 +c3abe2c3ace3c3ade4c3aee5c3af66db +f469d2ea69aade6ab05c6bb4406c0022 +72c13ee11dee0feebdaeefbdbdf4bdee +f5bdf7f6bf0de1bbe2e2bbf7e7bd3de9 +bd557667766e779478a25579a2567a03 +e8bf1fecbf20eebf21fa012a2e471265 +6ff2bf23012abf224710c5bf2305ec09 +ecbf11f3bf0df5bf12e1bf0ee9bf0feb +bf1008ec0fecbf17edbf18efbf19f4bf +1af7bf1be1bf13e5bf14e7bf15e8bf16 +10edbf1c01e1bf1deebf1e72a25573a2 +7d74a292750015ef25f414f709f7bf0b +f9ab12fabf0cf4bf08f5bf09f6bf0aef +bf03f0bf04f1bf05f2bf06f3bf07e914 +ec09ecbf00edbf01eebf02e9bdfdeabd +feebbdffe1bdf8e3bdf9e4bdfae5bdfb +e6bdfc0bed14f409f4bde4f6bde5fabd +e6edbde1eebde2efbde3e909e9bddeeb +bddfecbde0e1bddbe3bddce7bddd06e9 +0ce9bdeaedbdebf2bdecf3bdede1bde7 +e4bde8e5bde907ee0ceebdf3efbdf4f3 +bdf5f5bdf6e3bdefe7bdf0e8bdf1e9bd +f269c1ed6dc0f76d3c6ea25e6fa28c70 +a2dc7110f2bdda0016ec2af214f709f7 +bdabf8bdacf9bdadf2bda8f5bda9f6bd +aaef09efbda5f0bda6f1bda7ecbda2ed +bda3eebda4e614e909e9bd9feabda0eb +bda1e6bd9ce7bd9de8bd9ee1bd97e2bd +98e3bd99e4bd9ae5bd9b0dec17f30cf3 +bdb9f5bdbaf7bdbbfabdbcecbdb6edbd +b7eebdb8e70ce7bdb2e8bdb3e9bdb4ea +bdb5e1bdafe2bdb0e4bdb10016ee2af4 +14f809f8bdd2f9bdd3fabdd4f4bdcff5 +bdd0f7bdd1f109f1bdccf2bdcdf3bdce +eebdc9efbdcaf0bdcbe814eb09ebbdc6 +ecbdc7edbdc8e8bdc3e9bdc4eabdc5e1 +bdbee2bdbfe3bdc0e5bdc1e7bdc204e1 +bdd5e5bdd6eebdd7efbdd8f8bdd969a2 +456aa29a6ba2af6c0011eb1def0fefbd +92f0bd93f1bd94f5bd95f8bd96ebbd8e +ecbd8fedbd90eebd91e50fe5bd89e6bd +8ae7bd8be9bd8ceabd8de1bd85e2bd86 +e3bd87e4bd880015ef25f514f809f8bd +6af9bd6bfabd6cf5bd67f6bd68f7bd69 +efbd62f0bd63f1bd64f2bd65f3bd66e6 +1eea09eabd5febbd60ecbd61e62ce7bd +5de8bd5e012abd5b4c12696de2bd5ce1 +bd56e2bd57e3bd58e4bd59e5bd5a06ec +0cecbd70f0bd71f7bd72f8bd73e1bd6d +e5bd6ee9bd6f0010ec1df20ff2bd80f3 +bd81f4bd82f5bd83f9bd84ecbd7cedbd +7deebd7eefbd7fe50ce5bd78e8bd79e9 +bd7aeabd7be1bd74e2bd75e3bd76e4bd +7765bd656466a27d67a2816807ee0cee +bd51f3bd52f4bd53f5bd54e1bd4de8bd +4ee9bd4fedbd500019ee2df417f70cf7 +bd37f8bd38f9bd39fabd3af4bd34f5bd +35f6bd36f109f1bd31f2bd32f3bd33ee +bd2eefbd2ff0bd30e717ea0ceabd2aeb +bd2becbd2cedbd2de7afe1e8bd28e9bd +29e409e4bd25e5bd26e6bd27e1bd22e2 +bd23e3bd2401e1bd3beebd3c0eed1af2 +0cf2bd49f4bd4af5bd4bfabd4cedbd45 +eebd46efbd47f1bd48e80ce8bd41e9bd +42ebbd43ecbd44e1bd3ee2bd3fe7bd40 +619062a27e63a2bc640deb17ee0ceebd +1eefbd1ff0bd20f1bd21ebbd1becbd1c +edbd1de70ce7bd17e8bd18e9bd19eabd +1ae1bd14e2bd15e4bd160014ec25f214 +f709f7bbf4f8bbf5fabbf6f2bbf1f3bb +f2f5bbf3ecbbecedbbedeebbeef0bbef +f1bbf0e70fe7bbe8e8bbe9e9bbeaeabb +ebebbb33e1bbe3e2bbe4e3bbe5e4bbe6 +e5bbe70012ef20f60ff6bd05f7bd06f8 +bd07f9bd08fabd09efbd00f1bd01f2bd +02f4bd03f5bd04ea0feabbfceba921ec +bbfdedbbfeeebbffe2bbf8e5bbf9e6bb +fae9bbfb09ec0fecbd0fedbd10f0bd11 +f1bd12f3bd13e3bd0ae4bd0be5bd0ce6 +bd0de8bd0e002474a9e520ef0fefb5bc +f3b568f4b5d7f5b594f7b5ebe5b576e7 +b57fe9b58debaffbeeb5b3782d783479 +3e7a4ee1b557e4b56b01e3b5f0ecb5f1 +02e1b5f2efb5f3f8b5f404e8b5f5e9b1 +11edb5f6f2b5f7fab5f8744875a24876 +a2497703ebb5ecedb5edefb5eef3b5ef +0ff21af70cf7b5e4f8b5e5f9b5e6fab5 +e7f2b5e0f3b5e1f4b5e2f6b5e3eb0ceb +b5dcecb5ddedb5deefb5dfe2b5d8e4b5 +d9e5b5dae9b5db10edb5e801e2b5e9f6 +b5ea6bc0fc6f626f7a708a7194729e73 +0aeb14ef09efb5d4f4b5d5f5b5d6ebb5 +d1edb5d2eeb5d3e1b5cce3b5cde4b5ce +e8b5cfe9b5d002f2b5bdf5b5bef7b5bf +01e9b5c0efb5c101f5b5c2f7b5c307ee +0ceeb5c8f5b5c9f8b5caf9b5cbe5b5c4 +e8b5c5e9b5c6ebb5c76b646ca24d6da2 +756e07ee0ceeb5b8efb5b9f0b5baf4b5 +bbe2b5b4e7b5b5e8b5b6eab5b70cf017 +f60cf6b59df7b59ef8b59ffab5a0f0b5 +9af2b59bf4b59ceb09ebb597ecb598ef +b599e5b594e8b595e9b5960bed14f509 +f5b5a9f6b5aaf7b176edb5a6efb5a7f0 +b5a8e909e9b5a4ebb5a5ecb5a6e1b5a1 +e2b5a2e7b5a307f20cf2b5aff3b5b0f4 +b5b1f9b5b2e9b5abecb5aceeb5adefb5 +ae66656652678468a24d69a2576a04e3 +b58fe5b590eab591eeb592f3b59307eb +0cebb57bedb57cf5b57df9b57ee1b577 +e2b578e5b579e6b57a08ed0fedb584ee +b585efb586f3b587f7b588e2b580e5b5 +81e7b582ecb58303e2b589e9b58af0b5 +8bf7b58c10eeb58e616e627e63a25a64 +09e90fe9b571f2b572f3b573f4b574f5 +b575e1b56ce2b56de3b56ee4b56fe5b5 +7002e9b558eeb559f2b55a0ce917ee0c +eeb563f2b564f5b565f9b566e9b560ec +b561edb562e509e5b55de7b55ee8b55f +e1a7f3e2b55be4b55c03e1b567e5b568 +e8b569f2b56a00186eb07628e10ce1b5 +f9e9b72bf6b76df7b770763a77447902 +e1b772e5b773f9b77401e4b76eeeb76f +10e9b771715071947298750fee1af40c +f4b769f5b76af7b76bf9b76ceeb765ef +b766f0b767f2b768e90ce9b761ebb762 +ecb763edb764e1b75de2b75ee4b75fe8 +b76010f2b75804e1b759e2a3b6f2b75a +f4b75bf5b75c6e346f607001e1b756f2 +b75706e90ce9b74deab74eecb74ff3b7 +50e1b74ae4b74be7b74c04e2b751e4b7 +52e7b753f2b754f7b75568796b3c6b72 +6c886d0aec14f309f3b747f7b748f8b7 +49ecb744eeb745f2b746e1b73fe2b740 +e3b741e4b742e9b74303e1b73aedb73b +efb73cf5b73d10e5b73e683469386a01 +e5b738f2b73910e9b72a0bec14f509f5 +b735f6b736f9b737ecb732edb733f4b7 +34e409e4b72fe5b730e7b731e1b72ce2 +b72de3b72e643d644065506703e2b727 +e5b728ebb707efb72902e1b71ae7b71b +f4b71c09ec0fecb722eeb723f2b724f4 +b725f5b726e2b71de5b71ee8b71fe9b7 +20ebb721613062a24e6310f4b7190014 +ed25f314f809f8b70bf9b70cfab70df3 +b708f4b709f5b70aedb703eeb704efb7 +05f1b706f2b707e60fe6b5ffe8b700ea +b701ebb702ecb527e1b5fae2b5fbe3b5 +fce4b5fde5b5fe0aee14f409f4b716f5 +b717f7b718eeb713efb714f2b715e5b7 +0ee9b70feab710ebb711edb712002875 +c29feb74f23ff628f6b9eff7bb84f902 +2a32414c4c126174eebbb4022abbb243 +2a5410d2bbb410cebbb3127261e2bbb3 +f2b9b1f3bb24f5022aac7d41ac835912 +657ae9b9a5eb38ecb976edb991eeb9ae +efb9c7012a2e41127261e2b95a042ab9 +5841324336493a4d10ceb95c10c6b959 +10ceb95a10d2b95b7a667a38e1b1c3e7 +b7fce9b929eab9400017ee2af514f809 +f8bbdff9bbe0fabbe1f5bbdcf6bbddf7 +bbdef209f2bbdaf3bbdbf4af6aeebbd7 +efbbd8f0bbd9e814eb09ebaf56ecbbd5 +edbbd6e8add6e9bbd4eaaf6ae409e4bb +d1e5bbd2e6bbd3e1bbcee2bbcfe3bbd0 +75a26576a2ba77a40f78a467790018ed +2df417f70cf7bbcaf8bbcbf9bbccfabb +cdf4bbc7f5bbc8f6bbc9f109f1bbc4f2 +bbc5f3bbc6edbbc1eebbc2efbbc3e714 +ea09eabbbeebbbbfecbbc0e7bbbbe8bb +bce9bbbde409e4bbb8e5bbb9e6bbbae1 +bbb5e2bbb6e3bbb70017ee2af514f809 +f8bb6af9bb6bfabb6cf5bb67f6bb68f7 +bb69f109f1bb64f3bb65f4bb66eebb61 +efbb62f0bb63e814eb09ebbb5eecbb5f +edbb60e8bb5be9bb5ceabb5de509e5bb +58e6bb59e7bb5ae2bb55e3bb56e4bb57 +0017ee2af414f809f8bb81f9bb82fabb +83f4bb7ef6bb7ff7bb80f109f1bb7cf2 +bb7df3b1adeebb79efbb7af0bb7be714 +ea09eabb76ecbb77edbb78e7bb73e8bb +74e9bb75e409e4bb70e5bb71e6bb72e1 +bb6de2bb6ee3bb6f0018ed2df317f60c +f6b9d0f7bb9af9bb9bfabb9cf3bb97f4 +bb98f5bb99f009f0bb94f1bb95f2bb96 +edbb91eebb92efbb93e714ea09eabb8e +ebbb8fecbb90e7bb8be8bb8ce9bb8de4 +09e4bb88e5bb89e6bb8ae1bb85e2bb86 +e3bb870015ee25f414f809f8bbaff9bb +b0fabbb1f4bbacf6bbadf7bbaeeebba7 +efbba8f0bba9f1bbaaf2bbabe614eb09 +ebbba5ecbb1eedbba6e6bba2e9bba3ea +bba4e1bb9de2bb9ee3bb9fe4bba0e5bb +a16bc3b470c1cf70a26871a2c072a41b +73a46b740019ee2df417f70cf7bb52f8 +bb53f9bb54faa591f4bb4ff5bb50f6bb +51f109f1bb4df2af6af3bb4eeebb4aef +bb4bf0bb4ce717ea0ceabb46ebbb47ec +bb48edbb49e7bb43e8bb44e9bb45e409 +e4bb40e5bb41e6bb42e1bb3de2bb3ee3 +bb3f0018ee2df417f70cf7b9f0f8b9f1 +f9b9f2fab9f3f4b9edf5b9eef6b9eff1 +09f1b9eaf2b9ebf3b9eceeb9e8efb9e9 +f0b73be814eb09ebb9e5ecb9e6edb9e7 +e8b9e2e9b9e3eab9e4e509e5b9dfe6b9 +e0e7b9e1e1b9dce3b9dde4b9de0019ee +2df417f70cf7bb0af8bb0bf9bb0cfabb +0df4bb07f5bb08f6bb09f109f1bb04f2 +bb05f3bb06eebb01efbb02f0bb03e717 +ea0ceab9fdebb9feecb9ffedbb00e7b9 +fae8b9fbe9b9fce409e4b9f7e5b9f8e6 +b9f9e1b9f4e2b9f5e3b9f60016ed2af5 +14f809f8bb21f9bb22fabb23f5bb1ef6 +bb1ff7bb20f209f2bb1bf3bb1cf4bb1d +eda90beebb19f0bb1ae614ea09eabb16 +ebbb17ecbb18e6bb13e8bb14e9bb15e1 +bb0ee2bb0fe3bb10e4bb11e5bb120017 +ee2af414f709f7bb3af8bb3bfabb3cf4 +bb37f5bb38f6bb39f109f1bb34f2bb35 +f3bb36eebb31efbb32f0bb33e814eb09 +ebbb2eecbb2fedbb30e8bb2be9bb2cea +bb2de509e5bb28e6bb29e7bb2ae2bb25 +e3bb26e4bb276ba2536ca2ab6da4066e +a47b6f0014ec25f414f709f7b9d9f9b9 +dafab9dbf4b9d6f5b9d7f6b9d8ecb9d1 +efb9d2f0b9d3f1b9d4f3b9d5e70fe7b9 +cde8b9cee9b9cfeab9d0ebb33be1b9c8 +e3b9c9e4b9cae5b9cbe6b9cc0018ed2d +f417f70cf7b972f8b973f9b974fab975 +f4b96ff5b970f6b971f109f1b96cf2b9 +6df3b96eedb969efb96af0b96be714ea +09eab966ebb967ecb968e7b963e8b964 +e9b965e409e4b960e5b961e6b962e1b9 +5de2b95ee3b95f0019ee2df417f70cf7 +b98df8b98ef9b98ffab990f4b98af5b9 +8bf6b98cf109f1b987f2b988f3b989ee +b984efb985f0b986e717ea0ceab980eb +b981ecb982edb983e7b97de8b97ee9b9 +7fe409e4b97ae5b97be6b97ce1b977e2 +b978e3b9790019ee47f417f70cf7b9aa +f8b9abf9b9acfab9adf4b9a7f5b9a8f6 +b9a9f123f1b9a1f226f3b9a6022a3241 +405912657ae9b9a5012ab9a24c10c2b9 +a3127261e2b9a4eeb99eefb99ff0b9a0 +e717ea0ceab99bebb99cecb902edb99d +e7b998e8b999e9b99ae409e4b995e5b9 +96e6b997e1b992e2b993e3b9940018ee +2df417f70cf7b9c3f8b9c4f9b9c5fab9 +c6f4b9c0f5b9c1f6b9c2f109f1b9bdf2 +b9bef3b9bfeeb9baefb9bbf0b9bce714 +eb09ebb9b7ecb9b8edb9b9e7b7fce9b9 +b5eab9b6e409e4b9b2e5b9b3e6b9b4e1 +b9afe2b9b0e3b9b166c1a766a25d67a2 +b268a2f869a44d6a0016ed2af314f809 +f8b955f9b956fab957f3b952f4b953f5 +b954f009f0b94ff1b950f2b951edb94c +eeb94defb94ee714ea09eab949ebb94a +ecb94be7b946e8b947e9b948e1b941e2 +b942e3b943e4b944e5b9450017ee2af5 +14f809f8b7f9f9b7fafab7fbf5b7f6f6 +b7f7f7b7f8f109f1b7f3f2b7f4f3b7f5 +eeb7f0efb7f1f0b7f2e714eb09ebb7ed +ecb7eeedb7efe7b7eae8b7ebe9b7ece4 +09e4b7e7e5b7e8e6b7e9e1b7e4e2b7e5 +e3b7e60014ef25f414f709f7b90ff8b9 +10f9b911f4b90cf5b90df6b90eefb907 +f0b908f1b909f2b90af3b90be80fe8b9 +02eab903ebb904ecb905edb906e1b7fd +e2b7fee4b7ffe5b900e6b9010017ef2a +f514f809f8b926f9b927fab928f5b923 +f6b924f7b925f209f2b920f3b921f4b9 +22efb91df0b91ef1b91fe714eb09ebc8 +1aecb91beeb91ce7b918e8b919eab91a +e409e4b915e5b916e6b917e1b912e2b9 +13e3b9140015ef25f514f809f8b93df9 +b93efab93ff5b93af6b93bf7b93cefb9 +35f0b936f1b937f3b938f4b939e614ea +09eab932ecb933edb934e6b92fe7b930 +e8b931e1b92ae2b92be3b92ce4b92de5 +b92e61a25d62a29563a2ed64a4426500 +16ed2af514f809f8b7e1f9b7e2fab7e3 +f5b7def6b7dff7b7e0f209f2b7dbf3b7 +dcf4b7ddedb7d8eeb7d9efb7dae614e9 +09e9b7d5ebb7d6ecb7d7e6b7d2e7b7d3 +e8b7d4e1b7cde2b7cee3b7cfe4b7d0e5 +b7d10010eb1df10ff1b781f6b782f7b7 +83f8b784f9b785ebb77dedb77eefb77f +f0b780e70ce7b779e8b77ae9b77beab7 +7ce1b775e2b776e3b777e4b7780018ee +2df417f70cf7b79bf8b79cf9b79dfab7 +9ef4b798f5b799f6b79af109f1b795f2 +b796f3b797eeb792efb793f0b794e814 +eb09ebb78fecb790edb791e8b78ce9b7 +8deab78ee409e4b789e5b78ae7b78be1 +b786e2b787e3b7880017ed2af414f709 +f7b7b4f9b7b5fab7b6f4b7b1f5b7b2f6 +b7b3f009f0b7aef1b7aff3b7b0edb7ab +eeb7acefb7ade714ea09eab7a8ebb7a9 +ecb7aae7b7a5e8b7a6e9b7a7e409e4b7 +a2e5b7a3e6b7a4e1b79fe2b7a0e3b7a1 +0015ed25f414f809f8b7caf9b7cbfab7 +ccf4b7c7f6b7c8f7b7c9edb7c2eeb7c3 +f0b7c4f1b7c5f2b7c6e714ea09eab7bf +ebb7c0ecb7c1e7b7bce8b7bde9b7bee1 +b7b7e3b7b8e4b7b9e5b7bae6b7bb66a6 +c567aa3268001e72c0f8e51af40cf4b5 +30f5b536f9a554fab556e5b3cae9b3d6 +efb50cf2b51f763f765877747984e122 +032ab3a9372e43345310c4b3aa1133b6 +b3aa10cdb3ab04e3b54ce5b54debb54e +eeb54ff6b55002e1b551e3b552efb553 +01e1b554f7b55572a25073a27b74a282 +750014ed25f514f809f8b549f9b54afa +b54bf5b546f6b547f7b548edb541f0b5 +42f2b543f3b544f4b545e70fe7b53ce8 +b53de9b53eebb53fecb540e2b537e3b5 +38e4b539e5b53ae6b53b0cf017f50cf5 +b529f7b52af8b52bfab52cf0b526f2b5 +27f4b528eb09ebb523edb524efb525e1 +b520e3b521e5b52202e2b52deeb52ef3 +b52f04e9b531efb532f3b533f5b534f8 +b53569c1116dae6d366ea2436fa26b70 +10efb51e0010f11df50ff5b3fcf6b3fd +f7b3fef9b3fffab500f1b3f8f2b3f9f3 +b3faf4b3fbea0ceab3f5edb3f6eeb3cb +f0b3f7e1b3f1e2b3f2e4b3f3e6b3f409 +e919e9b506ea32eeb509efb50af3b50b +012ab50748126d6ee7b508e1b501e4b5 +02e5b503e7b504e8b5050010ec1df20f +f2b519f4b51af6b51bf7b51cf9b51dec +b515edb516efb517f0b518e50ce5b511 +e8b512e9b513eab514e1b50de2b50ee3 +b50fe4b510694e6aa24b6ba24c6c04e1 +b3ece2b3ede4b3eef4b3eff5b3f00feb +1af20cf2b3e3f4b3e4f7b3e5f8b3e6eb +b3dfecb3e0edb3e1efb3e2e70ce7b3db +e8b3dce9b3ddeab3dee1b3d7e2b3d8e4 +b3d9e6b3da10e9b3e703e1b3e8e5b3e9 +e8b3eaebb3eb6434643e6548676e6802 +e9b3d3f2b3d4f9b3d501eeb3b2f9b3c9 +05e809e8b3cee9b3cfedb3d0e1b3cbe4 +b3cce7b3cd01edb3d1f7b3d2613062a2 +656310e8b3c80015ee25f314f809f8b3 +c0f9b3c1fab3c2f3b3bdf6b3bef7b3bf +eeb3b8efb3b9f0b3baf1b3bbf2b3bce8 +26eb1beb2cecb3b6edb3b7012a2e4812 +616ef4b3b5012ab3b45410d7b3b5e8b3 +b1e9b3b2eab3b3e1b3ace3b3ade4b3ae +e5b3afe7b3b004e1b3c3e2b3c4eeb3c5 +efb3c6f5b3c700177199e614ef09efb1 +44f2b14df9b169e6a254e9b12ceab135 +7612762a772ee1b11310f2b16601e1b1 +67e5b16871a24272a243750eed1af40c +f4b162f5b163f6b164f9b165edb15eee +b15ff1b160f2b161e50ce5b15ae6b15b +e8b15ce9b15de2b158e326e4b159012a +b1274112646cedb12810f3b14c0aef14 +f209f2b155f3b156f4b157efb152f0b1 +53f1b154e3b14ee4b14fe5b14debb150 +edb1516b556e286e2e6f3e7010e5b14b +02e2b141e7b142e9b14305ee09eeb148 +f2b149f3b14ae4b145e9b146edb1476b +346c3e6d01f0b13ff5b14001ebb136f6 +b13706ec0cecb13beeb13cf2b13df9b1 +3ee1b138e8b139e9b13a662b665c6766 +6907f00cf0b131f2b132f4b133f7b134 +e1b12de5b12ee6b12fecb13001e9b129 +edb12a10f2b12b613062a2466510f2b1 +260012ec20f40ff4a3b9f5b122f8b123 +f9b124fab125ecb11dedb11eeeb11ff0 +b120f2b121e70fe7b118e8b119e9b11a +eab11bebb11ce1b114e2b115e4b116e6 +b11710eca799001f71c18a7953ec0cec +b300eeb31af5b365f6b37b79307a8ee1 +b16ae4b1a40dec17ef0cefb3a2f2b3a3 +f9b3a4fab3a5ecb39fedb3a0eeb3a1e5 +0ce5b39be6b39ce7b39de9b39ee1b184 +e2b399e4b39a02e1b3a6e9b3a7eeb3a8 +75c0c5753676a25b77a2867810f8b398 +0016ed2af414f709f7b378f8b379fab3 +7af4b376f5b377f6af89f009f0b373f1 +b374f2b375edb370eeb371efb372e614 +e909e9b36debb36eecb36fe6b36be7b3 +1ae8b36ce1b366e2b367e3b368e4b369 +e5b36a0ced17f00cf0b385f2b1d4f3b3 +86f9b387edb382eeb383efb384e609e6 +b37feab380ecb381e1b37ce3b37de5b3 +7e0fea1af40cf4b394f5b395f7b396f8 +b397eab390edb391eeb392f2b393e50c +e5b38ce6b38de7b38ee9b38fe1b388e2 +b389e3b38ae4b38b7140725073a25674 +02e1b363e9b364f5b1d502e1b34aeeb3 +4bf2b34c0012ed20f60ff6b359f7b35a +f8b35bf9b35cfab35dedb354f1b355f3 +b356f4b357f5b358e50fe5afc4e7b350 +e8b351e9b352eab353e1b34de2b192e3 +b34ee4b34f04ecb35eeeb35fefb360f0 +b361f7b36269c17f6dc0e26d406e9e6f +a2807002e1b347e5b348eeb3490dee17 +f60cf6b316f8b317f9b318fab319eeb3 +13f2b314f5b315e70ce7b30fe8b310ec +b311edb312e1b30ce2b30de4b30e0013 +ec20f20ff2b32af4b32bf5b32cf7b32d +fab32eecb325edb326eeb327efb328f1 +b329e70fe7b320e8b321e9b322eab323 +ebb324e1b31be2b31ce3b31de4b31ee5 +b31f0018ed2df317f60cf6b343f7b344 +f8b345f9b346f3b340f4b341f5b342f0 +09f0b33df1b33ef2b33fedb33beeb328 +efb33ce714ea09eab338ebb339ecb33a +e7b335e8b336e9b337e409e4b332e5b3 +33e6b334e1b32fe2b330e3b33169846a +a26d6ba27a6c0beb14f209f2b309f5b3 +0af7b30bebb306ecb307efb308e809e8 +b304e9af56eab305e2b301e3b302e4b3 +030011ee1df30ff3b1eff4b1f0f8b1f1 +f9b1f2fab1f3eeb1ebf0b1ecf1b1edf2 +b1eee50fe5b1e6e7b1e7e8b1e8ecb1e9 +edb1eae1b1e2e2b1e3e3b1e4e4b1e504 +ebb1f4edb1f5eeb1f6f2b1f7f5b1f806 +ee0ceeb1fcefb1fdf0b1fef5b1ffe1b1 +f9e4b1fae5b1fb65a0656a66a26667a2 +6a6808ee0feeb1ddefb1def2b1dff3b1 +e0f4b1e1e1b1d9e3b1dae5b1dbebb1dc +0013ec20f60ff6b1c6f7b1c7f8b1c8f9 +b1c9fab1caecb1c2efb1c3f1b1c4f2ad +bcf3b1c5e70fe7b1bde8b1bee9b1bfea +b1c0ebb1c1e1b1b8e2b1b9e3b1bae4b1 +bbe6b1bc01ebb1cbf8b1cc0cec17f20c +f2b1d5f4b1d6f5b1d7f7b1d8ecb1d3ee +b1d4efaff8e509e5b1d0e7b1d1ebb1d2 +e1b1cde2b1cee4b1cf61a24862a2a363 +a2fb640012eb20f10ff1b1b3f2b1b4f4 +b1b5f5b1b6f8b1b7ebb1aeecb1afedb1 +b0eeb1b1efb1b2e60fe6b1a9e7b1aae8 +b1abe9b1aceab1ade2b1a5e3b1a6e4b1 +a7e5b1a80019ee2df417f70cf7b180f8 +b181f9b182fab183f4b17ef5b17ff6ad +cbf109f1b17bf2b17cf3b17deeb178ef +b179f0b17ae717ea0ceab174ebb175ec +b176edb177e7b171e8b172e9b173e409 +e4b16ee5b16fe6b170e1b16be2b16ce3 +b16d0018ed2df317f70cf7b199f8b19a +f9b19bfab19cf3b196f5b197f6b198f0 +09f0b193f1b194f2b195edb190eeb191 +efb192e714ea09eab18debb18eecb18f +e7b18ae8b18be9b18ce409e4b187e5b1 +88e6b189e1b184e2b185e3b18606ec0c +ecb1a0eeb1a1f2b1a2f4b1a3e3b19de4 +b19ee6b19f63cb0463a4dc64aea76500 +1d73927a29ef0cefafeaf3aff6f4afbd +f5a5f87a44e5afabecafc4ee012aafd9 +53126861f7afda01e1b111e5b1127620 +76387748784c7901e1b10fefb11002e5 +b10ae8b10beeb10c10efb10d10f4b10e +732e74667510e4b10908eb0febaffbed +affcf3affdf5affef9afffe5aff7e7af +f8e8aff9e9affa08f30ff3b104f4b105 +f5b106f8b107fab108e2b100eeb101ef +b102f2b1036ac0e96e636e6a6fa25670 +a2577208eb0febaff1f2aff2f3aff3f4 +aff4f7aff5e1afede7afeee8afefe9af +f00eed1af20cf2afe6f6afe7f7afe8f8 +afe9edafe2eeafe3efafe4f1afe5e40c +e4afdee6afdfe8afe0ecafe1e1afdbe2 +afdce3afdd10f4afeb10e9afec6aa242 +6ba2436ca2666d0dee17f50cf5afd5f7 +afd6f8afd7faafd8eeafd2f0afd3f3af +d4e716e7afcde9afceeb26edafd1012a +afcf4e126b6fefafd0e1afcae2afcbe5 +afcc10e1afb80aec14f009f0afc1f2af +c2f9afc3ecafbeedafbfefafc0e1afb9 +e5afbae7afbbe9afbcebafbd05ef09ef +afc8f0a3f2f5afc9e5afc5ebafc6edaf +c7662f663e674e686a6902f0afb5f4af +b6f6afb702e1aface5afade9afae04e1 +afafecafb0edafb1efafb2f9afb310f5 +afb4613462386301f2afa9f9afaa10e1 +afa305ef09efafa6f2afa7f5afa8e3af +a4e7afa5eba7d5002272c161e127f219 +f2ad2df3ad44f52cf6ad74f9ad7d012a +ad6347126c61e7ad64e1ab49e5ab88e8 +ab98efad0c7643764e7758787e79827a +04e5ad44e8ad81ebad82eead83f4ad84 +01e7ad75eead7605e509e5ad79e7ad7a +f4ad7be1ad77e2ad78e4ad2d10e8ad7c +02e1ad7ee2ad7fefad80729673a28674 +a2b4750eec1af50cf5ad70f6ad71f8ad +72f9ad73ecad6cefad6df0ad6ef4ad6f +e80ce8ad68e9ad69eaad6aebad6be1ad +65e2ad66e3ad670015ed25f414f809f8 +ad41f9ad42faad43f4ad3ef6ad3ff7ad +40edad39eead3aefad3bf1ad3cf3ad3d +e714ea09eaad36ebad37ecad38e7ad33 +e8ad34e9ad35e1ad2ee2ad2fe3ad30e4 +ad31e6ad320df017f60cf6ad4ff7ad50 +f9ad51faad52f0ad4cf3ad4df4ad4eea +0ceaad48ebad49edad4aefad4be1ad45 +e2ad46e8ad470fee1af40cf4ad5ff5ad +60f9ad61faad62eead5befad5cf0ad5d +f3ad5ee70ce7ad57e8ad58ecad59edad +5ae1ad53e3ad54e4ad55e5ad5669c19b +6dc0d06d3a6e826fa25f70a2a07110e4 +ad2c0aec14f209f2abd6f3abfcf4abfd +ecabfaeea4b6efabfbe1abf5e5abf6e7 +abf7e9abf8ebabf90dec17f30cf3ad08 +f4ad09f7ad0af8ad0becad05f0ad06f1 +ad07e70ce7ad01e8ad02e9ad03ebad04 +e1abfee2abffe3ad000013ec20f40ff4 +ad1cf5ad1df8ad1ef9ad1ffaad20ecad +17edad18efad19f0ad1af1ad1be60fe6 +ad12e7ad13e8ad14eaad15ebad16e1ad +0de2ad0ee3ad0fe4ad10e5ad110aee14 +f509f5ad29f8ad2af9ad2beead26efad +27f3ad28e1ad21e2ad22e3ad23e7ad24 +e9ad25699c6aa2616ba28c6c0fec1af4 +0cf4abf1f5abf2f7abf3f9abf4ecabed +edabeeefabeff3abf0e80ce8abe9e9ab +eaeaabebebabece1abe5e3abe6e4abe7 +e5abe80aed14f209f2abc6f7abc7f9ab +c8edabc3eeabc4f0abc5e1abbee2abbf +e3abc0e5abc1e8abc20cee17f20cf2ab +d2f3abd3f6abd4f9abd5eeabcfefabd0 +f0abd1e909e9abccebabcdedabcee1ab +c9e5abcae8abcb0ef21af60cf6abe1f8 +abe2f9abe3faabe4f2abddf3abdef4ab +dff5abe0ed0cedabd9eeabdaefabdbf1 +abdce1abd6e2abd7ecabd865c0e465a2 +af66a2c467a2ce680013ee20f40ff4ab +b9f7abbaf8abbbf9abbcfaabbdeeabb4 +efabb5f0abb6f1abb7f2abb8e973e938 +eaabb0ebabb1ecabb2edabb3022a3c42 +a2594811616e01e2abaff4abaa0b4d2d +5417542e55385610c4abad01c8aba9d7 +abaa01cbababd3abac4dcc9d502a5310 +d2aba802c6aba5c8aba6daaba7470e47 +3048cc814910c4aba310c6aba12aab9e +412a4210ceaba010d5ab9f126f70efab +aee2ab99e4ab9ae6ab9be7ab9ce8ab9d +06eb0cebab8ceeab8df4ab8ef9ab8fe1 +ab89e2ab8ae7ab8b03e1ab90e4ab91e7 +ab92edab9303e1ab94e3ab95e7ab96eb +ab97616a62a27563a2b06408ea0feaab +83edab84efab85f2ab86faab87e5ab7f +e6ab80e8ab81e9ab820016ed2af314f8 +09f8ab5ef9ab5ffaab60f3ab5bf6ab5c +f7ab5df009f0ab58f1ab59f2ab5aedab +55eeab56efab57e614ea09eaab52ebab +53ecab54e6ab4fe7ab50e8ab51e1ab4a +e2ab4be3ab4ce4ab4de5ab4e0011ef1d +f40ff4ab6ef5ab6ff6ab70f7ab71f9ab +72efab6af1ab6bf2ab6cf3ab6de90fe9 +ab65eaab66ebab67ecab68eeab69e2ab +61e3ab62e4ab63e7ab640bec14f009f0 +ab7cf1ab7df2ab7eecab79edab7aefab +7be709e7ab76e8ab77eaab78e3ab73e4 +ab74e5ab75001a6fc1b2776ce10ce1ad +85e5adbcf6af8afaa34f775079887a05 +e709e7afa0ecafa1eeafa2e1af9ee4af +9fe5af0a08f30ff3af8ff5af79f7af90 +f9af91faaf92e1af8cebaf8decadaaf2 +af8e0aed14f209f2af9bf5af9cf9af9d +edaf98eeaf99efaf9ae1af93e2af94e4 +af95e7af96e9af9773b37334746075a2 +4e7610e1af8b06eb0cebaf5eeeaf5fef +af60f1af61e2af5be8af5ce9af5d0def +17f30cf3af6cf4af6df5af6ef9af6fef +af69f0af6af2af6be80ce8af65e9af66 +ebaf67edaf68e1af62e2af63e4af6400 +19ee2df417f70cf7af86f8af87f9af88 +faaf89f4af83f5af84f6af85f109f1af +80f2af81f3af82eeaf7defaf7ef0af7f +e717ea0ceaaf79ebaf7aecaf7bedaf7c +e7af76e8af77e9af78e409e4af73e5af +74e6af75e1af70e2af71e3af726fa247 +70a285720def17f30cf3af57f4af58f5 +af59f9af5aefaf54f1af55f2af56e81e +e832e9af52eca7beeeaf53012a2e4d12 +6f6ee7af51012aaf504310ceaf51e3af +4de5af4ee7af4f0012ee20f40ff4af47 +f6af48f7af49f8af4af9af4beeaf42ef +af43f0af44f2af45f3af46e60fe6af3e +e8af3fe9add8ebaf40ecaf41e1af3ae2 +af3be3af3ce5af3d10f0af4c68c15d6b +9d6b966ca2506da2576e0eee1af50cf5 +af36f6af37f7af38f9af39eeaf32efaf +33f2af34f4af35e70ce7af2fe9af30ea +ad8aebaf31e1af2ce4af2de5af2e06ec +0ceca540f2af14f3af15f8af16e1af11 +e7af12ebaf1302e7af17edaf18eeaf19 +0011ed1df50ff5af27f6af28f7af29f8 +af2af9af2bedaf23efaf24f2af25f3af +26e50fe5af1ee6af1fe7af20ebaf21ec +af22e1af1ae2af1be3af1ce4af1d6896 +69a2666a0feb1aef0cefaf0df2af0ef5 +af0ff7af10ebaf09ecaf0aedaf0beeaf +0ce50ce5af05e6af06e9af07eaaf08e1 +af01e2af02e3af03e4af040cef17f50c +f5ade8f6ade9f7adeaf8adebefade5f2 +ade6f3ade7ec09ecade2edade3eeade4 +e4addfe7ade0e9ade10016ee2af414f8 +09f8adfef9adfffaaf00f4adf0f5adfc +f7adfdf109f1adf9f2adfaf3adfbeead +f5efadf7f0adf8e714ea09eaadf4ebad +f5ecadf6e7adf1e8adf2e9adf3e1adec +e2adede3adeee4adefe6adf064a264a2 +4265a265670011ec1df30ff3addaf4ad +dbf7addcf8adddfaaddeecadd6eeadd7 +efadd8f2add9e50fe5add1e7add2e8ad +d3e9add4ebadd5e1adcde2adcee3adcf +e4add00aea14f209f2adb9f3adbaf7ad +bbeaadb6eeadb7efadb8e1adb1e4adb2 +e5adb3e7adb4e9adb50fec1af20cf2ad +c9f3adcaf6adcbfaadccecadc5edadc6 +eeadc7f1adc8e70ce7adc1e8adc2e9ad +c3ebadc4e3adbde4adbee5adbfe6adc0 +613662a2566301e3adaff2adb00015ed +25f314f709f7ad99f8ad9afaad9bf3ad +96f5ad97f6ad98edad91efad92f0ad93 +f1ad94f2ad95e714ea09eaad8eebad8f +ecad90e7ad8be8ad8ce9ad8de1ad86e3 +ad87e4ad88e5ad89e6ad8a0012ed20f4 +0ff4adaaf5adabf6adacf7adadf9adae +edada5eeada6efada7f0ada8f1ada9e6 +0fe6ada0e7ada1e9ada2eaada3ecada4 +e1ad9ce2ad9de4ad9ee5ad9f2ab40061 +ccef62002373c2d0e51ded0feda905ee +a91eefa936f2a979f3a993e5a74be7a7 +78e8a78ee9a7a777c14b773878a26179 +a2a77aa2e8e1a5ea0017ed2af414f809 +f8ab07f9ab08faab09f4ab04f5ab05f7 +ab06f109f1ab01f2ab02f3ab03eda9fe +efa9fff0ab00e714ea09eaa9fbeba9fc +eca9fde7a9f8e8a9f9e9a9fae409e4a9 +f5e5a9f6e6a9f7e1a9f2e2a9f3e3a9f4 +0014ed25f214f609f6ab1bf7ab1cfaab +1df2a9c2f3ab19f5ab1aedab14eeab15 +efab16f0ab17f1ab18e80fe8ab0fe9ab +10eaab11ebab12ecab13e1ab0ae2ab0b +e3ab0ce6ab0de7ab0e0013ec20f30ff3 +ab2df6ab2ef7ab2ff8ab30faab31ecab +28edab29eeab2af0ab2bf2ab2ce60fe6 +ab23e8ab24e9ab25eaab26ebab27e1ab +1ee2ab1fe3ab20e4ab21e5ab220017ee +2af514f809f8ab46f9ab47faab48f5ab +43f6ab44f7ab45f109f1ab40f2ab41f4 +ab42eeab3defab3ef0ab3fe814eb09eb +ab3aecab3bedab3ce8ab37e9ab38eaab +39e409e4ab34e5ab35e6ab36e1ab32e2 +ab33e3a7ca73a25a74a2aa75a2ff7600 +16ed2af514f809f8a9eff9a9f0faa9f1 +f5a9ecf6a9edf7a9eef109f1a9e9f2a9 +eaf4a9ebeda9e6eea9e7efa9e8e614e9 +09e9a9e3eaa9e4eba9e5e6a9e0e7a9e1 +e8a9e2e1a9dbe2a9dce3a9dde4a9dee5 +a9df0016ee2af414f709f7a9a8f8a9a9 +f9a9aaf4a9a5f5a9a6f6a9a7f109f1a9 +a2f2a9a3f3a9a4eea99fefa9a0f0a9a1 +e814eb09eba99ceca99deda99ee8a999 +e9a99aeaa99be1a994e2a995e3a996e5 +a997e6a9980017ef2af514f809f8a9bf +f9a9c0faa9c1f5a9bcf6a9bdf7a9bef2 +09f2a9b9f3a9baf4a9bbefa9b6f0a9b7 +f1a9b8e714ea09eaa9b3eda9b4eea9b5 +e7a9b0e8a9b1e9a9b2e409e4a9ade5a9 +aee6a9afe1a9abe2a74de3a9ac0018ee +2df417f70cf7a9d7f8a9d8f9a9d9faa9 +daf4a9d4f5a9d5f6a9d6f109f1a9d1f2 +a9d2f3a9d3eea9ceefa9cff0a9d0e714 +ea09eaa9cbeba9cceda9cde7a9c8e8a9 +c9e9a9cae409e4a9c5e5a9c6e6a9c7e1 +a9c2e2a9c3e3a9c46ac3186ec1a56ea2 +656fa2b570a2fb71a44b720018ee2df4 +17f70cf7a98ff8a990f9a991faa992f4 +a98cf5a98df6a98ef109f1a989f2a98a +f3a98beea986efa987f0a988e814eb09 +eba983eca984eda985e8a980e9a981ea +a982e409e4a97de6a97ee7a97fe1a97a +e2a97be3a97c0016ee2af514f809f8a9 +33f9a934faa935f5a930f6a931f7a932 +f109f1a92df2a92ef3a92feea92aefa9 +2bf0a92ce614ea09eaa927eba928eda9 +29e6a924e7a925e9a926e1a91fe2a920 +e3a921e4a922e5a9230014ef25f514f8 +09f8a949f9a94afaa94bf5a946f6a947 +f7a948efa941f0a942f1a943f2a944f4 +a945ea0feaa93ceba93deca93eeda93f +eea940e1a937e2a938e5a939e6a93ae8 +a93b0016ef2af514f809f8a960f9a961 +faa962f5a95df6a95ef7a95ff209f2a9 +5af3a95bf4a95cefa957f0a958f1a959 +e814eb09eba954eca955eda956e8a951 +e9a952eaa953e1a94ce3a94de4a94ee5 +a94fe7a9500015ef25f414f709f7a976 +f8a977faa978f4a973f5a974f6a975ef +a96ef0a96ff1a970f2a971f3a972e714 +eb09eba96beca96ceda96de7a968e9a9 +69eaa96ae1a963e2a964e3a965e4a966 +e6a9676aa25f6ba2b76ca40f6d0017ed +2af314f709f7a91bf8a91cfaa91df3a9 +18f5a919f6a91af009f0a915f1a916f2 +a917eda912eea913efa914e714ea09ea +a90feba910eca911e7a90ce8a90de9a9 +0ee409e4a909e5a90ae6a90be1a906e2 +a907e3a9080018ee2df417f70cf7a7d0 +f8a7d1f9a7d2faa7d3f4a7cdf5a7cef6 +a7cff109f1a7caf2a7cbf3a7cceea7c7 +efa7c8f0a7c9e814eb09eba7c4eca7c5 +eda7c6e8a7c1e9a7c2eaa7c3e409e4a7 +bee6a7bfe7a7c0e1a7bbe2a7bce3a7bd +0018ee2df417f70cf7a7e9f8a7eaf9a7 +ebfaa7ecf4a7e6f5a7e7f6a7e8f109f1 +a7e3f2a7e4f3a7e5eea7e0efa7e1f0a7 +e2e814eb09eba7ddeca7deeda7dfe8a7 +dae9a7dbeaa7dce409e4a7d7e6a7d8e7 +a7d9e1a7d4e2a7d5e3a7d60017ee2af4 +14f809f8a902f9a903faa904f4a7fff6 +a900f7a901f109f1a7fcf2a7fdf3a7fe +eea7f9efa7faf0a7fbe714ea09eaa7f6 +eba7f7eda7f8e7a7f3e8a7f4e9a7f5e4 +09e4a7f0e5a7f1e6a7f2e1a7ede2a7ee +e3a7ef65c19b65a25366a29e67a2e968 +a434690014ee25f414f709f7a7b8f9a7 +b9faa7baf4a7b5f5a7b6f6a7b7eea7b1 +efa7b2f0a7b3f1a7b4f2a7aae60fe6a7 +ade7a7aeeba723eca7afeda7b0e1a7a8 +e2a7a9e3a7aae4a7abe5a7ac0015ef25 +f514f809f8a75ff9a760faa761f5a75c +f6a75df7a75eefa757f0a758f1a759f3 +a75af4a75be614ea09eaa754eba755ed +a756e6a751e8a752e9a753e1a74ce2a7 +4de3a74ee4a74fe5a7500015ee25f414 +f809f8a775f9a776faa777f4a772f5a7 +73f7a774eea76defa76ef0a76ff1a770 +f3a771e614ea09eaa76aeca76beda76c +e6a767e7a768e8a769e1a762e2a763e3 +a764e4a765e5a7660015f025f514f809 +f8a78bf9a78cfaa78df5a788f6a789f7 +a78af0a783f1a784f2a785f3a786f4a7 +87e714ed09eda71eeea781efa782e7a7 +7ee9a77feaa780e1a779e2a77ae3a77b +e4a77ce6a77d0018ed2df317f60cf6a7 +a3f7a7a4f9a7a5faa7a6f3a7a0f4a7a1 +f5a7a2f009f0a79df1a79ef2a79feda7 +9beea79cefa78ee714ea09eaa798eba7 +99eca79ae7a795e8a796e9a797e409e4 +a792e5a793e6a794e1a78fe2a790e3a7 +9161a26562a2b563a40a640019ee2df4 +17f70cf7a747f8a748f9a749faa74af4 +a744f5a745f6a746f109f1a741f2a742 +f3a743eea73eefa73ff0a740e717ea0c +eaa73aeba73beca73ceda73de7a737e8 +a738e9a739e409e4a734e5a735e6a736 +e1a731e2a732e3a7330014ef2ff514f8 +09f8a5fef9a5fffaa700f5a5fbf6a5fc +f7a5fdefa5f5f032f1a5f8f2a5f9f3a5 +fa012aa5f64b127261e9a5f7e70fe7a5 +f0e8a5f1eaa5f2eca5f3eea5f4e1a5eb +e2a5ece3a5ede5a5eee6a5ef0017ee2a +f414f709f7a716f8a717f9a718f4a713 +f5a714f6a715f109f1a710f2a711f3a7 +12eea70defa70ef0a70fe714eb09eba7 +0aeca70beda70ce7a707e9a708eaa709 +e409e4a704e5a705e6a706e1a701e2a7 +02e3a7030018ed2df317f60cf6a72df7 +a72ef9a72ffaa730f3a72af4a72bf5a7 +2cf009f0a727f1a728f2a729eda724ee +a725efa726e714ea09eaa721eba722ec +a723e7a71ee8a71fe9a720e409e4a71b +e5a71ce6a71de1a719e2a71ae3a5f300 +184dc2af54c0f257375736584e59665a +12616ee2d5be01612c631168efc59811 +72e1d5bd01702c731175f8a3c21165ef +c92a01652c691169e9b58d117ae9b9a5 +544455a2ae5601612c691174e8d5bc11 +69e9d5bb08685e683c698c6ea2466fa2 +48751174e7d5ba106101e158e9042ad1 +2a43324b364c3a5410c8d12a10cebd11 +10c8d5b610c1d5b7012aaf8a4d10d6af +8a01622a7210e8d5b810f4012aa93642 +10d4a34f1173e1c5e301642a7410efd3 +6310f2d5b961346580668667116ce7d5 +b5056d116d2e6e327610f4a7ff10eccf +9e10e7d35e67346b386c01e5cfe4f5b9 +1310e2d5b210f2d5b3116cf5cff6116e +e7d5b4126761f2d39650c0c850a27652 +a2ad5306694769426f6a759079016c2a +7210e3abe710efd5b101643e6e01e4cd +19e8012acd6f4c10cbcd6f10e4d5ae02 +672e72387910efabf701e4cdecefd5af +10e1cf14106e01e4d5b0f5cf65613e67 +5e6801612a7210e4d5ad10f7afda026d +2e72327510f2cbe610f2cdc710e2d5ac +116ef7a565046138654c68526c787211 +74e9d5aa016c2a7510e3ad5510eda54c +1172edd5a802612e6c326e10f8c94310 +e7d5a901e9c7ecf0c7ed1172e4b3f302 +6a306f3675116ef2c5ac116ee7d5ab11 +68e7cb714d9a4ea2b34f057222723073 +44751167f2c7d8016b2a7910e1c7ac10 +e8c7c901672a6d10e1d5a710e5c7bc67 +306c366e1161efd5a61161edd5a51163 +ebcbe007722e725a7460756679116df2 +032aa9d2492e4d325410c8d59e10ceb9 +2210cda9d2116fefc1c11165e9d59c11 +6cf4d59d614265746c9a6f01642a6e10 +e7af5110e9d59b0368326b366e3a7210 +e3d59710ead59410e1d59501e4c368e9 +d5960264346e387201e3d599efd59a10 +e6af1f10e4d5981179edc12804613862 +58655e6b64731168f5d5a402672e6e32 +7210e2d5a110edd59f10e4d5a01161f4 +a54b1177e1d5a2116fef012aafd04d10 +ccd5a347c4644ac3704aa6f44ba80d4c +03614665a6d069a6d27901632a6410e9 +d59310e9d592026ea6ad6fa6ae7410ee +001d4ac16253a1571757ace758aceb59 +2a5a10d7cdd102c4d56bc5d56bd4d52d +534854a24555a2705603c1d528c5d52a +ced529d5a7a70ece1ad40cd4d51dd5bb +18d6d51ed9d58dced51acfcde6d2d51b +d3d58cc90cc9cdabcad518cbcd92cdd5 +19c3d517c4d56ac5cf660ccd17d20cd2 +d1e6d6d341d7d1fadacf6dcdd15cced5 +90cfd1b3c809c8d58fcbd164ccd523c4 +d58ec6d521c7d52204c1d591c7d525d3 +afd9d9d526dad5274d924d4e4ea25250 +a2675204c5d516cfc16cd3d58bd5bb18 +d7cbc80011cf1dd50fd5d504d6d588d8 +d505d9bf37dad506cfd586d1d502d2d5 +87d4c1e3c60fc6d501c7bfb3cbd585cc +a905cdb777c1d584c3d3ffc4d500c5cd +0306c90cc9d50accaf83cfc395d0d589 +c1d507c3d508c5d5090bcc14d409d4d5 +14d7c7f4d9b31accc96acdd511d2d512 +c7c5c1c7d1cfc8b130cbd58a4a564b5a +4c06d30cd3d3fbd4bdeed5d3fcd6bf0d +c2d582c9d3facbd58310cfd57f02c5d3 +f4cdd580dad58142c0ee465b46624772 +48a2444907d10cd1d57dd2d57ed3b568 +d4b5d7c3d3f1c4b56bccd57bced57c02 +c9b12ccfb144d2b14d0ace0cd2c62cd2 +d579d4d3eed7d3efc1d3e9c5d578c6d3 +eac8a3b9ccb97604cbd57aced3f0d2b5 +1fd4b530d5b536425e43a24544a27945 +06c70cc7d576d2d577d3aff6d4d569c1 +d3e5c3d3e6c5afbd0ecc0fd2c643d2c9 +e1d4d571d5b777d6d3d6c60cc6d3cfc7 +d570c9cb9acad3d1c1a993c4d56fc5d3 +ce0fce1ad60cd6d3e0d7c7f0d9d574da +ad44ced573cfd3ddd2d3ded5d3dfc80c +c8d3d9c9d3daccd3dbcdd3dcc3d572c4 +d3d7c6cd46c7d3d804c5adbccad3e2cb +ad85cfd3e3dad575343d34aea2377c38 +82410bd214d709d7d3ccd8d3cddaa5de +d2d3c9d3d3cad4d3cbcc09cca3cfcdd5 +6ecfd3c8c4d3c5c5d56cc6d56d1133b6 +d56a1138b6d56b2aafd9312c321133b0 +d5691137b2bb1810e1c5a410ef012abd +bd4c10c1bdbd1170e3bd30026d2e6e32 +7310f5bd6610e2bd5c01e1bbe4e2b318 +01613a701161ee012ab5f94a10d0b5f9 +016d2a7610e1d56410efd563066e256e +346f3a7254741168e9d5681164e1b9ae +1172e5012ab9c74b01d0d3f6d2b9c711 +61e9a5f761306850691174f3d567026c +2e6e327710e9d56610e9afc310e1d565 +02612e6d326f10eacd1810f2c9c510f2 +012ab9914b10c8b991473448a26a4912 +7461ecb105056f456f4a726475026a2e +6b327210f5c7e110f2b36510e8d55901 +6e2a7410e8b34101e7d557edaff80161 +506510eb032aafc4432e47325410d2a7 +8b10d9d3e110d2afc410eed558613065 +366c1161e7ad641172e1d556116ff201 +2ab1c34710c5b1c3056c186c306d3675 +116ee7d5621175f7b3f0106e01e7b508 +f0b507613265a247691172e1d561016e +2a7410f2a54a05ef2defd55cf35ef404 +2aabaa4332483c4d405410d7abaa01c1 +d55dced55e10cbaba210cfaba4012aab +9e4310ceab9ee2abafe7d55ae9d55b11 +62f2032ab3ca493453385501c1b72bd3 +d56010ccb3ca10c5d55f43c135437444 +a2ee450267446c4a741168e9012aa3e5 +4501d2d3e8d4a3e51179f0afb301622a +7910edd55510e1d5540461a28e68a29d +6fa2ac70a2ae791172ec0e4b48541d54 +32553c58465910d5cd0201cad113d2d5 +4c01c1d3a0dad54d10cbd54e4b324d3c +52525310cbd54b01c7bbb2dad3f803c4 +d548c5d549cbbf26ceaf5002cfd54ad3 +cd02d5cbb9421f4232434247464910d2 +d54702c1d545c7a778d9a74b10d3cd02 +01c551d2d5462acbb938364102c6d542 +ccd543dad5441139b0cd02026b2e6e32 +7210e9d53f10edab7c10f3b59402612e +65327210f3d54010edabce10f2abb811 +70f4ad1a016d2a7210f4afaa10eed541 +03653469866f8c751170ecd5531176e1 +06491749324d364e3a5010cba9bd10ce +b3d610d5d55010d0c3d82ab3d6422a46 +10cab3da10d4d54f1161ebd5511167f2 +d5522aa25441a8a342056f1f6f3e7244 +7501672a6810e4d53e10e9d53d1170ef +abae106101e8c961e9d53c6130655c68 +116bf3d53b036c326d36733a7410ebd5 +3a10e9d53910f5a5fe10f3a9a2116ee7 +012aa91e4210c4a91e00204ac1ba52c0 +cf5638563c5758586259665a01d2d3d7 +d7cdd104c1d528c4d529c5d52aced529 +d5a7a701c6d52bd3cdbc10cbd52c03c4 +d3c4c5d3c4d4d52dd5cd025246536c54 +a25a5503c1d3a0c7d525d9d526dad527 +05d309d3cd02d5cbb9d7cbc8c5d516c8 +cdd1cfc16c0fce1ad40cd4d51dd5cbb9 +d6d51ed9d51fced51acfcde6d2d51bd3 +d51cc90cc9cdabcad518cbcd92cdd519 +c1d50bc3d517c4d3c3c5cf660ecd1ad2 +0cd2d1e6d6d341d7abaadacf6dcdd15c +ced524cfd1b3d0d523c80cc8d12acad1 +13cbd164ccd523c4d520c6d521c7d522 +4e5b4e344fa80c50665110c1d51508c9 +0fc9d50accaf83cfc395d0c3d8d4d50b +c1d507c3d508c5d509c8a7a70dcd17d4 +0cd4d514d7c7f4d9b31adad50dcdd511 +d2d512d3d513c70cc7d1cfc8b130cbd5 +10ccc96ac1d50dc5d50ec6d50f4aa248 +4ba24c4ca2644d0012ce20d50fd5d504 +d6af8ad8d505d9bf37dad506ceaf50cf +aba4d1d502d2d503d4c1e3c60fc6d501 +c7bfb3cbbf26cca905cda9d2c1d3fec3 +d3ffc4d500c5cd0301cfd3f3d0b5f907 +d00cd0d3f6d2b9c7d7d3f7dad3f8c5d3 +f4c7bbb2c8b991cdd3f508d30fd3d3fb +d4bdeed5d3fcd6bf0dd9d3fdc1bdbdc2 +d3f9c9d3facbcd6f42c11f466b466247 +7848a24f4907d10cd1d3f2d2b113d3b5 +68d4b5d7c3d3f1c4b56bccb3caceb3d6 +03c9b12ccfb144d2b14dd8b14d0ace14 +d209d2afc4d4d3eed7d3efced3ebd0d3 +ecd1d3edc1d3e9c5b1c3c6d3eac8a3b9 +ccb97605d409d4b530d5b536d6d3cfcb +aba2ced3f0d2b51f426443a25a44a292 +4507c80cc8d3e7d2d3e8d3aff6d4a3e5 +c1d3e5c3d3e6c5afbdc7a5480010cc1d +d20fd2c9e1d4a34fd5a9d2d6d3d6d9a7 +4bccd3d2ced3d3cfd3d4d1d3d5c70cc7 +a778c8d3d0c9cb9acad3d1c1a993c4a9 +1ec5d3cec6d3cf0010ce1dd50fd5d3df +d6d3e0d7c7f0d9d3e1daad44ceab9ecf +d3ddd2d3ded3cd02c80cc8d3d9c9d3da +ccd3dbcdd3dcc3bf38c4d3d7c6cd46c7 +d3d806cb0ccbad85cfd3e3d9d3d1dad3 +e4c4adbcc5adbccad3e2354b3586378c +3892410ccf17d40cd4d3cbd7d3ccd8d3 +cddaa5decfd3c8d2d3c9d3d3cacc09cc +a3cfcda554cec7f0c4d3c5c5d3c6c6d3 +c71133b2c7f01133b6d3c301382a3910 +b0cd0210b6d3c42aafd9313032363411 +31b9d3c21137b2cbb902302e33323810 +b0adbc10b0ad4410b0a3e5046438673e +6844724a761173f4a358116cedb12811 +68e2d52e116feda39601613e6d01e9a5 +49ee012aa5544110cda55410e200134c +665135513c5340545655725901c5d3c4 +d4cf6e10c1d51503c1d50bc4d3c3d3d5 +1cd9d51f04c4d520c8bf9acad537ced5 +24d2d53810cbd5324c3c4d464e624f66 +5001cbd510d3d51301c2d3f9d9d3fd04 +c1d3fecdd531ceb95cd2d503d5d53510 +c7d53610cdd50c452f4542474c49504a +664b02c8abc9cdd3f5d7d3f701c7a548 +c8d3e710c2d53203c4d533ced534d1d3 +f2d2b11310cfd3f32aa5484132424243 +524410dad3e402c5d3c6c6d3c7dad52f +02c8d3d0ced530d5d53101c3bf38ced3 +93002574c1f5e534f223f2a548f3a560 +f6a5a3f9a5cafa012a2e41127261e2a5 +e0022aa5de49a2b55210d5a5e1e5a358 +e6a366eba3b9eda3e5eea3fc78a67832 +795e7aa260e125e25106eb0ceba5c6ec +a5c7eda5c8f8a5c9e2a5c3e5a5c4e7a5 +c50013ee20f30ff3a5d9f4a5daf5a5db +f8a5dcfaa5ddeea5d5efa5d6f0a5d7f1 +a5d8f2a5cae70fe7a5d0e8a5d1e9a5d2 +eba5d3eca5d4e1a5cbe2a5cce3a5cde4 +a5cee5a5cf08ed0feda5e5eea5e6efa5 +e7f4a5e8faa5e9e2a5e2e4a5e3e7a5e4 +ea012a2e41127261e2a5e0032aa5de31 +2e49345310d5a5e11137b2a5e101d1a5 +dfd2a5e074a24875a29d76a2e3770012 +ee20f50ff5a5bef6a5bff7a5c0f8a5c1 +f9a5c2eea5b9efa5baf2a5bbf3a5bcf4 +a5bde70fe7a5b4e8a5b5e9a5b6eba5b7 +eda5b8e1a5b0e2a5b1e3a5b2e5a5b300 +17ef2af514f809f8a58bf9a58cfaa58d +f5a588f6a589f7a58af209f2a585f3a5 +86f4a587efa582f0a583f1a584e914ec +09eca57feda580eea581e9a57ceaa57d +eba57ee409e4a579e5a57ae7a57be1a5 +76e2a577e3a5780014ed25f214f709f7 +a5a0f9a5a1faa5a2f2a59df4a59ef5a5 +9feda598eea599efa59af0a59bf1a59c +e80fe8a593e9a594eaa595eba596eca5 +97e1a58ee3a58fe4a590e5a591e7a592 +0bee14f409f4a5adf5a5aef6a5afeea5 +aaefa5abf3a5aceb09eba5a7eca5a8ed +a5a9e2a5a4e4a5a5e9a5a66ac2e86fc1 +6d6fa25370a28e71a2e372a2fe730014 +ec25f414f809f8a573f9a574faa575f4 +a570f5a571f6a572eca56beea56cefa5 +6df2a56ef3a56fe70fe7a566e8a567e9 +a568eaa569eba56ae1a561e2a562e3a5 +63e4a564e5a5650011eb1df20ff2a524 +f3a525f4a526f8a527faa528eba520ec +a521eda522eea523e50fe5a51be6a51c +e7a51de9a51eeaa51fe1a517e2a518e3 +a519e4a51a0017ee2af514f809f8a53c +f9a53dfaa53ef5a539f6a53af7a53bf2 +09f2a536f3a537f4a538eea533efa534 +f0a535e814eb09eba530eca531eda532 +e8a52de9a52eeaa52fe509e5a52be6a3 +82e7a52ce2a529e3a3b5e4a52a08ed0f +eda543eea544f2a545f4a546faa547e3 +a53fe4a540e7a541eba5420014ee25f3 +14f809f8a55df9a55efaa55ff3a55af5 +a55bf7a55ceea555efa556f0a557f1a5 +58f2a559e90fe9a550eaa551eba552ec +a553eda554e2a548e332e4a54de5a54e +e8a54f032aa54948324e3a5012616ced +a54c126174f2a54a126261f4a54b6aa2 +686ba2836ca2c46da4196e0019ee2df4 +17f70cf7a513f8a514f9a515faa516f4 +a510f5a511f6a512f109f1a50df2a50e +f3a50feea50aefa50bf0a50ce717ea0c +eaa506eba507eca508eda509e7a503e8 +a504e9a505e409e4a500e5a501e6a502 +e1a3fde2a3fee3a3ff08f00ff0a3b5f4 +a35af5a3b6f7a3b7faa3b8e1a3b1e7a3 +b2e9a3b3eea3b40013ef20f40ff4a3c9 +f5a3caf6a3cbf7a3ccfaa3cdefa3c4f0 +a3c5f1a3c6f2a3c7f3a3c8e70fe7a3bf +e8a3c0e9a3c1eba3c2eca3c3e2a3bae3 +a3bbe4a3bce5a3bde6a3be0017ee2af4 +14f809f8a3e2f9a3e3faa3e4f4a3dff5 +a3e0f7a3e1f109f1a3ddf2a3def3a3cf +eea3daefa3dbf0a3dce814eb09eba3d7 +eca3d8eda3d9e8a3d4e9a3d5eaa3d6e4 +09e4a3d1e5a3d2e6a3d3e1a3cee2a3cf +e3a3d00016ef2af514f809f8a3f9f9a3 +fafaa3fbf5a3f6f6a3f7f7a3f8f209f2 +a3f3f3a3f4f4a3f5efa3f0f0a3f1f1a3 +f2e714eb09eba3ededa3eeeea3efe7a3 +ebe9a3aceaa3ece1a3e6e2a3e7e3a3e8 +e5a3e9e6a3ea65c14365a25866a28367 +a2ab68a406690015ed25f214f709f7a3 +aef8a3aff9a3b0f2a3abf3a3acf4a3ad +eda3a6eea3a7efa3a8f0a3a9f1a3aae6 +14ea09eaa3a3eba3a4eca3a5e6a3a0e7 +a3a1e9a3a2e1a39be2a39ce3a39de4a3 +9ee5a39f0ced17f50cf5a362f7a363f9 +a364faa365eda35ff1a360f2a361e509 +e5a35ceba35deca35ee1a359e2a35ae3 +a35b0bee14f309f3a370f5a371faa372 +eea36defa36ef0a36fe809e8a36ae9a3 +6beba36ce2a367e4a368e5a3690019ee +2df417f70cf7a389f8a38af9a38bfaa3 +8cf4a386f5a387f6a388f109f1a383f2 +a384f3a385eea380efa381f0a382e717 +ea0ceaa37ceba37deca37eeda37fe7a3 +79e8a37ae9a37be409e4a376e5a377e6 +a378e1a373e2a374e3a3750ded17f00c +f0a397f2a398f3a399f4a39aeda394ee +a395efa396e80ce8a390e9a391eba392 +eca393e1a38de2a38ee7a38f61a25062 +a28563a2be640014ee25f414f809f8a3 +55f9a356faa357f4a352f5a353f7a354 +eea34defa34ef0a34ff1a350f2a351e7 +0fe7a348e8a349e9a34aeaa34beca34c +e1a343e2a344e4a345e5a346e6a34700 +15ed1af30ef706f74bf84dfa4ff33df4 +47f549ed3dee3fef41f043f145e60ee9 +06e937eb39ec3be631e733e835e127e2 +29e32be42de52f0016ee1ef50ef806f8 +7bf97dfa7ff575f677f779f206f26ff3 +71f473ee69ef6bf06de60ee906e963ec +65ed67e65de75fe861e153e255e357e4 +59e55b0012f118f60cf69df79ff8a1f9 +a341faa342f193f295f397f499f59be6 +0ae689e88bed8dee8ff091e181e283e4 +85e587 } } match{ diff --git a/icu4c/source/data/unit/da.txt b/icu4c/source/data/unit/da.txt index 80b1949bbe75..c02333fd0ede 100644 --- a/icu4c/source/data/unit/da.txt +++ b/icu4c/source/data/unit/da.txt @@ -2444,9 +2444,9 @@ da{ } pressure{ inch-ofhg{ - dnam{"# Hg"} - one{"{0} # Hg"} - other{"{0} # Hg"} + dnam{"″ Hg"} + one{"{0} ″ Hg"} + other{"{0} ″ Hg"} } millimeter-ofhg{ dnam{"mmHg"} diff --git a/icu4c/source/test/intltest/loctest.cpp b/icu4c/source/test/intltest/loctest.cpp index 73f0bcb64887..18887ed4fb14 100644 --- a/icu4c/source/test/intltest/loctest.cpp +++ b/icu4c/source/test/intltest/loctest.cpp @@ -5923,11 +5923,6 @@ testLikelySubtagsLineFn(void *context, return; } - if ((uprv_strcmp(source.c_str(), "und-Latn-RS") == 0 ) - && THIS->logKnownIssue("ICU-22976", "unexpected likely subtags for und-Latn-RS")) { - return; - } - Locale actualMax(l); actualMax.addLikelySubtags(*pErrorCode); if (addLikely == "FAIL") { diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java index f673b8bad6f0..3bdcb86a1318 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java @@ -5723,13 +5723,9 @@ public void likelySubtagsDataDriven(TestCase test) { assertEquals("addLikelySubtags(" + test.source + ") should be unchanged", l, ULocale.addLikelySubtags(l)); } else { - if (test.source.equals("und-Latn-RS") - && logKnownIssue("ICU-23052", "addLikelySubtags(und-Latn-RS) bug") ) { - return; - } - assertEquals("addLikelySubtags(" + test.source + ")", - test.addLikely, ULocale.addLikelySubtags(l).toLanguageTag()); - } + assertEquals("addLikelySubtags(" + test.source + ")", + test.addLikely, ULocale.addLikelySubtags(l).toLanguageTag()); + } if (test.removeFavorRegion.equals("FAIL")) { assertEquals("minimizeSubtags(" + test.source + ") should be unchanged", l, ULocale.minimizeSubtags(l)); diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res index a6775fff29dc795a06e15c798dd8758d2a73659b..24ba3b23e35ad876e9511e4c58bd3b30368a936b 100644 GIT binary patch delta 36 mcmbQhIDv6Ov8*A39)kfGGcYhSC@|Owtk&#(hLW!xEyQXH2g6xA1n^-wzWu;aoYFSx1 z?joXLsbwW@Sc<54`n+b@>@&>DFbmN3zk~n({66vk_rBZr-E+?Uh9k!!kKn&HUYcI_ zT71&-h*z%H9a?=mRx6RLX_h1wdB>e774s{ud{(i4!>YsQD^Dm^O9m9z?Kd-O z`cUT0m6_9(v$*Tk`y=YB_g$#obFq4FhIiqqjFd??S0+8jovYUFlAfuqzEHihY+6NO zWu$?XSVhHnSUlwx6;FFb#e{A)QSq2dRE)!g$2&yD6P#XDJgHfx*;b;beyN3fZ3hLc)GaBd~Mo|&Y7U>d&LP>&qoPS`5 z3yF$*kz^2(+}9~81|x+4Aw^JB3~ZHwod9+s*gVYdfugoQ%m-Kpws5Gqk3&@SMZ9># z?uUeNkmu~8LT-|oM1>4FdRs(AEKo=#^XFv#_RcdeK^Sq+S&MF^j^#AW9%4 zg-b+~Tjmx8eXA%K0-|69NXaXBIl!Md8m5QTVG<6#n*$LI~jYpeS^N zGYfv7CAqc5fk0|)OqR@6Xvfy%vg4-zy9!PqvqR?U!1&3V}oZ-lV6?tqHQLw|< zWDo_jQ4}n>%k$P3M0?|)@~dCVa^Q6vzP|x;%WyKobo`=6ZB&OEz{4Z5Gaj zTXh~`FW5w_&;aB`Ab(PgTdG^VOp1GFP{dhDe@|*4v0aANoJ4EBh23|E`VHE09QG%C zGDz21xYIvNL5m?ZCR?`@~Q9rTZj{tanGUSgn53;k)M zzk2x+gR-E=_iPvWUJyiue6(NWdjv#2#wl}(JQh12|fOWVVsTPS&DLYTfeUSbL&J=Ak=2`lF5XAu`zMR|nm8(Qj`09Ze-N(@hJB zR=TC98wO%V`lYw4f19k0&iUzlh%U5KgNy3jbjCwx!-Vh6^n;DGKicWEp1w8EcSbq| zhF9jLYXQ0*qUMgH>s-|2uFv++RkO@Ym#lQzPK^$_VxWsg`pHB;=X{+%Ie%@z#zL8= zKh7cgCP>FabfTS3dZ^Av$J*#?Ta1m4*y*T?zS2{TnGRd2R;s7HcG?%IC+&U{9q`e? z5LI{3p`6cib@TEhoI~M@^N}tWKF*mK zUT7=*qzO_{6DL4|tCHqdf2Wj1Vw^Va6V_fbko)#_wj4zXR4EP}KKug*Rq1cFzsK8KA!eL@iHH zZUXiyaMz%9Jrbmw*v2A|w}AY$P2_KDPG8gL=9lO;luG)zl>T_If5xu7gxz`>hK-1M z1?uO)xqx&Hts;LByr0bRP&O7I@DS_5=&p?_gh8&03>i^@i?*gya9hkL?^r~BtIRFGKDHgTmRtKmt{63~K%|wh)416-l$4K11#m2cV-adnOZs_}|0|vi@#PT5 zTa;f4@nsOtg7AybU5w-};n6ICxXO~yRp|mWb0Ml&1fBV?)4pIM6+C9aV>UeIz+*0+ z%{d>S1WX4(ks*LB7QAJ25@z@HXFpIpA{)Dqn<0j4gQ8 zZ|&a7VP4n{-Y39)insn}xU~(qk1&vYT!IO=xK#IcnWXRCEiY^W>}|k4#89$Xi;1KP z^Th^WH)8g94_fa->jO(XW{Y)Dc^ebQJD5b?h3k4KzlKrcb<7lNFh~LJZo%Qk1a_uot1e7&%`8Y{^}x|u~WuD%HI0%!{mWFc}c^4EL8nhpOsV9o_= z9$52xIO6f+M4&T(oPK3Qu7yd>Xh3;5`A0C&3*L&ZEGNh4f?49EV5ocyxHd2`RY! zFr>$zX^#Mg)hIj&YBHz~acE1bO84wi-N|J-Zyk#-pr?uWrps0@SReR$4;5q8M`Kbi=b>jcbof($FCH{_xr*8_4fU1NSEw4$KZ z9lBCBRO5V21>8 zkc6wp=1tPb}lhQY$8!si&Qd^w850E}G<~=lnF8)6*1n zN^zQIYANTTj0guk>7wyodP?e}34Th$Je2OCXWHmlKTXWrm#3SbuUk=|TUn^vQY7i; z9NN}3yo~Fh$2;kXHhMHbV?*?qlTuvtu$RWPlJ*fFrCQ?cF?M>eg_0fgkcCED=>Z!h z>1nuuMi^9JQC!`o z?U~WiVAbzm4$-ztl}Qu&XjBFkj8L-S6O=e2Sctp8f}EcD@f9d}wq$&1e%Yq-2s3N7 zF`tvQg~v%|@iJ>0vjv!4&x|%^vNLm(H^$4HKIRHAx1P0_nZs6FB6Ts3k9muAnJaWN zG?IAt(5{)0{n5enomyrHu-}60_Yk||W;Z=d^s-w%_N$-Ww#HdmvyI)bGv;8wxESf# z6$5KBva4ox&BCrr9koBZ*(Ir+T@JFw+|#!UPM;~zr5Ea!7wO(t_kvAKfL&~7KXo$T z&Ux8+A8LK3Pj(_v1%jzBMjEkMsH`kllk5+cNE?&1TJz>ZH{;qNN zj~chC_hrOpBu~2hdR?7)N0ii4H^b34ChiBRYVXdTMzwh5FA<#eWD~<5@^a+jn7$}D^($miPdnS+FKDtNt%>0&UeYe z`5GHI13M&FhxTMgs>Wtd&7E1eN+U0|vxCw?Wf^CznZvpEOqFX~Y=4AmL{edjnrr_l zowKq7QhS5b+u)LGOm%G$`N_qpWpcIeJfy6wx+*p}Dt;elZa9^bT$rkst2}J4T;*bW zsxpHEwV!iWP7dZ84_ucQd+O`u*>?7sywJ~fsM4}a3qL7Fht!<4b_Qo>pLWYlDM(e1 z({M)i5!b@DU_Eb@n$G6h*|vzRG3v1zsgZ5>uunKk?Y$`PV|k^kegq0xIzM}HK~{-8 zH^6qIJL(h-%G}Ah*cY5>Hv3Yp^6!}eRE-Zk+WWmL zEU~H4a-H$bY-82h&;w6yYPwc;G3Fxs;L^3M%WTLw_WlKSUjrK)Sl!XJ+Jic284%VKduMXAd=T$4~W;PLYpH_(PI5aFZnF1}8}y&Pmdn ZBoUH9k~s$t4w9tF2T3NDAN=pX{{U~#tLOj# delta 5152 zcmYLN30PEB8=gTF(NXT`xWK(*rn!xYL`G(1B_*b!=AN243bGH%B4XvVTB)UmmRXjL zx#UQwSZcP28R|?+xhM}=YBJXk3}EGuU;je zQ2nwhae4L8HMe@|58_8ATU#$nDDaOvUcz(Au6$H>V8iM!&Xu2#*2wx7*6b|ZwkBgu zvWXQt#)i21LAj~2t&yvrh|-LoaC4D-l2WUan~haLaiZKeh3%FwQ=>sf{CjiDOy(aez76Fq;IQoYHQ_EdmESjZ0FKnK`ylb9B$!KYb3MO z9N<#0nM)x^`F&h!@^dM0C$i*ramnN6k{6ObI6EC&YIJhR6^Sg_kjHN0k^{yKW-eJ8 zxMa;X#_XSFk@GP(b=9 z%2JJj9Ya|Tqb!F|t|Rt@Mg?pt5$p?ySD`Eip=iWx4t11eKgx2z2LI1t_8F4xMP2rF z4l1DZ9X!5={%H)I!sTy({Z`h$pk{N)w$+-|N#!Xfn&M*#SZboOIYS zF7|SA5z9wZmCPu8u?!Ox6}Z|173~RB97sYJr@~2px#(}bhyDrEzh-K)QM-fw>>fyH zQM7O|wv~(Bpw}IYEOsXM#`Rqu&E`yP5t7lgUZ9T=a{Fe)ZCCs44wyC9=^?J8=`; zFw;*B#Cmx8H7lCwY>>`{>3l0)@X%>5)%fU4gz$}(^xrz@J12c_qLXI&x`9rC;aB+S zYKX3d>3Z9dbsoCnt;zIJy;WhQAMJF>NtazzXQtW)x@e&vvcAlnocn6t#(agZAC4jV zvW311)A3e1;iIDgs&1xZj#vj(Iq9&6j+p3>l`8G@h1^7YowQFMZKC}aIuM}G!*sBX zj9H|LN61eZDx7ogoCGPKa1aBcrK`piW;-SmlvKK0TryTVQ%I%tQJK5C?o&9tq7 z-nY^RHrgH&Dbl+k+7zY@ZM4}$>&>*mP8*%{PA3y>vD14lstD26jF}mUnG5vG1v|an zB~ttHAgu|}3vKkGg;v?AtdUmt@O6~$jUcTH(VJm<%XjTHKfM;9*BuH6z3ik{+?6kR z=+y>#$wF)Gq}Qe_H7vpYp%N#R%KCXVAysQ^D{0$kX*(?o(c%_*K1@pju>o4xOpAh~ zf6hzu{q$@TEwHN^V;gCXo923Go}FeoXqJ;^TVgFV-AXfT^o)t7nkl`3rp37vA`5Lr zkXE)(QJ9L|l<%PeKk1sNFp@0WNjZ&_>!LgpWtb_`O3Q7OCF`#{Gr#n!)oIv4bJuKk za4{`fj}>flanX)d?Z8@hVy!oJaS6EO#bWp2tsmQ<35(qYsJoGi9yyo+KNp)z*RC?m zDvNcifHYxynIX^sh6P*93dXP48oyb&_&Zp)q4-Bvj|x85v3qU+{u7{jhK=1WPk?=nIev=y?Ly)m zQ2hw1AEO>Sq56p(k4JGEl;4N)2bkA(l=wr0+XC_T5U#>{^0tkOTNPd@*fUtO67gPd zJNpWx-+<05(0DbV=i+OTlUiI0vK|&Mo7gV!UxemM-8>063%K|$Cb$X7He-APs2dUC z9n@_dOx{F@w*Y<{{Po#2ioDY-&#)xlaJoRI@{PXp@DR&Ul{N5v0TEVVK4lPF4Ur-| z|HNVhDG9Lcm}{xMH{^7fQz0U)fZa+j+lDFSAW|+I^Wd0|ITgtI_>=xCo&oVph%bk@ z7UD}Gz6_}sLH9W%UyNJxJj9pS;yY&gEQ+}Rvseh7d3yNGchC}e%!J1*c+7^!9Ne3^ zXobYA2DZh*-h)MU_Sl?hxpIJJKQ2py$1<~KyoNZ!(e(BLo&mDP6Uw zyjOXm^Y} z1hfm=!TS)n9eC(}grRM~y^nt6gJLweg(ZeJOJ%+9Y0#k1^iorgy^#+EvB&)utiXR4mlSC_WT{S9GK+-l85@_L#+Tx z8GvMBD$4=Of=qVS>Dzg0^Yky~8)g>7deH4i^FezSK^7qA!eEUbtXc4%4dxuM=7Ke^ zt4oEKPXRp<$TU=H5)7V34lF}y0vfbbm^|6lslvZ$U`z*O2BJO#*i67CLv;#Nrvjdy zwO*fXn3L1Zoq!&LOXJZMJ_g+5;5`hBN5Fj)oD^Umg!EWwK7?B_E+(?zr288VrMbpfUuC196}4M%Y3B|70SeuanT%N!_t>BCTc@$i+aeYe$#g30l$6>I_{O zDkMkFD7(5b4jbZcY@&a#iT?GR!txZ`aY+5C$Cmgj($0!u90#p9P};D)g4iJ;93(B+ zTV4TD_>3dgR^_eVf{zL6rgOcmK%QXFc7<3Um)au3wEr^WbE6cF)XCLoX)Y1Jjm z@sYr)QOg0ig?E*FHn;TX8~Rl;rEX%WSejBc(MqvSHo`}bMR_RAOOt~1v|ysiy5zzM zMN>-zA5DyM(IXyu)KBB(0eU=0PoN)~;G@)LdNN2)mJhF z(Y!p=M&sJ);buw+(Su!$lWlorCZuYl{wOU!5jkVj^pK>$BxTtG%19kIIcORke?Gd1!)muJH zkCBHeZtohb56d-)PxLC%npr4H!-hSf!4bh)gbOSrm{>FZg2hi2k1xqB-MlKw%KQ%2 zu0V2bBCD6#GF>v=%^}|dzd%Ce1(Se6^3Vu zWGe5Fj-HX-ZexG6>zOIUer;jDh1u_3Mm~1a&v=00BjYdjI6J%UU^krXCl_NL_OprA znc0;FR&QljZS0!dRrRBn{U~>`OD*hj_UT{qPM^s$q~;rz7Z~2vb%#xCh}E{Ti|y`1VXG}M0tn52G`@Xu5VO?tcj{kkF zapyaYTgLrqJ=2mVU0z##%(}C)++97>)jKxsTeI$a{m+A@y3#*LEN-P>%F8GXLjJbX63&B*c5&&dXq54ei z_^id*axKg(?2r(yx)oKBSd?5U1TNWxKwYh1W=5qhyf-siJ2rD__RRd%MamK<`&^!{ zDHR$j=Lnv?QMD%jZpxwF>ouk|R4EY;0Xxk-g7rAl4k{GmwL zgB5WtBUSqZYwb5#N%<){rPjyxDzzT=S;e%L0s5W7m6L;ny3emG3w<>;%1kHwNSPmG zA8RLMmgMg!lxJvkg1zb)!O3=X%1+Kp(Tyt-8rb_nBdfq_-72@7&33YFQ5j=&V~gYs zY`c$rDA=m*!t_2+mV0W3VYbzzw;YE?j1Yv~$|YXA36pYnpPP+tg0liJANAa`x4i%a>^~kmWu6ZHdzDJ6O2S zSR#03>d7_F&)Pk&-@HSX`G*`8kA)xXvGEE^sIRkKXW|XEq2jghsBxR>uT@`+y~y6Z zbS>jD8+?wvbAjDm%LYZ)u+6n>$c-w_+0a{TSo)^)Nz)9|XBaYOb~?}c*4N}$d&2d? y@e^I;)0HFo{~?>8-Ykp#Nsvt#Cdg9jWl^$$vN;D24wOw02FfO`ihKhY`S}ml{hS{F diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res index eea67c939082119c935d504cc0278dcc818c594b..ebbb0e642459a31719b45aff17299afbbf899839 100644 GIT binary patch delta 221 zcmaDbf$_lv#to5-ld~CLa4IMmGbk{4Fr;txV!A8KJmt%j%~}d4nORN07=AI_{6m?Y ziMi=Z(_|*Ko2>3%oWD3vexSBqIr~fcmvjae25;6f23>|FUvwnAzi51Z&%g{3`BL(w zVDcvQSoQ8N-QOb+>Mn=LZIs)nI0qr}CF%3^FL9gAG(;HLguZ>5`(^Ir08L|7yDwH> ztR{B=Spi>szW7W&psCAT`K5C52hFXlkzYc;gl=A?#mK=ZIC+hcI%DMKD@M~98QnMM In0yfi0LqhAZ2$lO delta 219 zcmaDbf$_lv#to5-?8*!Z3?2;Wll>S!Zw_XxjvD*AYnVpHb z`%Cv^CbgTa0bhK+_)LDFwqCj9OTm`{1{MZy)-ncNh9zH2CA_~Fetyru3=#QK`=xU7 zCiPhLDPN|1k3guq945C>ZlmHHgvgid&)2`CZ#L5qVPyNF^F`x}#^eA^V^;Ss&R?7- zcK}(DUqZixPClTi%iQ#(Y4Qint*l93;=aUfUZusz!6-F(jgdNI(&j5h(-|29Hs_dp G5e5LQ`c`rP diff --git a/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java b/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java index edce6b06e90b..5e5fe7ca42b4 100644 --- a/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java +++ b/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java @@ -270,8 +270,10 @@ private static Map>> makeTable( // Add the special case for "und-Latn" => "en-Latn-US" (which is a bit of a // hack for language matching). - // TODO: Find out the history of this line and document it better. + // Temporary patch. Needs an update of the ICU algorithm to match CLDR. + // See https://unicode-org.atlassian.net/browse/ICU-23052 set(lsrTable, "und", "Latn", "", lsr("en", "Latn", "US")); + set(lsrTable, "und", "Latn", "RS", lsr("sr", "Latn", "RS")); logger.fine(lsrTable::toString); // Ensure that if "und-RR" => "ll-Ssss-RR", then we also add "Ssss" => "RR". From c5b7dce96bda17e7e229b2dfdc575421633566c2 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Tue, 25 Feb 2025 12:27:25 -0800 Subject: [PATCH 16/19] ICU-23073 Use string_view constants for option names and formatter names --- icu4c/source/i18n/messageformat2.cpp | 2 +- .../source/i18n/messageformat2_evaluation.cpp | 4 +- .../source/i18n/messageformat2_formatter.cpp | 36 ++-- .../i18n/messageformat2_function_registry.cpp | 180 +++++++++++------- ...essageformat2_function_registry_internal.h | 6 +- .../i18n/unicode/messageformat2_formattable.h | 9 +- 6 files changed, 150 insertions(+), 87 deletions(-) diff --git a/icu4c/source/i18n/messageformat2.cpp b/icu4c/source/i18n/messageformat2.cpp index fd7f34bc42d8..a5ef68a2472f 100644 --- a/icu4c/source/i18n/messageformat2.cpp +++ b/icu4c/source/i18n/messageformat2.cpp @@ -690,7 +690,7 @@ UnicodeString MessageFormatter::formatToString(const MessageArguments& arguments formatPattern(context, *globalEnv, dataModel.getPattern(), status, result); } else { // Check for errors/warnings -- if so, then the result of pattern selection is the fallback value - // See https://github.com/unicode-org/message-format-wg/blob/main/spec/formatting.md#pattern-selection + // See https://www.unicode.org/reports/tr35/tr35-messageFormat.html#pattern-selection const DynamicErrors& err = context.getErrors(); if (err.hasSyntaxError() || err.hasDataModelError()) { result += REPLACEMENT; diff --git a/icu4c/source/i18n/messageformat2_evaluation.cpp b/icu4c/source/i18n/messageformat2_evaluation.cpp index 96396ced1a35..44796248dd39 100644 --- a/icu4c/source/i18n/messageformat2_evaluation.cpp +++ b/icu4c/source/i18n/messageformat2_evaluation.cpp @@ -46,7 +46,7 @@ FunctionOptions::FunctionOptions(UVector&& optionsVector, UErrorCode& status) { options = moveVectorToArray(optionsVector, status); } -UBool FunctionOptions::getFunctionOption(const UnicodeString& key, Formattable& option) const { +UBool FunctionOptions::getFunctionOption(std::u16string_view key, Formattable& option) const { if (options == nullptr) { U_ASSERT(functionOptionsLen == 0); } @@ -60,7 +60,7 @@ UBool FunctionOptions::getFunctionOption(const UnicodeString& key, Formattable& return false; } -UnicodeString FunctionOptions::getStringFunctionOption(const UnicodeString& key) const { +UnicodeString FunctionOptions::getStringFunctionOption(std::u16string_view key) const { Formattable option; if (getFunctionOption(key, option)) { if (option.getType() == UFMT_STRING) { diff --git a/icu4c/source/i18n/messageformat2_formatter.cpp b/icu4c/source/i18n/messageformat2_formatter.cpp index 1d024fcdf48d..a1c5196a42b4 100644 --- a/icu4c/source/i18n/messageformat2_formatter.cpp +++ b/icu4c/source/i18n/messageformat2_formatter.cpp @@ -24,6 +24,18 @@ U_NAMESPACE_BEGIN namespace message2 { + namespace functions { + static constexpr std::u16string_view DATETIME = u"datetime"; + static constexpr std::u16string_view DATE = u"date"; + static constexpr std::u16string_view TIME = u"time"; + static constexpr std::u16string_view NUMBER = u"number"; + static constexpr std::u16string_view INTEGER = u"integer"; + static constexpr std::u16string_view TEST_FUNCTION = u"test:function"; + static constexpr std::u16string_view TEST_FORMAT = u"test:format"; + static constexpr std::u16string_view TEST_SELECT = u"test:select"; + static constexpr std::u16string_view STRING = u"string"; + } + // MessageFormatter::Builder // ------------------------------------- @@ -130,18 +142,18 @@ namespace message2 { FormatterFactory* time = StandardFunctions::DateTimeFactory::time(success); FormatterFactory* number = new StandardFunctions::NumberFactory(); FormatterFactory* integer = new StandardFunctions::IntegerFactory(); - standardFunctionsBuilder.adoptFormatter(FunctionName(UnicodeString("datetime")), dateTime, success) - .adoptFormatter(FunctionName(UnicodeString("date")), date, success) - .adoptFormatter(FunctionName(UnicodeString("time")), time, success) - .adoptFormatter(FunctionName(UnicodeString("number")), number, success) - .adoptFormatter(FunctionName(UnicodeString("integer")), integer, success) - .adoptFormatter(FunctionName(UnicodeString("test:function")), new StandardFunctions::TestFormatFactory(), success) - .adoptFormatter(FunctionName(UnicodeString("test:format")), new StandardFunctions::TestFormatFactory(), success) - .adoptSelector(FunctionName(UnicodeString("number")), new StandardFunctions::PluralFactory(UPLURAL_TYPE_CARDINAL), success) - .adoptSelector(FunctionName(UnicodeString("integer")), new StandardFunctions::PluralFactory(StandardFunctions::PluralFactory::integer()), success) - .adoptSelector(FunctionName(UnicodeString("string")), new StandardFunctions::TextFactory(), success) - .adoptSelector(FunctionName(UnicodeString("test:function")), new StandardFunctions::TestSelectFactory(), success) - .adoptSelector(FunctionName(UnicodeString("test:select")), new StandardFunctions::TestSelectFactory(), success); + standardFunctionsBuilder.adoptFormatter(FunctionName(functions::DATETIME), dateTime, success) + .adoptFormatter(FunctionName(functions::DATE), date, success) + .adoptFormatter(FunctionName(functions::TIME), time, success) + .adoptFormatter(FunctionName(functions::NUMBER), number, success) + .adoptFormatter(FunctionName(functions::INTEGER), integer, success) + .adoptFormatter(FunctionName(functions::TEST_FUNCTION), new StandardFunctions::TestFormatFactory(), success) + .adoptFormatter(FunctionName(functions::TEST_FORMAT), new StandardFunctions::TestFormatFactory(), success) + .adoptSelector(FunctionName(functions::NUMBER), new StandardFunctions::PluralFactory(UPLURAL_TYPE_CARDINAL), success) + .adoptSelector(FunctionName(functions::INTEGER), new StandardFunctions::PluralFactory(StandardFunctions::PluralFactory::integer()), success) + .adoptSelector(FunctionName(functions::STRING), new StandardFunctions::TextFactory(), success) + .adoptSelector(FunctionName(functions::TEST_FUNCTION), new StandardFunctions::TestSelectFactory(), success) + .adoptSelector(FunctionName(functions::TEST_SELECT), new StandardFunctions::TestSelectFactory(), success); CHECK_ERROR(success); standardMFFunctionRegistry = standardFunctionsBuilder.build(); CHECK_ERROR(success); diff --git a/icu4c/source/i18n/messageformat2_function_registry.cpp b/icu4c/source/i18n/messageformat2_function_registry.cpp index 70a75a797ecc..668f0c4251d3 100644 --- a/icu4c/source/i18n/messageformat2_function_registry.cpp +++ b/icu4c/source/i18n/messageformat2_function_registry.cpp @@ -41,6 +41,54 @@ U_NAMESPACE_BEGIN namespace message2 { +// Constants for option names +namespace options { +static constexpr std::u16string_view ALWAYS = u"always"; +static constexpr std::u16string_view COMPACT = u"compact"; +static constexpr std::u16string_view COMPACT_DISPLAY = u"compactDisplay"; +static constexpr std::u16string_view DATE_STYLE = u"dateStyle"; +static constexpr std::u16string_view DAY = u"day"; +static constexpr std::u16string_view DECIMAL_PLACES = u"decimalPlaces"; +static constexpr std::u16string_view DEFAULT_UPPER = u"DEFAULT"; +static constexpr std::u16string_view ENGINEERING = u"engineering"; +static constexpr std::u16string_view EXACT = u"exact"; +static constexpr std::u16string_view EXCEPT_ZERO = u"exceptZero"; +static constexpr std::u16string_view FAILS = u"fails"; +static constexpr std::u16string_view FULL_UPPER = u"FULL"; +static constexpr std::u16string_view HOUR = u"hour"; +static constexpr std::u16string_view LONG = u"long"; +static constexpr std::u16string_view LONG_UPPER = u"LONG"; +static constexpr std::u16string_view MAXIMUM_FRACTION_DIGITS = u"maximumFractionDigits"; +static constexpr std::u16string_view MAXIMUM_SIGNIFICANT_DIGITS = u"maximumSignificantDigits"; +static constexpr std::u16string_view MEDIUM_UPPER = u"MEDIUM"; +static constexpr std::u16string_view MIN2 = u"min2"; +static constexpr std::u16string_view MINIMUM_FRACTION_DIGITS = u"minimumFractionDigits"; +static constexpr std::u16string_view MINIMUM_INTEGER_DIGITS = u"minimumIntegerDigits"; +static constexpr std::u16string_view MINIMUM_SIGNIFICANT_DIGITS = u"minimumSignificantDigits"; +static constexpr std::u16string_view MINUTE = u"minute"; +static constexpr std::u16string_view MONTH = u"month"; +static constexpr std::u16string_view NARROW = u"narrow"; +static constexpr std::u16string_view NEGATIVE = u"negative"; +static constexpr std::u16string_view NEVER = u"never"; +static constexpr std::u16string_view NOTATION = u"notation"; +static constexpr std::u16string_view NUMBERING_SYSTEM = u"numberingSystem"; +static constexpr std::u16string_view NUMERIC = u"numeric"; +static constexpr std::u16string_view ORDINAL = u"ordinal"; +static constexpr std::u16string_view PERCENT_STRING = u"percent"; +static constexpr std::u16string_view SCIENTIFIC = u"scientific"; +static constexpr std::u16string_view SECOND = u"second"; +static constexpr std::u16string_view SELECT = u"select"; +static constexpr std::u16string_view SHORT = u"short"; +static constexpr std::u16string_view SHORT_UPPER = u"SHORT"; +static constexpr std::u16string_view SIGN_DISPLAY = u"signDisplay"; +static constexpr std::u16string_view STYLE = u"style"; +static constexpr std::u16string_view TIME_STYLE = u"timeStyle"; +static constexpr std::u16string_view TWO_DIGIT = u"2-digit"; +static constexpr std::u16string_view USE_GROUPING = u"useGrouping"; +static constexpr std::u16string_view WEEKDAY = u"weekday"; +static constexpr std::u16string_view YEAR = u"year"; +} // namespace options + // Function registry implementation Formatter::~Formatter() {} @@ -308,14 +356,14 @@ MFFunctionRegistry::~MFFunctionRegistry() { // Default notation is simple Notation notation = Notation::simple(); - UnicodeString notationOpt = opts.getStringFunctionOption(UnicodeString("notation")); - if (notationOpt == UnicodeString("scientific")) { + UnicodeString notationOpt = opts.getStringFunctionOption(options::NOTATION); + if (notationOpt == options::SCIENTIFIC) { notation = Notation::scientific(); - } else if (notationOpt == UnicodeString("engineering")) { + } else if (notationOpt == options::ENGINEERING) { notation = Notation::engineering(); - } else if (notationOpt == UnicodeString("compact")) { - UnicodeString displayOpt = opts.getStringFunctionOption(UnicodeString("compactDisplay")); - if (displayOpt == UnicodeString("long")) { + } else if (notationOpt == options::COMPACT) { + UnicodeString displayOpt = opts.getStringFunctionOption(options::COMPACT_DISPLAY); + if (displayOpt == options::LONG) { notation = Notation::compactLong(); } else { // Default is short @@ -379,15 +427,15 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.integerWidth(IntegerWidth::zeroFillTo(minIntegerDigits)); // signDisplay - UnicodeString sd = opts.getStringFunctionOption(UnicodeString("signDisplay")); + UnicodeString sd = opts.getStringFunctionOption(options::SIGN_DISPLAY); UNumberSignDisplay signDisplay; - if (sd == UnicodeString("always")) { + if (sd == options::ALWAYS) { signDisplay = UNumberSignDisplay::UNUM_SIGN_ALWAYS; - } else if (sd == UnicodeString("exceptZero")) { + } else if (sd == options::EXCEPT_ZERO) { signDisplay = UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO; - } else if (sd == UnicodeString("negative")) { + } else if (sd == options::NEGATIVE) { signDisplay = UNumberSignDisplay::UNUM_SIGN_NEGATIVE; - } else if (sd == UnicodeString("never")) { + } else if (sd == options::NEVER) { signDisplay = UNumberSignDisplay::UNUM_SIGN_NEVER; } else { signDisplay = UNumberSignDisplay::UNUM_SIGN_AUTO; @@ -395,13 +443,13 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.sign(signDisplay); // useGrouping - UnicodeString ug = opts.getStringFunctionOption(UnicodeString("useGrouping")); + UnicodeString ug = opts.getStringFunctionOption(options::USE_GROUPING); UNumberGroupingStrategy grp; - if (ug == UnicodeString("always")) { + if (ug == options::ALWAYS) { grp = UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED; - } else if (ug == UnicodeString("never")) { + } else if (ug == options::NEVER) { grp = UNumberGroupingStrategy::UNUM_GROUPING_OFF; - } else if (ug == UnicodeString("min2")) { + } else if (ug == options::MIN2) { grp = UNumberGroupingStrategy::UNUM_GROUPING_MIN2; } else { // Default is "auto" @@ -410,7 +458,7 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.grouping(grp); // numberingSystem - UnicodeString ns = opts.getStringFunctionOption(UnicodeString("numberingSystem")); + UnicodeString ns = opts.getStringFunctionOption(options::NUMBERING_SYSTEM); if (ns.length() > 0) { ns = ns.toLower(Locale("en-US")); CharString buffer; @@ -536,7 +584,7 @@ int32_t StandardFunctions::Number::maximumFractionDigits(const FunctionOptions& return 0; } - if (opts.getFunctionOption(UnicodeString("maximumFractionDigits"), opt)) { + if (opts.getFunctionOption(options::MAXIMUM_FRACTION_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -553,7 +601,7 @@ int32_t StandardFunctions::Number::minimumFractionDigits(const FunctionOptions& Formattable opt; if (!isInteger) { - if (opts.getFunctionOption(UnicodeString("minimumFractionDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_FRACTION_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -570,7 +618,7 @@ int32_t StandardFunctions::Number::minimumFractionDigits(const FunctionOptions& int32_t StandardFunctions::Number::minimumIntegerDigits(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("minimumIntegerDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_INTEGER_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -584,7 +632,7 @@ int32_t StandardFunctions::Number::minimumSignificantDigits(const FunctionOption Formattable opt; if (!isInteger) { - if (opts.getFunctionOption(UnicodeString("minimumSignificantDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_SIGNIFICANT_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -601,7 +649,7 @@ int32_t StandardFunctions::Number::minimumSignificantDigits(const FunctionOption int32_t StandardFunctions::Number::maximumSignificantDigits(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("maximumSignificantDigits"), opt)) { + if (opts.getFunctionOption(options::MAXIMUM_SIGNIFICANT_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -617,14 +665,14 @@ int32_t StandardFunctions::Number::maximumSignificantDigits(const FunctionOption bool StandardFunctions::Number::usePercent(const FunctionOptions& opts) const { Formattable opt; if (isInteger - || !opts.getFunctionOption(UnicodeString("style"), opt) + || !opts.getFunctionOption(options::STYLE, opt) || opt.getType() != UFMT_STRING) { return false; } UErrorCode localErrorCode = U_ZERO_ERROR; const UnicodeString& style = opt.getString(localErrorCode); U_ASSERT(U_SUCCESS(localErrorCode)); - return (style == UnicodeString("percent")); + return (style == options::PERCENT_STRING); } /* static */ StandardFunctions::Number StandardFunctions::Number::integer(const Locale& loc) { @@ -707,14 +755,14 @@ StandardFunctions::NumberFactory::~NumberFactory() {} StandardFunctions::Plural::PluralType StandardFunctions::Plural::pluralType(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("select"), opt)) { + if (opts.getFunctionOption(options::SELECT, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; UnicodeString val = opt.getString(localErrorCode); if (U_SUCCESS(localErrorCode)) { - if (val == UnicodeString("ordinal")) { + if (val == options::ORDINAL) { return PluralType::PLURAL_ORDINAL; } - if (val == UnicodeString("exact")) { + if (val == options::EXACT) { return PluralType::PLURAL_EXACT; } } @@ -867,7 +915,7 @@ StandardFunctions::PluralFactory::~PluralFactory() {} // --------- DateTimeFactory /* static */ UnicodeString StandardFunctions::getStringOption(const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) { if (U_SUCCESS(errorCode)) { Formattable opt; @@ -882,11 +930,11 @@ StandardFunctions::PluralFactory::~PluralFactory() {} } // Date/time options only -static UnicodeString defaultForOption(const UnicodeString& optionName) { - if (optionName == UnicodeString("dateStyle") - || optionName == UnicodeString("timeStyle") - || optionName == UnicodeString("style")) { - return UnicodeString("short"); +static UnicodeString defaultForOption(std::u16string_view optionName) { + if (optionName == options::DATE_STYLE + || optionName == options::TIME_STYLE + || optionName == options::STYLE) { + return UnicodeString(options::SHORT); } return {}; // Empty string is default } @@ -900,7 +948,7 @@ static UnicodeString defaultForOption(const UnicodeString& optionName) { // which works for datetime options but not necessarily in general. UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName) const { + std::u16string_view optionName) const { // Options passed to the current function invocation take priority Formattable opt; UnicodeString s; @@ -922,7 +970,7 @@ UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlac // Used for options that don't have defaults UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { // Options passed to the current function invocation take priority @@ -947,19 +995,19 @@ UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlac static DateFormat::EStyle stringToStyle(UnicodeString option, UErrorCode& errorCode) { if (U_SUCCESS(errorCode)) { UnicodeString upper = option.toUpper(); - if (upper == UnicodeString("FULL")) { + if (upper == options::FULL_UPPER) { return DateFormat::EStyle::kFull; } - if (upper == UnicodeString("LONG")) { + if (upper == options::LONG_UPPER) { return DateFormat::EStyle::kLong; } - if (upper == UnicodeString("MEDIUM")) { + if (upper == options::MEDIUM_UPPER) { return DateFormat::EStyle::kMedium; } - if (upper == UnicodeString("SHORT")) { + if (upper == options::SHORT_UPPER) { return DateFormat::EStyle::kShort; } - if (upper.isEmpty() || upper == UnicodeString("DEFAULT")) { + if (upper.isEmpty() || upper == options::DEFAULT_UPPER) { return DateFormat::EStyle::kDefault; } errorCode = U_ILLEGAL_ARGUMENT_ERROR; @@ -1078,95 +1126,95 @@ FormattedPlaceholder StandardFunctions::DateTime::format(FormattedPlaceholder&& #define ADD_PATTERN(s) skeleton += UnicodeString(s) if (U_SUCCESS(errorCode)) { // Year - UnicodeString year = getFunctionOption(toFormat, opts, UnicodeString("year"), errorCode); + UnicodeString year = getFunctionOption(toFormat, opts, options::YEAR, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (year == UnicodeString("2-digit")) { + if (year == options::TWO_DIGIT) { ADD_PATTERN("YY"); - } else if (year == UnicodeString("numeric")) { + } else if (year == options::NUMERIC) { ADD_PATTERN("YYYY"); } } // Month - UnicodeString month = getFunctionOption(toFormat, opts, UnicodeString("month"), errorCode); + UnicodeString month = getFunctionOption(toFormat, opts, options::MONTH, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; /* numeric, 2-digit, long, short, narrow */ - if (month == UnicodeString("long")) { + if (month == options::LONG) { ADD_PATTERN("MMMM"); - } else if (month == UnicodeString("short")) { + } else if (month == options::SHORT) { ADD_PATTERN("MMM"); - } else if (month == UnicodeString("narrow")) { + } else if (month == options::NARROW) { ADD_PATTERN("MMMMM"); - } else if (month == UnicodeString("numeric")) { + } else if (month == options::NUMERIC) { ADD_PATTERN("M"); - } else if (month == UnicodeString("2-digit")) { + } else if (month == options::TWO_DIGIT) { ADD_PATTERN("MM"); } } // Weekday - UnicodeString weekday = getFunctionOption(toFormat, opts, UnicodeString("weekday"), errorCode); + UnicodeString weekday = getFunctionOption(toFormat, opts, options::WEEKDAY, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (weekday == UnicodeString("long")) { + if (weekday == options::LONG) { ADD_PATTERN("EEEE"); - } else if (weekday == UnicodeString("short")) { + } else if (weekday == options::SHORT) { ADD_PATTERN("EEEEE"); - } else if (weekday == UnicodeString("narrow")) { + } else if (weekday == options::NARROW) { ADD_PATTERN("EEEEE"); } } // Day - UnicodeString day = getFunctionOption(toFormat, opts, UnicodeString("day"), errorCode); + UnicodeString day = getFunctionOption(toFormat, opts, options::DAY, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (day == UnicodeString("numeric")) { + if (day == options::NUMERIC) { ADD_PATTERN("d"); - } else if (day == UnicodeString("2-digit")) { + } else if (day == options::TWO_DIGIT) { ADD_PATTERN("dd"); } } // Hour - UnicodeString hour = getFunctionOption(toFormat, opts, UnicodeString("hour"), errorCode); + UnicodeString hour = getFunctionOption(toFormat, opts, options::HOUR, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (hour == UnicodeString("numeric")) { + if (hour == options::NUMERIC) { ADD_PATTERN("h"); - } else if (hour == UnicodeString("2-digit")) { + } else if (hour == options::TWO_DIGIT) { ADD_PATTERN("hh"); } } // Minute - UnicodeString minute = getFunctionOption(toFormat, opts, UnicodeString("minute"), errorCode); + UnicodeString minute = getFunctionOption(toFormat, opts, options::MINUTE, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (minute == UnicodeString("numeric")) { + if (minute == options::NUMERIC) { ADD_PATTERN("m"); - } else if (minute == UnicodeString("2-digit")) { + } else if (minute == options::TWO_DIGIT) { ADD_PATTERN("mm"); } } // Second - UnicodeString second = getFunctionOption(toFormat, opts, UnicodeString("second"), errorCode); + UnicodeString second = getFunctionOption(toFormat, opts, options::SECOND, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (second == UnicodeString("numeric")) { + if (second == options::NUMERIC) { ADD_PATTERN("s"); - } else if (second == UnicodeString("2-digit")) { + } else if (second == options::TWO_DIGIT) { ADD_PATTERN("ss"); } } @@ -1397,7 +1445,7 @@ double formattableToNumber(const Formattable& arg, UErrorCode& status) { } // 8. If the decimalPlaces option is set, then Formattable opt; - if (options.getFunctionOption(UnicodeString("decimalPlaces"), opt)) { + if (options.getFunctionOption(options::DECIMAL_PLACES, opt)) { // 8i. If its value resolves to a numerical integer value 0 or 1 // or their corresponding string representations '0' or '1', then double decimalPlacesInput = formattableToNumber(opt, status); @@ -1416,7 +1464,7 @@ double formattableToNumber(const Formattable& arg, UErrorCode& status) { } // 9. If the fails option is set, then Formattable failsOpt; - if (options.getFunctionOption(UnicodeString("fails"), failsOpt)) { + if (options.getFunctionOption(options::FAILS, failsOpt)) { UnicodeString failsString = failsOpt.getString(status); if (U_SUCCESS(status)) { // 9i. If its value resolves to the string 'always', then diff --git a/icu4c/source/i18n/messageformat2_function_registry_internal.h b/icu4c/source/i18n/messageformat2_function_registry_internal.h index 084f47e1f387..7e4744152707 100644 --- a/icu4c/source/i18n/messageformat2_function_registry_internal.h +++ b/icu4c/source/i18n/messageformat2_function_registry_internal.h @@ -39,7 +39,7 @@ namespace message2 { private: static UnicodeString getStringOption(const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode); class DateTime; @@ -86,12 +86,12 @@ namespace message2 { */ UnicodeString getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName) const; + std::u16string_view optionName) const; // Version for options that don't have defaults; sets the error // code instead of returning a default value UnicodeString getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) const; }; diff --git a/icu4c/source/i18n/unicode/messageformat2_formattable.h b/icu4c/source/i18n/unicode/messageformat2_formattable.h index d7f4130f493b..cd72bbd4a621 100644 --- a/icu4c/source/i18n/unicode/messageformat2_formattable.h +++ b/icu4c/source/i18n/unicode/messageformat2_formattable.h @@ -558,9 +558,9 @@ class U_I18N_API FunctionOptions : public UObject { explicit FunctionOptions(UVector&&, UErrorCode&); const ResolvedFunctionOption* getResolvedFunctionOptions(int32_t& len) const; - UBool getFunctionOption(const UnicodeString&, Formattable&) const; + UBool getFunctionOption(std::u16string_view, Formattable&) const; // Returns empty string if option doesn't exist - UnicodeString getStringFunctionOption(const UnicodeString&) const; + UnicodeString getStringFunctionOption(std::u16string_view) const; int32_t optionsCount() const { return functionOptionsLen; } // Named options passed to functions @@ -570,7 +570,10 @@ class U_I18N_API FunctionOptions : public UObject { ResolvedFunctionOption* options; int32_t functionOptionsLen = 0; - // Returns a new FunctionOptions + /** + * The original FunctionOptions isn't usable after this call. + * @returns A new, merged FunctionOptions. + */ FunctionOptions mergeOptions(FunctionOptions&& other, UErrorCode&); }; // class FunctionOptions From f23af97cf467a3ae761e5943a6caf793415ac857 Mon Sep 17 00:00:00 2001 From: Markus Scherer Date: Wed, 12 Mar 2025 16:40:58 +0000 Subject: [PATCH 17/19] ICU-22923 ICU 77 release page updates See #3432 --- docs/download/77.md | 58 +++++++++++++++++++++++++++--------------- docs/download/index.md | 21 +++++++-------- docs/index.md | 14 +++++++++- 3 files changed, 60 insertions(+), 33 deletions(-) diff --git a/docs/download/77.md b/docs/download/77.md index 2a528aa0ff07..00af3b97c395 100644 --- a/docs/download/77.md +++ b/docs/download/77.md @@ -16,15 +16,14 @@ License & terms of use: http://www.unicode.org/copyright.html ICU is the [premier library for software internationalization](https://icu.unicode.org/#h.i33fakvpjb7o), used by a [wide array of companies and organizations](https://icu.unicode.org/#h.f9qwubthqabj). -## Release Candidate - -**Please use this release candidate for testing, but do not use it in production!** - ## Release Overview +* Download: [releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) +* [Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) + ICU 77 updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) -([alpha blog](https://blog.unicode.org/2025/02/unicode-cldr-47-alpha-now-available-for.html)) +([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html)) locale data with new locales, and various additions and corrections. ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. @@ -39,11 +38,31 @@ For more details, including migration issues, see below. Please use the [icu-support mailing list](https://icu.unicode.org/contacts) and/or [find/submit error reports](https://icu.unicode.org/bugs). +### Attention: Future Changes + +Beginning with ICU 78 (2025-oct): + +1. We want to move the minimum required Java version from Java 8 to Java 11. + This is a significant, useful update in terms of the Java language and + standard library, and simplifies ICU tooling which currently uses + a mix of Java 8 and Java 11. + Note that [Android desugaring](https://developer.android.com/studio/write/java11-default-support-table) + supports at least Java 11 since late 2023.\ + See [ICU-23072](https://unicode-org.atlassian.net/browse/ICU-23072) + where you can provide comments. +2. We are planning to remove the + [ICU4J Locale Service Provider](../userguide/icu4j/locale-service-provider.md) + ([Maven: com.ibm.icu / icu4j-localespi / version 76.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/76.1)). + It is much less useful than when we added it, has very low usage, + needs work for newer Java versions, and complicates ICU4J development.\ + See [ICU-23071](https://unicode-org.atlassian.net/browse/ICU-23071) + where you can provide comments. + ### Version Number The initial release has library version number 77.1. -* Release date: 2025-03-TODO +* Release date: 2025-03-13 * [List of tickets fixed in ICU 77](https://unicode-org.atlassian.net/issues/?jql=project%20%3D%20ICU%20AND%20status%20%3D%20Done%20AND%20resolution%20in%20%28Fixed%2C%20%22Fixed%20by%20Other%20Ticket%22%29%20AND%20fixVersion%20%3D%2077.1%20ORDER%20BY%20component%20ASC%2C%20created%20DESC) If there are maintenance releases, they will be 77.2, 77.3, etc. (During ICU 77 development, the library version number was 77.0.x.) @@ -53,7 +72,7 @@ Note: There may be additional commits on the [maint/maint-77](https://github.com ## Common Changes * [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) - ([alpha blog](https://blog.unicode.org/2025/02/unicode-cldr-47-alpha-now-available-for.html)): + ([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html)): * No major data collection for existing locales; focus on bug fixes and structural improvements * New regional variants: English in several European countries, and Cantonese in Macau (`yue_Hant_MO`) * Improved RBNF (number spellout) and transliteration data @@ -91,7 +110,9 @@ Note: There may be additional commits on the [maint/maint-77](https://github.com ## Known Issues -* (none yet) +* The new MeasureUnit for `portion-per-1e9` works for formatting, + but when the new member function `getConstantDenominator()` is called on this unit, + it incorrectly returns 0. ([ICU-23045](https://unicode-org.atlassian.net/browse/ICU-23045)) ## Migration Issues @@ -118,20 +139,17 @@ ICU4J should work on Android API level 21 and later but may require “[library ## Download -Source and binary downloads are available on the git/GitHub tag page: +### GitHub +Source and binary downloads are available on the git/GitHub tag page: See the [Source Code Setup](../devsetup/source/) page for how to download the ICU file tree directly from GitHub. ICU locale data was generated from CLDR data equivalent to: -* -* - -TODO: [Maven dependency](https://central.sonatype.com/artifact/com.ibm.icu/icu4j): -``` - - com.ibm.icu - icu4j - 77.1 - -``` +* +* + +### Maven +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1 +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-charset/77.1 +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/77.1 diff --git a/docs/download/index.md b/docs/download/index.md index d9a109920adc..6c028900b075 100644 --- a/docs/download/index.md +++ b/docs/download/index.md @@ -14,26 +14,23 @@ License & terms of use: http://www.unicode.org/copyright.html If you want to use ICU (as opposed to developing it), it is recommended that you download an official packaged version of the ICU source code. These versions are tested more thoroughly than day-to-day development builds of the system, and they are packaged in zip and tar files for convenient download. Here are several recent releases of ICU that are available: -## Release Candidate +## Latest Release + +***2025-03-13: ICU 77 is now available*** — +[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) — +[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) -***2025-02-21: ICU 77rc is now available.*** -It updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) +[ICU 77](77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) locale data with new locales, and various additions and corrections. ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++) -See [ICU 77](77.md). - -## Latest Release - -***2024-10-24: ICU 76 is now available.*** -It updates to [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/) ([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)), including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations. It also updates to [CLDR 46](https://cldr.unicode.org/downloads/cldr-46) ([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)) locale data with new locales, significant updates to existing locales, and various additions and corrections. For example, the CLDR and Unicode default sort orders are now very nearly the same. - -Most of the java.time (Temporal) types can now be formatted directly. There are some new APIs to make ICU easier to use with modern C++ and Java patterns. The Java and C++ technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to match recent changes. See [ICU 76](76.md). - ## Previous Releases +- 2024-10-24: **ICU 76** updates to [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/) ([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)), including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations. It also updates to [CLDR 46](https://cldr.unicode.org/downloads/cldr-46) ([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)) locale data with new locales, significant updates to existing locales, and various additions and corrections. For example, the CLDR and Unicode default sort orders are now very nearly the same. + - Most of the java.time (Temporal) types can now be formatted directly. There are some new APIs to make ICU easier to use with modern C++ and Java patterns. The Java and C++ technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to match recent changes. See [ICU 76](76.md). + - 2024-04-17: **ICU 75** updates to [CLDR 45](https://cldr.unicode.org/index/downloads/cldr-45) ([beta blog](https://blog.unicode.org/2024/04/unicode-cldr-v45-beta-available-for.html)) locale data with new locales and various additions and corrections. C++ code now requires C++17 and is being made more robust. The CLDR MessageFormat 2.0 specification is now in [technology preview](https://github.com/unicode-org/message-format-wg?tab=readme-ov-file#messageformat-2-technical-preview), together with a corresponding update of the ICU4J (Java) tech preview and a new ICU4C (C++) tech preview. See [Downloading ICU > ICU 75](https://icu.unicode.org/download/75). - 2023-12-13: **ICU 74.2** released with date/time formatting bug fixes. See [Downloading ICU > ICU 74](https://icu.unicode.org/download/74). diff --git a/docs/index.md b/docs/index.md index a2fbad8a93db..86c2c83a571a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -29,10 +29,22 @@ It is the official landing page for the ICU project. Some of the pages from the ICU Site have been migrated here. The migrated sections and pages from the ICU Site are visible in the navigation bar of this site below the "ICU Site" section heading. -### Downloading ICU +## Downloading ICU The [Downloading ICU](download) page has been migrated here. +### Latest Release + +***2025-03-13: ICU 77 is now available*** — +[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) — +[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) + +[ICU 77](download/77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) +locale data with new locales, and various additions and corrections. + +ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. +The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++) + ## ICU team member pages Other documentation pages here are written by and for team members. From c86b4f4b8fd3a5634cb3db76ff89c604de3f1959 Mon Sep 17 00:00:00 2001 From: Steven Schlansker Date: Tue, 25 Feb 2025 10:23:29 -0800 Subject: [PATCH 18/19] ICU-23061 LowercaseTransliterator improve scalability by avoiding monitor contention Current implementation synchronizes the whole lowercase operation, so it is always single-threaded Removing the shared state lets us utilize multiple CPU cores --- .../java/com/ibm/icu/text/LowercaseTransliterator.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java b/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java index d75cb2ab21a5..6cdfa5670f6f 100644 --- a/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java +++ b/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java @@ -42,8 +42,6 @@ public Transliterator getInstance(String ID) { private final ULocale locale; private final UCaseProps csp; - private ReplaceableContextIterator iter; - private StringBuilder result; private int caseLocale; /** @@ -54,8 +52,6 @@ public LowercaseTransliterator(ULocale loc) { super(_ID, null); locale = loc; csp=UCaseProps.INSTANCE; - iter=new ReplaceableContextIterator(); - result = new StringBuilder(); caseLocale = UCaseProps.getCaseLocale(locale); } @@ -63,7 +59,7 @@ public LowercaseTransliterator(ULocale loc) { * Implements {@link Transliterator#handleTransliterate}. */ @Override - protected synchronized void handleTransliterate(Replaceable text, + protected void handleTransliterate(Replaceable text, Position offsets, boolean isIncremental) { if(csp==null) { return; @@ -73,8 +69,10 @@ protected synchronized void handleTransliterate(Replaceable text, return; } + ReplaceableContextIterator iter = new ReplaceableContextIterator(); + StringBuilder result = new StringBuilder(); + iter.setText(text); - result.setLength(0); int c, delta; // Walk through original string From 268eab27ea2055b0b80c2711cc389fdf9b2e4b45 Mon Sep 17 00:00:00 2001 From: Steven Schlansker Date: Tue, 25 Feb 2025 10:25:04 -0800 Subject: [PATCH 19/19] ICU-23061 Performance test for Lowercase transliterator; introduce JMH JMH is the OpenJDK microbenchmark harness. It is a standardized tool with many integrations and provides a lot of out-of-the-box functionality. No existing perf-tests are changed https://github.com/openjdk/jmh --- icu4j/perf-tests/README.txt | 3 + icu4j/perf-tests/pom.xml | 57 ++++++++++++++++++- .../perf/LowercaseTransliteratorPerf.java | 35 ++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java diff --git a/icu4j/perf-tests/README.txt b/icu4j/perf-tests/README.txt index d26f3fdafa54..7e96f9f87e3c 100644 --- a/icu4j/perf-tests/README.txt +++ b/icu4j/perf-tests/README.txt @@ -43,6 +43,9 @@ COLLATION TESTS The collation tests run only on the command line with tabular output: perl collationperf.pl |& tee collation_output.txt +JMH +Some performance tests run using OpenJDK JMH. These may be launched with: + java -jar perf-tests/target/jmh-benchmarks.jar OTHER COMMAND LINE TESTS Additional tests are run from the command line, each producing an HTML diff --git a/icu4j/perf-tests/pom.xml b/icu4j/perf-tests/pom.xml index 5c1d65e8cb07..63981dda57bb 100644 --- a/icu4j/perf-tests/pom.xml +++ b/icu4j/perf-tests/pom.xml @@ -15,6 +15,7 @@ perf_tests + 1.37 @@ -43,12 +44,23 @@ commons-cli ${commons-cli.version} + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + provided + - @@ -63,6 +75,49 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + org.openjdk.jmh.generators.BenchmarkProcessor + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + jmh-benchmarks + + + org.openjdk.jmh.Main + + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + diff --git a/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java b/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java new file mode 100644 index 000000000000..26baea593f0c --- /dev/null +++ b/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java @@ -0,0 +1,35 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* + ********************************************************************** + * Copyright (c) 2002-2008, International Business Machines * + * Corporation and others. All Rights Reserved. * + ********************************************************************** + */ +package com.ibm.icu.dev.test.perf; + +import java.util.concurrent.TimeUnit; + +import com.ibm.icu.text.Transliterator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +public class LowercaseTransliteratorPerf { + + static final Transliterator LOWER = Transliterator.getInstance("Lower"); + + @Benchmark + public String testShort() { + return LOWER.transliterate("Cat"); + } + + @Benchmark + public String testSentence() { + return LOWER.transliterate("The Quick Brown Fox Jumped Over The Lazy Dog"); + } + +}